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,90 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "title": "ERC721",
5
+ "description": "ERC721 NFT management actions via Coinbase AgentKit",
6
+ "x-icon": "https://ai.service.crestal.dev/skills/erc721/erc721.svg",
7
+ "x-tags": [
8
+ "Crypto",
9
+ "NFT"
10
+ ],
11
+ "properties": {
12
+ "enabled": {
13
+ "type": "boolean",
14
+ "title": "Enabled",
15
+ "description": "Whether this skill is enabled",
16
+ "default": false
17
+ },
18
+ "states": {
19
+ "type": "object",
20
+ "properties": {
21
+ "Erc721ActionProvider_get_balance": {
22
+ "type": "string",
23
+ "title": "Get ERC721 Balance",
24
+ "enum": [
25
+ "disabled",
26
+ "public",
27
+ "private"
28
+ ],
29
+ "x-enum-title": [
30
+ "Disabled",
31
+ "Agent Owner + All Users",
32
+ "Agent Owner Only"
33
+ ],
34
+ "description": "State for Erc721ActionProvider_get_balance",
35
+ "default": "disabled"
36
+ },
37
+ "Erc721ActionProvider_mint": {
38
+ "type": "string",
39
+ "title": "Mint ERC721",
40
+ "enum": [
41
+ "disabled",
42
+ "public",
43
+ "private"
44
+ ],
45
+ "x-enum-title": [
46
+ "Disabled",
47
+ "Agent Owner + All Users",
48
+ "Agent Owner Only"
49
+ ],
50
+ "description": "State for Erc721ActionProvider_mint",
51
+ "default": "disabled"
52
+ },
53
+ "Erc721ActionProvider_transfer": {
54
+ "type": "string",
55
+ "title": "Transfer ERC721",
56
+ "enum": [
57
+ "disabled",
58
+ "public",
59
+ "private"
60
+ ],
61
+ "x-enum-title": [
62
+ "Disabled",
63
+ "Agent Owner + All Users",
64
+ "Agent Owner Only"
65
+ ],
66
+ "description": "State for Erc721ActionProvider_transfer",
67
+ "default": "disabled"
68
+ }
69
+ },
70
+ "description": "States for each ERC721 skill (disabled, public, or private)"
71
+ },
72
+ "api_key_provider": {
73
+ "type": "string",
74
+ "title": "API Key Provider",
75
+ "description": "Who provides the API key",
76
+ "enum": [
77
+ "platform"
78
+ ],
79
+ "x-enum-title": [
80
+ "Nation Hosted"
81
+ ],
82
+ "default": "platform"
83
+ }
84
+ },
85
+ "required": [
86
+ "states",
87
+ "enabled"
88
+ ],
89
+ "additionalProperties": true
90
+ }
@@ -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.firecrawl.base import FirecrawlBaseTool
9
8
  from intentkit.skills.firecrawl.clear import FirecrawlClearIndexedContent
@@ -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[FirecrawlBaseTool]:
43
41
  """Get all Firecrawl skills.
@@ -45,7 +43,6 @@ async def get_skills(
45
43
  Args:
46
44
  config: The configuration for Firecrawl 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 Firecrawl skills.
@@ -60,18 +57,16 @@ async def get_skills(
60
57
  available_skills.append(skill_name)
61
58
 
62
59
  # Get each skill using the cached getter
63
- return [get_firecrawl_skill(name, store) for name in available_skills]
60
+ return [get_firecrawl_skill(name) for name in available_skills]
64
61
 
65
62
 
66
63
  def get_firecrawl_skill(
67
64
  name: str,
68
- store: SkillStoreABC,
69
65
  ) -> FirecrawlBaseTool:
70
66
  """Get a Firecrawl skill by name.
71
67
 
72
68
  Args:
73
69
  name: The name of the skill to get
74
- store: The skill store for persisting data
75
70
 
76
71
  Returns:
77
72
  The requested Firecrawl skill
