intentkit 0.6.21.dev2__tar.gz → 0.6.22.dev1__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 (429) hide show
  1. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/PKG-INFO +5 -5
  2. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/__init__.py +1 -1
  3. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/models/agent_schema.json +3 -5
  4. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/pyproject.toml +5 -5
  5. intentkit-0.6.22.dev1/skills/dexscreener/README.md +154 -0
  6. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/dexscreener/__init__.py +9 -0
  7. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/dexscreener/base.py +1 -4
  8. intentkit-0.6.22.dev1/skills/dexscreener/get_pair_info.py +159 -0
  9. intentkit-0.6.22.dev1/skills/dexscreener/get_token_pairs.py +166 -0
  10. intentkit-0.6.22.dev1/skills/dexscreener/get_tokens_info.py +213 -0
  11. intentkit-0.6.22.dev1/skills/dexscreener/schema.json +93 -0
  12. intentkit-0.6.22.dev1/skills/dexscreener/search_token.py +184 -0
  13. intentkit-0.6.22.dev1/skills/dexscreener/utils.py +419 -0
  14. intentkit-0.6.22.dev1/skills/xmtp/base.py +74 -0
  15. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/xmtp/price.py +11 -7
  16. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/xmtp/swap.py +16 -17
  17. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/xmtp/transfer.py +9 -22
  18. intentkit-0.6.21.dev2/skills/dexscreener/schema.json +0 -48
  19. intentkit-0.6.21.dev2/skills/dexscreener/search_token.py +0 -321
  20. intentkit-0.6.21.dev2/skills/xmtp/base.py +0 -15
  21. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/.gitignore +0 -0
  22. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/LICENSE +0 -0
  23. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/MANIFEST.in +0 -0
  24. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/README.md +0 -0
  25. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/abstracts/__init__.py +0 -0
  26. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/abstracts/agent.py +0 -0
  27. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/abstracts/api.py +0 -0
  28. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/abstracts/engine.py +0 -0
  29. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/abstracts/graph.py +0 -0
  30. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/abstracts/skill.py +0 -0
  31. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/abstracts/twitter.py +0 -0
  32. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/clients/__init__.py +0 -0
  33. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/clients/cdp.py +0 -0
  34. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/clients/twitter.py +0 -0
  35. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/clients/web3.py +0 -0
  36. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/config/__init__.py +0 -0
  37. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/config/config.py +0 -0
  38. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/core/__init__.py +0 -0
  39. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/core/agent.py +0 -0
  40. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/core/api.py +0 -0
  41. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/core/chat.py +0 -0
  42. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/core/client.py +0 -0
  43. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/core/credit.py +0 -0
  44. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/core/engine.py +0 -0
  45. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/core/node.py +0 -0
  46. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/core/prompt.py +0 -0
  47. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/core/skill.py +0 -0
  48. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/models/agent.py +0 -0
  49. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/models/agent_data.py +0 -0
  50. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/models/app_setting.py +0 -0
  51. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/models/base.py +0 -0
  52. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/models/chat.py +0 -0
  53. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/models/conversation.py +0 -0
  54. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/models/credit.py +0 -0
  55. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/models/db.py +0 -0
  56. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/models/db_mig.py +0 -0
  57. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/models/generator.py +0 -0
  58. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/models/llm.py +0 -0
  59. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/models/redis.py +0 -0
  60. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/models/skill.py +0 -0
  61. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/models/user.py +0 -0
  62. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/__init__.py +0 -0
  63. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/acolyt/__init__.py +0 -0
  64. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/acolyt/acolyt.jpg +0 -0
  65. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/acolyt/ask.py +0 -0
  66. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/acolyt/base.py +0 -0
  67. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/acolyt/schema.json +0 -0
  68. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/aixbt/README.md +0 -0
  69. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/aixbt/__init__.py +0 -0
  70. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/aixbt/aixbt.jpg +0 -0
  71. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/aixbt/base.py +0 -0
  72. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/aixbt/projects.py +0 -0
  73. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/aixbt/schema.json +0 -0
  74. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/allora/__init__.py +0 -0
  75. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/allora/allora.jpeg +0 -0
  76. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/allora/base.py +0 -0
  77. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/allora/price.py +0 -0
  78. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/allora/schema.json +0 -0
  79. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/base.py +0 -0
  80. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/carv/README.md +0 -0
  81. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/carv/__init__.py +0 -0
  82. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/carv/base.py +0 -0
  83. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/carv/carv.webp +0 -0
  84. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/carv/fetch_news.py +0 -0
  85. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/carv/onchain_query.py +0 -0
  86. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/carv/schema.json +0 -0
  87. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/carv/token_info_and_price.py +0 -0
  88. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/casino/README.md +0 -0
  89. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/casino/__init__.py +0 -0
  90. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/casino/base.py +0 -0
  91. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/casino/casino.png +0 -0
  92. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/casino/deck_draw.py +0 -0
  93. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/casino/deck_shuffle.py +0 -0
  94. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/casino/dice_roll.py +0 -0
  95. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/casino/schema.json +0 -0
  96. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/casino/utils.py +0 -0
  97. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cdp/__init__.py +0 -0
  98. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cdp/base.py +0 -0
  99. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cdp/cdp.png +0 -0
  100. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cdp/get_balance.py +0 -0
  101. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cdp/schema.json +0 -0
  102. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cdp/swap.py +0 -0
  103. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/chainlist/README.md +0 -0
  104. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/chainlist/__init__.py +0 -0
  105. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/chainlist/base.py +0 -0
  106. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/chainlist/chain_lookup.py +0 -0
  107. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/chainlist/chainlist.png +0 -0
  108. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/chainlist/schema.json +0 -0
  109. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/common/__init__.py +0 -0
  110. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/common/base.py +0 -0
  111. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/common/common.jpg +0 -0
  112. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/common/current_time.py +0 -0
  113. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/common/schema.json +0 -0
  114. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cookiefun/README.md +0 -0
  115. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cookiefun/__init__.py +0 -0
  116. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cookiefun/base.py +0 -0
  117. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cookiefun/constants.py +0 -0
  118. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cookiefun/cookiefun.png +0 -0
  119. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cookiefun/get_account_details.py +0 -0
  120. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cookiefun/get_account_feed.py +0 -0
  121. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cookiefun/get_account_smart_followers.py +0 -0
  122. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cookiefun/get_sectors.py +0 -0
  123. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cookiefun/schema.json +0 -0
  124. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cookiefun/search_accounts.py +0 -0
  125. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cryptocompare/__init__.py +0 -0
  126. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cryptocompare/api.py +0 -0
  127. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cryptocompare/base.py +0 -0
  128. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cryptocompare/cryptocompare.png +0 -0
  129. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cryptocompare/fetch_news.py +0 -0
  130. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cryptocompare/fetch_price.py +0 -0
  131. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cryptocompare/fetch_top_exchanges.py +0 -0
  132. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cryptocompare/fetch_top_market_cap.py +0 -0
  133. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cryptocompare/fetch_top_volume.py +0 -0
  134. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cryptocompare/fetch_trading_signals.py +0 -0
  135. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cryptocompare/schema.json +0 -0
  136. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cryptopanic/__init__.py +0 -0
  137. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cryptopanic/base.py +0 -0
  138. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cryptopanic/cryptopanic.png +0 -0
  139. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cryptopanic/fetch_crypto_news.py +0 -0
  140. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cryptopanic/fetch_crypto_sentiment.py +0 -0
  141. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/cryptopanic/schema.json +0 -0
  142. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/dapplooker/README.md +0 -0
  143. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/dapplooker/__init__.py +0 -0
  144. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/dapplooker/base.py +0 -0
  145. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/dapplooker/dapplooker.jpg +0 -0
  146. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/dapplooker/dapplooker_token_data.py +0 -0
  147. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/dapplooker/schema.json +0 -0
  148. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/__init__.py +0 -0
  149. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/api.py +0 -0
  150. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/base.py +0 -0
  151. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/coins/__init__.py +0 -0
  152. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/coins/fetch_batch_historical_prices.py +0 -0
  153. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/coins/fetch_block.py +0 -0
  154. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/coins/fetch_current_prices.py +0 -0
  155. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/coins/fetch_first_price.py +0 -0
  156. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/coins/fetch_historical_prices.py +0 -0
  157. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/coins/fetch_price_chart.py +0 -0
  158. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/coins/fetch_price_percentage.py +0 -0
  159. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/config/__init__.py +0 -0
  160. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/config/chains.py +0 -0
  161. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/defillama.jpeg +0 -0
  162. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/fees/__init__.py +0 -0
  163. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/fees/fetch_fees_overview.py +0 -0
  164. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/schema.json +0 -0
  165. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/stablecoins/__init__.py +0 -0
  166. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/stablecoins/fetch_stablecoin_chains.py +0 -0
  167. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/stablecoins/fetch_stablecoin_charts.py +0 -0
  168. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/stablecoins/fetch_stablecoin_prices.py +0 -0
  169. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/stablecoins/fetch_stablecoins.py +0 -0
  170. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/tests/__init__.py +0 -0
  171. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/tests/api_integration.test.py +0 -0
  172. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/tests/api_unit.test.py +0 -0
  173. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/tvl/__init__.py +0 -0
  174. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/tvl/fetch_chain_historical_tvl.py +0 -0
  175. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/tvl/fetch_chains.py +0 -0
  176. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/tvl/fetch_historical_tvl.py +0 -0
  177. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/tvl/fetch_protocol.py +0 -0
  178. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/tvl/fetch_protocol_current_tvl.py +0 -0
  179. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/tvl/fetch_protocols.py +0 -0
  180. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/volumes/__init__.py +0 -0
  181. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/volumes/fetch_dex_overview.py +0 -0
  182. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/volumes/fetch_dex_summary.py +0 -0
  183. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/volumes/fetch_options_overview.py +0 -0
  184. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/yields/__init__.py +0 -0
  185. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/yields/fetch_pool_chart.py +0 -0
  186. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/defillama/yields/fetch_pools.py +0 -0
  187. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/dexscreener/dexscreener.png +0 -0
  188. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/dexscreener/model/__init__.py +0 -0
  189. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/dexscreener/model/search_token_response.py +0 -0
  190. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/dune_analytics/__init__.py +0 -0
  191. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/dune_analytics/base.py +0 -0
  192. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/dune_analytics/dune.png +0 -0
  193. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/dune_analytics/fetch_kol_buys.py +0 -0
  194. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/dune_analytics/fetch_nation_metrics.py +0 -0
  195. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/dune_analytics/schema.json +0 -0
  196. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/elfa/README.md +0 -0
  197. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/elfa/__init__.py +0 -0
  198. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/elfa/base.py +0 -0
  199. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/elfa/elfa.jpg +0 -0
  200. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/elfa/mention.py +0 -0
  201. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/elfa/schema.json +0 -0
  202. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/elfa/stats.py +0 -0
  203. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/elfa/tokens.py +0 -0
  204. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/elfa/utils.py +0 -0
  205. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/enso/README.md +0 -0
  206. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/enso/__init__.py +0 -0
  207. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/enso/abi/__init__.py +0 -0
  208. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/enso/abi/approval.py +0 -0
  209. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/enso/abi/erc20.py +0 -0
  210. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/enso/abi/route.py +0 -0
  211. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/enso/base.py +0 -0
  212. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/enso/best_yield.py +0 -0
  213. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/enso/enso.jpg +0 -0
  214. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/enso/networks.py +0 -0
  215. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/enso/prices.py +0 -0
  216. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/enso/route.py +0 -0
  217. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/enso/schema.json +0 -0
  218. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/enso/tokens.py +0 -0
  219. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/enso/wallet.py +0 -0
  220. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/firecrawl/README.md +0 -0
  221. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/firecrawl/__init__.py +0 -0
  222. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/firecrawl/base.py +0 -0
  223. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/firecrawl/clear.py +0 -0
  224. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/firecrawl/crawl.py +0 -0
  225. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/firecrawl/firecrawl.png +0 -0
  226. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/firecrawl/query.py +0 -0
  227. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/firecrawl/schema.json +0 -0
  228. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/firecrawl/scrape.py +0 -0
  229. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/firecrawl/utils.py +0 -0
  230. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/github/README.md +0 -0
  231. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/github/__init__.py +0 -0
  232. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/github/base.py +0 -0
  233. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/github/github.jpg +0 -0
  234. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/github/github_search.py +0 -0
  235. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/github/schema.json +0 -0
  236. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/heurist/__init__.py +0 -0
  237. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/heurist/base.py +0 -0
  238. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/heurist/heurist.png +0 -0
  239. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/heurist/image_generation_animagine_xl.py +0 -0
  240. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/heurist/image_generation_arthemy_comics.py +0 -0
  241. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/heurist/image_generation_arthemy_real.py +0 -0
  242. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/heurist/image_generation_braindance.py +0 -0
  243. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/heurist/image_generation_cyber_realistic_xl.py +0 -0
  244. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/heurist/image_generation_flux_1_dev.py +0 -0
  245. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/heurist/image_generation_sdxl.py +0 -0
  246. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/heurist/schema.json +0 -0
  247. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/http/README.md +0 -0
  248. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/http/__init__.py +0 -0
  249. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/http/base.py +0 -0
  250. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/http/get.py +0 -0
  251. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/http/http.svg +0 -0
  252. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/http/post.py +0 -0
  253. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/http/put.py +0 -0
  254. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/http/schema.json +0 -0
  255. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/lifi/README.md +0 -0
  256. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/lifi/__init__.py +0 -0
  257. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/lifi/base.py +0 -0
  258. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/lifi/lifi.png +0 -0
  259. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/lifi/schema.json +0 -0
  260. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/lifi/token_execute.py +0 -0
  261. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/lifi/token_quote.py +0 -0
  262. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/lifi/utils.py +0 -0
  263. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/moralis/README.md +0 -0
  264. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/moralis/__init__.py +0 -0
  265. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/moralis/api.py +0 -0
  266. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/moralis/base.py +0 -0
  267. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/moralis/fetch_chain_portfolio.py +0 -0
  268. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/moralis/fetch_nft_portfolio.py +0 -0
  269. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/moralis/fetch_solana_portfolio.py +0 -0
  270. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/moralis/fetch_wallet_portfolio.py +0 -0
  271. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/moralis/moralis.png +0 -0
  272. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/moralis/schema.json +0 -0
  273. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/moralis/tests/__init__.py +0 -0
  274. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/moralis/tests/test_wallet.py +0 -0
  275. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/nation/__init__.py +0 -0
  276. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/nation/base.py +0 -0
  277. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/nation/nation.png +0 -0
  278. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/nation/nft_check.py +0 -0
  279. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/nation/schema.json +0 -0
  280. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/openai/__init__.py +0 -0
  281. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/openai/base.py +0 -0
  282. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/openai/dalle_image_generation.py +0 -0
  283. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/openai/gpt_image_generation.py +0 -0
  284. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/openai/gpt_image_to_image.py +0 -0
  285. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/openai/image_to_text.py +0 -0
  286. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/openai/openai.png +0 -0
  287. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/openai/schema.json +0 -0
  288. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/portfolio/README.md +0 -0
  289. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/portfolio/__init__.py +0 -0
  290. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/portfolio/base.py +0 -0
  291. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/portfolio/constants.py +0 -0
  292. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/portfolio/moralis.png +0 -0
  293. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/portfolio/schema.json +0 -0
  294. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/portfolio/token_balances.py +0 -0
  295. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/portfolio/wallet_approvals.py +0 -0
  296. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/portfolio/wallet_defi_positions.py +0 -0
  297. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/portfolio/wallet_history.py +0 -0
  298. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/portfolio/wallet_net_worth.py +0 -0
  299. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/portfolio/wallet_nfts.py +0 -0
  300. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/portfolio/wallet_profitability.py +0 -0
  301. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/portfolio/wallet_profitability_summary.py +0 -0
  302. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/portfolio/wallet_stats.py +0 -0
  303. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/portfolio/wallet_swaps.py +0 -0
  304. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/skills.toml +0 -0
  305. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/slack/__init__.py +0 -0
  306. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/slack/base.py +0 -0
  307. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/slack/get_channel.py +0 -0
  308. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/slack/get_message.py +0 -0
  309. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/slack/schedule_message.py +0 -0
  310. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/slack/schema.json +0 -0
  311. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/slack/send_message.py +0 -0
  312. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/slack/slack.jpg +0 -0
  313. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/supabase/__init__.py +0 -0
  314. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/supabase/base.py +0 -0
  315. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/supabase/delete_data.py +0 -0
  316. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/supabase/fetch_data.py +0 -0
  317. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/supabase/insert_data.py +0 -0
  318. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/supabase/invoke_function.py +0 -0
  319. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/supabase/schema.json +0 -0
  320. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/supabase/supabase.svg +0 -0
  321. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/supabase/update_data.py +0 -0
  322. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/supabase/upsert_data.py +0 -0
  323. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/system/__init__.py +0 -0
  324. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/system/add_autonomous_task.py +0 -0
  325. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/system/base.py +0 -0
  326. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/system/delete_autonomous_task.py +0 -0
  327. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/system/edit_autonomous_task.py +0 -0
  328. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/system/list_autonomous_tasks.py +0 -0
  329. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/system/read_agent_api_key.py +0 -0
  330. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/system/regenerate_agent_api_key.py +0 -0
  331. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/system/schema.json +0 -0
  332. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/system/system.svg +0 -0
  333. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/tavily/README.md +0 -0
  334. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/tavily/__init__.py +0 -0
  335. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/tavily/base.py +0 -0
  336. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/tavily/schema.json +0 -0
  337. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/tavily/tavily.jpg +0 -0
  338. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/tavily/tavily_extract.py +0 -0
  339. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/tavily/tavily_search.py +0 -0
  340. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/token/README.md +0 -0
  341. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/token/__init__.py +0 -0
  342. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/token/base.py +0 -0
  343. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/token/constants.py +0 -0
  344. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/token/erc20_transfers.py +0 -0
  345. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/token/moralis.png +0 -0
  346. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/token/schema.json +0 -0
  347. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/token/token_analytics.py +0 -0
  348. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/token/token_price.py +0 -0
  349. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/token/token_search.py +0 -0
  350. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/twitter/__init__.py +0 -0
  351. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/twitter/base.py +0 -0
  352. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/twitter/follow_user.py +0 -0
  353. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/twitter/get_mentions.py +0 -0
  354. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/twitter/get_timeline.py +0 -0
  355. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/twitter/get_user_by_username.py +0 -0
  356. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/twitter/get_user_tweets.py +0 -0
  357. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/twitter/like_tweet.py +0 -0
  358. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/twitter/post_tweet.py +0 -0
  359. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/twitter/reply_tweet.py +0 -0
  360. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/twitter/retweet.py +0 -0
  361. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/twitter/schema.json +0 -0
  362. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/twitter/search_tweets.py +0 -0
  363. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/twitter/twitter.png +0 -0
  364. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/unrealspeech/__init__.py +0 -0
  365. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/unrealspeech/base.py +0 -0
  366. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/unrealspeech/schema.json +0 -0
  367. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/unrealspeech/text_to_speech.py +0 -0
  368. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/unrealspeech/unrealspeech.jpg +0 -0
  369. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_audio/__init__.py +0 -0
  370. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_audio/base.py +0 -0
  371. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_audio/input.py +0 -0
  372. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_audio/schema.json +0 -0
  373. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_audio/venice_audio.py +0 -0
  374. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_audio/venice_logo.jpg +0 -0
  375. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/README.md +0 -0
  376. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/__init__.py +0 -0
  377. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/api.py +0 -0
  378. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/base.py +0 -0
  379. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/config.py +0 -0
  380. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_enhance/README.md +0 -0
  381. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_enhance/__init__.py +0 -0
  382. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_enhance/image_enhance.py +0 -0
  383. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_enhance/image_enhance_base.py +0 -0
  384. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_enhance/image_enhance_input.py +0 -0
  385. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_generation/README.md +0 -0
  386. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_generation/__init__.py +0 -0
  387. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_generation/image_generation_base.py +0 -0
  388. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_generation/image_generation_fluently_xl.py +0 -0
  389. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_generation/image_generation_flux_dev.py +0 -0
  390. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +0 -0
  391. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_generation/image_generation_input.py +0 -0
  392. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +0 -0
  393. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_generation/image_generation_pony_realism.py +0 -0
  394. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +0 -0
  395. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_generation/image_generation_venice_sd35.py +0 -0
  396. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_upscale/README.md +0 -0
  397. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_upscale/__init__.py +0 -0
  398. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_upscale/image_upscale.py +0 -0
  399. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_upscale/image_upscale_base.py +0 -0
  400. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_upscale/image_upscale_input.py +0 -0
  401. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_vision/README.md +0 -0
  402. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_vision/__init__.py +0 -0
  403. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_vision/image_vision.py +0 -0
  404. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_vision/image_vision_base.py +0 -0
  405. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/image_vision/image_vision_input.py +0 -0
  406. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/schema.json +0 -0
  407. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/utils.py +0 -0
  408. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/venice_image/venice_image.jpg +0 -0
  409. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/web_scraper/README.md +0 -0
  410. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/web_scraper/__init__.py +0 -0
  411. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/web_scraper/base.py +0 -0
  412. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/web_scraper/document_indexer.py +0 -0
  413. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/web_scraper/langchain.png +0 -0
  414. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/web_scraper/schema.json +0 -0
  415. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/web_scraper/scrape_and_index.py +0 -0
  416. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/web_scraper/utils.py +0 -0
  417. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/web_scraper/website_indexer.py +0 -0
  418. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/xmtp/README.md +0 -0
  419. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/xmtp/__init__.py +0 -0
  420. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/xmtp/schema.json +0 -0
  421. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/skills/xmtp/xmtp.png +0 -0
  422. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/utils/__init__.py +0 -0
  423. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/utils/chain.py +0 -0
  424. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/utils/error.py +0 -0
  425. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/utils/logging.py +0 -0
  426. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/utils/random.py +0 -0
  427. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/utils/s3.py +0 -0
  428. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/utils/slack_alert.py +0 -0
  429. {intentkit-0.6.21.dev2 → intentkit-0.6.22.dev1}/utils/tx.py +0 -0
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intentkit
3
- Version: 0.6.21.dev2
3
+ Version: 0.6.22.dev1
4
4
  Summary: Intent-based AI Agent Platform - Core Package
