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
@@ -3,7 +3,6 @@
3
3
  import logging
4
4
  from typing import TypedDict
5
5
 
6
- from intentkit.abstracts.skill import SkillStoreABC
7
6
  from intentkit.skills.base import SkillConfig, SkillOwnerState
8
7
  from intentkit.skills.system.add_autonomous_task import AddAutonomousTask
9
8
  from intentkit.skills.system.base import SystemBaseTool
@@ -37,7 +36,6 @@ class Config(SkillConfig):
37
36
  async def get_skills(
38
37
  config: "Config",
39
38
  is_private: bool,
40
- store: SkillStoreABC,
41
39
  **_,
42
40
  ) -> list[SystemBaseTool]:
43
41
  """Get all system skills.
@@ -45,7 +43,6 @@ async def get_skills(
45
43
  Args:
46
44
  config: The configuration for system skills.
47
45
  is_private: Whether to include private skills.
48
- store: The skill store for persisting data.
49
46
 
50
47
  Returns:
51
48
  A list of system skills.
@@ -62,7 +59,7 @@ async def get_skills(
62
59
  # Get each skill using the cached getter
63
60
  result = []
64
61
  for name in available_skills:
65
- skill = get_system_skill(name, store)
62
+ skill = get_system_skill(name)
66
63
  if skill:
67
64
  result.append(skill)
68
65
  return result
@@ -70,52 +67,38 @@ async def get_skills(
70
67
 
71
68
  def get_system_skill(
72
69
  name: str,
73
- store: SkillStoreABC,
74
70
  ) -> SystemBaseTool:
75
71
  """Get a system skill by name.
76
72
 
77
73
  Args:
78
74
  name: The name of the skill to get
79
- store: The skill store for persisting data
80
75
 
81
76
  Returns:
82
77
  The requested system skill
83
78
  """
84
79
  if name == "read_agent_api_key":
85
80
  if name not in _cache:
86
- _cache[name] = ReadAgentApiKey(
87
- skill_store=store,
88
- )
81
+ _cache[name] = ReadAgentApiKey()
89
82
  return _cache[name]
90
83
  elif name == "regenerate_agent_api_key":
91
84
  if name not in _cache:
92
- _cache[name] = RegenerateAgentApiKey(
93
- skill_store=store,
94
- )
85
+ _cache[name] = RegenerateAgentApiKey()
95
86
  return _cache[name]
96
87
  elif name == "list_autonomous_tasks":
97
88
  if name not in _cache:
98
- _cache[name] = ListAutonomousTasks(
99
- skill_store=store,
100
- )
89
+ _cache[name] = ListAutonomousTasks()
101
90
  return _cache[name]
102
91
  elif name == "add_autonomous_task":
103
92
  if name not in _cache:
104
- _cache[name] = AddAutonomousTask(
105
- skill_store=store,
106
- )
93
+ _cache[name] = AddAutonomousTask()
107
94
  return _cache[name]
108
95
  elif name == "delete_autonomous_task":
109
96
  if name not in _cache:
110
- _cache[name] = DeleteAutonomousTask(
111
- skill_store=store,
112
- )
97
+ _cache[name] = DeleteAutonomousTask()
113
98
  return _cache[name]
114
99
  elif name == "edit_autonomous_task":
115
100
  if name not in _cache:
116
- _cache[name] = EditAutonomousTask(
117
- skill_store=store,
118
- )
101
+ _cache[name] = EditAutonomousTask()
119
102
  return _cache[name]
120
103
  else:
121
104
  logger.warning(f"Unknown system skill: {name}")
@@ -1,5 +1,3 @@
1
- from typing import Optional
2
-
3
1
  from pydantic import BaseModel, Field
4
2
 
5
3
  from intentkit.models.agent import AgentAutonomous
@@ -9,21 +7,21 @@ from intentkit.skills.system.base import SystemBaseTool
9
7
  class AddAutonomousTaskInput(BaseModel):
10
8
  """Input model for add_autonomous_task skill."""
11
9
 
12
- name: Optional[str] = Field(
10
+ name: str | None = Field(
13
11
  default=None,
14
12
  description="Display name of the autonomous task configuration",
15
13
  max_length=50,
16
14
  )
17
- description: Optional[str] = Field(
15
+ description: str | None = Field(
18
16
  default=None,
19
17
  description="Description of the autonomous task configuration",
20
18
  max_length=200,
21
19
  )
22
- minutes: Optional[int] = Field(
20
+ minutes: int | None = Field(
23
21
  default=None,
24
22
  description="Interval in minutes between operations, mutually exclusive with cron",
25
23
  )
26
- cron: Optional[str] = Field(
24
+ cron: str | None = Field(
27
25
  default=None,
28
26
  description="Cron expression for scheduling operations, mutually exclusive with minutes",
29
27
  )
@@ -54,10 +52,10 @@ class AddAutonomousTask(SystemBaseTool):
54
52
 
55
53
  async def _arun(
56
54
  self,
57
- name: Optional[str] = None,
58
- description: Optional[str] = None,
59
- minutes: Optional[int] = None,
60
- cron: Optional[str] = None,
55
+ name: str | None = None,
56
+ description: str | None = None,
57
+ minutes: int | None = None,
58
+ cron: str | None = None,
61
59
  prompt: str = "",
62
60
  **kwargs,
63
61
  ) -> AddAutonomousTaskOutput:
@@ -75,7 +73,7 @@ class AddAutonomousTask(SystemBaseTool):
75
73
  AddAutonomousTaskOutput: The created task
76
74
  """