@@ -81,27 +76,19 @@ def get_firecrawl_skill(
81
76
  """
82
77
  if name == "firecrawl_scrape":
83
78
  if name not in _cache:
84
- _cache[name] = FirecrawlScrape(
85
- skill_store=store,
86
- )
79
+ _cache[name] = FirecrawlScrape()
87
80
  return _cache[name]
88
81
  elif name == "firecrawl_crawl":
89
82
  if name not in _cache:
90
- _cache[name] = FirecrawlCrawl(
91
- skill_store=store,
92
- )
83
+ _cache[name] = FirecrawlCrawl()
93
84
  return _cache[name]
94
85
  elif name == "firecrawl_query_indexed_content":
95
86
  if name not in _cache:
96
- _cache[name] = FirecrawlQueryIndexedContent(
97
- skill_store=store,
98
- )
87
+ _cache[name] = FirecrawlQueryIndexedContent()
99
88
  return _cache[name]
100
89
  elif name == "firecrawl_clear_indexed_content":
101
90
  if name not in _cache:
102
- _cache[name] = FirecrawlClearIndexedContent(
103
- skill_store=store,
104
- )
91
+ _cache[name] = FirecrawlClearIndexedContent()
105
92
  return _cache[name]
106
93
  else:
107
94
  raise ValueError(f"Unknown Firecrawl 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,10 +10,7 @@ class FirecrawlBaseTool(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
  """Get the Firecrawl API key from configuration."""
@@ -29,7 +24,7 @@ class FirecrawlBaseTool(IntentKitSkill):
29
24
  else:
30
25
  raise ToolException("No api_key found in agent_owner configuration")
31
26
  else:
32
- return self.skill_store.get_system_config("firecrawl_api_key")
27
+ return config.firecrawl_api_key
33
28
 
34
29
  @property
35
30
  def category(self) -> str:
@@ -1,8 +1,8 @@
1
1
  import logging
2
- from typing import Type
3
2
 
4
3
  from pydantic import BaseModel, Field
5
4
 
5
+ from intentkit.models.skill import AgentSkillData
6
6
  from intentkit.skills.firecrawl.base import FirecrawlBaseTool
7
7
 
8
8
  logger = logging.getLogger(__name__)
@@ -30,7 +30,7 @@ class FirecrawlClearIndexedContent(FirecrawlBaseTool):
30
30
  "This will permanently delete all indexed content and cannot be undone.\n"
31
31
  "Use this tool when you want to start fresh with new content."
32
32
  )
33
- args_schema: Type[BaseModel] = FirecrawlClearInput
33
+ args_schema: type[BaseModel] = FirecrawlClearInput
34
34
 
35
35
  async def _arun(
36
36
  self,
@@ -62,15 +62,11 @@ class FirecrawlClearIndexedContent(FirecrawlBaseTool):
62
62
  try:
63
63
  # Delete vector store data (using web_scraper storage format for compatibility)
64
64
  vector_store_key = f"vector_store_{agent_id}"
65
- await self.skill_store.delete_agent_skill_data(
66
- agent_id, "web_scraper", vector_store_key
67
- )
65
+ await AgentSkillData.delete(agent_id, "web_scraper", vector_store_key)
68
66
 
69
67
  # Delete metadata
70
68
  metadata_key = f"indexed_urls_{agent_id}"
71
- await self.skill_store.delete_agent_skill_data(
72
- agent_id, "web_scraper", metadata_key
73
- )
69
+ await AgentSkillData.delete(agent_id, "web_scraper", metadata_key)
74
70
 
75
71
  logger.info(
76
72
  f"firecrawl_clear: Successfully cleared all indexed content for agent {agent_id}"
@@ -1,6 +1,5 @@
1
1
  import asyncio
2
2
  import logging
3
- from typing import List, Optional, Type
4
3
 
5
4
  import httpx
6
5
  from langchain_core.documents import Document
@@ -20,19 +19,19 @@ class FirecrawlCrawlInput(BaseModel):
20
19
  limit: int = Field(
21
20
  description="Maximum number of pages to crawl", default=10, ge=1, le=1000
22
21
  )
23
- formats: List[str] = Field(
22
+ formats: list[str] = Field(
24
23
  description="Output formats to include in the response. Options: 'markdown', 'html', 'rawHtml', 'screenshot', 'links', 'json'",
25
24
  default=["markdown"],
26
25
  )
27
- include_paths: Optional[List[str]] = Field(
26
+ include_paths: list[str] | None = Field(
28
27
  description="Regex patterns to include in the crawl (e.g., ['^/blog/.*$'])",
29
28
  default=None,
30
29
  )
31
- exclude_paths: Optional[List[str]] = Field(
30
+ exclude_paths: list[str] | None = Field(
32
31
  description="Regex patterns to exclude from the crawl (e.g., ['^/admin/.*$'])",
33
32
  default=None,
34
33
  )
35
- max_depth: Optional[int] = Field(
34
+ max_depth: int | None = Field(
36
35
  description="Maximum depth to crawl from the base URL",
37
36
  default=None,
38
37
  ge=1,
@@ -91,16 +90,16 @@ class FirecrawlCrawl(FirecrawlBaseTool):
91
90
  "Optionally indexes all crawled content for later querying using the firecrawl_query_indexed_content tool. "
92
91
  "Use this when you need to gather comprehensive information from a website."
93
92
  )
94
- args_schema: Type[BaseModel] = FirecrawlCrawlInput
93
+ args_schema: type[BaseModel] = FirecrawlCrawlInput
95
94
 
96
95
  async def _arun(
97
96
  self,
98
97
  url: str,
99
98
  limit: int = 10,
100
- formats: List[str] = None,
101
- include_paths: Optional[List[str]] = None,
102
- exclude_paths: Optional[List[str]] = None,
103
- max_depth: Optional[int] = None,
99
+ formats: list[str] = None,
100
+ include_paths: list[str] | None = None,
101
+ exclude_paths: list[str] | None = None,
102
+ max_depth: int | None = None,
104
103
  allow_backward_links: bool = False,
105
104
  allow_external_links: bool = False,
106
105
  allow_subdomains: bool = False,
@@ -137,9 +136,8 @@ class FirecrawlCrawl(FirecrawlBaseTool):
137
136
  "rate_limit_minutes"
138
137
  ):
139
138
  await self.user_rate_limit_by_category(
140
- context.user_id,
141
139
  skill_config["rate_limit_number"],
142
- skill_config["rate_limit_minutes"],
140
+ skill_config["rate_limit_minutes"] * 60,
143
141
  )
144
142
 
145
143
  # Get the API key from the agent's configuration
@@ -279,6 +277,7 @@ class FirecrawlCrawl(FirecrawlBaseTool):
279
277
  # Import indexing utilities from firecrawl utils
280
278
  from intentkit.skills.firecrawl.utils import (
281
279
  FirecrawlMetadataManager,
280
+ FirecrawlVectorStoreManager,
282
281
  index_documents,
283
282
  )
284
283
 
@@ -309,24 +308,25 @@ class FirecrawlCrawl(FirecrawlBaseTool):
309
308
  # Get agent ID for indexing
310
309
  agent_id = context.agent_id
311
310
  if agent_id and documents:
311
+ vector_manager = FirecrawlVectorStoreManager()
312
+
312
313
  # Index all documents
313
314
  total_chunks, was_merged = await index_documents(
314
315
  documents,
315
316
  agent_id,
316
- self.skill_store,
317
+ vector_manager,
317
318
  chunk_size,
318
319
  chunk_overlap,
319
320
  )
320
321
 
321
322
  # Update metadata
322
- metadata_manager = FirecrawlMetadataManager(
323
- self.skill_store
324
- )
325
323
  urls = [doc.metadata["source"] for doc in documents]
326
- new_metadata = metadata_manager.create_url_metadata(
327
- urls, documents, "firecrawl_crawl"
324
+ new_metadata = (
325
+ FirecrawlMetadataManager.create_url_metadata(
326
+ urls, documents, "firecrawl_crawl"
327
+ )
328
328
  )
329
- await metadata_manager.update_metadata(
329
+ await FirecrawlMetadataManager.update_metadata(
330
330
  agent_id, new_metadata
331
331
  )
332
332
 
@@ -1,5 +1,4 @@
1
1
  import logging
2
- from typing import Type
3
2
 
4
3
  from pydantic import BaseModel, Field
5
4
 
@@ -37,7 +36,7 @@ class FirecrawlQueryIndexedContent(FirecrawlBaseTool):
37
36
  "Use this tool to search through content that was previously scraped and indexed using Firecrawl tools.\n"
38
37
  "This tool can help answer questions based on the indexed web content from Firecrawl scraping/crawling."
39
38
  )
40
- args_schema: Type[BaseModel] = FirecrawlQueryInput
39
+ args_schema: type[BaseModel] = FirecrawlQueryInput
41
40
 
42
41
  async def _arun(
43
42
  self,
@@ -62,12 +61,14 @@ class FirecrawlQueryIndexedContent(FirecrawlBaseTool):
62
61
  # Import query utilities from firecrawl utils
63
62
  from intentkit.skills.firecrawl.utils import (
64
63
  FirecrawlDocumentProcessor,
64
+ FirecrawlVectorStoreManager,
65
65
  query_indexed_content,
66
66
  )
67
67
 
68
68
  # Query the indexed content
69
+ vector_manager = FirecrawlVectorStoreManager()
69
70
  docs = await query_indexed_content(
70
- query, agent_id, self.skill_store, max_results
71
+ query, agent_id, vector_manager, max_results
71
72
  )
72
73
 
73
74
  if not docs:
@@ -5,11 +5,7 @@
5
5
  "description": "AI-powered web scraping and crawling capabilities using Firecrawl",
6
6
  "x-icon": "https://ai.service.crestal.dev/skills/firecrawl/firecrawl.png",
7
7
  "x-tags": [
8
- "Web Scraping",
9
- "Crawling",
10
- "Content Extraction",
11
- "Data Mining",
12
- "Website Analysis"
8
+ "Knowledge Base"
13
9
  ],
14
10
  "properties": {
15
11
  "enabled": {
@@ -152,4 +148,4 @@
152
148
  }
153
149
  },
154
150
  "additionalProperties": true
155
- }
151
+ }
@@ -1,5 +1,4 @@
1
1
  import logging
2
- from typing import List, Optional, Type
3
2
 
4
3
  import httpx
5
4
  from langchain_core.documents import Document
@@ -16,7 +15,7 @@ class FirecrawlScrapeInput(BaseModel):
16
15
  url: str = Field(
17
16
  description="The URL to scrape. Must be a valid HTTP or HTTPS URL."
18
17
  )
19
- formats: List[str] = Field(
18
+ formats: list[str] = Field(
20
19
  description="Output formats to include in the response. Options: 'markdown', 'html', 'rawHtml', 'screenshot', 'links', 'json'",
21
20
  default=["markdown"],
22
21
  )
@@ -24,11 +23,11 @@ class FirecrawlScrapeInput(BaseModel):
24
23
  description="Whether to extract only the main content (excluding headers, footers, navigation, etc.)",
25
24
  default=True,
26
25
  )
27
- include_tags: Optional[List[str]] = Field(
26
+ include_tags: list[str] | None = Field(
28
27
  description="HTML tags, classes, or IDs to include in the response (e.g., ['h1', 'p', '.main-content'])",
29
28
  default=None,
30
29
  )
31
- exclude_tags: Optional[List[str]] = Field(
30
+ exclude_tags: list[str] | None = Field(
32
31
  description="HTML tags, classes, or IDs to exclude from the response (e.g., ['#ad', '#footer'])",
33
32
  default=None,
34
33
  )
@@ -81,15 +80,15 @@ class FirecrawlScrape(FirecrawlBaseTool):
81
80
  "This tool can handle JavaScript-rendered content, PDFs, and dynamic websites. "
82
81
  "Use this when you want to refresh/update content from a URL that was previously scraped."
83
82
  )
84
- args_schema: Type[BaseModel] = FirecrawlScrapeInput
83
+ args_schema: type[BaseModel] = FirecrawlScrapeInput
85
84
 
86
85
  async def _arun(
87
86
  self,
88
87
  url: str,
89
- formats: List[str] = None,
88
+ formats: list[str] = None,
90
89
  only_main_content: bool = True,
91
- include_tags: Optional[List[str]] = None,
92
- exclude_tags: Optional[List[str]] = None,
90
+ include_tags: list[str] | None = None,
91
+ exclude_tags: list[str] | None = None,
93
92
  wait_for: int = 0,
94
93
  timeout: int = 30000,
95
94
  index_content: bool = True,
@@ -124,9 +123,8 @@ class FirecrawlScrape(FirecrawlBaseTool):
124
123
  "rate_limit_minutes"
125
124
  ):
126
125
  await self.user_rate_limit_by_category(
127
- context.user_id,
128
126
  skill_config["rate_limit_number"],
129
- skill_config["rate_limit_minutes"],
127
+ skill_config["rate_limit_minutes"] * 60,
130
128
  )
131
129
 
132
130
  # Get the API key from the agent's configuration
@@ -265,11 +263,8 @@ class FirecrawlScrape(FirecrawlBaseTool):
265
263
  # Get agent ID for indexing
266
264
  agent_id = context.agent_id
267
265
  if agent_id:
268
- # Initialize managers
269
- vs_manager = FirecrawlVectorStoreManager(self.skill_store)
270
- metadata_manager = FirecrawlMetadataManager(
271
- self.skill_store
272
- )
266
+ # Initialize vector store manager
267
+ vs_manager = FirecrawlVectorStoreManager()
273
268
 
274
269
  # Load existing vector store
275
270
  existing_vector_store = await vs_manager.load_vector_store(
@@ -368,10 +363,8 @@ class FirecrawlScrape(FirecrawlBaseTool):
368
363
  # Update metadata to track all URLs
369
364
  # Get existing metadata to preserve other URLs
370
365
  metadata_key = f"indexed_urls_{agent_id}"
371
- existing_metadata = (
372
- await self.skill_store.get_agent_skill_data(
373
- agent_id, "firecrawl", metadata_key
374
- )
366
+ existing_metadata = await self.get_agent_skill_data_raw(
367
+ "firecrawl", metadata_key
375
368
  )
376
369
 
377
370
  if existing_metadata and existing_metadata.get("urls"):
@@ -388,11 +381,13 @@ class FirecrawlScrape(FirecrawlBaseTool):
388
381
  }
389
382
  else:
390
383
  # Create new metadata
391
- updated_metadata = metadata_manager.create_url_metadata(
392
- [url], [document], "firecrawl_scrape"
384
+ updated_metadata = (
385
+ FirecrawlMetadataManager.create_url_metadata(
386
+ [url], [document], "firecrawl_scrape"
387
+ )
393
388
  )
394
389
 
395
- await metadata_manager.update_metadata(
390
+ await FirecrawlMetadataManager.update_metadata(
396
391
  agent_id, updated_metadata
397
392
  )
398
393