5
- Project-URL: Homepage, https://github.com/crestal-network/intentkit
6
- Project-URL: Repository, https://github.com/crestal-network/intentkit
7
- Project-URL: Documentation, https://github.com/crestal-network/intentkit/tree/main/docs
8
- Project-URL: Bug Tracker, https://github.com/crestal-network/intentkit/issues
5
+ Project-URL: Homepage, https://github.com/crestalnetwork/intentkit
6
+ Project-URL: Repository, https://github.com/crestalnetwork/intentkit
7
+ Project-URL: Documentation, https://github.com/crestalnetwork/intentkit/tree/main/docs
8
+ Project-URL: Bug Tracker, https://github.com/crestalnetwork/intentkit/issues
9
9
  Author-email: hyacinthus <hyacinthus@gmail.com>
10
10
  License: MIT License
11
11
 
@@ -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.21-dev2"
6
+ __version__ = "0.6.22-dev1"
7
7
  __author__ = "hyacinthus"
8
8
  __email__ = "hyacinthus@gmail.com"
9
9
 
@@ -682,7 +682,7 @@
682
682
  "description": "Ticker symbol of the agent",
683
683
  "maxLength": 10,
684
684
  "minLength": 1,
685
- "x-group": "internal",
685
+ "x-group": "onchain",
686
686
  "x-placeholder": "Enter agent ticker"