77
75
  context = self.get_context()
78
- agent_id = context.agent_id
76
+ agent = context.agent
79
77
 
80
78
  task = AgentAutonomous(
81
79
  name=name,
@@ -86,6 +84,6 @@ class AddAutonomousTask(SystemBaseTool):
86
84
  enabled=True,
87
85
  )
88
86
 
89
- created_task = await self.skill_store.add_autonomous_task(agent_id, task)
87
+ created_task = await agent.add_autonomous_task(task)
90
88
 
91
89
  return AddAutonomousTaskOutput(task=created_task)
@@ -45,9 +45,9 @@ class DeleteAutonomousTask(SystemBaseTool):
45
45
  DeleteAutonomousTaskOutput: Confirmation of deletion
46
46
  """
47
47
  context = self.get_context()
48
- agent_id = context.agent_id
48
+ agent = context.agent
49
49
 
50
- await self.skill_store.delete_autonomous_task(agent_id, task_id)
50
+ await agent.delete_autonomous_task(task_id)
51
51
 
52
52
  return DeleteAutonomousTaskOutput(
53
53
  success=True, message=f"Successfully deleted autonomous task {task_id}"
@@ -1,5 +1,3 @@
1
- from typing import Optional
2
-
3
1
  from pydantic import BaseModel, Field
4
2
 
5
3
  from intentkit.models.agent import AgentAutonomous
@@ -12,28 +10,28 @@ class EditAutonomousTaskInput(BaseModel):
12
10
  task_id: str = Field(
13
11
  description="The unique identifier of the autonomous task to edit"
14
12
  )
15
- name: Optional[str] = Field(
13
+ name: str | None = Field(
16
14
  default=None,
17
15
  description="Display name of the autonomous task configuration",
18
16
  max_length=50,
19
17
  )
20
- description: Optional[str] = Field(
18
+ description: str | None = Field(
21
19
  default=None,
22
20
  description="Description of the autonomous task configuration",
23
21
  max_length=200,
24
22
  )
25
- minutes: Optional[int] = Field(
23
+ minutes: int | None = Field(
26
24
  default=None,
27
25
  description="Interval in minutes between operations, mutually exclusive with cron",
28
26
  )
29
- cron: Optional[str] = Field(
27
+ cron: str | None = Field(
30
28
  default=None,
31
29
  description="Cron expression for scheduling operations, mutually exclusive with minutes",
32
30
  )
33
- prompt: Optional[str] = Field(
31
+ prompt: str | None = Field(
34
32
  default=None, description="Special prompt used during autonomous operation"
35
33
  )
36
- enabled: Optional[bool] = Field(
34
+ enabled: bool | None = Field(
37
35
  default=None, description="Whether the autonomous task is enabled"
38
36
  )
39
37
 
@@ -61,12 +59,12 @@ class EditAutonomousTask(SystemBaseTool):
61
59
  async def _arun(
62
60
  self,
63
61
  task_id: str,
64
- name: Optional[str] = None,
65
- description: Optional[str] = None,
66
- minutes: Optional[int] = None,
67
- cron: Optional[str] = None,
68
- prompt: Optional[str] = None,
69
- enabled: Optional[bool] = None,
62
+ name: str | None = None,
63
+ description: str | None = None,
64
+ minutes: int | None = None,
65
+ cron: str | None = None,
66
+ prompt: str | None = None,
67
+ enabled: bool | None = None,
70
68
  **kwargs,
71
69
  ) -> EditAutonomousTaskOutput:
72
70
  """Edit an autonomous task for the agent.
