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

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

Potentially problematic release.


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

Files changed (385) hide show
  1. intentkit/__init__.py +1 -1
  2. intentkit/abstracts/agent.py +4 -5
  3. intentkit/abstracts/engine.py +5 -5
  4. intentkit/abstracts/graph.py +14 -7
  5. intentkit/abstracts/skill.py +6 -144
  6. intentkit/abstracts/twitter.py +4 -5
  7. intentkit/clients/__init__.py +5 -2
  8. intentkit/clients/cdp.py +101 -141
  9. intentkit/clients/twitter.py +83 -62
  10. intentkit/clients/web3.py +29 -0
  11. intentkit/config/config.py +8 -5
  12. intentkit/core/agent.py +472 -195
  13. intentkit/core/asset.py +253 -0
  14. intentkit/core/chat.py +51 -0
  15. intentkit/core/client.py +1 -1
  16. intentkit/core/credit.py +460 -130
  17. intentkit/core/engine.py +262 -233
  18. intentkit/core/node.py +15 -16
  19. intentkit/core/prompt.py +62 -28
  20. intentkit/core/scheduler.py +92 -0
  21. intentkit/core/statistics.py +168 -0
  22. intentkit/models/agent.py +1096 -949
  23. intentkit/models/agent_data.py +68 -38
  24. intentkit/models/agent_public.json +98 -0
  25. intentkit/models/agent_schema.json +54 -439
  26. intentkit/models/app_setting.py +96 -33
  27. intentkit/models/chat.py +74 -27
  28. intentkit/models/conversation.py +8 -8
  29. intentkit/models/credit.py +362 -74
  30. intentkit/models/db.py +26 -8
  31. intentkit/models/db_mig.py +2 -2
  32. intentkit/models/llm.csv +28 -0
  33. intentkit/models/llm.py +185 -350
  34. intentkit/models/redis.py +6 -4
  35. intentkit/models/skill.py +186 -72
  36. intentkit/models/skills.csv +174 -0
  37. intentkit/models/user.py +82 -24
  38. intentkit/skills/acolyt/__init__.py +2 -9
  39. intentkit/skills/acolyt/ask.py +3 -4
  40. intentkit/skills/acolyt/base.py +4 -9
  41. intentkit/skills/acolyt/schema.json +4 -3
  42. intentkit/skills/aixbt/__init__.py +2 -13
  43. intentkit/skills/aixbt/base.py +1 -7
  44. intentkit/skills/aixbt/projects.py +14 -15
  45. intentkit/skills/aixbt/schema.json +4 -4
  46. intentkit/skills/allora/__init__.py +2 -9
  47. intentkit/skills/allora/base.py +4 -9
  48. intentkit/skills/allora/price.py +3 -4
  49. intentkit/skills/allora/schema.json +3 -2
  50. intentkit/skills/base.py +248 -85
  51. intentkit/skills/basename/__init__.py +51 -0
  52. intentkit/skills/basename/base.py +11 -0
  53. intentkit/skills/basename/basename.svg +11 -0
  54. intentkit/skills/basename/schema.json +58 -0
  55. intentkit/skills/carv/__init__.py +115 -121
  56. intentkit/skills/carv/base.py +184 -185
  57. intentkit/skills/carv/fetch_news.py +3 -3
  58. intentkit/skills/carv/onchain_query.py +4 -4
  59. intentkit/skills/carv/schema.json +134 -137
  60. intentkit/skills/carv/token_info_and_price.py +5 -5
  61. intentkit/skills/casino/README.md +254 -0
  62. intentkit/skills/casino/__init__.py +86 -0
  63. intentkit/skills/casino/base.py +17 -0
  64. intentkit/skills/casino/casino.png +0 -0
  65. intentkit/skills/casino/deck_draw.py +127 -0
  66. intentkit/skills/casino/deck_shuffle.py +118 -0
  67. intentkit/skills/casino/dice_roll.py +100 -0
  68. intentkit/skills/casino/schema.json +77 -0
  69. intentkit/skills/casino/utils.py +107 -0
  70. intentkit/skills/cdp/__init__.py +22 -84
  71. intentkit/skills/cdp/base.py +1 -7
  72. intentkit/skills/cdp/schema.json +11 -314
  73. intentkit/skills/chainlist/__init__.py +2 -7
  74. intentkit/skills/chainlist/base.py +1 -7
  75. intentkit/skills/chainlist/chain_lookup.py +18 -18
  76. intentkit/skills/chainlist/schema.json +3 -5
  77. intentkit/skills/common/__init__.py +2 -9
  78. intentkit/skills/common/base.py +1 -7
  79. intentkit/skills/common/current_time.py +1 -2
  80. intentkit/skills/common/schema.json +2 -2
  81. intentkit/skills/cookiefun/__init__.py +6 -9
  82. intentkit/skills/cookiefun/base.py +2 -7
  83. intentkit/skills/cookiefun/get_account_details.py +7 -7
  84. intentkit/skills/cookiefun/get_account_feed.py +19 -19
  85. intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
  86. intentkit/skills/cookiefun/get_sectors.py +3 -3
  87. intentkit/skills/cookiefun/schema.json +1 -3
  88. intentkit/skills/cookiefun/search_accounts.py +9 -9
  89. intentkit/skills/cryptocompare/__init__.py +7 -24
  90. intentkit/skills/cryptocompare/api.py +2 -3
  91. intentkit/skills/cryptocompare/base.py +11 -25
  92. intentkit/skills/cryptocompare/fetch_news.py +4 -5
  93. intentkit/skills/cryptocompare/fetch_price.py +6 -7
  94. intentkit/skills/cryptocompare/fetch_top_exchanges.py +4 -5
  95. intentkit/skills/cryptocompare/fetch_top_market_cap.py +4 -5
  96. intentkit/skills/cryptocompare/fetch_top_volume.py +4 -5
  97. intentkit/skills/cryptocompare/fetch_trading_signals.py +5 -6
  98. intentkit/skills/cryptocompare/schema.json +3 -3
  99. intentkit/skills/cryptopanic/__init__.py +7 -10
  100. intentkit/skills/cryptopanic/base.py +51 -55
  101. intentkit/skills/cryptopanic/fetch_crypto_news.py +4 -8
  102. intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +5 -7
  103. intentkit/skills/cryptopanic/schema.json +105 -103
  104. intentkit/skills/dapplooker/__init__.py +2 -9
  105. intentkit/skills/dapplooker/base.py +4 -9
  106. intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
  107. intentkit/skills/dapplooker/schema.json +3 -5
  108. intentkit/skills/defillama/__init__.py +24 -74
  109. intentkit/skills/defillama/api.py +6 -9
  110. intentkit/skills/defillama/base.py +11 -21
  111. intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +8 -10
  112. intentkit/skills/defillama/coins/fetch_block.py +6 -8
  113. intentkit/skills/defillama/coins/fetch_current_prices.py +8 -10
  114. intentkit/skills/defillama/coins/fetch_first_price.py +7 -9
  115. intentkit/skills/defillama/coins/fetch_historical_prices.py +9 -11
  116. intentkit/skills/defillama/coins/fetch_price_chart.py +9 -11
  117. intentkit/skills/defillama/coins/fetch_price_percentage.py +7 -9
  118. intentkit/skills/defillama/config/chains.py +1 -3
  119. intentkit/skills/defillama/fees/fetch_fees_overview.py +24 -26
  120. intentkit/skills/defillama/schema.json +5 -1
  121. intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +16 -18
  122. intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +8 -10
  123. intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +5 -7
  124. intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +7 -9
  125. intentkit/skills/defillama/tests/api_integration.test.py +1 -1
  126. intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +4 -6
  127. intentkit/skills/defillama/tvl/fetch_chains.py +9 -11
  128. intentkit/skills/defillama/tvl/fetch_historical_tvl.py +4 -6
  129. intentkit/skills/defillama/tvl/fetch_protocol.py +32 -38
  130. intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +3 -5
  131. intentkit/skills/defillama/tvl/fetch_protocols.py +37 -45
  132. intentkit/skills/defillama/volumes/fetch_dex_overview.py +42 -48
  133. intentkit/skills/defillama/volumes/fetch_dex_summary.py +35 -37
  134. intentkit/skills/defillama/volumes/fetch_options_overview.py +24 -28
  135. intentkit/skills/defillama/yields/fetch_pool_chart.py +10 -12
  136. intentkit/skills/defillama/yields/fetch_pools.py +26 -30
  137. intentkit/skills/dexscreener/README.md +154 -0
  138. intentkit/skills/dexscreener/__init__.py +97 -93
  139. intentkit/skills/dexscreener/base.py +125 -133
  140. intentkit/skills/dexscreener/get_pair_info.py +158 -0
  141. intentkit/skills/dexscreener/get_token_pairs.py +165 -0
  142. intentkit/skills/dexscreener/get_tokens_info.py +212 -0
  143. intentkit/skills/dexscreener/model/search_token_response.py +80 -82
  144. intentkit/skills/dexscreener/schema.json +91 -48
  145. intentkit/skills/dexscreener/search_token.py +182 -321
  146. intentkit/skills/dexscreener/utils.py +420 -0
  147. intentkit/skills/dune_analytics/__init__.py +7 -9
  148. intentkit/skills/dune_analytics/base.py +48 -52
  149. intentkit/skills/dune_analytics/fetch_kol_buys.py +5 -7
  150. intentkit/skills/dune_analytics/fetch_nation_metrics.py +6 -8
  151. intentkit/skills/dune_analytics/schema.json +104 -99
  152. intentkit/skills/elfa/__init__.py +5 -18
  153. intentkit/skills/elfa/base.py +10 -14
  154. intentkit/skills/elfa/mention.py +19 -21
  155. intentkit/skills/elfa/schema.json +3 -2
  156. intentkit/skills/elfa/stats.py +4 -4
  157. intentkit/skills/elfa/tokens.py +12 -12
  158. intentkit/skills/elfa/utils.py +26 -28
  159. intentkit/skills/enso/__init__.py +11 -31
  160. intentkit/skills/enso/base.py +50 -35
  161. intentkit/skills/enso/best_yield.py +16 -24
  162. intentkit/skills/enso/networks.py +6 -11
  163. intentkit/skills/enso/prices.py +11 -13
  164. intentkit/skills/enso/route.py +34 -38
  165. intentkit/skills/enso/schema.json +3 -2
  166. intentkit/skills/enso/tokens.py +29 -38
  167. intentkit/skills/enso/wallet.py +76 -191
  168. intentkit/skills/erc20/__init__.py +50 -0
  169. intentkit/skills/erc20/base.py +11 -0
  170. intentkit/skills/erc20/erc20.svg +5 -0
  171. intentkit/skills/erc20/schema.json +74 -0
  172. intentkit/skills/erc721/__init__.py +53 -0
  173. intentkit/skills/erc721/base.py +11 -0
  174. intentkit/skills/erc721/erc721.svg +5 -0
  175. intentkit/skills/erc721/schema.json +90 -0
  176. intentkit/skills/firecrawl/README.md +11 -5
  177. intentkit/skills/firecrawl/__init__.py +5 -18
  178. intentkit/skills/firecrawl/base.py +4 -11
  179. intentkit/skills/firecrawl/clear.py +4 -8
  180. intentkit/skills/firecrawl/crawl.py +19 -19
  181. intentkit/skills/firecrawl/query.py +4 -3
  182. intentkit/skills/firecrawl/schema.json +6 -8
  183. intentkit/skills/firecrawl/scrape.py +150 -40
  184. intentkit/skills/firecrawl/utils.py +50 -42
  185. intentkit/skills/github/__init__.py +2 -7
  186. intentkit/skills/github/base.py +1 -7
  187. intentkit/skills/github/github_search.py +1 -2
  188. intentkit/skills/github/schema.json +3 -4
  189. intentkit/skills/heurist/__init__.py +8 -27
  190. intentkit/skills/heurist/base.py +4 -9
  191. intentkit/skills/heurist/image_generation_animagine_xl.py +12 -13
  192. intentkit/skills/heurist/image_generation_arthemy_comics.py +12 -13
  193. intentkit/skills/heurist/image_generation_arthemy_real.py +12 -13
  194. intentkit/skills/heurist/image_generation_braindance.py +12 -13
  195. intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +12 -13
  196. intentkit/skills/heurist/image_generation_flux_1_dev.py +12 -13
  197. intentkit/skills/heurist/image_generation_sdxl.py +12 -13
  198. intentkit/skills/heurist/schema.json +2 -2
  199. intentkit/skills/http/__init__.py +4 -15
  200. intentkit/skills/http/base.py +1 -7
  201. intentkit/skills/http/get.py +21 -16
  202. intentkit/skills/http/post.py +23 -18
  203. intentkit/skills/http/put.py +23 -18
  204. intentkit/skills/http/schema.json +4 -5
  205. intentkit/skills/lifi/__init__.py +8 -13
  206. intentkit/skills/lifi/base.py +1 -7
  207. intentkit/skills/lifi/schema.json +17 -8
  208. intentkit/skills/lifi/token_execute.py +36 -30
  209. intentkit/skills/lifi/token_quote.py +8 -10
  210. intentkit/skills/lifi/utils.py +104 -51
  211. intentkit/skills/moralis/__init__.py +6 -10
  212. intentkit/skills/moralis/api.py +6 -7
  213. intentkit/skills/moralis/base.py +5 -10
  214. intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
  215. intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
  216. intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
  217. intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
  218. intentkit/skills/moralis/schema.json +7 -2
  219. intentkit/skills/morpho/__init__.py +52 -0
  220. intentkit/skills/morpho/base.py +11 -0
  221. intentkit/skills/morpho/morpho.svg +12 -0
  222. intentkit/skills/morpho/schema.json +73 -0
  223. intentkit/skills/nation/__init__.py +4 -9
  224. intentkit/skills/nation/base.py +5 -10
  225. intentkit/skills/nation/nft_check.py +3 -4
  226. intentkit/skills/nation/schema.json +4 -3
  227. intentkit/skills/onchain.py +23 -0
  228. intentkit/skills/openai/__init__.py +17 -18
  229. intentkit/skills/openai/base.py +10 -14
  230. intentkit/skills/openai/dalle_image_generation.py +3 -8
  231. intentkit/skills/openai/gpt_avatar_generator.py +102 -0
  232. intentkit/skills/openai/gpt_image_generation.py +4 -8
  233. intentkit/skills/openai/gpt_image_mini_generator.py +91 -0
  234. intentkit/skills/openai/gpt_image_to_image.py +4 -8
  235. intentkit/skills/openai/image_to_text.py +3 -7
  236. intentkit/skills/openai/schema.json +34 -3
  237. intentkit/skills/portfolio/__init__.py +11 -35
  238. intentkit/skills/portfolio/base.py +33 -19
  239. intentkit/skills/portfolio/schema.json +3 -5
  240. intentkit/skills/portfolio/token_balances.py +21 -21
  241. intentkit/skills/portfolio/wallet_approvals.py +17 -18
  242. intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
  243. intentkit/skills/portfolio/wallet_history.py +31 -31
  244. intentkit/skills/portfolio/wallet_net_worth.py +13 -13
  245. intentkit/skills/portfolio/wallet_nfts.py +19 -19
  246. intentkit/skills/portfolio/wallet_profitability.py +18 -18
  247. intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
  248. intentkit/skills/portfolio/wallet_stats.py +3 -3
  249. intentkit/skills/portfolio/wallet_swaps.py +19 -19
  250. intentkit/skills/pyth/__init__.py +50 -0
  251. intentkit/skills/pyth/base.py +11 -0
  252. intentkit/skills/pyth/pyth.svg +6 -0
  253. intentkit/skills/pyth/schema.json +75 -0
  254. intentkit/skills/skills.toml +40 -0
  255. intentkit/skills/slack/__init__.py +5 -17
  256. intentkit/skills/slack/base.py +3 -9
  257. intentkit/skills/slack/get_channel.py +8 -8
  258. intentkit/skills/slack/get_message.py +9 -9
  259. intentkit/skills/slack/schedule_message.py +5 -5
  260. intentkit/skills/slack/schema.json +2 -2
  261. intentkit/skills/slack/send_message.py +3 -5
  262. intentkit/skills/supabase/__init__.py +7 -23
  263. intentkit/skills/supabase/base.py +9 -13
  264. intentkit/skills/supabase/delete_data.py +5 -6
  265. intentkit/skills/supabase/fetch_data.py +13 -14
  266. intentkit/skills/supabase/insert_data.py +5 -6
  267. intentkit/skills/supabase/invoke_function.py +7 -8
  268. intentkit/skills/supabase/schema.json +2 -3
  269. intentkit/skills/supabase/update_data.py +7 -8
  270. intentkit/skills/supabase/upsert_data.py +5 -6
  271. intentkit/skills/superfluid/__init__.py +53 -0
  272. intentkit/skills/superfluid/base.py +11 -0
  273. intentkit/skills/superfluid/schema.json +89 -0
  274. intentkit/skills/superfluid/superfluid.svg +6 -0
  275. intentkit/skills/system/__init__.py +7 -24
  276. intentkit/skills/system/add_autonomous_task.py +10 -12
  277. intentkit/skills/system/delete_autonomous_task.py +2 -2
  278. intentkit/skills/system/edit_autonomous_task.py +14 -18
  279. intentkit/skills/system/list_autonomous_tasks.py +3 -5
  280. intentkit/skills/system/read_agent_api_key.py +6 -4
  281. intentkit/skills/system/regenerate_agent_api_key.py +6 -4
  282. intentkit/skills/system/schema.json +6 -8
  283. intentkit/skills/tavily/__init__.py +3 -12
  284. intentkit/skills/tavily/base.py +4 -9
  285. intentkit/skills/tavily/schema.json +3 -5
  286. intentkit/skills/tavily/tavily_extract.py +2 -4
  287. intentkit/skills/tavily/tavily_search.py +4 -6
  288. intentkit/skills/token/__init__.py +5 -10
  289. intentkit/skills/token/base.py +7 -11
  290. intentkit/skills/token/erc20_transfers.py +19 -19
  291. intentkit/skills/token/schema.json +3 -6
  292. intentkit/skills/token/token_analytics.py +3 -3
  293. intentkit/skills/token/token_price.py +13 -13
  294. intentkit/skills/token/token_search.py +9 -9
  295. intentkit/skills/twitter/__init__.py +11 -35
  296. intentkit/skills/twitter/base.py +23 -35
  297. intentkit/skills/twitter/follow_user.py +3 -7
  298. intentkit/skills/twitter/get_mentions.py +6 -13
  299. intentkit/skills/twitter/get_timeline.py +5 -13
  300. intentkit/skills/twitter/get_user_by_username.py +3 -7
  301. intentkit/skills/twitter/get_user_tweets.py +6 -14
  302. intentkit/skills/twitter/like_tweet.py +3 -7
  303. intentkit/skills/twitter/post_tweet.py +23 -12
  304. intentkit/skills/twitter/reply_tweet.py +21 -12
  305. intentkit/skills/twitter/retweet.py +3 -7
  306. intentkit/skills/twitter/schema.json +1 -0
  307. intentkit/skills/twitter/search_tweets.py +5 -13
  308. intentkit/skills/unrealspeech/__init__.py +2 -7
  309. intentkit/skills/unrealspeech/base.py +2 -8
  310. intentkit/skills/unrealspeech/schema.json +2 -5
  311. intentkit/skills/unrealspeech/text_to_speech.py +8 -8
  312. intentkit/skills/venice_audio/__init__.py +98 -106
  313. intentkit/skills/venice_audio/base.py +117 -121
  314. intentkit/skills/venice_audio/input.py +41 -41
  315. intentkit/skills/venice_audio/schema.json +151 -152
  316. intentkit/skills/venice_audio/venice_audio.py +38 -21
  317. intentkit/skills/venice_image/__init__.py +147 -154
  318. intentkit/skills/venice_image/api.py +138 -138
  319. intentkit/skills/venice_image/base.py +185 -192
  320. intentkit/skills/venice_image/config.py +33 -35
  321. intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
  322. intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
  323. intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
  324. intentkit/skills/venice_image/image_generation/image_generation_base.py +9 -9
  325. intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
  326. intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
  327. intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
  328. intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
  329. intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
  330. intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
  331. intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
  332. intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
  333. intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
  334. intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
  335. intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
  336. intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
  337. intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
  338. intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
  339. intentkit/skills/venice_image/schema.json +267 -267
  340. intentkit/skills/venice_image/utils.py +77 -78
  341. intentkit/skills/web_scraper/__init__.py +5 -18
  342. intentkit/skills/web_scraper/base.py +21 -7
  343. intentkit/skills/web_scraper/document_indexer.py +7 -6
  344. intentkit/skills/web_scraper/schema.json +2 -6
  345. intentkit/skills/web_scraper/scrape_and_index.py +15 -15
  346. intentkit/skills/web_scraper/utils.py +62 -63
  347. intentkit/skills/web_scraper/website_indexer.py +17 -19
  348. intentkit/skills/weth/__init__.py +49 -0
  349. intentkit/skills/weth/base.py +11 -0
  350. intentkit/skills/weth/schema.json +58 -0
  351. intentkit/skills/weth/weth.svg +6 -0
  352. intentkit/skills/wow/__init__.py +51 -0
  353. intentkit/skills/wow/base.py +11 -0
  354. intentkit/skills/wow/schema.json +89 -0
  355. intentkit/skills/wow/wow.svg +7 -0
  356. intentkit/skills/x402/__init__.py +61 -0
  357. intentkit/skills/x402/ask_agent.py +98 -0
  358. intentkit/skills/x402/base.py +99 -0
  359. intentkit/skills/x402/http_request.py +117 -0
  360. intentkit/skills/x402/schema.json +45 -0
  361. intentkit/skills/x402/x402.webp +0 -0
  362. intentkit/skills/xmtp/__init__.py +4 -15
  363. intentkit/skills/xmtp/base.py +61 -2
  364. intentkit/skills/xmtp/price.py +18 -13
  365. intentkit/skills/xmtp/schema.json +69 -71
  366. intentkit/skills/xmtp/swap.py +22 -25
  367. intentkit/skills/xmtp/transfer.py +71 -32
  368. intentkit/utils/chain.py +3 -3
  369. intentkit/utils/error.py +14 -1
  370. intentkit/utils/logging.py +2 -4
  371. intentkit/utils/s3.py +59 -7
  372. intentkit/utils/schema.py +100 -0
  373. intentkit/utils/slack_alert.py +7 -8
  374. {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/METADATA +14 -16
  375. intentkit-0.8.17.dist-info/RECORD +466 -0
  376. intentkit/abstracts/exception.py +0 -9
  377. intentkit/core/skill.py +0 -200
  378. intentkit/models/generator.py +0 -347
  379. intentkit/skills/cdp/get_balance.py +0 -110
  380. intentkit/skills/cdp/swap.py +0 -121
  381. intentkit/skills/moralis/tests/__init__.py +0 -0
  382. intentkit/skills/moralis/tests/test_wallet.py +0 -511
  383. intentkit-0.6.13.dev2.dist-info/RECORD +0 -409
  384. {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/WHEEL +0 -0
  385. {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/licenses/LICENSE +0 -0
@@ -1,11 +1,13 @@
1
+ from __future__ import annotations
2
+
1
3
  import logging
2
- from datetime import datetime, timezone
4
+ from datetime import UTC, datetime
3
5
  from decimal import Decimal
4
- from typing import Annotated, Any, Dict, Optional
6
+ from typing import Annotated, Any
5
7
 
6
- from fastapi import HTTPException
7
8
  from intentkit.models.base import Base
8
9
  from intentkit.models.db import get_session
10
+ from intentkit.utils.error import IntentKitAPIError
9
11
  from pydantic import BaseModel, ConfigDict
10
12
  from pydantic import Field as PydanticField
11
13
  from sqlalchemy import (
@@ -60,6 +62,9 @@ class AgentDataTable(Base):
60
62
  telegram_id = Column(String, nullable=True, comment="Telegram user ID")
61
63
  telegram_username = Column(String, nullable=True, comment="Telegram username")
62
64
  telegram_name = Column(String, nullable=True, comment="Telegram display name")
65
+ discord_id = Column(String, nullable=True, comment="Discord user ID")
66
+ discord_username = Column(String, nullable=True, comment="Discord username")
67
+ discord_name = Column(String, nullable=True, comment="Discord display name")
63
68
  error_message = Column(String, nullable=True, comment="Last error message")
64
69
  api_key = Column(
65
70
  String, nullable=True, unique=True, comment="API key for the agent"
@@ -77,7 +82,7 @@ class AgentDataTable(Base):
77
82
  DateTime(timezone=True),
78
83
  nullable=False,
79
84
  server_default=func.now(),
80
- onupdate=lambda: datetime.now(timezone.utc),
85
+ onupdate=lambda: datetime.now(UTC),
81
86
  comment="Timestamp when the agent data was last updated",
82
87
  )
83
88
 
@@ -94,70 +99,70 @@ class AgentData(BaseModel):
94
99
  ),
95
100
  ]
96
101
  evm_wallet_address: Annotated[
97
- Optional[str],
102
+ str | None,
98
103
  PydanticField(
99
104
  default=None,
100
105
  description="EVM wallet address",
101
106
  ),
102
107
  ] = None
103
108
  solana_wallet_address: Annotated[
104
- Optional[str],
109
+ str | None,
105
110
  PydanticField(
106
111
  default=None,
107
112
  description="Solana wallet address",
108
113
  ),
109
114
  ] = None
110
115
  cdp_wallet_data: Annotated[
111
- Optional[str],
116
+ str | None,
112
117
  PydanticField(
113
118
  default=None,
114
119
  description="CDP wallet data",
115
120
  ),
116
121
  ] = None
117
122
  twitter_id: Annotated[
118
- Optional[str],
123
+ str | None,
119
124
  PydanticField(
120
125
  default=None,
121
126
  description="Twitter user ID",
122
127
  ),
123
128
  ] = None
124
129
  twitter_username: Annotated[
125
- Optional[str],
130
+ str | None,
126
131
  PydanticField(
127
132
  default=None,
128
133
  description="Twitter username",
129
134
  ),
130
135
  ] = None
131
136
  twitter_name: Annotated[
132
- Optional[str],
137
+ str | None,
133
138
  PydanticField(
134
139
  default=None,
135
140
  description="Twitter display name",
136
141
  ),
137
142
  ] = None
138
143
  twitter_access_token: Annotated[
139
- Optional[str],
144
+ str | None,
140
145
  PydanticField(
141
146
  default=None,
142
147
  description="Twitter access token",
143
148
  ),
144
149
  ] = None
145
150
  twitter_access_token_expires_at: Annotated[
146
- Optional[datetime],
151
+ datetime | None,
147
152
  PydanticField(
148
153
  default=None,
149
154
  description="Twitter access token expiration time",
150
155
  ),
151
156
  ] = None
152
157
  twitter_refresh_token: Annotated[
153
- Optional[str],
158
+ str | None,
154
159
  PydanticField(
155
160
  default=None,
156
161
  description="Twitter refresh token",
157
162
  ),
158
163
  ] = None
159
164
  twitter_self_key_refreshed_at: Annotated[
160
- Optional[datetime],
165
+ datetime | None,
161
166
  PydanticField(
162
167
  default=None,
163
168
  description="Twitter self-key userinfo last refresh time",
@@ -171,42 +176,63 @@ class AgentData(BaseModel):
171
176
  ),
172
177
  ] = None
173
178
  telegram_id: Annotated[
174
- Optional[str],
179
+ str | None,
175
180
  PydanticField(
176
181
  default=None,
177
182
  description="Telegram user ID",
178
183
  ),
179
184
  ] = None
180
185
  telegram_username: Annotated[
181
- Optional[str],
186
+ str | None,
182
187
  PydanticField(
183
188
  default=None,
184
189
  description="Telegram username",
185
190
  ),
186
191
  ] = None
187
192
  telegram_name: Annotated[
188
- Optional[str],
193
+ str | None,
189
194
  PydanticField(
190
195
  default=None,
191
196
  description="Telegram display name",
192
197
  ),
193
198
  ] = None
199
+ discord_id: Annotated[
200
+ str | None,
201
+ PydanticField(
202
+ default=None,
203
+ description="Discord user ID",
204
+ ),
205
+ ] = None
206
+ discord_username: Annotated[
207
+ str | None,
208
+ PydanticField(
209
+ default=None,
210
+ description="Discord username",
211
+ ),
212
+ ] = None
213
+ discord_name: Annotated[
214
+ str | None,
215
+ PydanticField(
216
+ default=None,
217
+ description="Discord display name",
218
+ ),
219
+ ] = None
194
220
  error_message: Annotated[
195
- Optional[str],
221
+ str | None,
196
222
  PydanticField(
197
223
  default=None,
198
224
  description="Last error message",
199
225
  ),
200
226
  ] = None
201
227
  api_key: Annotated[
202
- Optional[str],
228
+ str | None,
203
229
  PydanticField(
204
230
  default=None,
205
231
  description="API key for the agent",
206
232
  ),
207
233
  ] = None
208
234
  api_key_public: Annotated[
209
- Optional[str],
235
+ str | None,
210
236
  PydanticField(
211
237
  default=None,
212
238
  description="Public API key for the agent",
@@ -215,14 +241,14 @@ class AgentData(BaseModel):
215
241
  created_at: Annotated[
216
242
  datetime,
217
243
  PydanticField(
218
- default_factory=lambda: datetime.now(timezone.utc),
244
+ default_factory=lambda: datetime.now(UTC),
219
245
  description="Timestamp when the agent data was created",
220
246
  ),
221
247
  ]
222
248
  updated_at: Annotated[
223
249
  datetime,
224
250
  PydanticField(
225
- default_factory=lambda: datetime.now(timezone.utc),
251
+ default_factory=lambda: datetime.now(UTC),
226
252
  description="Timestamp when the agent data was last updated",
227
253
  ),
228
254
  ]
@@ -247,7 +273,7 @@ class AgentData(BaseModel):
247
273
  return cls.model_construct(id=agent_id)
248
274
 
249
275
  @classmethod
250
- async def get_by_api_key(cls, api_key: str) -> Optional["AgentData"]:
276
+ async def get_by_api_key(cls, api_key: str) -> AgentData | None:
251
277
  """Get agent data by API key.
252
278
 
253
279
  Args:
@@ -356,7 +382,7 @@ class AgentPluginDataTable(Base):
356
382
  DateTime(timezone=True),
357
383
  nullable=False,
358
384
  server_default=func.now(),
359
- onupdate=lambda: datetime.now(timezone.utc),
385
+ onupdate=lambda: datetime.now(UTC),
360
386
  )
361
387
 
362
388
 
@@ -388,28 +414,28 @@ class AgentPluginData(BaseModel):
388
414
  PydanticField(description="Key for this specific piece of data"),
389
415
  ]
390
416
  data: Annotated[
391
- Dict[str, Any],
417
+ dict[str, Any],
392
418
  PydanticField(default=None, description="JSON data stored for this key"),
393
419
  ]
394
420
  created_at: Annotated[
395
421
  datetime,
396
422
  PydanticField(
397
423
  description="Timestamp when this data was created",
398
- default_factory=lambda: datetime.now(timezone.utc),
424
+ default_factory=lambda: datetime.now(UTC),
399
425
  ),
400
426
  ]
401
427
  updated_at: Annotated[
402
428
  datetime,
403
429
  PydanticField(
404
430
  description="Timestamp when this data was last updated",
405
- default_factory=lambda: datetime.now(timezone.utc),
431
+ default_factory=lambda: datetime.now(UTC),
406
432
  ),
407
433
  ]
408
434
 
409
435
  @classmethod
410
436
  async def get(
411
437
  cls, agent_id: str, plugin: str, key: str
412
- ) -> Optional["AgentPluginData"]:
438
+ ) -> "AgentPluginData" | None:
413
439
  """Get plugin data for an agent.
414
440
 
415
441
  Args:
@@ -513,7 +539,7 @@ class AgentQuotaTable(Base):
513
539
  DateTime(timezone=True),
514
540
  nullable=False,
515
541
  server_default=func.now(),
516
- onupdate=lambda: datetime.now(timezone.utc),
542
+ onupdate=lambda: datetime.now(UTC),
517
543
  )
518
544
 
519
545
 
@@ -547,7 +573,7 @@ class AgentQuota(BaseModel):
547
573
  int, PydanticField(default=99999999, description="Daily message limit")
548
574
  ]
549
575
  last_message_time: Annotated[
550
- Optional[datetime],
576
+ datetime | None,
551
577
  PydanticField(default=None, description="Last message timestamp"),
552
578
  ]
553
579
  autonomous_count_total: Annotated[
@@ -578,7 +604,7 @@ class AgentQuota(BaseModel):
578
604
  ),
579
605
  ]
580
606
  last_autonomous_time: Annotated[
581
- Optional[datetime],
607
+ datetime | None,
582
608
  PydanticField(default=None, description="Last autonomous operation timestamp"),
583
609
  ]
584
610
  twitter_count_total: Annotated[
@@ -603,7 +629,7 @@ class AgentQuota(BaseModel):
603
629
  PydanticField(default=99999999, description="Daily Twitter operations limit"),
604
630
  ]
605
631
  last_twitter_time: Annotated[
606
- Optional[datetime],
632
+ datetime | None,
607
633
  PydanticField(default=None, description="Last Twitter operation timestamp"),
608
634
  ]
609
635
  free_income_daily: Annotated[
@@ -638,14 +664,14 @@ class AgentQuota(BaseModel):
638
664
  datetime,
639
665
  PydanticField(
640
666
  description="Timestamp when this quota was created",
641
- default_factory=lambda: datetime.now(timezone.utc),
667
+ default_factory=lambda: datetime.now(UTC),
642
668
  ),
643
669
  ]
644
670
  updated_at: Annotated[
645
671
  datetime,
646
672
  PydanticField(
647
673
  description="Timestamp when this quota was last updated",
648
- default_factory=lambda: datetime.now(timezone.utc),
674
+ default_factory=lambda: datetime.now(UTC),
649
675
  ),
650
676
  ]
651
677
 
@@ -754,7 +780,11 @@ class AgentQuota(BaseModel):
754
780
  await session.execute(stmt)
755
781
  except Exception as e:
756
782
  logger.error(f"Error adding free income: {str(e)}")
757
- raise HTTPException(status_code=500, detail=f"Database error: {str(e)}")
783
+ raise IntentKitAPIError(
784
+ status_code=500,
785
+ key="DatabaseError",
786
+ message=f"Database error: {str(e)}",
787
+ )
758
788
 
759
789
  async def add_message(self) -> None:
760
790
  """Add a message to the agent's message count."""
@@ -766,7 +796,7 @@ class AgentQuota(BaseModel):
766
796
  quota_record.message_count_total += 1
767
797
  quota_record.message_count_monthly += 1
768
798
  quota_record.message_count_daily += 1
769
- quota_record.last_message_time = datetime.now(timezone.utc)
799
+ quota_record.last_message_time = datetime.now(UTC)
770
800
  db.add(quota_record)
771
801
  await db.commit()
772
802
 
@@ -786,7 +816,7 @@ class AgentQuota(BaseModel):
786
816
  # Update record
787
817
  quota_record.autonomous_count_total += 1
788
818
  quota_record.autonomous_count_monthly += 1
789
- quota_record.last_autonomous_time = datetime.now(timezone.utc)
819
+ quota_record.last_autonomous_time = datetime.now(UTC)
790
820
  db.add(quota_record)
791
821
  await db.commit()
792
822
 
@@ -807,7 +837,7 @@ class AgentQuota(BaseModel):
807
837
  # Update record
808
838
  quota_record.twitter_count_total += 1
809
839
  quota_record.twitter_count_daily += 1
810
- quota_record.last_twitter_time = datetime.now(timezone.utc)
840
+ quota_record.last_twitter_time = datetime.now(UTC)
811
841
  db.add(quota_record)
812
842
  await db.commit()
813
843
 
@@ -0,0 +1,98 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "title": "AgentPublicInfo",
5
+ "description": "Public information of the agent",
6
+ "properties": {
7
+ "description": {
8
+ "title": "Description",
9
+ "type": "string",
10
+ "description": "Description of the agent, for public view, not contained in prompt",
11
+ "x-group": "basic",
12
+ "x-placeholder": "Introduce your agent"
13
+ },
14
+ "external_website": {
15
+ "title": "External Website",
16
+ "type": "string",
17
+ "description": "Link of external website of the agent, if you have one",
18
+ "format": "uri",
19
+ "x-group": "basic",
20
+ "x-placeholder": "Enter agent external website url"
21
+ },
22
+ "ticker": {
23
+ "title": "Ticker",
24
+ "type": "string",
25
+ "description": "Ticker symbol of the agent",
26
+ "maxLength": 10,
27
+ "minLength": 1,
28
+ "x-group": "basic",
29
+ "x-placeholder": "If one day, your agent has it's own token, what will it be?"
30
+ },
31
+ "token_address": {
32
+ "title": "Token Address",
33
+ "type": "string",
34
+ "description": "Token address of the agent",
35
+ "maxLength": 42,
36
+ "x-group": "internal",
37
+ "readOnly": true
38
+ },
39
+ "token_pool": {
40
+ "title": "Token Pool",
41
+ "type": "string",
42
+ "description": "Pool of the agent token",
43
+ "maxLength": 42,
44
+ "x-group": "internal",
45
+ "readOnly": true
46
+ },
47
+ "fee_percentage": {
48
+ "title": "Fee Percentage",
49
+ "type": "number",
50
+ "description": "Fee percentage of the agent",
51
+ "minimum": 0,
52
+ "x-group": "basic"
53
+ },
54
+ "example_intro": {
55
+ "title": "Example Introduction",
56
+ "type": "string",
57
+ "description": "Introduction of the example",
58
+ "maxLength": 2000,
59
+ "x-group": "examples"
60
+ },
61
+ "examples": {
62
+ "title": "Examples",
63
+ "type": "array",
64
+ "description": "List of example prompts for the agent",
65
+ "maxItems": 6,
66
+ "items": {
67
+ "type": "object",
68
+ "properties": {
69
+ "name": {
70
+ "title": "Name",
71
+ "type": "string",
72
+ "description": "Name of the example",
73
+ "maxLength": 50,
74
+ "x-group": "examples"
75
+ },
76
+ "description": {
77
+ "title": "Description",
78
+ "type": "string",
79
+ "description": "Description of the example",
80
+ "maxLength": 200,
81
+ "x-group": "examples"
82
+ },
83
+ "prompt": {
84
+ "title": "Prompt",
85
+ "type": "string",
86
+ "description": "Example prompt",
87
+ "maxLength": 2000,
88
+ "x-group": "examples"
89
+ }
90
+ },
91
+ "required": ["name", "description", "prompt"]
92
+ },
93
+ "x-group": "examples",
94
+ "x-inline": true
95
+ }
96
+ },
97
+ "additionalProperties": true
98
+ }