intentkit 0.7.5.dev3__py3-none-any.whl → 0.8.34.dev7__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.
Files changed (393) hide show
  1. intentkit/MANIFEST.in +14 -0
  2. intentkit/README.md +88 -0
  3. intentkit/__init__.py +6 -4
  4. intentkit/abstracts/agent.py +4 -5
  5. intentkit/abstracts/engine.py +5 -5
  6. intentkit/abstracts/graph.py +15 -8
  7. intentkit/abstracts/skill.py +6 -144
  8. intentkit/abstracts/twitter.py +4 -5
  9. intentkit/clients/__init__.py +9 -2
  10. intentkit/clients/cdp.py +129 -153
  11. intentkit/{utils → clients}/s3.py +109 -34
  12. intentkit/clients/twitter.py +83 -62
  13. intentkit/clients/web3.py +4 -7
  14. intentkit/config/config.py +123 -90
  15. intentkit/core/account_checking.py +802 -0
  16. intentkit/core/agent.py +313 -498
  17. intentkit/core/asset.py +267 -0
  18. intentkit/core/chat.py +5 -3
  19. intentkit/core/client.py +1 -1
  20. intentkit/core/credit.py +49 -41
  21. intentkit/core/draft.py +201 -0
  22. intentkit/core/draft_chat.py +118 -0
  23. intentkit/core/engine.py +378 -287
  24. intentkit/core/manager/__init__.py +25 -0
  25. intentkit/core/manager/engine.py +220 -0
  26. intentkit/core/manager/service.py +172 -0
  27. intentkit/core/manager/skills.py +178 -0
  28. intentkit/core/middleware.py +231 -0
  29. intentkit/core/prompt.py +74 -114
  30. intentkit/core/scheduler.py +143 -0
  31. intentkit/core/statistics.py +168 -0
  32. intentkit/models/agent.py +931 -518
  33. intentkit/models/agent_data.py +165 -106
  34. intentkit/models/agent_schema.json +38 -251
  35. intentkit/models/app_setting.py +15 -13
  36. intentkit/models/chat.py +86 -140
  37. intentkit/models/credit.py +182 -162
  38. intentkit/models/db.py +42 -23
  39. intentkit/models/db_mig.py +120 -3
  40. intentkit/models/draft.py +222 -0
  41. intentkit/models/llm.csv +31 -0
  42. intentkit/models/llm.py +262 -370
  43. intentkit/models/redis.py +6 -4
  44. intentkit/models/skill.py +222 -101
  45. intentkit/models/skills.csv +173 -0
  46. intentkit/models/team.py +189 -0
  47. intentkit/models/user.py +103 -31
  48. intentkit/skills/acolyt/__init__.py +2 -9
  49. intentkit/skills/acolyt/ask.py +3 -4
  50. intentkit/skills/acolyt/base.py +4 -9
  51. intentkit/skills/acolyt/schema.json +4 -3
  52. intentkit/skills/aixbt/__init__.py +2 -13
  53. intentkit/skills/aixbt/base.py +1 -7
  54. intentkit/skills/aixbt/projects.py +14 -15
  55. intentkit/skills/aixbt/schema.json +4 -4
  56. intentkit/skills/allora/__init__.py +2 -9
  57. intentkit/skills/allora/base.py +4 -9
  58. intentkit/skills/allora/price.py +3 -4
  59. intentkit/skills/allora/schema.json +3 -2
  60. intentkit/skills/base.py +241 -41
  61. intentkit/skills/basename/__init__.py +51 -0
  62. intentkit/skills/basename/base.py +11 -0
  63. intentkit/skills/basename/basename.svg +11 -0
  64. intentkit/skills/basename/schema.json +58 -0
  65. intentkit/skills/carv/__init__.py +115 -121
  66. intentkit/skills/carv/base.py +184 -185
  67. intentkit/skills/carv/fetch_news.py +3 -3
  68. intentkit/skills/carv/onchain_query.py +4 -4
  69. intentkit/skills/carv/schema.json +134 -137
  70. intentkit/skills/carv/token_info_and_price.py +6 -6
  71. intentkit/skills/casino/__init__.py +4 -15
  72. intentkit/skills/casino/base.py +1 -7
  73. intentkit/skills/casino/deck_draw.py +5 -8
  74. intentkit/skills/casino/deck_shuffle.py +6 -6
  75. intentkit/skills/casino/dice_roll.py +2 -4
  76. intentkit/skills/casino/schema.json +0 -1
  77. intentkit/skills/cdp/__init__.py +22 -84
  78. intentkit/skills/cdp/base.py +1 -7
  79. intentkit/skills/cdp/schema.json +11 -314
  80. intentkit/skills/chainlist/__init__.py +2 -7
  81. intentkit/skills/chainlist/base.py +1 -7
  82. intentkit/skills/chainlist/chain_lookup.py +18 -18
  83. intentkit/skills/chainlist/schema.json +3 -5
  84. intentkit/skills/common/__init__.py +2 -9
  85. intentkit/skills/common/base.py +1 -7
  86. intentkit/skills/common/current_time.py +1 -2
  87. intentkit/skills/common/schema.json +2 -2
  88. intentkit/skills/cookiefun/__init__.py +6 -9
  89. intentkit/skills/cookiefun/base.py +2 -7
  90. intentkit/skills/cookiefun/get_account_details.py +7 -7
  91. intentkit/skills/cookiefun/get_account_feed.py +19 -19
  92. intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
  93. intentkit/skills/cookiefun/get_sectors.py +3 -3
  94. intentkit/skills/cookiefun/schema.json +1 -3
  95. intentkit/skills/cookiefun/search_accounts.py +9 -9
  96. intentkit/skills/cryptocompare/__init__.py +7 -24
  97. intentkit/skills/cryptocompare/api.py +2 -3
  98. intentkit/skills/cryptocompare/base.py +10 -24
  99. intentkit/skills/cryptocompare/fetch_news.py +4 -5
  100. intentkit/skills/cryptocompare/fetch_price.py +6 -7
  101. intentkit/skills/cryptocompare/fetch_top_exchanges.py +4 -5
  102. intentkit/skills/cryptocompare/fetch_top_market_cap.py +4 -5
  103. intentkit/skills/cryptocompare/fetch_top_volume.py +4 -5
  104. intentkit/skills/cryptocompare/fetch_trading_signals.py +5 -6
  105. intentkit/skills/cryptocompare/schema.json +3 -3
  106. intentkit/skills/cryptopanic/__init__.py +7 -10
  107. intentkit/skills/cryptopanic/base.py +51 -55
  108. intentkit/skills/cryptopanic/fetch_crypto_news.py +4 -8
  109. intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +5 -7
  110. intentkit/skills/cryptopanic/schema.json +105 -103
  111. intentkit/skills/dapplooker/__init__.py +2 -9
  112. intentkit/skills/dapplooker/base.py +4 -9
  113. intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
  114. intentkit/skills/dapplooker/schema.json +3 -5
  115. intentkit/skills/defillama/__init__.py +24 -74
  116. intentkit/skills/defillama/api.py +6 -9
  117. intentkit/skills/defillama/base.py +8 -19
  118. intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +8 -10
  119. intentkit/skills/defillama/coins/fetch_block.py +6 -8
  120. intentkit/skills/defillama/coins/fetch_current_prices.py +8 -10
  121. intentkit/skills/defillama/coins/fetch_first_price.py +7 -9
  122. intentkit/skills/defillama/coins/fetch_historical_prices.py +9 -11
  123. intentkit/skills/defillama/coins/fetch_price_chart.py +9 -11
  124. intentkit/skills/defillama/coins/fetch_price_percentage.py +7 -9
  125. intentkit/skills/defillama/config/chains.py +1 -3
  126. intentkit/skills/defillama/fees/fetch_fees_overview.py +24 -26
  127. intentkit/skills/defillama/schema.json +5 -1
  128. intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +16 -18
  129. intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +8 -10
  130. intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +5 -7
  131. intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +7 -9
  132. intentkit/skills/defillama/tests/api_integration.test.py +1 -1
  133. intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +4 -6
  134. intentkit/skills/defillama/tvl/fetch_chains.py +9 -11
  135. intentkit/skills/defillama/tvl/fetch_historical_tvl.py +4 -6
  136. intentkit/skills/defillama/tvl/fetch_protocol.py +32 -38
  137. intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +3 -5
  138. intentkit/skills/defillama/tvl/fetch_protocols.py +37 -45
  139. intentkit/skills/defillama/volumes/fetch_dex_overview.py +42 -48
  140. intentkit/skills/defillama/volumes/fetch_dex_summary.py +35 -37
  141. intentkit/skills/defillama/volumes/fetch_options_overview.py +24 -28
  142. intentkit/skills/defillama/yields/fetch_pool_chart.py +10 -12
  143. intentkit/skills/defillama/yields/fetch_pools.py +26 -30
  144. intentkit/skills/dexscreener/__init__.py +97 -102
  145. intentkit/skills/dexscreener/base.py +125 -130
  146. intentkit/skills/dexscreener/get_pair_info.py +4 -5
  147. intentkit/skills/dexscreener/get_token_pairs.py +4 -5
  148. intentkit/skills/dexscreener/get_tokens_info.py +7 -8
  149. intentkit/skills/dexscreener/model/search_token_response.py +80 -82
  150. intentkit/skills/dexscreener/schema.json +91 -93
  151. intentkit/skills/dexscreener/search_token.py +182 -184
  152. intentkit/skills/dexscreener/utils.py +15 -14
  153. intentkit/skills/dune_analytics/__init__.py +7 -9
  154. intentkit/skills/dune_analytics/base.py +48 -52
  155. intentkit/skills/dune_analytics/fetch_kol_buys.py +5 -7
  156. intentkit/skills/dune_analytics/fetch_nation_metrics.py +6 -8
  157. intentkit/skills/dune_analytics/schema.json +104 -99
  158. intentkit/skills/elfa/__init__.py +5 -18
  159. intentkit/skills/elfa/base.py +10 -14
  160. intentkit/skills/elfa/mention.py +19 -21
  161. intentkit/skills/elfa/schema.json +3 -2
  162. intentkit/skills/elfa/stats.py +4 -4
  163. intentkit/skills/elfa/tokens.py +12 -12
  164. intentkit/skills/elfa/utils.py +26 -28
  165. intentkit/skills/enso/__init__.py +11 -31
  166. intentkit/skills/enso/base.py +54 -35
  167. intentkit/skills/enso/best_yield.py +16 -24
  168. intentkit/skills/enso/networks.py +6 -11
  169. intentkit/skills/enso/prices.py +11 -13
  170. intentkit/skills/enso/route.py +34 -38
  171. intentkit/skills/enso/schema.json +3 -2
  172. intentkit/skills/enso/tokens.py +29 -38
  173. intentkit/skills/enso/wallet.py +76 -191
  174. intentkit/skills/erc20/__init__.py +50 -0
  175. intentkit/skills/erc20/base.py +11 -0
  176. intentkit/skills/erc20/erc20.svg +5 -0
  177. intentkit/skills/erc20/schema.json +74 -0
  178. intentkit/skills/erc721/__init__.py +53 -0
  179. intentkit/skills/erc721/base.py +11 -0
  180. intentkit/skills/erc721/erc721.svg +5 -0
  181. intentkit/skills/erc721/schema.json +90 -0
  182. intentkit/skills/firecrawl/__init__.py +5 -18
  183. intentkit/skills/firecrawl/base.py +4 -9
  184. intentkit/skills/firecrawl/clear.py +4 -8
  185. intentkit/skills/firecrawl/crawl.py +19 -19
  186. intentkit/skills/firecrawl/query.py +4 -3
  187. intentkit/skills/firecrawl/schema.json +2 -6
  188. intentkit/skills/firecrawl/scrape.py +17 -22
  189. intentkit/skills/firecrawl/utils.py +50 -42
  190. intentkit/skills/github/__init__.py +2 -7
  191. intentkit/skills/github/base.py +1 -7
  192. intentkit/skills/github/github_search.py +1 -2
  193. intentkit/skills/github/schema.json +3 -4
  194. intentkit/skills/heurist/__init__.py +8 -27
  195. intentkit/skills/heurist/base.py +4 -9
  196. intentkit/skills/heurist/image_generation_animagine_xl.py +13 -15
  197. intentkit/skills/heurist/image_generation_arthemy_comics.py +13 -15
  198. intentkit/skills/heurist/image_generation_arthemy_real.py +13 -15
  199. intentkit/skills/heurist/image_generation_braindance.py +13 -15
  200. intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +13 -15
  201. intentkit/skills/heurist/image_generation_flux_1_dev.py +13 -15
  202. intentkit/skills/heurist/image_generation_sdxl.py +13 -15
  203. intentkit/skills/heurist/schema.json +2 -2
  204. intentkit/skills/http/__init__.py +4 -15
  205. intentkit/skills/http/base.py +1 -7
  206. intentkit/skills/http/get.py +21 -16
  207. intentkit/skills/http/post.py +23 -18
  208. intentkit/skills/http/put.py +23 -18
  209. intentkit/skills/http/schema.json +4 -5
  210. intentkit/skills/lifi/__init__.py +8 -13
  211. intentkit/skills/lifi/base.py +3 -9
  212. intentkit/skills/lifi/schema.json +17 -8
  213. intentkit/skills/lifi/token_execute.py +150 -60
  214. intentkit/skills/lifi/token_quote.py +8 -10
  215. intentkit/skills/lifi/utils.py +104 -51
  216. intentkit/skills/moralis/__init__.py +6 -10
  217. intentkit/skills/moralis/api.py +6 -7
  218. intentkit/skills/moralis/base.py +5 -10
  219. intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
  220. intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
  221. intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
  222. intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
  223. intentkit/skills/moralis/schema.json +7 -2
  224. intentkit/skills/morpho/__init__.py +52 -0
  225. intentkit/skills/morpho/base.py +11 -0
  226. intentkit/skills/morpho/morpho.svg +12 -0
  227. intentkit/skills/morpho/schema.json +73 -0
  228. intentkit/skills/nation/__init__.py +4 -9
  229. intentkit/skills/nation/base.py +5 -10
  230. intentkit/skills/nation/nft_check.py +3 -4
  231. intentkit/skills/nation/schema.json +4 -3
  232. intentkit/skills/onchain.py +30 -0
  233. intentkit/skills/openai/__init__.py +17 -18
  234. intentkit/skills/openai/base.py +10 -14
  235. intentkit/skills/openai/dalle_image_generation.py +4 -9
  236. intentkit/skills/openai/gpt_avatar_generator.py +102 -0
  237. intentkit/skills/openai/gpt_image_generation.py +5 -9
  238. intentkit/skills/openai/gpt_image_mini_generator.py +92 -0
  239. intentkit/skills/openai/gpt_image_to_image.py +5 -9
  240. intentkit/skills/openai/image_to_text.py +3 -7
  241. intentkit/skills/openai/schema.json +34 -3
  242. intentkit/skills/portfolio/__init__.py +11 -35
  243. intentkit/skills/portfolio/base.py +33 -19
  244. intentkit/skills/portfolio/schema.json +3 -5
  245. intentkit/skills/portfolio/token_balances.py +21 -21
  246. intentkit/skills/portfolio/wallet_approvals.py +17 -18
  247. intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
  248. intentkit/skills/portfolio/wallet_history.py +31 -31
  249. intentkit/skills/portfolio/wallet_net_worth.py +13 -13
  250. intentkit/skills/portfolio/wallet_nfts.py +19 -19
  251. intentkit/skills/portfolio/wallet_profitability.py +18 -18
  252. intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
  253. intentkit/skills/portfolio/wallet_stats.py +3 -3
  254. intentkit/skills/portfolio/wallet_swaps.py +19 -19
  255. intentkit/skills/pyth/__init__.py +50 -0
  256. intentkit/skills/pyth/base.py +11 -0
  257. intentkit/skills/pyth/pyth.svg +6 -0
  258. intentkit/skills/pyth/schema.json +75 -0
  259. intentkit/skills/skills.toml +36 -0
  260. intentkit/skills/slack/__init__.py +5 -17
  261. intentkit/skills/slack/base.py +3 -9
  262. intentkit/skills/slack/get_channel.py +8 -8
  263. intentkit/skills/slack/get_message.py +9 -9
  264. intentkit/skills/slack/schedule_message.py +5 -5
  265. intentkit/skills/slack/schema.json +2 -2
  266. intentkit/skills/slack/send_message.py +3 -5
  267. intentkit/skills/supabase/__init__.py +7 -23
  268. intentkit/skills/supabase/base.py +1 -7
  269. intentkit/skills/supabase/delete_data.py +4 -4
  270. intentkit/skills/supabase/fetch_data.py +12 -12
  271. intentkit/skills/supabase/insert_data.py +4 -4
  272. intentkit/skills/supabase/invoke_function.py +6 -6
  273. intentkit/skills/supabase/schema.json +2 -3
  274. intentkit/skills/supabase/update_data.py +6 -6
  275. intentkit/skills/supabase/upsert_data.py +4 -4
  276. intentkit/skills/superfluid/__init__.py +53 -0
  277. intentkit/skills/superfluid/base.py +11 -0
  278. intentkit/skills/superfluid/schema.json +89 -0
  279. intentkit/skills/superfluid/superfluid.svg +6 -0
  280. intentkit/skills/system/__init__.py +7 -24
  281. intentkit/skills/system/add_autonomous_task.py +10 -12
  282. intentkit/skills/system/delete_autonomous_task.py +2 -2
  283. intentkit/skills/system/edit_autonomous_task.py +14 -18
  284. intentkit/skills/system/list_autonomous_tasks.py +3 -5
  285. intentkit/skills/system/read_agent_api_key.py +6 -4
  286. intentkit/skills/system/regenerate_agent_api_key.py +6 -4
  287. intentkit/skills/system/schema.json +6 -8
  288. intentkit/skills/tavily/__init__.py +3 -12
  289. intentkit/skills/tavily/base.py +4 -9
  290. intentkit/skills/tavily/schema.json +3 -5
  291. intentkit/skills/tavily/tavily_extract.py +2 -4
  292. intentkit/skills/tavily/tavily_search.py +4 -6
  293. intentkit/skills/token/__init__.py +5 -10
  294. intentkit/skills/token/base.py +7 -11
  295. intentkit/skills/token/erc20_transfers.py +19 -19
  296. intentkit/skills/token/schema.json +3 -6
  297. intentkit/skills/token/token_analytics.py +3 -3
  298. intentkit/skills/token/token_price.py +13 -13
  299. intentkit/skills/token/token_search.py +9 -9
  300. intentkit/skills/twitter/__init__.py +11 -35
  301. intentkit/skills/twitter/base.py +22 -34
  302. intentkit/skills/twitter/follow_user.py +2 -6
  303. intentkit/skills/twitter/get_mentions.py +5 -12
  304. intentkit/skills/twitter/get_timeline.py +4 -12
  305. intentkit/skills/twitter/get_user_by_username.py +2 -6
  306. intentkit/skills/twitter/get_user_tweets.py +5 -13
  307. intentkit/skills/twitter/like_tweet.py +2 -6
  308. intentkit/skills/twitter/post_tweet.py +6 -9
  309. intentkit/skills/twitter/reply_tweet.py +6 -9
  310. intentkit/skills/twitter/retweet.py +2 -6
  311. intentkit/skills/twitter/schema.json +1 -0
  312. intentkit/skills/twitter/search_tweets.py +4 -12
  313. intentkit/skills/unrealspeech/__init__.py +2 -7
  314. intentkit/skills/unrealspeech/base.py +2 -8
  315. intentkit/skills/unrealspeech/schema.json +2 -5
  316. intentkit/skills/unrealspeech/text_to_speech.py +8 -8
  317. intentkit/skills/venice_audio/__init__.py +98 -106
  318. intentkit/skills/venice_audio/base.py +117 -121
  319. intentkit/skills/venice_audio/input.py +41 -41
  320. intentkit/skills/venice_audio/schema.json +151 -152
  321. intentkit/skills/venice_audio/venice_audio.py +38 -21
  322. intentkit/skills/venice_image/__init__.py +147 -154
  323. intentkit/skills/venice_image/api.py +138 -138
  324. intentkit/skills/venice_image/base.py +185 -192
  325. intentkit/skills/venice_image/config.py +33 -35
  326. intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
  327. intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
  328. intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
  329. intentkit/skills/venice_image/image_generation/image_generation_base.py +11 -10
  330. intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
  331. intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
  332. intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
  333. intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
  334. intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
  335. intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
  336. intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
  337. intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
  338. intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
  339. intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
  340. intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
  341. intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
  342. intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
  343. intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
  344. intentkit/skills/venice_image/schema.json +267 -267
  345. intentkit/skills/venice_image/utils.py +77 -78
  346. intentkit/skills/web_scraper/__init__.py +5 -18
  347. intentkit/skills/web_scraper/base.py +21 -7
  348. intentkit/skills/web_scraper/document_indexer.py +7 -6
  349. intentkit/skills/web_scraper/schema.json +2 -6
  350. intentkit/skills/web_scraper/scrape_and_index.py +15 -15
  351. intentkit/skills/web_scraper/utils.py +62 -63
  352. intentkit/skills/web_scraper/website_indexer.py +17 -19
  353. intentkit/skills/weth/__init__.py +49 -0
  354. intentkit/skills/weth/base.py +11 -0
  355. intentkit/skills/weth/schema.json +58 -0
  356. intentkit/skills/weth/weth.svg +6 -0
  357. intentkit/skills/wow/__init__.py +51 -0
  358. intentkit/skills/wow/base.py +11 -0
  359. intentkit/skills/wow/schema.json +89 -0
  360. intentkit/skills/wow/wow.svg +7 -0
  361. intentkit/skills/x402/__init__.py +58 -0
  362. intentkit/skills/x402/base.py +99 -0
  363. intentkit/skills/x402/http_request.py +117 -0
  364. intentkit/skills/x402/schema.json +40 -0
  365. intentkit/skills/x402/x402.webp +0 -0
  366. intentkit/skills/xmtp/__init__.py +4 -15
  367. intentkit/skills/xmtp/base.py +5 -5
  368. intentkit/skills/xmtp/price.py +7 -6
  369. intentkit/skills/xmtp/schema.json +69 -71
  370. intentkit/skills/xmtp/swap.py +6 -8
  371. intentkit/skills/xmtp/transfer.py +4 -6
  372. intentkit/utils/__init__.py +4 -0
  373. intentkit/utils/chain.py +198 -96
  374. intentkit/utils/ens.py +135 -0
  375. intentkit/utils/error.py +5 -2
  376. intentkit/utils/logging.py +9 -11
  377. intentkit/utils/schema.py +100 -0
  378. intentkit/utils/slack_alert.py +8 -8
  379. intentkit/utils/tx.py +16 -8
  380. intentkit/uv.lock +3377 -0
  381. {intentkit-0.7.5.dev3.dist-info → intentkit-0.8.34.dev7.dist-info}/METADATA +13 -15
  382. intentkit-0.8.34.dev7.dist-info/RECORD +478 -0
  383. intentkit-0.8.34.dev7.dist-info/licenses/LICENSE +21 -0
  384. intentkit/core/node.py +0 -215
  385. intentkit/models/conversation.py +0 -286
  386. intentkit/models/generator.py +0 -347
  387. intentkit/skills/cdp/get_balance.py +0 -110
  388. intentkit/skills/cdp/swap.py +0 -121
  389. intentkit/skills/moralis/tests/__init__.py +0 -0
  390. intentkit/skills/moralis/tests/test_wallet.py +0 -511
  391. intentkit-0.7.5.dev3.dist-info/RECORD +0 -424
  392. {intentkit-0.7.5.dev3.dist-info/licenses → intentkit}/LICENSE +0 -0
  393. {intentkit-0.7.5.dev3.dist-info → intentkit-0.8.34.dev7.dist-info}/WHEEL +0 -0