@@ -85,7 +83,7 @@ class EditAutonomousTask(SystemBaseTool):
85
83
  EditAutonomousTaskOutput: The updated task
86
84
  """
87
85
  context = self.get_context()
88
- agent_id = context.agent_id
86
+ agent = context.agent
89
87
 
90
88
  if minutes is not None and cron is not None:
91
89
  raise ValueError("minutes and cron are mutually exclusive")
@@ -107,8 +105,6 @@ class EditAutonomousTask(SystemBaseTool):
107
105
  if enabled is not None:
108
106
  task_updates["enabled"] = enabled
109
107
 
110
- updated_task = await self.skill_store.update_autonomous_task(
111
- agent_id, task_id, task_updates
112
- )
108
+ updated_task = await agent.update_autonomous_task(task_id, task_updates)
113
109
 
114
110
  return EditAutonomousTaskOutput(task=updated_task)
@@ -1,5 +1,3 @@
1
- from typing import List
2
-
3
1
  from pydantic import BaseModel, Field
4
2
 
5
3
  from intentkit.models.agent import AgentAutonomous
@@ -15,7 +13,7 @@ class ListAutonomousTasksInput(BaseModel):
15
13
  class ListAutonomousTasksOutput(BaseModel):
16
14
  """Output model for list_autonomous_tasks skill."""
17
15
 
18
- tasks: List[AgentAutonomous] = Field(
16
+ tasks: list[AgentAutonomous] = Field(
19
17
  description="List of autonomous task configurations for the agent"
20
18
  )
21
19
 
@@ -43,8 +41,8 @@ class ListAutonomousTasks(SystemBaseTool):
43
41
  ListAutonomousTasksOutput: List of autonomous tasks
44
42
  """
45
43
  context = self.get_context()
46
- agent_id = context.agent_id
44
+ agent = context.agent
47
45
 
48
- tasks = await self.skill_store.list_autonomous_tasks(agent_id)
46
+ tasks = await agent.list_autonomous_tasks()
49
47
 
50
48
  return ListAutonomousTasksOutput(tasks=tasks)
@@ -1,5 +1,7 @@
1
1
  from pydantic import BaseModel, Field
2
2
 
3
+ from intentkit.config.config import config
4
+ from intentkit.models.agent_data import AgentData
3
5
  from intentkit.skills.system.base import SystemBaseTool
4
6
 
5
7
 
@@ -41,11 +43,11 @@ class ReadAgentApiKey(SystemBaseTool):
41
43
  context = self.get_context()
42
44
  agent_id = context.agent_id
43
45
 
44
- # Get agent data from skill store
45
- agent_data = await self.skill_store.get_agent_data(agent_id)
46
+ # Get agent data from the database
47
+ agent_data = await AgentData.get(agent_id)
46
48
 
47
49
  # Get API base URL from system config
48
- open_api_base_url = self.skill_store.get_system_config("open_api_base_url")
50
+ open_api_base_url = config.open_api_base_url
49
51
  api_endpoint = f"{open_api_base_url}/v1/chat/completions"
50
52
 
51
53
  # Check if API keys exist
@@ -72,7 +74,7 @@ class ReadAgentApiKey(SystemBaseTool):
72
74
  update_data["api_key_public"] = new_public_api_key
73
75
 
74
76
  if update_data:
75
- await self.skill_store.set_agent_data(agent_id, update_data)
77
+ await AgentData.patch(agent_id, update_data)
76
78
 
