intentkit 0.6.13.dev2__py3-none-any.whl → 0.8.17__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (385) hide show
  1. intentkit/__init__.py +1 -1
  2. intentkit/abstracts/agent.py +4 -5
  3. intentkit/abstracts/engine.py +5 -5
  4. intentkit/abstracts/graph.py +14 -7
  5. intentkit/abstracts/skill.py +6 -144
  6. intentkit/abstracts/twitter.py +4 -5
  7. intentkit/clients/__init__.py +5 -2
  8. intentkit/clients/cdp.py +101 -141
  9. intentkit/clients/twitter.py +83 -62
  10. intentkit/clients/web3.py +29 -0
  11. intentkit/config/config.py +8 -5
  12. intentkit/core/agent.py +472 -195
  13. intentkit/core/asset.py +253 -0
  14. intentkit/core/chat.py +51 -0
  15. intentkit/core/client.py +1 -1
  16. intentkit/core/credit.py +460 -130
  17. intentkit/core/engine.py +262 -233
  18. intentkit/core/node.py +15 -16
  19. intentkit/core/prompt.py +62 -28
  20. intentkit/core/scheduler.py +92 -0
  21. intentkit/core/statistics.py +168 -0
  22. intentkit/models/agent.py +1096 -949
  23. intentkit/models/agent_data.py +68 -38
  24. intentkit/models/agent_public.json +98 -0
  25. intentkit/models/agent_schema.json +54 -439
  26. intentkit/models/app_setting.py +96 -33
  27. intentkit/models/chat.py +74 -27
  28. intentkit/models/conversation.py +8 -8
  29. intentkit/models/credit.py +362 -74
  30. intentkit/models/db.py +26 -8
  31. intentkit/models/db_mig.py +2 -2
  32. intentkit/models/llm.csv +28 -0
  33. intentkit/models/llm.py +185 -350
  34. intentkit/models/redis.py +6 -4
  35. intentkit/models/skill.py +186 -72
  36. intentkit/models/skills.csv +174 -0
  37. intentkit/models/user.py +82 -24
  38. intentkit/skills/acolyt/__init__.py +2 -9
  39. intentkit/skills/acolyt/ask.py +3 -4
  40. intentkit/skills/acolyt/base.py +4 -9
  41. intentkit/skills/acolyt/schema.json +4 -3
  42. intentkit/skills/aixbt/__init__.py +2 -13
  43. intentkit/skills/aixbt/base.py +1 -7
  44. intentkit/skills/aixbt/projects.py +14 -15
  45. intentkit/skills/aixbt/schema.json +4 -4
  46. intentkit/skills/allora/__init__.py +2 -9
  47. intentkit/skills/allora/base.py +4 -9
  48. intentkit/skills/allora/price.py +3 -4
  49. intentkit/skills/allora/schema.json +3 -2
  50. intentkit/skills/base.py +248 -85
  51. intentkit/skills/basename/__init__.py +51 -0
  52. intentkit/skills/basename/base.py +11 -0
  53. intentkit/skills/basename/basename.svg +11 -0
  54. intentkit/skills/basename/schema.json +58 -0
  55. intentkit/skills/carv/__init__.py +115 -121
  56. intentkit/skills/carv/base.py +184 -185
  57. intentkit/skills/carv/fetch_news.py +3 -3
  58. intentkit/skills/carv/onchain_query.py +4 -4
  59. intentkit/skills/carv/schema.json +134 -137
  60. intentkit/skills/carv/token_info_and_price.py +5 -5
  61. intentkit/skills/casino/README.md +254 -0
  62. intentkit/skills/casino/__init__.py +86 -0
  63. intentkit/skills/casino/base.py +17 -0
  64. intentkit/skills/casino/casino.png +0 -0
  65. intentkit/skills/casino/deck_draw.py +127 -0
  66. intentkit/skills/casino/deck_shuffle.py +118 -0
  67. intentkit/skills/casino/dice_roll.py +100 -0
  68. intentkit/skills/casino/schema.json +77 -0
  69. intentkit/skills/casino/utils.py +107 -0
  70. intentkit/skills/cdp/__init__.py +22 -84
  71. intentkit/skills/cdp/base.py +1 -7
  72. intentkit/skills/cdp/schema.json +11 -314
  73. intentkit/skills/chainlist/__init__.py +2 -7
  74. intentkit/skills/chainlist/base.py +1 -7
  75. intentkit/skills/chainlist/chain_lookup.py +18 -18
  76. intentkit/skills/chainlist/schema.json +3 -5
  77. intentkit/skills/common/__init__.py +2 -9
  78. intentkit/skills/common/base.py +1 -7
  79. intentkit/skills/common/current_time.py +1 -2
  80. intentkit/skills/common/schema.json +2 -2
  81. intentkit/skills/cookiefun/__init__.py +6 -9
  82. intentkit/skills/cookiefun/base.py +2 -7
  83. intentkit/skills/cookiefun/get_account_details.py +7 -7
  84. intentkit/skills/cookiefun/get_account_feed.py +19 -19
  85. intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
  86. intentkit/skills/cookiefun/get_sectors.py +3 -3
  87. intentkit/skills/cookiefun/schema.json +1 -3
  88. intentkit/skills/cookiefun/search_accounts.py +9 -9
  89. intentkit/skills/cryptocompare/__init__.py +7 -24
  90. intentkit/skills/cryptocompare/api.py +2 -3
  91. intentkit/skills/cryptocompare/base.py +11 -25
  92. intentkit/skills/cryptocompare/fetch_news.py +4 -5
  93. intentkit/skills/cryptocompare/fetch_price.py +6 -7
  94. intentkit/skills/cryptocompare/fetch_top_exchanges.py +4 -5
  95. intentkit/skills/cryptocompare/fetch_top_market_cap.py +4 -5
  96. intentkit/skills/cryptocompare/fetch_top_volume.py +4 -5
  97. intentkit/skills/cryptocompare/fetch_trading_signals.py +5 -6
  98. intentkit/skills/cryptocompare/schema.json +3 -3
  99. intentkit/skills/cryptopanic/__init__.py +7 -10
  100. intentkit/skills/cryptopanic/base.py +51 -55
  101. intentkit/skills/cryptopanic/fetch_crypto_news.py +4 -8
  102. intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +5 -7
  103. intentkit/skills/cryptopanic/schema.json +105 -103
  104. intentkit/skills/dapplooker/__init__.py +2 -9
  105. intentkit/skills/dapplooker/base.py +4 -9
  106. intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
  107. intentkit/skills/dapplooker/schema.json +3 -5
  108. intentkit/skills/defillama/__init__.py +24 -74
  109. intentkit/skills/defillama/api.py +6 -9
  110. intentkit/skills/defillama/base.py +11 -21
  111. intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +8 -10
  112. intentkit/skills/defillama/coins/fetch_block.py +6 -8
  113. intentkit/skills/defillama/coins/fetch_current_prices.py +8 -10
  114. intentkit/skills/defillama/coins/fetch_first_price.py +7 -9
  115. intentkit/skills/defillama/coins/fetch_historical_prices.py +9 -11
  116. intentkit/skills/defillama/coins/fetch_price_chart.py +9 -11
  117. intentkit/skills/defillama/coins/fetch_price_percentage.py +7 -9
  118. intentkit/skills/defillama/config/chains.py +1 -3
  119. intentkit/skills/defillama/fees/fetch_fees_overview.py +24 -26
  120. intentkit/skills/defillama/schema.json +5 -1
  121. intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +16 -18
  122. intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +8 -10
  123. intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +5 -7
  124. intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +7 -9
  125. intentkit/skills/defillama/tests/api_integration.test.py +1 -1
  126. intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +4 -6
  127. intentkit/skills/defillama/tvl/fetch_chains.py +9 -11
  128. intentkit/skills/defillama/tvl/fetch_historical_tvl.py +4 -6
  129. intentkit/skills/defillama/tvl/fetch_protocol.py +32 -38
  130. intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +3 -5
  131. intentkit/skills/defillama/tvl/fetch_protocols.py +37 -45
  132. intentkit/skills/defillama/volumes/fetch_dex_overview.py +42 -48
  133. intentkit/skills/defillama/volumes/fetch_dex_summary.py +35 -37
  134. intentkit/skills/defillama/volumes/fetch_options_overview.py +24 -28
  135. intentkit/skills/defillama/yields/fetch_pool_chart.py +10 -12
  136. intentkit/skills/defillama/yields/fetch_pools.py +26 -30
  137. intentkit/skills/dexscreener/README.md +154 -0
  138. intentkit/skills/dexscreener/__init__.py +97 -93
  139. intentkit/skills/dexscreener/base.py +125 -133
  140. intentkit/skills/dexscreener/get_pair_info.py +158 -0
  141. intentkit/skills/dexscreener/get_token_pairs.py +165 -0
  142. intentkit/skills/dexscreener/get_tokens_info.py +212 -0
  143. intentkit/skills/dexscreener/model/search_token_response.py +80 -82
  144. intentkit/skills/dexscreener/schema.json +91 -48
  145. intentkit/skills/dexscreener/search_token.py +182 -321
  146. intentkit/skills/dexscreener/utils.py +420 -0
  147. intentkit/skills/dune_analytics/__init__.py +7 -9
  148. intentkit/skills/dune_analytics/base.py +48 -52
  149. intentkit/skills/dune_analytics/fetch_kol_buys.py +5 -7
  150. intentkit/skills/dune_analytics/fetch_nation_metrics.py +6 -8
  151. intentkit/skills/dune_analytics/schema.json +104 -99
  152. intentkit/skills/elfa/__init__.py +5 -18
  153. intentkit/skills/elfa/base.py +10 -14
  154. intentkit/skills/elfa/mention.py +19 -21
  155. intentkit/skills/elfa/schema.json +3 -2
  156. intentkit/skills/elfa/stats.py +4 -4
  157. intentkit/skills/elfa/tokens.py +12 -12
  158. intentkit/skills/elfa/utils.py +26 -28
  159. intentkit/skills/enso/__init__.py +11 -31
  160. intentkit/skills/enso/base.py +50 -35
  161. intentkit/skills/enso/best_yield.py +16 -24
  162. intentkit/skills/enso/networks.py +6 -11
  163. intentkit/skills/enso/prices.py +11 -13
  164. intentkit/skills/enso/route.py +34 -38
  165. intentkit/skills/enso/schema.json +3 -2
  166. intentkit/skills/enso/tokens.py +29 -38
  167. intentkit/skills/enso/wallet.py +76 -191
  168. intentkit/skills/erc20/__init__.py +50 -0
  169. intentkit/skills/erc20/base.py +11 -0
  170. intentkit/skills/erc20/erc20.svg +5 -0
  171. intentkit/skills/erc20/schema.json +74 -0
  172. intentkit/skills/erc721/__init__.py +53 -0
  173. intentkit/skills/erc721/base.py +11 -0
  174. intentkit/skills/erc721/erc721.svg +5 -0
  175. intentkit/skills/erc721/schema.json +90 -0
  176. intentkit/skills/firecrawl/README.md +11 -5
  177. intentkit/skills/firecrawl/__init__.py +5 -18
  178. intentkit/skills/firecrawl/base.py +4 -11
  179. intentkit/skills/firecrawl/clear.py +4 -8
  180. intentkit/skills/firecrawl/crawl.py +19 -19
  181. intentkit/skills/firecrawl/query.py +4 -3
  182. intentkit/skills/firecrawl/schema.json +6 -8
  183. intentkit/skills/firecrawl/scrape.py +150 -40
  184. intentkit/skills/firecrawl/utils.py +50 -42
  185. intentkit/skills/github/__init__.py +2 -7
  186. intentkit/skills/github/base.py +1 -7
  187. intentkit/skills/github/github_search.py +1 -2
  188. intentkit/skills/github/schema.json +3 -4
  189. intentkit/skills/heurist/__init__.py +8 -27
  190. intentkit/skills/heurist/base.py +4 -9
  191. intentkit/skills/heurist/image_generation_animagine_xl.py +12 -13
  192. intentkit/skills/heurist/image_generation_arthemy_comics.py +12 -13
  193. intentkit/skills/heurist/image_generation_arthemy_real.py +12 -13
  194. intentkit/skills/heurist/image_generation_braindance.py +12 -13
  195. intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +12 -13
  196. intentkit/skills/heurist/image_generation_flux_1_dev.py +12 -13
  197. intentkit/skills/heurist/image_generation_sdxl.py +12 -13
  198. intentkit/skills/heurist/schema.json +2 -2
  199. intentkit/skills/http/__init__.py +4 -15
  200. intentkit/skills/http/base.py +1 -7
  201. intentkit/skills/http/get.py +21 -16
  202. intentkit/skills/http/post.py +23 -18
  203. intentkit/skills/http/put.py +23 -18
  204. intentkit/skills/http/schema.json +4 -5
  205. intentkit/skills/lifi/__init__.py +8 -13
  206. intentkit/skills/lifi/base.py +1 -7
  207. intentkit/skills/lifi/schema.json +17 -8
  208. intentkit/skills/lifi/token_execute.py +36 -30
  209. intentkit/skills/lifi/token_quote.py +8 -10
  210. intentkit/skills/lifi/utils.py +104 -51
  211. intentkit/skills/moralis/__init__.py +6 -10
  212. intentkit/skills/moralis/api.py +6 -7
  213. intentkit/skills/moralis/base.py +5 -10
  214. intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
  215. intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
  216. intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
  217. intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
  218. intentkit/skills/moralis/schema.json +7 -2
  219. intentkit/skills/morpho/__init__.py +52 -0
  220. intentkit/skills/morpho/base.py +11 -0
  221. intentkit/skills/morpho/morpho.svg +12 -0
  222. intentkit/skills/morpho/schema.json +73 -0
  223. intentkit/skills/nation/__init__.py +4 -9
  224. intentkit/skills/nation/base.py +5 -10
  225. intentkit/skills/nation/nft_check.py +3 -4
  226. intentkit/skills/nation/schema.json +4 -3
  227. intentkit/skills/onchain.py +23 -0
  228. intentkit/skills/openai/__init__.py +17 -18
  229. intentkit/skills/openai/base.py +10 -14
  230. intentkit/skills/openai/dalle_image_generation.py +3 -8
  231. intentkit/skills/openai/gpt_avatar_generator.py +102 -0
  232. intentkit/skills/openai/gpt_image_generation.py +4 -8
  233. intentkit/skills/openai/gpt_image_mini_generator.py +91 -0
  234. intentkit/skills/openai/gpt_image_to_image.py +4 -8
  235. intentkit/skills/openai/image_to_text.py +3 -7
  236. intentkit/skills/openai/schema.json +34 -3
  237. intentkit/skills/portfolio/__init__.py +11 -35
  238. intentkit/skills/portfolio/base.py +33 -19
  239. intentkit/skills/portfolio/schema.json +3 -5
  240. intentkit/skills/portfolio/token_balances.py +21 -21
  241. intentkit/skills/portfolio/wallet_approvals.py +17 -18
  242. intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
  243. intentkit/skills/portfolio/wallet_history.py +31 -31
  244. intentkit/skills/portfolio/wallet_net_worth.py +13 -13
  245. intentkit/skills/portfolio/wallet_nfts.py +19 -19
  246. intentkit/skills/portfolio/wallet_profitability.py +18 -18
  247. intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
  248. intentkit/skills/portfolio/wallet_stats.py +3 -3
  249. intentkit/skills/portfolio/wallet_swaps.py +19 -19
  250. intentkit/skills/pyth/__init__.py +50 -0
  251. intentkit/skills/pyth/base.py +11 -0
  252. intentkit/skills/pyth/pyth.svg +6 -0
  253. intentkit/skills/pyth/schema.json +75 -0
  254. intentkit/skills/skills.toml +40 -0
  255. intentkit/skills/slack/__init__.py +5 -17
  256. intentkit/skills/slack/base.py +3 -9
  257. intentkit/skills/slack/get_channel.py +8 -8
  258. intentkit/skills/slack/get_message.py +9 -9
  259. intentkit/skills/slack/schedule_message.py +5 -5
  260. intentkit/skills/slack/schema.json +2 -2
  261. intentkit/skills/slack/send_message.py +3 -5
  262. intentkit/skills/supabase/__init__.py +7 -23
  263. intentkit/skills/supabase/base.py +9 -13
  264. intentkit/skills/supabase/delete_data.py +5 -6
  265. intentkit/skills/supabase/fetch_data.py +13 -14
  266. intentkit/skills/supabase/insert_data.py +5 -6
  267. intentkit/skills/supabase/invoke_function.py +7 -8
  268. intentkit/skills/supabase/schema.json +2 -3
  269. intentkit/skills/supabase/update_data.py +7 -8
  270. intentkit/skills/supabase/upsert_data.py +5 -6
  271. intentkit/skills/superfluid/__init__.py +53 -0
  272. intentkit/skills/superfluid/base.py +11 -0
  273. intentkit/skills/superfluid/schema.json +89 -0
  274. intentkit/skills/superfluid/superfluid.svg +6 -0
  275. intentkit/skills/system/__init__.py +7 -24
  276. intentkit/skills/system/add_autonomous_task.py +10 -12
  277. intentkit/skills/system/delete_autonomous_task.py +2 -2
  278. intentkit/skills/system/edit_autonomous_task.py +14 -18
  279. intentkit/skills/system/list_autonomous_tasks.py +3 -5
  280. intentkit/skills/system/read_agent_api_key.py +6 -4
  281. intentkit/skills/system/regenerate_agent_api_key.py +6 -4
  282. intentkit/skills/system/schema.json +6 -8
  283. intentkit/skills/tavily/__init__.py +3 -12
  284. intentkit/skills/tavily/base.py +4 -9
  285. intentkit/skills/tavily/schema.json +3 -5
  286. intentkit/skills/tavily/tavily_extract.py +2 -4
  287. intentkit/skills/tavily/tavily_search.py +4 -6
  288. intentkit/skills/token/__init__.py +5 -10
  289. intentkit/skills/token/base.py +7 -11
  290. intentkit/skills/token/erc20_transfers.py +19 -19
  291. intentkit/skills/token/schema.json +3 -6
  292. intentkit/skills/token/token_analytics.py +3 -3
  293. intentkit/skills/token/token_price.py +13 -13
  294. intentkit/skills/token/token_search.py +9 -9
  295. intentkit/skills/twitter/__init__.py +11 -35
  296. intentkit/skills/twitter/base.py +23 -35
  297. intentkit/skills/twitter/follow_user.py +3 -7
  298. intentkit/skills/twitter/get_mentions.py +6 -13
  299. intentkit/skills/twitter/get_timeline.py +5 -13
  300. intentkit/skills/twitter/get_user_by_username.py +3 -7
  301. intentkit/skills/twitter/get_user_tweets.py +6 -14
  302. intentkit/skills/twitter/like_tweet.py +3 -7
  303. intentkit/skills/twitter/post_tweet.py +23 -12
  304. intentkit/skills/twitter/reply_tweet.py +21 -12
  305. intentkit/skills/twitter/retweet.py +3 -7
  306. intentkit/skills/twitter/schema.json +1 -0
  307. intentkit/skills/twitter/search_tweets.py +5 -13
  308. intentkit/skills/unrealspeech/__init__.py +2 -7
  309. intentkit/skills/unrealspeech/base.py +2 -8
  310. intentkit/skills/unrealspeech/schema.json +2 -5
  311. intentkit/skills/unrealspeech/text_to_speech.py +8 -8
  312. intentkit/skills/venice_audio/__init__.py +98 -106
  313. intentkit/skills/venice_audio/base.py +117 -121
  314. intentkit/skills/venice_audio/input.py +41 -41
  315. intentkit/skills/venice_audio/schema.json +151 -152
  316. intentkit/skills/venice_audio/venice_audio.py +38 -21
  317. intentkit/skills/venice_image/__init__.py +147 -154
  318. intentkit/skills/venice_image/api.py +138 -138
  319. intentkit/skills/venice_image/base.py +185 -192
  320. intentkit/skills/venice_image/config.py +33 -35
  321. intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
  322. intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
  323. intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
  324. intentkit/skills/venice_image/image_generation/image_generation_base.py +9 -9
  325. intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
  326. intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
  327. intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
  328. intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
  329. intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
  330. intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
  331. intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
  332. intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
  333. intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
  334. intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
  335. intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
  336. intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
  337. intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
  338. intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
  339. intentkit/skills/venice_image/schema.json +267 -267
  340. intentkit/skills/venice_image/utils.py +77 -78
  341. intentkit/skills/web_scraper/__init__.py +5 -18
  342. intentkit/skills/web_scraper/base.py +21 -7
  343. intentkit/skills/web_scraper/document_indexer.py +7 -6
  344. intentkit/skills/web_scraper/schema.json +2 -6
  345. intentkit/skills/web_scraper/scrape_and_index.py +15 -15
  346. intentkit/skills/web_scraper/utils.py +62 -63
  347. intentkit/skills/web_scraper/website_indexer.py +17 -19
  348. intentkit/skills/weth/__init__.py +49 -0
  349. intentkit/skills/weth/base.py +11 -0
  350. intentkit/skills/weth/schema.json +58 -0
  351. intentkit/skills/weth/weth.svg +6 -0
  352. intentkit/skills/wow/__init__.py +51 -0
  353. intentkit/skills/wow/base.py +11 -0
  354. intentkit/skills/wow/schema.json +89 -0
  355. intentkit/skills/wow/wow.svg +7 -0
  356. intentkit/skills/x402/__init__.py +61 -0
  357. intentkit/skills/x402/ask_agent.py +98 -0
  358. intentkit/skills/x402/base.py +99 -0
  359. intentkit/skills/x402/http_request.py +117 -0
  360. intentkit/skills/x402/schema.json +45 -0
  361. intentkit/skills/x402/x402.webp +0 -0
  362. intentkit/skills/xmtp/__init__.py +4 -15
  363. intentkit/skills/xmtp/base.py +61 -2
  364. intentkit/skills/xmtp/price.py +18 -13
  365. intentkit/skills/xmtp/schema.json +69 -71
  366. intentkit/skills/xmtp/swap.py +22 -25
  367. intentkit/skills/xmtp/transfer.py +71 -32
  368. intentkit/utils/chain.py +3 -3
  369. intentkit/utils/error.py +14 -1
  370. intentkit/utils/logging.py +2 -4
  371. intentkit/utils/s3.py +59 -7
  372. intentkit/utils/schema.py +100 -0
  373. intentkit/utils/slack_alert.py +7 -8
  374. {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/METADATA +14 -16
  375. intentkit-0.8.17.dist-info/RECORD +466 -0
  376. intentkit/abstracts/exception.py +0 -9
  377. intentkit/core/skill.py +0 -200
  378. intentkit/models/generator.py +0 -347
  379. intentkit/skills/cdp/get_balance.py +0 -110
  380. intentkit/skills/cdp/swap.py +0 -121
  381. intentkit/skills/moralis/tests/__init__.py +0 -0
  382. intentkit/skills/moralis/tests/test_wallet.py +0 -511
  383. intentkit-0.6.13.dev2.dist-info/RECORD +0 -409
  384. {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/WHEEL +0 -0
  385. {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/licenses/LICENSE +0 -0
@@ -1,7 +1,5 @@
1
1
  """Tool for fetching pool data via DeFi Llama API."""
2
2
 
3
- from typing import Optional
4
-
5
3
  from pydantic import BaseModel, Field
6
4
 
7
5
  from intentkit.skills.defillama.api import fetch_pools
@@ -21,13 +19,13 @@ Returns data including:
21
19
  class PredictionData(BaseModel):
22
20
  """Model representing prediction data for a pool."""
23
21
 
24
- predictedClass: Optional[str] = Field(
22
+ predictedClass: str | None = Field(
25
23
  None, description="Predicted direction of APY movement"
26
24
  )
27
- predictedProbability: Optional[float] = Field(
25
+ predictedProbability: float | None = Field(
28
26
  None, description="Probability of the prediction"
29
27
  )
30
- binnedConfidence: Optional[int] = Field(None, description="Confidence level bucket")
28
+ binnedConfidence: int | None = Field(None, description="Confidence level bucket")
31
29
 
32
30
 
33
31
  class PoolData(BaseModel):
@@ -37,38 +35,36 @@ class PoolData(BaseModel):
37
35
  project: str = Field(..., description="Protocol or project name")
38
36
  symbol: str = Field(..., description="Token or pool symbol")
39
37
  tvlUsd: float = Field(..., description="Total Value Locked in USD")
40
- apyBase: Optional[float] = Field(None, description="Base APY without rewards")
41
- apyReward: Optional[float] = Field(None, description="Additional APY from rewards")
42
- apy: Optional[float] = Field(None, description="Total APY including rewards")
43
- rewardTokens: Optional[list[str]] = Field(
38
+ apyBase: float | None = Field(None, description="Base APY without rewards")
39
+ apyReward: float | None = Field(None, description="Additional APY from rewards")
40
+ apy: float | None = Field(None, description="Total APY including rewards")
41
+ rewardTokens: list[str] | None = Field(
44
42
  None, description="List of reward token addresses"
45
43
  )
46
- pool: Optional[str] = Field(None, description="Pool identifier")
47
- apyPct1D: Optional[float] = Field(None, description="1-day APY percentage change")
48
- apyPct7D: Optional[float] = Field(None, description="7-day APY percentage change")
49
- apyPct30D: Optional[float] = Field(None, description="30-day APY percentage change")
44
+ pool: str | None = Field(None, description="Pool identifier")
45
+ apyPct1D: float | None = Field(None, description="1-day APY percentage change")
46
+ apyPct7D: float | None = Field(None, description="7-day APY percentage change")
47
+ apyPct30D: float | None = Field(None, description="30-day APY percentage change")
50
48
  stablecoin: bool = Field(False, description="Whether pool involves stablecoins")
51
49
  ilRisk: str = Field("no", description="Impermanent loss risk assessment")
52
50
  exposure: str = Field("single", description="Asset exposure type")
53
- predictions: Optional[PredictionData] = Field(
51
+ predictions: PredictionData | None = Field(
54
52
  None, description="APY movement predictions"
55
53
  )
56
- poolMeta: Optional[str] = Field(None, description="Additional pool metadata")
57
- mu: Optional[float] = Field(None, description="Mean APY value")
58
- sigma: Optional[float] = Field(None, description="APY standard deviation")
59
- count: Optional[int] = Field(None, description="Number of data points")
54
+ poolMeta: str | None = Field(None, description="Additional pool metadata")
55
+ mu: float | None = Field(None, description="Mean APY value")
56
+ sigma: float | None = Field(None, description="APY standard deviation")
57
+ count: int | None = Field(None, description="Number of data points")
60
58
  outlier: bool = Field(False, description="Whether pool is an outlier")
61
- underlyingTokens: Optional[list[str]] = Field(
59
+ underlyingTokens: list[str] | None = Field(
62
60
  None, description="List of underlying token addresses"
63
61
  )
64
- il7d: Optional[float] = Field(None, description="7-day impermanent loss")
65
- apyBase7d: Optional[float] = Field(None, description="7-day base APY")
66
- apyMean30d: Optional[float] = Field(None, description="30-day mean APY")
67
- volumeUsd1d: Optional[float] = Field(None, description="24h volume in USD")
68
- volumeUsd7d: Optional[float] = Field(None, description="7-day volume in USD")
69
- apyBaseInception: Optional[float] = Field(
70
- None, description="Base APY since inception"
71
- )
62
+ il7d: float | None = Field(None, description="7-day impermanent loss")
63
+ apyBase7d: float | None = Field(None, description="7-day base APY")
64
+ apyMean30d: float | None = Field(None, description="30-day mean APY")
65
+ volumeUsd1d: float | None = Field(None, description="24h volume in USD")
66
+ volumeUsd7d: float | None = Field(None, description="7-day volume in USD")
67
+ apyBaseInception: float | None = Field(None, description="Base APY since inception")
72
68
 
73
69
 
74
70
  class FetchPoolsResponse(BaseModel):
@@ -76,7 +72,7 @@ class FetchPoolsResponse(BaseModel):
76
72
 
77
73
  status: str = Field("success", description="Response status")
78
74
  data: list[PoolData] = Field(default_factory=list, description="List of pool data")
79
- error: Optional[str] = Field(None, description="Error message if any")
75
+ error: str | None = Field(None, description="Error message if any")
80
76
 
81
77
 
82
78
  class DefiLlamaFetchPools(DefiLlamaBaseTool):
@@ -87,9 +83,9 @@ class DefiLlamaFetchPools(DefiLlamaBaseTool):
87
83
 
88
84
  Example:
89
85
  pools_tool = DefiLlamaFetchPools(
90
- skill_store=store,
86
+ ,
91
87
  agent_id="agent_123",
92
- agent_store=agent_store
88
+ agent=agent
93
89
  )
94
90
  result = await pools_tool._arun()
95
91
  """
@@ -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.
@@ -1,93 +1,97 @@
1
- import logging
2
- from typing import Optional, TypedDict
3
-
4
- from intentkit.abstracts.skill import SkillStoreABC
5
- from intentkit.skills.base import SkillConfig, SkillState
6
- from intentkit.skills.dexscreener.base import DexScreenerBaseTool
7
- from intentkit.skills.dexscreener.search_token import SearchToken
8
-
9
- # Cache skills at the system level, because they are stateless
10
- _cache: dict[str, DexScreenerBaseTool] = {}
11
-
12
- logger = logging.getLogger(__name__)
13
-
14
-
15
- class SkillStates(TypedDict):
16
- search_token: SkillState
17
-
18
-
19
- _SKILL_NAME_TO_CLASS_MAP: dict[str, type[DexScreenerBaseTool]] = {
20
- "search_token": SearchToken,
21
- }
22
-
23
-
24
- class Config(SkillConfig):
25
- """Configuration for DexScreener skills."""
26
-
27
- enabled: bool
28
- states: SkillStates
29
-
30
-
31
- async def get_skills(
32
- config: "Config",
33
- is_private: bool,
34
- store: SkillStoreABC,
35
- **_,
36
- ) -> list[DexScreenerBaseTool]:
37
- """Get all DexScreener skills.
38
-
39
- Args:
40
- config: The configuration for DexScreener skills.
41
- is_private: Whether to include private skills.
42
- store: The skill store for persisting data.
43
-
44
- Returns:
45
- A list of DexScreener skills.
46
- """
47
-
48
- available_skills = []
49
-
50
- # Include skills based on their state
51
- for skill_name, state in config["states"].items():
52
- if state == "disabled":
53
- continue
54
- elif state == "public" or (state == "private" and is_private):
55
- available_skills.append(skill_name)
56
-
57
- logger.debug(f"Available Skills {available_skills}")
58
- logger.debug(f"Hardcoded Skills {_SKILL_NAME_TO_CLASS_MAP}")
59
-
60
- # Get each skill using the cached getter
61
- result = []
62
- for name in available_skills:
63
- skill = get_dexscreener_skills(name, store)
64
- if skill:
65
- result.append(skill)
66
- return result
67
-
68
-
69
- def get_dexscreener_skills(
70
- name: str,
71
- store: SkillStoreABC,
72
- ) -> Optional[DexScreenerBaseTool]:
73
- """Get a DexScreener skill by name.
74
-
75
- Args:
76
- name: The name of the skill to get
77
- store: The skill store for persisting data
78
-
79
- Returns:
80
- The requested DexScreener skill
81
- """
82
-
83
- # Return from cache immediately if already exists
84
- if name in _cache:
85
- return _cache[name]
86
-
87
- skill_class = _SKILL_NAME_TO_CLASS_MAP.get(name)
88
- if not skill_class:
89
- logger.warning(f"Unknown Dexscreener skill: {name}")
90
- return None
91
-
92
- _cache[name] = skill_class(skill_store=store)
93
- return _cache[name]
1
+ import logging
2
+ from typing import TypedDict
3
+
4
+ from intentkit.skills.base import SkillConfig, SkillState
5
+ from intentkit.skills.dexscreener.base import DexScreenerBaseTool
6
+ from intentkit.skills.dexscreener.get_pair_info import GetPairInfo
7
+ from intentkit.skills.dexscreener.get_token_pairs import GetTokenPairs
8
+ from intentkit.skills.dexscreener.get_tokens_info import GetTokensInfo
9
+ from intentkit.skills.dexscreener.search_token import SearchToken
10
+
11
+ # Cache skills at the system level, because they are stateless
12
+ _cache: dict[str, DexScreenerBaseTool] = {}
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class SkillStates(TypedDict):
18
+ search_token: SkillState
19
+ get_pair_info: SkillState
20
+ get_token_pairs: SkillState
21
+ get_tokens_info: SkillState
22
+
23
+
24
+ _SKILL_NAME_TO_CLASS_MAP: dict[str, type[DexScreenerBaseTool]] = {
25
+ "search_token": SearchToken,
26
+ "get_pair_info": GetPairInfo,
27
+ "get_token_pairs": GetTokenPairs,
28
+ "get_tokens_info": GetTokensInfo,
29
+ }
30
+
31
+
32
+ class Config(SkillConfig):
33
+ """Configuration for DexScreener skills."""
34
+
35
+ enabled: bool
36
+ states: SkillStates
37
+
38
+
39
+ async def get_skills(
40
+ config: "Config",
41
+ is_private: bool,
42
+ **_,
43
+ ) -> list[DexScreenerBaseTool]:
44
+ """Get all DexScreener skills.
45
+
46
+ Args:
47
+ config: The configuration for DexScreener skills.
48
+ is_private: Whether to include private skills.
49
+
50
+ Returns:
51
+ A list of DexScreener skills.
52
+ """
53
+
54
+ available_skills = []
55
+
56
+ # Include skills based on their state
57
+ for skill_name, state in config["states"].items():
58
+ if state == "disabled":
59
+ continue
60
+ elif state == "public" or (state == "private" and is_private):
61
+ available_skills.append(skill_name)
62
+
63
+ logger.debug(f"Available Skills {available_skills}")
64
+ logger.debug(f"Hardcoded Skills {_SKILL_NAME_TO_CLASS_MAP}")
65
+
66
+ # Get each skill using the cached getter
67
+ result = []
68
+ for name in available_skills:
69
+ skill = get_dexscreener_skills(name)
70
+ if skill:
71
+ result.append(skill)
72
+ return result
73
+
74
+
75
+ def get_dexscreener_skills(
76
+ name: str,
77
+ ) -> DexScreenerBaseTool | None:
78
+ """Get a DexScreener skill by name.
79
+
80
+ Args:
81
+ name: The name of the skill to get
82
+
83
+ Returns:
84
+ The requested DexScreener skill
85
+ """
86
+
87
+ # Return from cache immediately if already exists
88
+ if name in _cache:
89
+ return _cache[name]
90
+
91
+ skill_class = _SKILL_NAME_TO_CLASS_MAP.get(name)
92
+ if not skill_class:
93
+ logger.warning(f"Unknown Dexscreener skill: {name}")
94
+ return None
95
+
96
+ _cache[name] = skill_class()
97
+ return _cache[name]