@@ -0,0 +1,173 @@
1
+ category,config_name,name,enabled,price_level,price,price_self_key,rate_limit_count,rate_limit_minutes,author
2
+ acolyt,ask_gpt,acolyt_ask_gpt,FALSE,1,1,1,,,0x2Bd32A312280bF5A01140e68ca630fB76cE8A3De
3
+ aixbt,aixbt_projects,aixbt_projects,TRUE,3,100,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
4
+ allora,get_price_prediction,allora_get_price_prediction,TRUE,4,230,5,,,0x2Bd32A312280bF5A01140e68ca630fB76cE8A3De
5
+ basename,BasenameActionProvider_register_basename,BasenameActionProvider_register_basename,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
6
+ cdp,CdpApiActionProvider_request_faucet_funds,CdpApiActionProvider_request_faucet_funds,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
7
+ cdp,CdpEvmWalletActionProvider_get_swap_price,CdpEvmWalletActionProvider_get_swap_price,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
8
+ cdp,CdpEvmWalletActionProvider_swap,CdpEvmWalletActionProvider_swap,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
9
+ cdp,WalletActionProvider_get_balance,WalletActionProvider_get_balance,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
10
+ cdp,WalletActionProvider_get_wallet_details,WalletActionProvider_get_wallet_details,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
11
+ cdp,WalletActionProvider_native_transfer,WalletActionProvider_native_transfer,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
12
+ erc20,ERC20ActionProvider_get_balance,ERC20ActionProvider_get_balance,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
13
+ erc20,ERC20ActionProvider_transfer,ERC20ActionProvider_transfer,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
14
+ erc721,Erc721ActionProvider_get_balance,Erc721ActionProvider_get_balance,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
15
+ erc721,Erc721ActionProvider_mint,Erc721ActionProvider_mint,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
16
+ erc721,Erc721ActionProvider_transfer,Erc721ActionProvider_transfer,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
17
+ morpho,MorphoActionProvider_deposit,MorphoActionProvider_deposit,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
18
+ morpho,MorphoActionProvider_withdraw,MorphoActionProvider_withdraw,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
19
+ pyth,PythActionProvider_fetch_price,PythActionProvider_fetch_price,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
20
+ pyth,PythActionProvider_fetch_price_feed,PythActionProvider_fetch_price_feed,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
21
+ superfluid,SuperfluidActionProvider_create_flow,SuperfluidActionProvider_create_flow,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
22
+ superfluid,SuperfluidActionProvider_delete_flow,SuperfluidActionProvider_delete_flow,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
23
+ superfluid,SuperfluidActionProvider_update_flow,SuperfluidActionProvider_update_flow,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
24
+ weth,WethActionProvider_wrap_eth,WethActionProvider_wrap_eth,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
25
+ wow,WowActionProvider_buy_token,WowActionProvider_buy_token,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
26
+ wow,WowActionProvider_create_token,WowActionProvider_create_token,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
27
+ wow,WowActionProvider_sell_token,WowActionProvider_sell_token,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
28
+ chainlist,chain_lookup,chain-lookup,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
29
+ common,current_time,common_current_time,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
30
+ cookiefun,get_account_details,cookiefun_get_account_details,TRUE,2,70,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
31
+ cookiefun,get_account_feed,cookiefun_get_account_feed,TRUE,2,70,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
32
+ cookiefun,get_account_smart_followers,cookiefun_get_account_smart_followers,TRUE,2,70,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
33
+ cookiefun,get_sectors,cookiefun_get_sectors,TRUE,2,70,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
34
+ cookiefun,search_accounts,cookiefun_search_accounts,TRUE,2,70,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
35
+ cryptocompare,fetch_news,cryptocompare_fetch_news,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
36
+ cryptocompare,fetch_price,cryptocompare_fetch_price,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
37
+ cryptocompare,fetch_top_exchanges,cryptocompare_fetch_top_exchanges,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
38
+ cryptocompare,fetch_top_market_cap,cryptocompare_fetch_top_market_cap,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
39
+ cryptocompare,fetch_top_volume,cryptocompare_fetch_top_volume,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
40
+ cryptocompare,fetch_trading_signals,cryptocompare_fetch_trading_signals,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
41
+ cryptopanic,fetch_crypto_news,fetch_crypto_news,TRUE,1,5,5,,,0x178741Fc5BA9B77147398853c28736eEFe5fCff1
42
+ cryptopanic,fetch_crypto_sentiment,fetch_crypto_sentiment,TRUE,1,5,5,,,0x178741Fc5BA9B77147398853c28736eEFe5fCff1
43
+ dapplooker,dapplooker_token_data,dapplooker_token_data,TRUE,1,10,10,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
44
+ defillama,fetch_batch_historical_prices,defillama_fetch_batch_historical_prices,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
45
+ defillama,fetch_block,defillama_fetch_block,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
46
+ defillama,fetch_current_prices,defillama_fetch_current_prices,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
47
+ defillama,fetch_first_price,defillama_fetch_first_price,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
48
+ defillama,fetch_historical_prices,defillama_fetch_historical_prices,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
49
+ defillama,fetch_price_chart,defillama_fetch_price_chart,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
50
+ defillama,fetch_price_percentage,defillama_fetch_price_percentage,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
51
+ defillama,fetch_fees_overview,defillama_fetch_fees_overview,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
52
+ defillama,fetch_stablecoin_chains,defillama_fetch_stablecoin_chains,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
53
+ defillama,fetch_stablecoin_charts,defillama_fetch_stablecoin_charts,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
54
+ defillama,fetch_stablecoin_prices,defillama_fetch_stablecoin_prices,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
55
+ defillama,fetch_stablecoins,defillama_fetch_stablecoins,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
56
+ defillama,fetch_chain_historical_tvl,defillama_fetch_chain_historical_tvl,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
57
+ defillama,fetch_chains,defillama_fetch_chains,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
58
+ defillama,fetch_total_historical_tvl,defillama_fetch_total_historical_tvl,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
59
+ defillama,fetch_protocol_tvl,defillama_fetch_protocol_tvl,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
60
+ defillama,fetch_protocol,defillama_fetch_protocol,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
61
+ defillama,fetch_protocols,defillama_fetch_protocols,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
62
+ defillama,fetch_dex_overview,defillama_fetch_dex_overview,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
63
+ defillama,fetch_dex_summary,defillama_fetch_dex_summary,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
64
+ defillama,fetch_options_overview,defillama_fetch_options_overview,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
65
+ defillama,fetch_pool_chart,defillama_fetch_pool_chart,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
66
+ defillama,fetch_pools,defillama_fetch_pools,TRUE,1,5,5,,,0x91D43BfDc698b1e510efa0811e2e07F628D02e6b
67
+ dexscreener,search_token,dexscreener_search_token,TRUE,1,5,5,,,0xF60D4B6780D5D51827602D7aC319458bc9e921F4
68
+ dexscreener,get_pair_info,dexscreener_get_pair_info,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
69
+ dexscreener,get_token_pairs,dexscreener_get_token_pairs,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
70
+ dexscreener,get_tokens_info,dexscreener_get_tokens_info,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
71
+ dune_analytics,fetch_kol_buys,dune_fetch_kol_buys,TRUE,1,5,5,,,0x178741Fc5BA9B77147398853c28736eEFe5fCff1
72
+ dune_analytics,fetch_nation_metrics,dune_fetch_nation_metrics,TRUE,1,5,5,,,0x178741Fc5BA9B77147398853c28736eEFe5fCff1
73
+ elfa,get_smart_stats,elfa_get_smart_stats,TRUE,1,15,15,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
74
+ elfa,get_top_mentions,elfa_get_top_mentions,TRUE,1,15,15,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
75
+ elfa,get_trending_tokens,elfa_get_trending_tokens,TRUE,1,15,15,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
76
+ elfa,search_mentions,elfa_search_mentions,TRUE,1,15,15,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
77
+ enso,get_best_yield,enso_get_best_yield,TRUE,1,5,5,,,0x2Bd32A312280bF5A01140e68ca630fB76cE8A3De
78
+ enso,get_networks,enso_get_networks,TRUE,1,5,5,,,0x2Bd32A312280bF5A01140e68ca630fB76cE8A3De
79
+ enso,get_prices,enso_get_prices,TRUE,1,5,5,,,0x2Bd32A312280bF5A01140e68ca630fB76cE8A3De
80
+ enso,get_tokens,enso_get_tokens,TRUE,1,5,5,,,0x2Bd32A312280bF5A01140e68ca630fB76cE8A3De
81
+ enso,get_wallet_approvals,enso_get_wallet_approvals,TRUE,1,5,5,,,0x2Bd32A312280bF5A01140e68ca630fB76cE8A3De
82
+ enso,get_wallet_balances,enso_get_wallet_balances,TRUE,1,5,5,,,0x2Bd32A312280bF5A01140e68ca630fB76cE8A3De
83
+ enso,route_shortcut,enso_route_shortcut,TRUE,1,5,5,,,0x2Bd32A312280bF5A01140e68ca630fB76cE8A3De
84
+ enso,wallet_approve,enso_wallet_approve,TRUE,1,5,5,,,0x2Bd32A312280bF5A01140e68ca630fB76cE8A3De
85
+ github,github_search,github_search,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
86
+ heurist,image_generation_animagine_xl,heurist_image_generation_animagine_xl,TRUE,2,50,10,,,0x445750026A4a1906b61302442E085f9cbAfe206a
87
+ heurist,image_generation_arthemy_comics,heurist_image_generation_arthemy_comics,TRUE,2,50,10,,,0x445750026A4a1906b61302442E085f9cbAfe206a
88
+ heurist,image_generation_arthemy_real,heurist_image_generation_arthemy_real,TRUE,2,50,10,,,0x445750026A4a1906b61302442E085f9cbAfe206a
89
+ heurist,image_generation_braindance,heurist_image_generation_braindance,TRUE,2,50,10,,,0x445750026A4a1906b61302442E085f9cbAfe206a
90
+ heurist,image_generation_cyber_realistic_xl,heurist_image_generation_cyber_realistic_xl,TRUE,2,50,10,,,0x445750026A4a1906b61302442E085f9cbAfe206a
91
+ heurist,image_generation_flux_1_dev,heurist_image_generation_flux_1_dev,TRUE,2,50,10,,,0x445750026A4a1906b61302442E085f9cbAfe206a
92
+ heurist,image_generation_sdxl,heurist_image_generation_sdxl,TRUE,2,50,10,,,0x445750026A4a1906b61302442E085f9cbAfe206a
93
+ lifi,token_execute,lifi_token_execute,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
94
+ lifi,token_quote,lifi_token_quote,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
95
+ moralis,fetch_chain_portfolio,moralis_fetch_chain_portfolio,TRUE,1,5,5,,,0xd1a8Dd23e356B9fAE27dF5DeF9ea025A602EC81e
96
+ moralis,fetch_nft_portfolio,moralis_fetch_nft_portfolio,TRUE,1,5,5,,,0xd1a8Dd23e356B9fAE27dF5DeF9ea025A602EC81e
97
+ moralis,fetch_solana_portfolio,moralis_fetch_solana_portfolio,TRUE,1,5,5,,,0xd1a8Dd23e356B9fAE27dF5DeF9ea025A602EC81e
98
+ moralis,fetch_wallet_portfolio,moralis_fetch_wallet_portfolio,TRUE,1,5,5,,,0xd1a8Dd23e356B9fAE27dF5DeF9ea025A602EC81e
99
+ nation,nft_check,nft_check,FALSE,1,5,5,,,0x275960ad41DbE218bBf72cDF612F88b5C6f40648
100
+ openai,dalle_image_generation,dalle_image_generation,TRUE,4,200,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
101
+ openai,gpt_image_generation,gpt_image_generation,TRUE,5,400,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
102
+ openai,gpt_image_mini_generator,gpt_image_mini_generator,TRUE,3,100,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
103
+ openai,gpt_avatar_generator,gpt_avatar_generator,TRUE,2,50,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
104
+ openai,gpt_image_to_image,gpt_image_to_image,TRUE,5,400,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
105
+ openai,image_to_text,image_to_text,TRUE,4,200,15,,,0x445750026A4a1906b61302442E085f9cbAfe206a
106
+ portfolio,token_balances,portfolio_token_balances,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
107
+ portfolio,wallet_approvals,portfolio_wallet_approvals,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
108
+ portfolio,wallet_history,portfolio_wallet_history,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
109
+ portfolio,wallet_net_worth,portfolio_wallet_net_worth,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
110
+ portfolio,wallet_profitability_summary,portfolio_wallet_profitability_summary,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
111
+ portfolio,wallet_profitability,portfolio_wallet_profitability,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
112
+ portfolio,wallet_stats,portfolio_wallet_stats,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
113
+ portfolio,wallet_swaps,portfolio_wallet_swaps,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
114
+ portfolio,wallet_defi_positions,portfolio_wallet_defi_positions,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
115
+ portfolio,wallet_nfts,portfolio_wallet_nfts,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
116
+ slack,get_channel,slack_get_channel,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
117
+ slack,get_message,slack_get_message,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
118
+ slack,schedule_message,slack_schedule_message,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
119
+ slack,send_message,slack_send_message,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
120
+ supabase,fetch_data,supabase_fetch_data,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
121
+ supabase,insert_data,supabase_insert_data,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
122
+ supabase,update_data,supabase_update_data,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
123
+ supabase,upsert_data,supabase_upsert_data,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
124
+ supabase,delete_data,supabase_delete_data,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
125
+ supabase,invoke_function,supabase_invoke_function,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
126
+ system,read_agent_api_key,system_read_agent_api_key,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
127
+ system,regenerate_agent_api_key,system_regenerate_agent_api_key,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
128
+ system,list_autonomous_tasks,system_list_autonomous_tasks,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
129
+ system,add_autonomous_task,system_add_autonomous_task,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
130
+ system,edit_autonomous_task,system_edit_autonomous_task,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
131
+ system,delete_autonomous_task,system_delete_autonomous_task,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
132
+ http,http_get,http_get,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
133
+ http,http_put,http_put,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
134
+ http,http_post,http_post,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
135
+ tavily,tavily_search,tavily_search,TRUE,1,20,10,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
136
+ tavily,tavily_extract,tavily_extract,TRUE,1,20,10,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
137
+ token,token_erc20_transfers,token_erc20_transfers,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
138
+ token,token_analytics,token_analytics,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
139
+ token,token_price,token_price,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
140
+ token,token_search,token_search,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
141
+ twitter,follow_user,twitter_follow_user,TRUE,2,60,10,,,0x445750026A4a1906b61302442E085f9cbAfe206a
142
+ twitter,get_mentions,twitter_get_mentions,TRUE,2,60,10,,,0x445750026A4a1906b61302442E085f9cbAfe206a
143
+ twitter,get_timeline,twitter_get_timeline,TRUE,2,60,10,,,0x445750026A4a1906b61302442E085f9cbAfe206a
144
+ twitter,get_user_tweets,twitter_get_user_tweets,TRUE,2,60,10,,,0x445750026A4a1906b61302442E085f9cbAfe206a
145
+ twitter,like_tweet,twitter_like_tweet,TRUE,2,60,10,,,0x445750026A4a1906b61302442E085f9cbAfe206a
146
+ twitter,post_tweet,twitter_post_tweet,TRUE,2,60,10,,,0x445750026A4a1906b61302442E085f9cbAfe206a
147
+ twitter,reply_tweet,twitter_reply_tweet,TRUE,2,60,10,,,0x445750026A4a1906b61302442E085f9cbAfe206a
148
+ twitter,retweet,twitter_retweet,TRUE,2,60,10,,,0x445750026A4a1906b61302442E085f9cbAfe206a
149
+ twitter,search_tweets,twitter_search_tweets,TRUE,2,60,10,,,0x445750026A4a1906b61302442E085f9cbAfe206a
150
+ twitter,get_user_by_username,twitter_get_user_by_username,TRUE,2,60,10,,,0x445750026A4a1906b61302442E085f9cbAfe206a
151
+ unrealspeech,text_to_speech,text_to_speech,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
152
+ venice_image,image_generation_fluently_xl,venice_image_generation_fluently_xl,TRUE,2,50,10,,,0xF60D4B6780D5D51827602D7aC319458bc9e921F4
153
+ venice_image,image_generation_flux_dev,venice_image_generation_flux_dev,TRUE,2,50,10,,,0xF60D4B6780D5D51827602D7aC319458bc9e921F4
154
+ venice_image,image_generation_flux_dev_uncensored,venice_image_generation_flux_dev_uncensored,TRUE,2,50,10,,,0xF60D4B6780D5D51827602D7aC319458bc9e921F4
155
+ venice_image,image_generation_lustify_sdxl,venice_image_generation_lustify_sdxl,TRUE,2,50,10,,,0xF60D4B6780D5D51827602D7aC319458bc9e921F4
156
+ venice_image,image_generation_pony_realism,venice_image_generation_pony_realism,TRUE,2,50,10,,,0xF60D4B6780D5D51827602D7aC319458bc9e921F4
157
+ venice_image,image_generation_stable_diffusion_3_5,venice_image_generation_stable_diffusion_3_5,TRUE,2,50,10,,,0xF60D4B6780D5D51827602D7aC319458bc9e921F4
158
+ venice_image,image_generation_venice_sd35,venice_image_generation_venice_sd35,TRUE,2,50,10,,,0xF60D4B6780D5D51827602D7aC319458bc9e921F4
159
+ web_scraper,scrape_and_index,web_scraper_scrape_and_index,TRUE,3,100,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
160
+ web_scraper,query_indexed_content,web_scraper_query_indexed_content,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
161
+ web_scraper,website_indexer,web_scraper_website_indexer,TRUE,4,200,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
162
+ web_scraper,document_indexer,web_scraper_document_indexer,TRUE,4,200,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
163
+ firecrawl,firecrawl_scrape,firecrawl_scrape,TRUE,3,100,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
164
+ firecrawl,firecrawl_crawl,firecrawl_crawl,TRUE,3,100,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
165
+ firecrawl,firecrawl_query_indexed_content,firecrawl_query_indexed_content,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
166
+ firecrawl,firecrawl_clear_indexed_content,firecrawl_clear_indexed_content,TRUE,1,5,5,,,0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0
167
+ xmtp,xmtp_transfer,xmtp_transfer,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
168
+ xmtp,xmtp_swap,xmtp_swap,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
169
+ xmtp,xmtp_get_swap_price,xmtp_get_swap_price,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
170
+ x402,x402_http_request,x402_http_request,TRUE,1,1,1,,,0x445750026A4a1906b61302442E085f9cbAfe206a
171
+ casino,deck_shuffle,casino_deck_shuffle,true,1,5,5,,,0x3cdd051eec909f94965f9c1c657f5b70a172b2c0
172
+ casino,deck_draw,casino_deck_draw,true,1,5,5,,,0x3cdd051eec909f94965f9c1c657f5b70a172b2c0
173
+ casino,dice_roll,casino_dice_roll,true,1,5,5,,,0x3cdd051eec909f94965f9c1c657f5b70a172b2c0
@@ -0,0 +1,189 @@
1
+ from __future__ import annotations
2
+
3
+ from datetime import UTC, datetime
4
+ from enum import Enum
5
+ from typing import Annotated
6
+
7
+ from epyxid import XID
8
+ from pydantic import BaseModel, ConfigDict, Field
9
+ from sqlalchemy import DateTime, ForeignKey, Index, String, func, select
10
+ from sqlalchemy.orm import Mapped, mapped_column
11
+
12
+ from intentkit.models.base import Base
13
+ from intentkit.models.db import get_session
14
+
15
+
16
+ class TeamRole(str, Enum):
17
+ """Role of a user in a team."""
18
+
19
+ OWNER = "owner"
20
+ ADMIN = "admin"
21
+ MEMBER = "member"
22
+
23
+
24
+ class TeamMemberTable(Base):
25
+ """Team member database table model."""
26
+
27
+ __tablename__ = "team_members"
28
+ __table_args__ = (
29
+ Index("ix_team_members_team_user", "team_id", "user_id", unique=True),
30
+ Index("ix_team_members_user_team", "user_id", "team_id"),
31
+ )
32
+
33
+ team_id: Mapped[str] = mapped_column(
34
+ String,
35
+ ForeignKey("teams.id", ondelete="CASCADE"),
36
+ primary_key=True,
37
+ )
38
+ user_id: Mapped[str] = mapped_column(
39
+ String,
40
+ ForeignKey("users.id", ondelete="CASCADE"),
41
+ primary_key=True,
42
+ )
43
+ role: Mapped[TeamRole] = mapped_column(
44
+ String,
45
+ nullable=False,
46
+ default=TeamRole.MEMBER,
47
+ )
48
+ joined_at: Mapped[datetime] = mapped_column(
49
+ DateTime(timezone=True),
50
+ nullable=False,
51
+ server_default=func.now(),
52
+ )
53
+
54
+
55
+ class TeamTable(Base):
56
+ """Team database table model."""
57
+
58
+ __tablename__ = "teams"
59
+
60
+ id: Mapped[str] = mapped_column(
61
+ String,
62
+ primary_key=True,
63
+ )
64
+ name: Mapped[str] = mapped_column(
65
+ String,
66
+ nullable=False,
67
+ )
68
+ avatar: Mapped[str | None] = mapped_column(
69
+ String,
70
+ nullable=True,
71
+ )
72
+ created_at: Mapped[datetime] = mapped_column(
73
+ DateTime(timezone=True),
74
+ nullable=False,
75
+ server_default=func.now(),
76
+ )
77
+ updated_at: Mapped[datetime] = mapped_column(
78
+ DateTime(timezone=True),
79
+ nullable=False,
80
+ server_default=func.now(),
81
+ onupdate=lambda: datetime.now(UTC),
82
+ )
83
+
84
+
85
+ class TeamCreate(BaseModel):
86
+ """Team creation model."""
87
+
88
+ model_config = ConfigDict(from_attributes=True)
89
+
90
+ id: Annotated[
91
+ str,
92
+ Field(
93
+ default_factory=lambda: str(XID()),
94
+ description="Unique identifier for the team",
95
+ ),
96
+ ]
97
+ name: Annotated[
98
+ str,
99
+ Field(
100
+ description="Name of the team",
101
+ min_length=1,
102
+ max_length=100,
103
+ ),
104
+ ]
105
+ avatar: Annotated[
106
+ str | None,
107
+ Field(
108
+ default=None,
109
+ description="Avatar URL of the team",
110
+ ),
111
+ ]
112
+
113
+ async def save(self, creator_user_id: str) -> "Team":
114
+ """Create a new team and add the creator as owner.
115
+
116
+ Args:
117
+ creator_user_id: ID of the user creating the team
118
+
119
+ Returns:
120
+ Team: The created team
121
+ """
122
+ async with get_session() as db:
123
+ # Create team
124
+ team_record = TeamTable(**self.model_dump())
125
+ db.add(team_record)
126
+
127
+ # Add creator as owner
128
+ member_record = TeamMemberTable(
129
+ team_id=team_record.id,
130
+ user_id=creator_user_id,
131
+ role=TeamRole.OWNER,
132
+ )
133
+ db.add(member_record)
134
+
135
+ await db.commit()
136
+ await db.refresh(team_record)
137
+ return Team.model_validate(team_record)
138
+
139
+
140
+ class Team(TeamCreate):
141
+ """Team model with all fields."""
142
+
143
+ model_config = ConfigDict(
144
+ from_attributes=True,
145
+ json_encoders={datetime: lambda v: v.isoformat(timespec="milliseconds")},
146
+ )
147
+
148
+ created_at: Annotated[
149
+ datetime, Field(description="Timestamp when this team was created")
150
+ ]
151
+ updated_at: Annotated[
152
+ datetime, Field(description="Timestamp when this team was last updated")
153
+ ]
154
+
155
+ @classmethod
156
+ async def get(cls, team_id: str) -> "Team | None":
157
+ """Get a team by ID.
158
+
159
+ Args:
160
+ team_id: ID of the team to get
161
+
162
+ Returns:
163
+ Team or None if not found
164
+ """
165
+ async with get_session() as db:
166
+ team = await db.get(TeamTable, team_id)
167
+ if team:
168
+ return cls.model_validate(team)
169
+ return None
170
+
171
+ @classmethod
172
+ async def get_by_user(cls, user_id: str) -> list["Team"]:
173
+ """Get all teams a user belongs to.
174
+
175
+ Args:
176
+ user_id: ID of the user
177
+
178
+ Returns:
179
+ List of teams
180
+ """
181
+ async with get_session() as db:
182
+ stmt = (
183
+ select(TeamTable)
184
+ .join(TeamMemberTable)
185
+ .where(TeamMemberTable.user_id == user_id)
186
+ .order_by(TeamTable.name)
187
+ )
188
+ result = await db.scalars(stmt)
189
+ return [cls.model_validate(team) for team in result]
intentkit/models/user.py CHANGED
@@ -1,18 +1,19 @@
1
1
  import logging