77
79
  return ReadAgentApiKeyOutput(
78
80
  api_key=new_api_key,
@@ -1,5 +1,7 @@
1
1
  from pydantic import BaseModel, Field
2
2
 
3
+ from intentkit.config.config import config
4
+ from intentkit.models.agent_data import AgentData
3
5
  from intentkit.skills.system.base import SystemBaseTool
4
6
 
5
7
 
@@ -43,11 +45,11 @@ class RegenerateAgentApiKey(SystemBaseTool):
43
45
  context = self.get_context()
44
46
  agent_id = context.agent_id
45
47
 
46
- # Get agent data from skill store
47
- agent_data = await self.skill_store.get_agent_data(agent_id)
48
+ # Get agent data directly from the model
49
+ agent_data = await AgentData.get(agent_id)
48
50
 
49
51
  # Get API base URL from system config
50
- open_api_base_url = self.skill_store.get_system_config("open_api_base_url")
52
+ open_api_base_url = config.open_api_base_url
51
53
  api_endpoint = f"{open_api_base_url}/v1/chat/completions"
52
54
 
53
55
  # Check if previous API keys existed
@@ -58,7 +60,7 @@ class RegenerateAgentApiKey(SystemBaseTool):
58
60
  new_public_api_key = self._generate_public_api_key()
59
61
 
60
62
  # Save the new API keys to agent data (overwrites existing)
61
- await self.skill_store.set_agent_data(
63
+ await AgentData.patch(
62
64
  agent_id, {"api_key": new_api_key, "api_key_public": new_public_api_key}
63
65
  )
64
66
 
@@ -5,16 +5,14 @@
5
5
  "description": "System management and configuration skills for agent operations including API key management",
6
6
  "x-icon": "https://ai.service.crestal.dev/skills/system/system.svg",
7
7
  "x-tags": [
8
- "System",
9
- "Management",
10
- "Configuration"
8
+ "Infrastructure"
11
9
  ],
12
10
  "properties": {
13
11
  "enabled": {
14
12
  "type": "boolean",
15
13
  "title": "Enabled",
16
14
  "description": "Whether this skill is enabled",
17
- "default": false
15
+ "default": true
18
16
  },
19
17
  "states": {
20
18
  "type": "object",
@@ -59,7 +57,7 @@
59
57
  "Agent Owner Only"
60
58
  ],
61
59
  "description": "List all autonomous task configurations for the agent.",
62
- "default": "disabled"
60
+ "default": "private"
63
61
  },
64
62
  "add_autonomous_task": {
65
63
  "type": "string",
@@ -73,7 +71,7 @@
73
71
  "Agent Owner Only"
74
72
  ],
75
73
  "description": "Add a new autonomous task configuration to the agent.",
76
- "default": "disabled"
74
+ "default": "private"
77
75
  },
78
76
  "delete_autonomous_task": {
79
77
  "type": "string",
@@ -87,7 +85,7 @@
87
85
  "Agent Owner Only"
88
86
  ],
89
87
  "description": "Delete an autonomous task configuration from the agent.",
90
- "default": "disabled"
88
+ "default": "private"
91
89
  },
92
90
  "edit_autonomous_task": {
93
91
  "type": "string",
@@ -101,7 +99,7 @@
101
99
  "Agent Owner Only"
102
100
  ],
103
101
  "description": "Edit an existing autonomous task configuration for the agent.",
104
- "default": "disabled"
102
+ "default": "private"
105
103
  }
106
104
  }
107
105
  }
@@ -3,7 +3,6 @@
3
3
  import logging
4
4
  from typing import TypedDict
5
5
 
6
- from intentkit.abstracts.skill import SkillStoreABC
7
6
  from intentkit.skills.base import SkillConfig, SkillState
8
7
  from intentkit.skills.tavily.base import TavilyBaseTool
9
8
  from intentkit.skills.tavily.tavily_extract import TavilyExtract
@@ -30,7 +29,6 @@ class Config(SkillConfig):
30
29
  async def get_skills(
31
30
  config: "Config",
32
31
  is_private: bool,
33
- store: SkillStoreABC,
34
32
  **_,
35
33
  ) -> list[TavilyBaseTool]:
36
34
  """Get all Tavily search skills.
@@ -38,7 +36,6 @@ async def get_skills(
38
36
  Args:
39
37
  config: The configuration for Tavily search skills.
40
38
  is_private: Whether to include private skills.
41
- store: The skill store for persisting data.
42
39
 
43
40
  Returns:
44
41
  A list of Tavily search skills.
@@ -55,7 +52,7 @@ async def get_skills(
55
52
  # Get each skill using the cached getter
56
53
  result = []
57
54
  for name in available_skills:
58
- skill = get_tavily_skill(name, store)
55
+ skill = get_tavily_skill(name)
59
56
  if skill:
60
57
  result.append(skill)
61
58
  return result
@@ -63,28 +60,22 @@ async def get_skills(
63
60
 
64
61
  def get_tavily_skill(
65
62
  name: str,
66
- store: SkillStoreABC,
67
63
  ) -> TavilyBaseTool:
68
64
  """Get a Tavily search skill by name.