687
687
  },
688
688
  "token_address": {
@@ -690,16 +690,14 @@
690
690
  "type": "string",
691
691
  "description": "Token address of the agent, if it already has one",
692
692
  "maxLength": 42,
693
- "readOnly": true,
694
- "x-group": "internal"
693
+ "x-group": "onchain"
695
694
  },
696
695
  "token_pool": {
697
696
  "title": "Token Pool",
698
697
  "type": "string",
699
698
  "description": "Pool of the agent token, if it has one",
700
699
  "maxLength": 42,
701
- "readOnly": true,
702
- "x-group": "internal"
700
+ "x-group": "onchain"
703
701
  }
704
702
  },
705
703
  "if": {
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "intentkit"
3
- version = "0.6.21-dev2"
3
+ version = "0.6.22-dev1"
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"
@@ -71,10 +71,10 @@ dependencies = [
71
71
  ]
72
72
 
73
73
  [project.urls]
74
- Homepage = "https://github.com/crestal-network/intentkit"
75
- Repository = "https://github.com/crestal-network/intentkit"
76
- Documentation = "https://github.com/crestal-network/intentkit/tree/main/docs"
77
- "Bug Tracker" = "https://github.com/crestal-network/intentkit/issues"
74
+ Homepage = "https://github.com/crestalnetwork/intentkit"
75
+ Repository = "https://github.com/crestalnetwork/intentkit"
76
+ Documentation = "https://github.com/crestalnetwork/intentkit/tree/main/docs"
77
+ "Bug Tracker" = "https://github.com/crestalnetwork/intentkit/issues"
78
78
 
79
79
  [dependency-groups]
80
80
  dev = [
@@ -0,0 +1,154 @@
1
+ # DexScreener Skill
2
+
3
+ The DexScreener skill provides integration with the DexScreener API to search for cryptocurrency token pairs and retrieve market data including prices, volume, liquidity, and other trading metrics.
4
+
5
+ ## Overview
6
+
7
+ DexScreener is a popular platform for tracking decentralized exchange (DEX) trading pairs across multiple blockchain networks. This skill enables your agent to search for token information and provide users with real-time market data.
8
+
9
+ ## Skills Available
10
+
11
+ ### `search_token`
12
+
13
+ Searches DexScreener for token pairs matching a query string. Supports searching by:
14
+
15
+ - Token symbol (e.g., "WIF", "DOGE")
16
+ - Token name (e.g., "Dogwifhat")
17
+ - Token address (e.g., "0x...")
18
+ - Exact ticker matching with "$" prefix (e.g., "$WIF")
19
+ - Pair address
20
+
21
+ **Parameters:**
22
+
23
+ - `query` (required): The search query string
24
+ - `sort_by` (optional): Sort results by "liquidity" (default) or "volume"
25
+ - `volume_timeframe` (optional): When sorting by volume, use "24_hour" (default), "6_hour", "1_hour", or "5_minutes"
26
+
27
+ ### `get_pair_info`
28
+
29
+ Retrieves detailed information about a specific trading pair using chain ID and pair address.
30
+
31
+ **Parameters:**
32
+
33
+ - `chain_id` (required): The blockchain chain ID (e.g., "ethereum", "solana", "bsc", "polygon", "arbitrum", "base", "avalanche")
34
+ - `pair_address` (required): The trading pair contract address
35
+
36
+ ### `get_token_pairs`
37
+
38
+ Finds all trading pairs for a specific token using chain ID and token address.
39
+
40
+ **Parameters:**
41
+
42
+ - `chain_id` (required): The blockchain chain ID
43
+ - `token_address` (required): The token contract address
44
+
45
+ ### `get_tokens_info`
46
+
47
+ Retrieves detailed trading pair information for multiple tokens at once (up to 30 tokens).
48
+
49
+ **Parameters:**
50
+
51
+ - `chain_id` (required): The blockchain chain ID
52
+ - `token_addresses` (required): List of token contract addresses (maximum 30)
53
+
54
+ ## Configuration
55
+
56
+ Add to your agent configuration:
57
+
58
+ ```yaml
59
+ skills:
60
+ dexscreener:
61
+ enabled: true
62
+ states:
63
+ search_token: public # or "private" or "disabled"
64
+ get_pair_info: public # or "private" or "disabled"
65
+ get_token_pairs: public # or "private" or "disabled"
66
+ get_tokens_info: public # or "private" or "disabled"
67
+ ```
68
+
69
+ ## Example Prompts
70
+
71
+ Here are some example prompts that will trigger the DexScreener skill:
72
+
73
+ ### Basic Token Search
74
+
75
+ - "What's the current price of WIF?"
76
+ - "Show me information about Dogwifhat token"
77
+ - "Find trading pairs for PEPE"
78
+ - "Search for Solana tokens with high volume"
79
+
80
+ ### Address-Based Search
81
+
82
+ - "Get token info for address 0x1234567890abcdef1234567890abcdef12345678"
83
+ - "Look up this token contract: 0xabc123..."
84
+ - "Find pairs for token address 0x..."
85
+
86
+ ### Exact Ticker Matching
87
+
88
+ - "Show me all $WIF pairs" (matches only tokens with symbol "WIF")
89
+ - "Find $DOGE trading data"
90
+ - "$SOL price and volume information"
91
+
92
+ ### Sorting and Filtering
93
+
94
+ - "Find highest volume tokens in the last hour"
95
+ - "Show me tokens sorted by liquidity"
96
+ - "Get 6-hour volume data for trending tokens"
97
+
98
+ ### Market Analysis
99
+
100
+ - "What are the most liquid trading pairs right now?"
101
+ - "Find new token launches with high volume"
102
+ - "Show me tokens with significant price changes in the last 24 hours"
103
+ - "Compare liquidity across different DEXes for a token"
104
+
105
+ ### Specific Pair Analysis
106
+
107
+ - "Get detailed info for pair address 0x1234... on Ethereum"
108
+ - "Show me the liquidity and volume for this Uniswap pair"
109
+ - "Analyze this specific trading pair on Solana"
110
+ - "What's the current price and 24h change for pair 0xabc..."
111
+
112
+ ### Token Pair Discovery
113
+
114
+ - "Find all trading pairs for token 0x1234... on Ethereum"
115
+ - "Where can I trade this token? Show me all available pairs"
116
+ - "List all DEXes that have liquidity for this token address"
117
+ - "Find the best liquidity pools for token 0xabc..."
118
+
119
+ ### Multi-Token Analysis
120
+
121
+ - "Compare these 5 token addresses: [list of addresses]"
122
+ - "Get trading data for my entire portfolio: [token addresses]"
123
+ - "Analyze liquidity across these tokens on Ethereum"
124
+ - "Show me pair information for these 10 tokens at once"
125
+
126
+ ### Portfolio Research
127
+
128
+ - "Research this token before I invest: [token name/symbol]"
129
+ - "Is this token legitimate? Check its social links"
130
+ - "What DEXes is this token trading on?"
131
+ - "Show me the trading activity for this pair"
132
+
133
+ ## Response Format
134
+
135
+ The skill returns structured JSON data containing:
136
+
137
+ - Token pair information (base/quote tokens)
138
+ - Current prices in USD and native currency
139
+ - Volume data across different timeframes
140
+ - Liquidity information
141
+ - Price change percentages
142
+ - Market cap and fully diluted valuation
143
+ - Social links and website information
144
+ - Trading transaction counts
145
+
146
+ ## Rate Limits
147
+
148
+ - 300 requests per minute across all users
149
+ - Built-in rate limiting prevents exceeding API limits
150
+ - Requests are queued and processed efficiently
151
+
152
+ ## Data Sources
153
+
154
+ All data is sourced from the official DexScreener API, which aggregates information from major decentralized exchanges across multiple blockchain networks including Ethereum, Solana, Binance Smart Chain, and others.
@@ -4,6 +4,9 @@ from typing import Optional, TypedDict
4
4
  from intentkit.abstracts.skill import SkillStoreABC
5
5
  from intentkit.skills.base import SkillConfig, SkillState
6
6
  from intentkit.skills.dexscreener.base import DexScreenerBaseTool
7
+ from intentkit.skills.dexscreener.get_pair_info import GetPairInfo
8
+ from intentkit.skills.dexscreener.get_token_pairs import GetTokenPairs
9
+ from intentkit.skills.dexscreener.get_tokens_info import GetTokensInfo
7
10
  from intentkit.skills.dexscreener.search_token import SearchToken
8
11
 
9
12
  # Cache skills at the system level, because they are stateless
@@ -14,10 +17,16 @@ logger = logging.getLogger(__name__)
14
17
 
15
18
  class SkillStates(TypedDict):
16
19
  search_token: SkillState
20
+ get_pair_info: SkillState
21
+ get_token_pairs: SkillState
22
+ get_tokens_info: SkillState
17
23
 
18
24
 
19
25
  _SKILL_NAME_TO_CLASS_MAP: dict[str, type[DexScreenerBaseTool]] = {
20
26
  "search_token": SearchToken,
27
+ "get_pair_info": GetPairInfo,
28
+ "get_token_pairs": GetTokenPairs,
29
+ "get_tokens_info": GetTokensInfo,
21
30
  }
22
31
 
23
32
 
@@ -7,13 +7,10 @@ from pydantic import Field
7
7
 
8
8
  from intentkit.abstracts.skill import SkillStoreABC
9
9
  from intentkit.skills.base import IntentKitSkill
10
+ from intentkit.skills.dexscreener.utils import DEXSCREENER_BASE_URL
10
11
 
11
12
  logger = logging.getLogger(__name__)
12
13
 
13
- DEXSCREENER_BASE_URL = "https://api.dexscreener.com"
14
-
15
- # Removed DexScreenerApiError as it won't be raised by _get anymore
16
-
17
14
  # ApiResult still represents (success_data, error_data)
18
15
  ApiResult = Tuple[Optional[Dict[str, Any]], Optional[Dict[str, Any]]]
19
16
 
@@ -0,0 +1,159 @@
1
+ import logging
2
+ from typing import Any, Type
3
+
4
+ from pydantic import BaseModel, Field
5
+
6
+ from intentkit.skills.dexscreener.base import DexScreenerBaseTool
7
+ from intentkit.skills.dexscreener.model.search_token_response import PairModel
8
+ from intentkit.skills.dexscreener.utils import (
9
+ API_ENDPOINTS,
10
+ RATE_LIMITS,
11
+ create_error_response,
12
+ format_success_response,
13
+ truncate_large_fields,
14
+ )
15
+
16
+ logger = logging.getLogger(__name__)
17
+
18
+
19
+ class GetPairInfoInput(BaseModel):
20
+ """Input schema for the DexScreener get_pair_info tool."""
21
+
22
+ chain_id: str = Field(
23
+ description="The blockchain chain ID (e.g., 'ethereum', 'solana', 'bsc', 'polygon', 'arbitrum', 'base', 'avalanche')"
24
+ )
25
+ pair_address: str = Field(
26
+ description="The trading pair contract address (e.g., '0x1234...abcd' for Ethereum-based chains)"
27
+ )
28
+
29
+
30
+ class GetPairInfo(DexScreenerBaseTool):
31
+ """
32
+ Tool to get detailed information about a specific trading pair on DexScreener.
33
+ """
34
+
35
+ name: str = "dexscreener_get_pair_info"
36
+ description: str = (
37
+ "Retrieves detailed information about a specific trading pair using chain ID and pair address. "
38
+ "Returns comprehensive data including current price, volume, liquidity, price changes, "
39
+ "market cap, FDV, transaction counts, and social links. "
40
+ "Use this tool when you have a specific pair address and need detailed trading metrics."
41
+ )
42
+ args_schema: Type[BaseModel] = GetPairInfoInput
43
+
44
+ async def _arun(
45
+ self,
46
+ chain_id: str,
47
+ pair_address: str,
48
+ **kwargs: Any,
49
+ ) -> str:
50
+ """Implementation to get specific pair information."""
51
+
52
+ # Apply rate limiting
53
+ await self.user_rate_limit_by_category(
54
+ user_id=f"{self.category}{self.name}",
55
+ limit=RATE_LIMITS["pairs"],
56
+ minutes=1,
57
+ )
58
+
59
+ logger.info(
60
+ f"Executing DexScreener get_pair_info tool with chain_id: '{chain_id}', "
61
+ f"pair_address: '{pair_address}'"
62
+ )
63
+
64
+ try:
65
+ # Construct API path
66
+ api_path = f"{API_ENDPOINTS['pairs']}/{chain_id}/{pair_address}"
67
+
68
+ data, error_details = await self._get(path=api_path)
69
+
70
+ if error_details:
71
+ return await self._handle_error_response(error_details)
72
+
73
+ if not data:
74
+ logger.error(f"No data returned for pair {pair_address} on {chain_id}")
75
+ return create_error_response(
76
+ error_type="empty_success",
77
+ message="API call returned empty success response.",
78
+ additional_data={
79
+ "chain_id": chain_id,
80
+ "pair_address": pair_address,
81
+ },
82
+ )
83
+
84
+ # The API returns a single pair object, not wrapped in a pairs array
85
+ if not isinstance(data, dict):
86
+ return create_error_response(
87
+ error_type="format_error",
88
+ message="Unexpected response format - expected object",
89
+ additional_data={
90
+ "chain_id": chain_id,
91
+ "pair_address": pair_address,
92
+ },
93
+ )
94
+
95
+ try:
96
+ # Validate the response using our existing PairModel
97
+ pair_data = PairModel.model_validate(data)
98
+ logger.info(
99
+ f"Successfully retrieved pair info for {pair_address} on {chain_id}"
100
+ )
101
+
102
+ return format_success_response(
103
+ {
104
+ "pair": pair_data.model_dump(),
105
+ "chain_id": chain_id,
106
+ "pair_address": pair_address,
107
+ }
108
+ )
109
+
110
+ except Exception as validation_error:
111
+ logger.error(
112
+ f"Failed to validate pair response for {pair_address} on {chain_id}: {validation_error}",
113
+ exc_info=True,
114
+ )
115
+ # Return raw data if validation fails
116
+ return format_success_response(
117
+ {
118
+ "pair": data,
119
+ "chain_id": chain_id,
120
+ "pair_address": pair_address,
121
+ "validation_warning": "Response structure may have changed",
122
+ }
123
+ )
124
+
125
+ except Exception as e:
126
+ return await self._handle_unexpected_runtime_error(
127
+ e, f"{chain_id}/{pair_address}"
128
+ )
129
+
130
+ async def _handle_error_response(self, error_details: dict) -> str:
131
+ """Formats error details (from _get) into a JSON string."""
132
+ if error_details.get("error_type") in [
133
+ "connection_error",
134
+ "parsing_error",
135
+ "unexpected_error",
136
+ ]:
137
+ logger.error(
138
+ f"DexScreener get_pair_info tool encountered an error: {error_details}"
139
+ )
140
+ else: # api_error
141
+ logger.warning(f"DexScreener API returned an error: {error_details}")
142
+
143
+ # Truncate potentially large fields before returning to user/LLM
144
+ truncated_details = truncate_large_fields(error_details)
145
+ return format_success_response(truncated_details)
146
+
147
+ async def _handle_unexpected_runtime_error(
148
+ self, e: Exception, query_info: str
149
+ ) -> str:
150
+ """Formats unexpected runtime exception details into a JSON string."""
151
+ logger.exception(
152
+ f"An unexpected runtime error occurred in get_pair_info tool _arun method for {query_info}: {e}"
153
+ )
154
+ return create_error_response(
155
+ error_type="runtime_error",
156
+ message="An unexpected internal error occurred processing the pair info request",
157
+ details=str(e),
158
+ additional_data={"query_info": query_info},
159
+ )
@@ -0,0 +1,166 @@
1
+ import logging
2
+ from typing import Any, Type
3
+
4
+ from pydantic import BaseModel, Field, ValidationError
5
+
6
+ from intentkit.skills.dexscreener.base import DexScreenerBaseTool
7
+ from intentkit.skills.dexscreener.model.search_token_response import (
8
+ SearchTokenResponseModel,
9
+ )
10
+ from intentkit.skills.dexscreener.utils import (
11
+ API_ENDPOINTS,
12
+ RATE_LIMITS,
13
+ create_error_response,
14
+ create_no_results_response,
15
+ format_success_response,
16
+ get_liquidity_value,
17
+ handle_validation_error,
18
+ truncate_large_fields,
19
+ )
20
+
21
+ logger = logging.getLogger(__name__)
22
+
23
+
24
+ class GetTokenPairsInput(BaseModel):
25
+ """Input schema for the DexScreener get_token_pairs tool."""
26
+
27
+ chain_id: str = Field(
28
+ description="The blockchain chain ID (e.g., 'ethereum', 'solana', 'bsc', 'polygon', 'arbitrum', 'base', 'avalanche')"
29
+ )
30
+ token_address: str = Field(
31
+ description="The token contract address (e.g., '0x1234...abcd' for Ethereum-based chains)"
32
+ )
33
+
34
+
35
+ class GetTokenPairs(DexScreenerBaseTool):
36
+ """
37
+ Tool to get all trading pairs for a specific token on DexScreener.
38
+ """
39
+
40
+ name: str = "dexscreener_get_token_pairs"
41
+ description: str = (
42
+ "Finds all trading pairs for a specific token using chain ID and token address. "
43
+ "Returns a list of all pools/pairs where this token is traded, including pair addresses, "
44
+ "DEX information, liquidity, volume, and pricing data for each pair. "
45
+ "Use this tool to analyze all available trading venues and liquidity sources for a specific token."
46
+ )
47
+ args_schema: Type[BaseModel] = GetTokenPairsInput
48
+
49
+ async def _arun(
50
+ self,
51
+ chain_id: str,
52
+ token_address: str,
53
+ **kwargs: Any,
54
+ ) -> str:
55
+ """Implementation to get all pairs for a specific token."""
56
+
57
+ # Apply rate limiting
58
+ await self.user_rate_limit_by_category(
59
+ user_id=f"{self.category}{self.name}",
60
+ limit=RATE_LIMITS["token_pairs"],
61
+ minutes=1,
62
+ )
63
+
64
+ logger.info(
65
+ f"Executing DexScreener get_token_pairs tool with chain_id: '{chain_id}', "
66
+ f"token_address: '{token_address}'"
67
+ )
68
+
69
+ try:
70
+ # Construct API path
71
+ api_path = f"{API_ENDPOINTS['token_pairs']}/{chain_id}/{token_address}"
72
+
73
+ data, error_details = await self._get(path=api_path)
74
+
75
+ if error_details:
76
+ return await self._handle_error_response(error_details)
77
+
78
+ if not data:
79
+ logger.error(
80
+ f"No data returned for token {token_address} on {chain_id}"
81
+ )
82
+ return create_error_response(
83
+ error_type="empty_success",
84
+ message="API call returned empty success response.",
85
+ additional_data={
86
+ "chain_id": chain_id,
87
+ "token_address": token_address,
88
+ },
89
+ )
90
+
91
+ try:
92
+ # Validate response using SearchTokenResponseModel since API returns similar structure
93
+ result = SearchTokenResponseModel.model_validate(data)
94
+ except ValidationError as e:
95
+ return handle_validation_error(
96
+ e, f"{chain_id}/{token_address}", len(str(data))
97
+ )
98
+
99
+ if not result.pairs:
100
+ return create_no_results_response(
101
+ f"{chain_id}/{token_address}",
102
+ reason="no trading pairs found for this token",
103
+ )
104
+
105
+ pairs_list = [p for p in result.pairs if p is not None]
106
+
107
+ if not pairs_list:
108
+ return create_no_results_response(
109
+ f"{chain_id}/{token_address}",
110
+ reason="all pairs were null or invalid",
111
+ )
112
+
113
+ # Sort pairs by liquidity (highest first) for better UX
114
+ try:
115
+ pairs_list.sort(key=get_liquidity_value, reverse=True)
116
+ except Exception as sort_err:
117
+ logger.warning(f"Failed to sort pairs by liquidity: {sort_err}")
118
+
119
+ logger.info(
120
+ f"Found {len(pairs_list)} pairs for token {token_address} on {chain_id}"
121
+ )
122
+
123
+ return format_success_response(
124
+ {
125
+ "pairs": [p.model_dump() for p in pairs_list],
126
+ "chain_id": chain_id,
127
+ "token_address": token_address,
128
+ "total_pairs": len(pairs_list),
129
+ }
130
+ )
131
+
132
+ except Exception as e:
133
+ return await self._handle_unexpected_runtime_error(
134
+ e, f"{chain_id}/{token_address}"
135
+ )
136
+
137
+ async def _handle_error_response(self, error_details: dict) -> str:
138
+ """Formats error details (from _get) into a JSON string."""
139
+ if error_details.get("error_type") in [
140
+ "connection_error",
141
+ "parsing_error",
142
+ "unexpected_error",
143
+ ]:
144
+ logger.error(
145
+ f"DexScreener get_token_pairs tool encountered an error: {error_details}"
146
+ )
147
+ else: # api_error
148
+ logger.warning(f"DexScreener API returned an error: {error_details}")
149
+
150
+ # Truncate potentially large fields before returning to user/LLM
151
+ truncated_details = truncate_large_fields(error_details)
152
+ return format_success_response(truncated_details)
153
+
154
+ async def _handle_unexpected_runtime_error(
155
+ self, e: Exception, query_info: str
156
+ ) -> str:
157
+ """Formats unexpected runtime exception details into a JSON string."""
158
+ logger.exception(
159
+ f"An unexpected runtime error occurred in get_token_pairs tool _arun method for {query_info}: {e}"
160
+ )
161
+ return create_error_response(
162
+ error_type="runtime_error",
163
+ message="An unexpected internal error occurred processing the token pairs request",
164
+ details=str(e),
165
+ additional_data={"query_info": query_info},
166
+ )