2
- from datetime import datetime, timezone
2
+ from datetime import UTC, datetime
3
3
  from decimal import ROUND_HALF_UP, Decimal
4
- from typing import Annotated, Optional, Type, TypeVar
4
+ from typing import Annotated, TypeVar
5
5
 
6
- from intentkit.models.base import Base
7
- from intentkit.models.credit import CreditAccount
8
- from intentkit.models.db import get_session
9
6
  from pydantic import BaseModel, ConfigDict, Field
10
- from sqlalchemy import Column, DateTime, Index, Integer, String, func, select
7
+ from sqlalchemy import DateTime, Index, Integer, String, func, select
11
8
  from sqlalchemy.dialects.postgresql import JSON, JSONB
12
9
  from sqlalchemy.ext.asyncio import AsyncSession
10
+ from sqlalchemy.orm import Mapped, mapped_column
13
11
 
14
- logger = logging.getLogger(__name__)
12
+ from intentkit.models.base import Base
13
+ from intentkit.models.credit import CreditAccount
14
+ from intentkit.models.db import get_session
15
15
 
16
+ logger = logging.getLogger(__name__)
16
17
 
17
18
  # TypeVar for User model constraint
18
19
  UserModelType = TypeVar("UserModelType", bound="User")
@@ -23,10 +24,10 @@ class UserRegistry:
23
24
  """Registry for extended model classes."""