69
65
 
70
66
  Args:
71
67
  name: The name of the skill to get
72
- store: The skill store for persisting data
73
68
 
74
69
  Returns:
75
70
  The requested Tavily search skill
76
71
  """
77
72
  if name == "tavily_search":
78
73
  if name not in _cache:
79
- _cache[name] = TavilySearch(
80
- skill_store=store,
81
- )
74
+ _cache[name] = TavilySearch()
82
75
  return _cache[name]
83
76
  elif name == "tavily_extract":
84
77
  if name not in _cache:
85
- _cache[name] = TavilyExtract(
86
- skill_store=store,
87
- )
78
+ _cache[name] = TavilyExtract()
88
79
  return _cache[name]
89
80
  else:
90
81
  logger.warning(f"Unknown Tavily skill: {name}")
@@ -1,9 +1,7 @@
1
- from typing import Type
2
-
3
- from langchain.tools.base import ToolException
1
+ from langchain_core.tools.base import ToolException
4
2
  from pydantic import BaseModel, Field
5
3
 
6
- from intentkit.abstracts.skill import SkillStoreABC
4
+ from intentkit.config.config import config
7
5
  from intentkit.skills.base import IntentKitSkill
8
6
 
9
7
 
@@ -12,17 +10,14 @@ class TavilyBaseTool(IntentKitSkill):
12
10
 
13
11
  name: str = Field(description="The name of the tool")
14
12
  description: str = Field(description="A description of what the tool does")
15
- args_schema: Type[BaseModel]
16
- skill_store: SkillStoreABC = Field(
17
- description="The skill store for persisting data"
18
- )
13
+ args_schema: type[BaseModel]
19
14
 
20
15
  def get_api_key(self) -> str:
21
16
  context = self.get_context()
22
17
  skill_config = context.agent.skill_config(self.category)
23
18
  api_key_provider = skill_config.get("api_key_provider")
24
19
  if api_key_provider == "platform":
25
- return self.skill_store.get_system_config("tavily_api_key")
20
+ return config.tavily_api_key
26
21
  # for backward compatibility, may only have api_key in skill_config
27
22
  elif skill_config.get("api_key"):
28
23
  return skill_config.get("api_key")
@@ -5,10 +5,8 @@
5
5
  "description": "Web search and content extraction capabilities using Tavily",
6
6
  "x-icon": "https://ai.service.crestal.dev/skills/tavily/tavily.jpg",
7
7
  "x-tags": [
8
- "Internet",
9
- "Search",
10
- "Information",
11
- "Content Extraction"
8
+ "Knowledge Base",
9
+ "Search"
12
10
  ],
13
11
  "x-nft-requirement": 1,
14
12
  "properties": {
@@ -116,4 +114,4 @@
116
114
  }
117
115
  },
118
116
  "additionalProperties": true
119
- }
117
+ }
@@ -1,5 +1,4 @@
1
1
  import logging
2
- from typing import Type
3
2
 
4
3
  import httpx
5
4
  from pydantic import BaseModel, Field
@@ -42,7 +41,7 @@ class TavilyExtract(TavilyBaseTool):
42
41
  "This tool is useful when you need to get the full text content from a webpage. "
43
42
  "You must call this tool whenever the user asks to extract or scrape content from a specific URL."
44
43
  )
45
- args_schema: Type[BaseModel] = TavilyExtractInput
44
+ args_schema: type[BaseModel] = TavilyExtractInput
46
45
 
47
46
  async def _arun(
48
47
  self,
@@ -73,9 +72,8 @@ class TavilyExtract(TavilyBaseTool):
73
72
  "rate_limit_minutes"
74
73
  ):
75
74
  await self.user_rate_limit_by_category(
76
- context.user_id,
77
75
  skill_config["rate_limit_number"],
78
- skill_config["rate_limit_minutes"],
76
+ skill_config["rate_limit_minutes"] * 60,
79
77
  )
80
78
 
81
79
  # Get the API key from the agent's configuration
@@ -1,9 +1,9 @@
1
1
  import logging
2
- from typing import Type
3
2
 
4
3
  import httpx
5
4
  from pydantic import BaseModel, Field
6
5
 
6
+ from intentkit.config.config import config
7
7
  from intentkit.skills.tavily.base import TavilyBaseTool
8
8
 
9
9
  logger = logging.getLogger(__name__)
@@ -49,7 +49,7 @@ class TavilySearch(TavilyBaseTool):
49
49
  "You must call this tool whenever the user asks for information that may not be in your training data,"
50
50
  " requires current data, or when you're unsure about facts."
51
51
  )
52
- args_schema: Type[BaseModel] = TavilySearchInput
52
+ args_schema: type[BaseModel] = TavilySearchInput
53
53
 
54
54
  async def _arun(
55
55
  self,
@@ -67,7 +67,6 @@ class TavilySearch(TavilyBaseTool):
67
67
  include_images: Whether to include image URLs in the results.
68
68
  include_raw_content: Whether to include raw HTML content in the results.
69
69
 
70
-
71
70
  Returns:
72
71
  str: Formatted search results with titles, snippets, and URLs.
73
72
  """