24
25
 
25
26
  def __init__(self):
26
- self._user_table_class: Optional[Type[UserTableType]] = None
27
- self._user_model_class: Optional[Type[UserModelType]] = None
27
+ self._user_table_class: type[UserTableType] | None = None
28
+ self._user_model_class: type[UserModelType] | None = None
28
29
 
29
- def register_user_table(self, user_table_class: Type[UserTableType]) -> None:
30
+ def register_user_table(self, user_table_class: type[UserTableType]) -> None:
30
31
  """Register extended UserTable class.
31
32
 
32
33
  Args:
@@ -34,11 +35,11 @@ class UserRegistry:
34
35
  """
35
36
  self._user_table_class = user_table_class
36
37
 
37
- def get_user_table_class(self) -> Type[UserTableType]:
38
+ def get_user_table_class(self) -> type[UserTableType]:
38
39
  """Get registered UserTable class or default."""
39
40
  return self._user_table_class or UserTable
40
41
 
41
- def register_user_model(self, user_model_class: Type[UserModelType]) -> None:
42
+ def register_user_model(self, user_model_class: type[UserModelType]) -> None:
42
43
  """Register extended UserModel class.
43
44
 
44
45
  Args:
@@ -46,7 +47,7 @@ class UserRegistry:
46
47
  """
47
48
  self._user_model_class = user_model_class
48
49
 
49
- def get_user_model_class(self) -> Type[UserModelType]:
50
+ def get_user_model_class(self) -> type[UserModelType]:
50
51
  """Get registered UserModel class or default."""
51
52
  return self._user_model_class or User
52
53
 
@@ -64,45 +65,57 @@ class UserTable(Base):
64
65
  Index("ix_users_telegram_username", "telegram_username"),
65
66
  )
66
67
 
67
- id = Column(
68
+ id: Mapped[str] = mapped_column(
68
69
  String,
69
70
  primary_key=True,
70
71
  )
71
- nft_count = Column(
72
+ nft_count: Mapped[int] = mapped_column(
72
73
  Integer,
73
74
  default=0,
74
75
  nullable=False,
75
76
  )
76
- email = Column(
77
+ email: Mapped[str | None] = mapped_column(
77
78
  String,
78
79
  nullable=True,
79
80
  )
80
- x_username = Column(
81
+ x_username: Mapped[str | None] = mapped_column(
81
82
  String,
82
83
  nullable=True,
83
84
  )
84
- github_username = Column(
85
+ github_username: Mapped[str | None] = mapped_column(
85
86
  String,
86
87
  nullable=True,
87
88
  )
88
- telegram_username = Column(
89
+ telegram_username: Mapped[str | None] = mapped_column(
89
90
  String,
90
91
  nullable=True,
91
92
  )
92
- extra = Column(
93
+ extra: Mapped[dict[str, object] | None] = mapped_column(
93
94
  JSON().with_variant(JSONB(), "postgresql"),
94
95
  nullable=True,
95
96
  )
96
- created_at = Column(
97
+ evm_wallet_address: Mapped[str | None] = mapped_column(
98
+ String,
99
+ nullable=True,
100
+ )
101
+ solana_wallet_address: Mapped[str | None] = mapped_column(
102
+ String,
103
+ nullable=True,
104
+ )
105
+ linked_accounts: Mapped[dict[str, object] | None] = mapped_column(
106
+ JSON().with_variant(JSONB(), "postgresql"),
107
+ nullable=True,
108
+ )
109
+ created_at: Mapped[datetime] = mapped_column(
97
110
  DateTime(timezone=True),
98
111
  nullable=False,
99
112
  server_default=func.now(),
100
113
  )
101
- updated_at = Column(
114
+ updated_at: Mapped[datetime] = mapped_column(
102
115
  DateTime(timezone=True),
103
116
  nullable=False,
104
117
  server_default=func.now(),
105
- onupdate=lambda: datetime.now(timezone.utc),
118
+ onupdate=lambda: datetime.now(UTC),
106
119
  )
107
120
 
108
121
 
@@ -119,18 +132,28 @@ class UserUpdate(BaseModel):
119
132
  nft_count: Annotated[
120
133
  int, Field(default=0, description="Number of NFTs owned by the user")
121
134
  ]
122
- email: Annotated[Optional[str], Field(None, description="User's email address")]
135
+ email: Annotated[str | None, Field(None, description="User's email address")]
123
136
  x_username: Annotated[
124
- Optional[str], Field(None, description="User's X (Twitter) username")
137
+ str | None, Field(None, description="User's X (Twitter) username")
125
138
  ]
126
139
  github_username: Annotated[
127
- Optional[str], Field(None, description="User's GitHub username")
140
+ str | None, Field(None, description="User's GitHub username")
128
141
  ]
129
142
  telegram_username: Annotated[
130
- Optional[str], Field(None, description="User's Telegram username")
143
+ str | None, Field(None, description="User's Telegram username")
131
144
  ]
132
145
  extra: Annotated[
133
- Optional[dict], Field(None, description="Additional user information")
146
+ dict[str, object] | None, Field(None, description="Additional user information")
147
+ ]
148
+ evm_wallet_address: Annotated[
149
+ str | None, Field(None, description="User's EVM wallet address")
150
+ ]
151
+ solana_wallet_address: Annotated[
152
+ str | None, Field(None, description="User's Solana wallet address")
153
+ ]
154
+ linked_accounts: Annotated[
155
+ dict[str, object] | None,
156
+ Field(None, description="User's linked accounts information"),
134
157
  ]
135
158
 
136
159
  async def _update_quota_for_nft_count(
@@ -144,7 +167,7 @@ class UserUpdate(BaseModel):
144
167
  new_nft_count: Current NFT count
145
168
  """
146
169
  # Generate upstream_tx_id
147
- timestamp = datetime.now(timezone.utc).strftime("%Y%m%d%H%M%S")
170
+ timestamp = datetime.now(UTC).strftime("%Y%m%d%H%M%S")
148
171
  upstream_tx_id = f"nft_{id}_{timestamp}"
149
172
 
150
173
  # Calculate new quota values based on nft_count
@@ -265,7 +288,7 @@ class User(UserUpdate):
265
288
  ]
266
289
 
267
290
  @classmethod
268
- async def get(cls, user_id: str) -> Optional[UserModelType]:
291
+ async def get(cls, user_id: str) -> UserModelType | None:
269
292
  """Get a user by ID.
270
293
 
271
294
  Args:
@@ -280,7 +303,7 @@ class User(UserUpdate):
280
303
  @classmethod
281
304
  async def get_in_session(
282
305
  cls, session: AsyncSession, user_id: str
283
- ) -> Optional[UserModelType]:
306
+ ) -> UserModelType | None:
284
307
  """Get a user by ID using the provided session.
285
308
 
286
309
  Args:
@@ -301,3 +324,52 @@ class User(UserUpdate):
301
324
  if user is None:
302
325
  return None
303
326
  return user_model_class.model_validate(user)
327
+
328
+ @classmethod
329
+ async def get_by_tg(cls, telegram_username: str) -> UserModelType | None:
330
+ """Get a user by telegram username.
331
+
332
+ Args:
333
+ telegram_username: Telegram username of the user to get
334
+
335
+ Returns:
336
+ User model or None if not found
337
+ """
338
+ user_model_class = user_model_registry.get_user_model_class()
339
+ assert issubclass(user_model_class, User)
340
+ user_table_class = user_model_registry.get_user_table_class()
341
+ assert issubclass(user_table_class, UserTable)
342
+
343
+ async with get_session() as session:
344
+ result = await session.execute(
345
+ select(user_table_class).where(
346
+ user_table_class.telegram_username == telegram_username
347
+ )
348
+ )
349
+ user = result.scalars().first()
350
+ if user is None:
351
+ return None
352
+ return user_model_class.model_validate(user)
353
+
354
+ @classmethod
355
+ async def get_by_evm_wallet(cls, evm_wallet_address: str) -> UserModelType | None:
356
+ """Get a user by EVM wallet address or matching ID."""
357
+ user_model_class = user_model_registry.get_user_model_class()
358
+ assert issubclass(user_model_class, User)
359
+ user_table_class = user_model_registry.get_user_table_class()
360
+ assert issubclass(user_table_class, UserTable)
361
+
362
+ async with get_session() as session:
363
+ result = await session.execute(
364
+ select(user_table_class).where(
365
+ user_table_class.evm_wallet_address == evm_wallet_address
366
+ )
367
+ )
368
+ user = result.scalars().first()
369
+ if user is not None:
370
+ return user_model_class.model_validate(user)
371
+
372
+ fallback_user = await session.get(user_table_class, evm_wallet_address)
373
+ if fallback_user is None:
374
+ return None
375
+ return user_model_class.model_validate(fallback_user)
@@ -3,7 +3,6 @@
3
3
  import logging
4
4
  from typing import NotRequired, TypedDict
5
5
 
6
- from intentkit.abstracts.skill import SkillStoreABC
7
6
  from intentkit.skills.acolyt.ask import AcolytAskGpt
8
7
  from intentkit.skills.acolyt.base import AcolytBaseTool
9
8
  from intentkit.skills.base import SkillConfig, SkillState
@@ -28,7 +27,6 @@ class Config(SkillConfig):
28
27
  async def get_skills(
29
28
  config: "Config",
30
29
  is_private: bool,
31
- store: SkillStoreABC,
32
30
  **_,
33
31
  ) -> list[AcolytBaseTool]:
34
32
  """Get all Acolyt skills.
@@ -36,7 +34,6 @@ async def get_skills(
36
34
  Args:
37
35
  config: The configuration for Acolyt skills.
38
36
  is_private: Whether to include private skills.
39
- store: The skill store for persisting data.
40
37
 
41
38
  Returns:
42
39
  A list of Acolyt skills.
@@ -53,7 +50,7 @@ async def get_skills(
53
50
  # Get each skill using the cached getter
54
51
  result = []
55
52
  for name in available_skills:
56
- skill = get_acolyt_skill(name, store)
53
+ skill = get_acolyt_skill(name)
57
54
  if skill:
58
55
  result.append(skill)
59
56
  return result
@@ -61,22 +58,18 @@ async def get_skills(
61
58
 
62
59
  def get_acolyt_skill(
63
60
  name: str,
64
- store: SkillStoreABC,
65
61
  ) -> AcolytBaseTool | None:
66
62
  """Get an Acolyt skill by name.
67
63
 
68
64
  Args:
69
65
  name: The name of the skill to get
70
- store: The skill store for persisting data
71
66
 
72
67
  Returns:
73
68
  The requested Acolyt skill
74
69
  """
75
70
  if name == "ask_gpt":
76
71
  if name not in _cache:
77
- _cache[name] = AcolytAskGpt(
78
- skill_store=store,
79
- )
72
+ _cache[name] = AcolytAskGpt()
80
73
  return _cache[name]
81
74
  else:
82
75
  logger.warning(f"Unknown Acolyt skill: {name}")