@@ -80,16 +79,15 @@ class TavilySearch(TavilyBaseTool):
80
79
  "rate_limit_minutes"
81
80
  ):
82
81
  await self.user_rate_limit_by_category(
83
- context.user_id,
84
82
  skill_config["rate_limit_number"],
85
- skill_config["rate_limit_minutes"],
83
+ skill_config["rate_limit_minutes"] * 60,
86
84
  )
87
85
 
88
86
  # Get the API key from the agent's configuration
89
87
  if skill_config.get("api_key_provider") == "agent_owner":
90
88
  api_key = skill_config.get("api_key")
91
89
  else:
92
- api_key = self.skill_store.get_system_config("tavily_api_key")
90
+ api_key = config.tavily_api_key
93
91
  if not api_key:
94
92
  return "Error: No Tavily API key provided in the configuration."
95
93
 
@@ -3,7 +3,6 @@
3
3
  import logging
4
4
  from typing import TypedDict
5
5
 
6
- from intentkit.abstracts.skill import SkillStoreABC
7
6
  from intentkit.skills.base import SkillConfig, SkillState
8
7
  from intentkit.skills.token.base import TokenBaseTool
9
8
  from intentkit.skills.token.erc20_transfers import ERC20Transfers
@@ -36,7 +35,6 @@ class Config(SkillConfig):
36
35
  async def get_skills(
37
36
  config: "Config",
38
37
  is_private: bool,
39
- store: SkillStoreABC,
40
38
  **_,
41
39
  ) -> list[TokenBaseTool]:
42
40
  """Get all Token blockchain analysis skills.
@@ -44,7 +42,6 @@ async def get_skills(
44
42
  Args:
45
43
  config: The configuration for Token skills.
46
44
  is_private: Whether to include private skills.
47
- store: The skill store for persisting data.
48
45
 
49
46
  Returns:
50
47
  A list of Token blockchain analysis skills.
@@ -65,7 +62,7 @@ async def get_skills(
65
62
  # Get each skill using the cached getter
66
63
  result = []
67
64
  for name in available_skills:
68
- skill = get_token_skill(name, store)
65
+ skill = get_token_skill(name)
69
66
  if skill:
70
67
  result.append(skill)
71
68
 
@@ -74,13 +71,11 @@ async def get_skills(
74
71
 
75
72
  def get_token_skill(
76
73
  name: str,
77
- store: SkillStoreABC,
78
74
  ) -> TokenBaseTool:
79
75
  """Get a Token blockchain analysis skill by name.
80
76
 
81
77
  Args:
82
78
  name: The name of the skill to get
83
- store: The skill store for persisting data
84
79
 
85
80
  Returns:
86
81
  The requested Token blockchain analysis skill
@@ -90,13 +85,13 @@ def get_token_skill(
90
85
 
91
86
  skill = None
92
87
  if name == "token_price":
93
- skill = TokenPrice(skill_store=store)
88
+ skill = TokenPrice()
94
89
  elif name == "token_erc20_transfers":
95
- skill = ERC20Transfers(skill_store=store)
90
+ skill = ERC20Transfers()
96
91
  elif name == "token_search":
97
- skill = TokenSearch(skill_store=store)
92
+ skill = TokenSearch()
98
93
  elif name == "token_analytics":
99
- skill = TokenAnalytics(skill_store=store)
94
+ skill = TokenAnalytics()
100
95
  else:
101
96
  logger.warning(f"Unknown Token skill: {name}")
102
97
  return None