intentkit 0.8.4.dev3__tar.gz → 0.8.17__tar.gz

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 (474) hide show
  1. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/PKG-INFO +3 -4
  2. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/__init__.py +1 -1
  3. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/abstracts/agent.py +4 -5
  4. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/abstracts/engine.py +5 -5
  5. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/abstracts/graph.py +10 -5
  6. intentkit-0.8.17/abstracts/skill.py +60 -0
  7. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/abstracts/twitter.py +4 -5
  8. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/clients/__init__.py +3 -2
  9. intentkit-0.8.17/clients/cdp.py +128 -0
  10. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/clients/twitter.py +56 -57
  11. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/clients/web3.py +1 -3
  12. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/config/config.py +5 -0
  13. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/agent.py +16 -388
  14. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/asset.py +64 -18
  15. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/client.py +1 -1
  16. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/credit.py +19 -20
  17. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/engine.py +26 -11
  18. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/node.py +2 -1
  19. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/prompt.py +53 -15
  20. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/scheduler.py +9 -9
  21. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/statistics.py +6 -7
  22. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/agent.py +256 -176
  23. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/agent_data.py +62 -36
  24. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/agent_schema.json +6 -9
  25. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/app_setting.py +6 -6
  26. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/chat.py +28 -24
  27. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/conversation.py +8 -8
  28. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/credit.py +62 -64
  29. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/db.py +8 -7
  30. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/db_mig.py +2 -2
  31. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/llm.csv +15 -12
  32. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/llm.py +18 -16
  33. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/redis.py +2 -3
  34. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/skill.py +62 -66
  35. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/skills.csv +30 -26
  36. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/user.py +64 -18
  37. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/pyproject.toml +3 -4
  38. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/acolyt/__init__.py +2 -9
  39. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/acolyt/ask.py +3 -4
  40. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/acolyt/base.py +4 -9
  41. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/aixbt/__init__.py +2 -13
  42. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/aixbt/base.py +1 -7
  43. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/aixbt/projects.py +14 -15
  44. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/allora/__init__.py +2 -9
  45. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/allora/base.py +4 -9
  46. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/allora/price.py +3 -4
  47. intentkit-0.8.17/skills/base.py +364 -0
  48. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/basename/__init__.py +4 -8
  49. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/carv/__init__.py +115 -121
  50. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/carv/base.py +184 -185
  51. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/carv/fetch_news.py +3 -3
  52. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/carv/onchain_query.py +4 -4
  53. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/carv/token_info_and_price.py +5 -5
  54. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/casino/__init__.py +4 -15
  55. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/casino/base.py +1 -7
  56. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/casino/deck_draw.py +5 -8
  57. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/casino/deck_shuffle.py +6 -6
  58. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/casino/dice_roll.py +2 -4
  59. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cdp/__init__.py +3 -10
  60. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cdp/base.py +1 -7
  61. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cdp/schema.json +1 -17
  62. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/chainlist/__init__.py +2 -7
  63. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/chainlist/base.py +1 -7
  64. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/chainlist/chain_lookup.py +18 -18
  65. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/common/__init__.py +2 -9
  66. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/common/base.py +1 -7
  67. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/common/current_time.py +1 -2
  68. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/__init__.py +6 -9
  69. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/base.py +2 -7
  70. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/get_account_details.py +7 -7
  71. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/get_account_feed.py +19 -19
  72. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/get_account_smart_followers.py +7 -7
  73. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/get_sectors.py +3 -3
  74. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/search_accounts.py +9 -9
  75. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/__init__.py +7 -24
  76. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/api.py +2 -3
  77. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/base.py +10 -24
  78. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/fetch_news.py +4 -5
  79. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/fetch_price.py +6 -7
  80. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/fetch_top_exchanges.py +4 -5
  81. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/fetch_top_market_cap.py +4 -5
  82. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/fetch_top_volume.py +4 -5
  83. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/fetch_trading_signals.py +5 -6
  84. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptopanic/__init__.py +7 -10
  85. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptopanic/base.py +51 -55
  86. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptopanic/fetch_crypto_news.py +4 -8
  87. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptopanic/fetch_crypto_sentiment.py +5 -7
  88. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dapplooker/__init__.py +2 -9
  89. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dapplooker/base.py +4 -9
  90. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dapplooker/dapplooker_token_data.py +7 -7
  91. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/__init__.py +24 -74
  92. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/api.py +6 -9
  93. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/base.py +8 -19
  94. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/coins/fetch_batch_historical_prices.py +8 -10
  95. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/coins/fetch_block.py +6 -8
  96. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/coins/fetch_current_prices.py +8 -10
  97. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/coins/fetch_first_price.py +7 -9
  98. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/coins/fetch_historical_prices.py +9 -11
  99. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/coins/fetch_price_chart.py +9 -11
  100. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/coins/fetch_price_percentage.py +7 -9
  101. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/config/chains.py +1 -3
  102. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/fees/fetch_fees_overview.py +24 -26
  103. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/stablecoins/fetch_stablecoin_chains.py +16 -18
  104. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/stablecoins/fetch_stablecoin_charts.py +8 -10
  105. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/stablecoins/fetch_stablecoin_prices.py +5 -7
  106. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/stablecoins/fetch_stablecoins.py +7 -9
  107. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tests/api_integration.test.py +1 -1
  108. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tvl/fetch_chain_historical_tvl.py +4 -6
  109. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tvl/fetch_chains.py +9 -11
  110. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tvl/fetch_historical_tvl.py +4 -6
  111. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tvl/fetch_protocol.py +32 -38
  112. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tvl/fetch_protocol_current_tvl.py +3 -5
  113. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tvl/fetch_protocols.py +37 -45
  114. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/volumes/fetch_dex_overview.py +42 -48
  115. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/volumes/fetch_dex_summary.py +35 -37
  116. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/volumes/fetch_options_overview.py +24 -28
  117. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/yields/fetch_pool_chart.py +10 -12
  118. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/yields/fetch_pools.py +26 -30
  119. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/__init__.py +97 -102
  120. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/base.py +125 -130
  121. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/get_pair_info.py +4 -5
  122. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/get_token_pairs.py +4 -5
  123. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/get_tokens_info.py +7 -8
  124. intentkit-0.8.17/skills/dexscreener/model/search_token_response.py +80 -0
  125. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/search_token.py +182 -184
  126. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/utils.py +15 -14
  127. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dune_analytics/__init__.py +7 -9
  128. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dune_analytics/base.py +48 -52
  129. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dune_analytics/fetch_kol_buys.py +5 -7
  130. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dune_analytics/fetch_nation_metrics.py +6 -8
  131. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/elfa/__init__.py +5 -18
  132. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/elfa/base.py +10 -14
  133. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/elfa/mention.py +19 -21
  134. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/elfa/stats.py +4 -4
  135. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/elfa/tokens.py +12 -12
  136. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/elfa/utils.py +26 -28
  137. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/__init__.py +11 -31
  138. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/base.py +9 -15
  139. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/best_yield.py +5 -7
  140. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/networks.py +3 -9
  141. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/prices.py +2 -4
  142. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/route.py +6 -12
  143. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/tokens.py +4 -16
  144. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/wallet.py +6 -6
  145. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/erc20/__init__.py +5 -11
  146. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/erc721/__init__.py +5 -9
  147. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/__init__.py +5 -18
  148. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/base.py +4 -9
  149. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/clear.py +4 -8
  150. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/crawl.py +19 -19
  151. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/query.py +4 -3
  152. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/scrape.py +17 -22
  153. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/utils.py +50 -42
  154. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/github/__init__.py +2 -7
  155. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/github/base.py +1 -7
  156. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/github/github_search.py +1 -2
  157. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/__init__.py +8 -27
  158. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/base.py +4 -9
  159. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/image_generation_animagine_xl.py +12 -13
  160. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/image_generation_arthemy_comics.py +12 -13
  161. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/image_generation_arthemy_real.py +12 -13
  162. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/image_generation_braindance.py +12 -13
  163. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/image_generation_cyber_realistic_xl.py +12 -13
  164. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/image_generation_flux_1_dev.py +12 -13
  165. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/image_generation_sdxl.py +12 -13
  166. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/http/__init__.py +4 -15
  167. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/http/base.py +1 -7
  168. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/http/get.py +21 -16
  169. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/http/post.py +23 -18
  170. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/http/put.py +23 -18
  171. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/lifi/__init__.py +5 -10
  172. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/lifi/base.py +1 -7
  173. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/lifi/token_execute.py +14 -17
  174. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/lifi/token_quote.py +7 -9
  175. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/lifi/utils.py +16 -16
  176. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/__init__.py +6 -10
  177. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/api.py +6 -7
  178. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/base.py +5 -10
  179. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/fetch_chain_portfolio.py +10 -11
  180. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/fetch_nft_portfolio.py +22 -22
  181. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/fetch_solana_portfolio.py +11 -12
  182. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/fetch_wallet_portfolio.py +8 -9
  183. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/morpho/__init__.py +5 -9
  184. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/nation/__init__.py +4 -9
  185. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/nation/base.py +5 -10
  186. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/nation/nft_check.py +3 -4
  187. intentkit-0.8.17/skills/onchain.py +23 -0
  188. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/openai/__init__.py +17 -18
  189. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/openai/base.py +10 -14
  190. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/openai/dalle_image_generation.py +3 -8
  191. intentkit-0.8.17/skills/openai/gpt_avatar_generator.py +102 -0
  192. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/openai/gpt_image_generation.py +4 -8
  193. intentkit-0.8.17/skills/openai/gpt_image_mini_generator.py +91 -0
  194. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/openai/gpt_image_to_image.py +4 -8
  195. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/openai/image_to_text.py +3 -7
  196. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/openai/schema.json +32 -0
  197. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/__init__.py +11 -35
  198. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/base.py +33 -19
  199. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/token_balances.py +21 -21
  200. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/wallet_approvals.py +17 -18
  201. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/wallet_defi_positions.py +3 -3
  202. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/wallet_history.py +31 -31
  203. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/wallet_net_worth.py +13 -13
  204. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/wallet_nfts.py +19 -19
  205. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/wallet_profitability.py +18 -18
  206. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/wallet_profitability_summary.py +5 -5
  207. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/wallet_stats.py +3 -3
  208. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/wallet_swaps.py +19 -19
  209. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/pyth/__init__.py +4 -10
  210. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/skills.toml +4 -0
  211. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/slack/__init__.py +5 -17
  212. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/slack/base.py +3 -9
  213. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/slack/get_channel.py +8 -8
  214. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/slack/get_message.py +9 -9
  215. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/slack/schedule_message.py +5 -5
  216. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/slack/send_message.py +3 -5
  217. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/__init__.py +7 -23
  218. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/base.py +1 -7
  219. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/delete_data.py +4 -4
  220. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/fetch_data.py +12 -12
  221. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/insert_data.py +4 -4
  222. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/invoke_function.py +6 -6
  223. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/update_data.py +6 -6
  224. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/upsert_data.py +4 -4
  225. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/superfluid/__init__.py +5 -9
  226. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/__init__.py +7 -24
  227. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/add_autonomous_task.py +10 -12
  228. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/delete_autonomous_task.py +2 -2
  229. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/edit_autonomous_task.py +14 -18
  230. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/list_autonomous_tasks.py +3 -5
  231. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/read_agent_api_key.py +6 -4
  232. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/regenerate_agent_api_key.py +6 -4
  233. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/tavily/__init__.py +3 -12
  234. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/tavily/base.py +4 -9
  235. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/tavily/tavily_extract.py +2 -4
  236. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/tavily/tavily_search.py +4 -6
  237. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/__init__.py +5 -10
  238. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/base.py +7 -11
  239. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/erc20_transfers.py +19 -19
  240. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/token_analytics.py +3 -3
  241. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/token_price.py +13 -13
  242. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/token_search.py +9 -9
  243. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/__init__.py +11 -35
  244. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/base.py +22 -34
  245. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/follow_user.py +2 -6
  246. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/get_mentions.py +5 -12
  247. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/get_timeline.py +4 -12
  248. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/get_user_by_username.py +2 -6
  249. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/get_user_tweets.py +5 -13
  250. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/like_tweet.py +2 -6
  251. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/post_tweet.py +6 -9
  252. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/reply_tweet.py +6 -9
  253. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/retweet.py +2 -6
  254. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/search_tweets.py +4 -12
  255. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/unrealspeech/__init__.py +2 -7
  256. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/unrealspeech/base.py +2 -8
  257. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/unrealspeech/text_to_speech.py +8 -8
  258. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_audio/__init__.py +98 -106
  259. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_audio/base.py +117 -121
  260. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_audio/input.py +41 -41
  261. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_audio/venice_audio.py +7 -11
  262. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/__init__.py +147 -154
  263. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/api.py +138 -138
  264. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/base.py +185 -192
  265. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/config.py +33 -35
  266. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_enhance/image_enhance.py +2 -3
  267. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
  268. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
  269. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/image_generation_base.py +9 -9
  270. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
  271. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
  272. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
  273. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/image_generation_input.py +158 -158
  274. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
  275. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
  276. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
  277. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
  278. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_upscale/image_upscale.py +3 -3
  279. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
  280. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
  281. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_vision/image_vision.py +2 -2
  282. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_vision/image_vision_base.py +17 -17
  283. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_vision/image_vision_input.py +9 -9
  284. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/utils.py +77 -78
  285. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/web_scraper/__init__.py +5 -18
  286. intentkit-0.8.17/skills/web_scraper/base.py +35 -0
  287. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/web_scraper/document_indexer.py +7 -6
  288. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/web_scraper/scrape_and_index.py +15 -15
  289. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/web_scraper/utils.py +62 -63
  290. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/web_scraper/website_indexer.py +17 -19
  291. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/weth/__init__.py +5 -11
  292. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/wow/__init__.py +5 -11
  293. intentkit-0.8.17/skills/x402/__init__.py +61 -0
  294. intentkit-0.8.17/skills/x402/ask_agent.py +98 -0
  295. intentkit-0.8.17/skills/x402/base.py +99 -0
  296. intentkit-0.8.17/skills/x402/http_request.py +117 -0
  297. intentkit-0.8.17/skills/x402/schema.json +45 -0
  298. intentkit-0.8.17/skills/x402/x402.webp +0 -0
  299. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/xmtp/__init__.py +4 -15
  300. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/xmtp/base.py +5 -5
  301. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/xmtp/price.py +6 -6
  302. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/xmtp/swap.py +6 -8
  303. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/xmtp/transfer.py +4 -6
  304. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/utils/error.py +2 -2
  305. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/utils/logging.py +2 -4
  306. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/utils/s3.py +8 -9
  307. intentkit-0.8.17/utils/schema.py +100 -0
  308. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/utils/slack_alert.py +7 -8
  309. intentkit-0.8.4.dev3/abstracts/skill.py +0 -198
  310. intentkit-0.8.4.dev3/clients/cdp.py +0 -167
  311. intentkit-0.8.4.dev3/models/generator.py +0 -347
  312. intentkit-0.8.4.dev3/skills/base.py +0 -241
  313. intentkit-0.8.4.dev3/skills/dexscreener/model/search_token_response.py +0 -82
  314. intentkit-0.8.4.dev3/skills/web_scraper/base.py +0 -21
  315. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/.gitignore +0 -0
  316. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/LICENSE +0 -0
  317. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/MANIFEST.in +0 -0
  318. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/README.md +0 -0
  319. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/abstracts/__init__.py +0 -0
  320. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/abstracts/api.py +0 -0
  321. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/config/__init__.py +0 -0
  322. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/__init__.py +0 -0
  323. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/api.py +0 -0
  324. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/chat.py +0 -0
  325. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/agent_public.json +0 -0
  326. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/base.py +0 -0
  327. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/__init__.py +0 -0
  328. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/acolyt/acolyt.jpg +0 -0
  329. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/acolyt/schema.json +0 -0
  330. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/aixbt/README.md +0 -0
  331. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/aixbt/aixbt.jpg +0 -0
  332. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/aixbt/schema.json +0 -0
  333. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/allora/allora.jpeg +0 -0
  334. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/allora/schema.json +0 -0
  335. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/basename/base.py +0 -0
  336. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/basename/basename.svg +0 -0
  337. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/basename/schema.json +0 -0
  338. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/carv/README.md +0 -0
  339. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/carv/carv.webp +0 -0
  340. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/carv/schema.json +0 -0
  341. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/casino/README.md +0 -0
  342. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/casino/casino.png +0 -0
  343. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/casino/schema.json +0 -0
  344. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/casino/utils.py +0 -0
  345. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cdp/cdp.png +0 -0
  346. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/chainlist/README.md +0 -0
  347. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/chainlist/chainlist.png +0 -0
  348. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/chainlist/schema.json +0 -0
  349. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/common/common.jpg +0 -0
  350. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/common/schema.json +0 -0
  351. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/README.md +0 -0
  352. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/constants.py +0 -0
  353. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/cookiefun.png +0 -0
  354. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/schema.json +0 -0
  355. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/cryptocompare.png +0 -0
  356. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/schema.json +0 -0
  357. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptopanic/cryptopanic.png +0 -0
  358. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptopanic/schema.json +0 -0
  359. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dapplooker/README.md +0 -0
  360. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dapplooker/dapplooker.jpg +0 -0
  361. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dapplooker/schema.json +0 -0
  362. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/coins/__init__.py +0 -0
  363. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/config/__init__.py +0 -0
  364. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/defillama.jpeg +0 -0
  365. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/fees/__init__.py +0 -0
  366. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/schema.json +0 -0
  367. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/stablecoins/__init__.py +0 -0
  368. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tests/__init__.py +0 -0
  369. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tests/api_unit.test.py +0 -0
  370. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tvl/__init__.py +0 -0
  371. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/volumes/__init__.py +0 -0
  372. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/yields/__init__.py +0 -0
  373. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/README.md +0 -0
  374. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/dexscreener.png +0 -0
  375. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/model/__init__.py +0 -0
  376. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/schema.json +0 -0
  377. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dune_analytics/dune.png +0 -0
  378. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dune_analytics/schema.json +0 -0
  379. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/elfa/README.md +0 -0
  380. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/elfa/elfa.jpg +0 -0
  381. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/elfa/schema.json +0 -0
  382. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/README.md +0 -0
  383. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/abi/__init__.py +0 -0
  384. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/abi/approval.py +0 -0
  385. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/abi/erc20.py +0 -0
  386. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/abi/route.py +0 -0
  387. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/enso.jpg +0 -0
  388. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/schema.json +0 -0
  389. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/erc20/base.py +0 -0
  390. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/erc20/erc20.svg +0 -0
  391. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/erc20/schema.json +0 -0
  392. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/erc721/base.py +0 -0
  393. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/erc721/erc721.svg +0 -0
  394. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/erc721/schema.json +0 -0
  395. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/README.md +0 -0
  396. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/firecrawl.png +0 -0
  397. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/schema.json +0 -0
  398. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/github/README.md +0 -0
  399. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/github/github.jpg +0 -0
  400. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/github/schema.json +0 -0
  401. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/heurist.png +0 -0
  402. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/schema.json +0 -0
  403. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/http/README.md +0 -0
  404. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/http/http.svg +0 -0
  405. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/http/schema.json +0 -0
  406. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/lifi/README.md +0 -0
  407. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/lifi/lifi.png +0 -0
  408. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/lifi/schema.json +0 -0
  409. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/README.md +0 -0
  410. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/moralis.png +0 -0
  411. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/schema.json +0 -0
  412. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/morpho/base.py +0 -0
  413. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/morpho/morpho.svg +0 -0
  414. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/morpho/schema.json +0 -0
  415. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/nation/nation.png +0 -0
  416. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/nation/schema.json +0 -0
  417. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/openai/openai.png +0 -0
  418. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/README.md +0 -0
  419. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/constants.py +0 -0
  420. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/moralis.png +0 -0
  421. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/schema.json +0 -0
  422. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/pyth/base.py +0 -0
  423. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/pyth/pyth.svg +0 -0
  424. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/pyth/schema.json +0 -0
  425. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/slack/schema.json +0 -0
  426. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/slack/slack.jpg +0 -0
  427. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/schema.json +0 -0
  428. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/supabase.svg +0 -0
  429. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/superfluid/base.py +0 -0
  430. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/superfluid/schema.json +0 -0
  431. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/superfluid/superfluid.svg +0 -0
  432. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/base.py +0 -0
  433. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/schema.json +0 -0
  434. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/system.svg +0 -0
  435. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/tavily/README.md +0 -0
  436. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/tavily/schema.json +0 -0
  437. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/tavily/tavily.jpg +0 -0
  438. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/README.md +0 -0
  439. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/constants.py +0 -0
  440. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/moralis.png +0 -0
  441. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/schema.json +0 -0
  442. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/schema.json +0 -0
  443. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/twitter.png +0 -0
  444. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/unrealspeech/schema.json +0 -0
  445. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/unrealspeech/unrealspeech.jpg +0 -0
  446. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_audio/schema.json +0 -0
  447. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_audio/venice_logo.jpg +0 -0
  448. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/README.md +0 -0
  449. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_enhance/README.md +0 -0
  450. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_enhance/__init__.py +0 -0
  451. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/README.md +0 -0
  452. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/__init__.py +0 -0
  453. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_upscale/README.md +0 -0
  454. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_upscale/__init__.py +0 -0
  455. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_vision/README.md +0 -0
  456. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_vision/__init__.py +0 -0
  457. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/schema.json +0 -0
  458. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/venice_image.jpg +0 -0
  459. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/web_scraper/README.md +0 -0
  460. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/web_scraper/langchain.png +0 -0
  461. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/web_scraper/schema.json +0 -0
  462. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/weth/base.py +0 -0
  463. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/weth/schema.json +0 -0
  464. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/weth/weth.svg +0 -0
  465. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/wow/base.py +0 -0
  466. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/wow/schema.json +0 -0
  467. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/wow/wow.svg +0 -0
  468. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/xmtp/README.md +0 -0
  469. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/xmtp/schema.json +0 -0
  470. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/xmtp/xmtp.png +0 -0
  471. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/utils/__init__.py +0 -0
  472. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/utils/chain.py +0 -0
  473. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/utils/random.py +0 -0
  474. {intentkit-0.8.4.dev3 → intentkit-0.8.17}/utils/tx.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intentkit
3
- Version: 0.8.4.dev3
3
+ Version: 0.8.17
4
4
  Summary: Intent-based AI Agent Platform - Core Package
5
5
  Project-URL: Homepage, https://github.com/crestalnetwork/intentkit
6
6
  Project-URL: Repository, https://github.com/crestalnetwork/intentkit
@@ -34,15 +34,14 @@ Classifier: Development Status :: 4 - Beta
34
34
  Classifier: Intended Audience :: Developers
35
35
  Classifier: License :: OSI Approved :: MIT License
36
36
  Classifier: Programming Language :: Python :: 3
37
- Classifier: Programming Language :: Python :: 3.12
37
+ Classifier: Programming Language :: Python :: 3.13
38
38
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
39
39
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
40
- Requires-Python: >=3.12
40
+ Requires-Python: ==3.13.*
41
41
  Requires-Dist: aiohttp>=3.11.16
42
42
  Requires-Dist: aiosqlite>=0.21.0
43
43
  Requires-Dist: asyncpg>=0.30.0
44
44
  Requires-Dist: aws-secretsmanager-caching>=1.1.3
45
- Requires-Dist: bip32>=2.0.0
46
45
  Requires-Dist: boto3<2.0.0,>=1.37.23
47
46
  Requires-Dist: botocore>=1.35.97
48
47
  Requires-Dist: cdp-sdk>=1.31.1
@@ -3,7 +3,7 @@
3
3
  A powerful platform for building AI agents with blockchain and cryptocurrency capabilities.
4
4
  """
5
5
 
6
- __version__ = "0.8.4-dev3"
6
+ __version__ = "0.8.17"
7
7
  __author__ = "hyacinthus"
8
8
  __email__ = "hyacinthus@gmail.com"
9
9
 
@@ -1,5 +1,4 @@
1
1
  from abc import ABC, abstractmethod
2
- from typing import Dict, Optional
3
2
 
4
3
  from intentkit.models.agent import Agent
5
4
  from intentkit.models.agent_data import AgentData, AgentQuota
@@ -24,7 +23,7 @@ class AgentStoreABC(ABC):
24
23
  self.agent_id = agent_id
25
24
 
26
25
  @abstractmethod
27
- async def get_config(self) -> Optional[Agent]:
26
+ async def get_config(self) -> Agent | None:
28
27
  """Get agent configuration.
29
28
 
30
29
  Returns:
@@ -33,7 +32,7 @@ class AgentStoreABC(ABC):
33
32
  pass
34
33
 
35
34
  @abstractmethod
36
- async def get_data(self) -> Optional[AgentData]:
35
+ async def get_data(self) -> AgentData | None:
37
36
  """Get additional agent data.
38
37
 
39
38
  Returns:
@@ -42,7 +41,7 @@ class AgentStoreABC(ABC):
42
41
  pass
43
42
 
44
43
  @abstractmethod
45
- async def set_data(self, data: Dict) -> None:
44
+ async def set_data(self, data: dict) -> None:
46
45
  """Update agent data.
47
46
 
48
47
  Args:
@@ -51,7 +50,7 @@ class AgentStoreABC(ABC):
51
50
  pass
52
51
 
53
52
  @abstractmethod
54
- async def get_quota(self) -> Optional[AgentQuota]:
53
+ async def get_quota(self) -> AgentQuota | None:
55
54
  """Get agent quota information.
56
55
 
57
56
  Returns:
@@ -1,4 +1,4 @@
1
- from typing import Callable, List
1
+ from collections.abc import Callable
2
2
 
3
3
  from pydantic import BaseModel
4
4
 
@@ -12,19 +12,19 @@ class AgentMessageInput(BaseModel):
12
12
 
13
13
  Attributes:
14
14
  text (str): The main text content of the message or query
15
- images (List[str]): List of image references/URLs to be processed by the agent.
15
+ images (list[str]): List of image references/URLs to be processed by the agent.
16
16
  Empty list if no images are provided.
17
17
  """
18
18
 
19
19
  text: str # required
20
20
  """The main text content or query to be processed by the agent"""
21
21
 
22
- images: List[str] = [] # optional, defaults to empty list
22
+ images: list[str] = [] # optional, defaults to empty list
23
23
  """List of image references or URLs for multimodal processing"""
24
24
 
25
25
 
26
26
  # Define a type hint for the callback that takes three strings and returns a list of strings
27
- AgentExecutionCallback = Callable[[str, AgentMessageInput, str], List[str]]
27
+ AgentExecutionCallback = Callable[[str, AgentMessageInput, str], list[str]]
28
28
  """Callback function type for agent execution.
29
29
 
30
30
  Args:
@@ -33,6 +33,6 @@ Args:
33
33
  thread_id (str): The thread ID for tracking the conversation context
34
34
 
35
35
  Returns:
36
- List[str]: A list of formatted response lines from the agent execution. Each line
36
+ list[str]: A list of formatted response lines from the agent execution. Each line
37
37
  typically contains input/output markers, agent responses, and timing information.
38
38
  """
@@ -1,5 +1,6 @@
1
+ from collections.abc import Callable
1
2
  from enum import Enum
2
- from typing import Any, Callable, Dict, NotRequired, Optional
3
+ from typing import Any, NotRequired
3
4
 
4
5
  from langgraph.prebuilt.chat_agent_executor import AgentState as BaseAgentState
5
6
  from pydantic import BaseModel
@@ -23,21 +24,25 @@ class AgentState(BaseAgentState):
23
24
 
24
25
  context: dict[str, Any]
25
26
  error: NotRequired[AgentError]
26
- __extra__: NotRequired[Dict[str, Any]]
27
+ __extra__: NotRequired[dict[str, Any]]
27
28
 
28
29
 
29
30
  class AgentContext(BaseModel):
30
31
  agent_id: str
31
32
  get_agent: Callable[[], Agent]
32
33
  chat_id: str
33
- user_id: Optional[str] = None
34
- app_id: Optional[str] = None
34
+ user_id: str | None = None
35
+ app_id: str | None = None
35
36
  entrypoint: AuthorType
36
37
  is_private: bool
37
38
  search: bool = False
38
39
  thinking: bool = False
39
- payer: Optional[str] = None
40
+ payer: str | None = None
40
41
 
41
42
  @property
42
43
  def agent(self) -> Agent:
43
44
  return self.get_agent()
45
+
46
+ @property
47
+ def thread_id(self) -> str:
48
+ return f"{self.agent_id}-{self.chat_id}"
@@ -0,0 +1,60 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Any
3
+
4
+ from intentkit.models.agent import Agent
5
+ from intentkit.models.agent_data import AgentData, AgentQuota
6
+
7
+
8
+ class SkillStoreABC(ABC):
9
+ """Abstract base class for skill data storage operations.
10
+
11
+ This class defines the interface for interacting with skill-related data
12
+ for both agents and threads.
13
+ """
14
+
15
+ @staticmethod
16
+ @abstractmethod
17
+ def get_system_config(key: str) -> Any:
18
+ """Get system configuration value by key."""
19
+ pass
20
+
21
+ @staticmethod
22
+ @abstractmethod
23
+ async def get_agent_config(agent_id: str) -> Agent | None:
24
+ """Get agent configuration.
25
+
26
+ Returns:
27
+ Agent configuration if found, None otherwise
28
+ """
29
+ pass
30
+
31
+ @staticmethod
32
+ @abstractmethod
33
+ async def get_agent_data(agent_id: str) -> AgentData | None:
34
+ """Get additional agent data.
35
+
36
+ Returns:
37
+ Agent data if found, None otherwise
38
+ """
39
+ pass
40
+
41
+ @staticmethod
42
+ @abstractmethod
43
+ async def set_agent_data(agent_id: str, data: dict) -> None:
44
+ """Update agent data.
45
+
46
+ Args:
47
+ agent_id: ID of the agent
48
+ data: Dictionary containing fields to update
49
+ """
50
+ pass
51
+
52
+ @staticmethod
53
+ @abstractmethod
54
+ async def get_agent_quota(agent_id: str) -> AgentQuota | None:
55
+ """Get agent quota information.
56
+
57
+ Returns:
58
+ Agent quota if found, None otherwise
59
+ """
60
+ pass
@@ -1,5 +1,4 @@
1
1
  from abc import ABC, abstractmethod
2
- from typing import Optional
3
2
 
4
3
  from tweepy.asynchronous import AsyncClient
5
4
 
@@ -15,7 +14,7 @@ class TwitterABC(ABC):
15
14
  use_key = False
16
15
 
17
16
  @abstractmethod
18
- async def get_client(self) -> Optional[AsyncClient]:
17
+ async def get_client(self) -> AsyncClient | None:
19
18
  """Get a configured Tweepy client.
20
19
 
21
20
  Returns:
@@ -25,7 +24,7 @@ class TwitterABC(ABC):
25
24
 
26
25
  @property
27
26
  @abstractmethod
28
- def self_id(self) -> Optional[str]:
27
+ def self_id(self) -> str | None:
29
28
  """Get the Twitter user ID.
30
29
 
31
30
  Returns:
@@ -35,7 +34,7 @@ class TwitterABC(ABC):
35
34
 
36
35
  @property
37
36
  @abstractmethod
38
- def self_username(self) -> Optional[str]:
37
+ def self_username(self) -> str | None:
39
38
  """Get the Twitter username.
40
39
 
41
40
  Returns:
@@ -45,7 +44,7 @@ class TwitterABC(ABC):
45
44
 
46
45
  @property
47
46
  @abstractmethod
48
- def self_name(self) -> Optional[str]:
47
+ def self_name(self) -> str | None:
49
48
  """Get the Twitter display name.
50
49
 
51
50
  Returns:
@@ -1,4 +1,4 @@
1
- from intentkit.clients.cdp import get_origin_cdp_client, get_wallet_provider
1
+ from intentkit.clients.cdp import get_cdp_client, get_evm_account, get_wallet_provider
2
2
  from intentkit.clients.twitter import (
3
3
  TwitterClient,
4
4
  TwitterClientConfig,
@@ -10,7 +10,8 @@ __all__ = [
10
10
  "TwitterClient",
11
11
  "TwitterClientConfig",
12
12
  "get_twitter_client",
13
- "get_origin_cdp_client",
13
+ "get_evm_account",
14
+ "get_cdp_client",
14
15
  "get_wallet_provider",
15
16
  "get_web3_client",
16
17
  ]
@@ -0,0 +1,128 @@
1
+ import asyncio
2
+ import logging
3
+
4
+ from cdp import CdpClient, EvmServerAccount # noqa: E402
5
+ from coinbase_agentkit import ( # noqa: E402
6
+ CdpEvmWalletProvider,
7
+ CdpEvmWalletProviderConfig,
8
+ )
9
+
10
+ from intentkit.config.config import config
11
+ from intentkit.models.agent import Agent, AgentTable # noqa: E402
12
+ from intentkit.models.agent_data import AgentData
13
+ from intentkit.models.db import get_session
14
+ from intentkit.utils.error import IntentKitAPIError # noqa: E402
15
+
16
+ _wallet_providers: dict[str, tuple[str, str, CdpEvmWalletProvider]] = {}
17
+ _cdp_client: CdpClient | None = None
18
+
19
+ logger = logging.getLogger(__name__)
20
+
21
+
22
+ def get_cdp_client() -> CdpClient:
23
+ global _cdp_client
24
+ if _cdp_client:
25
+ return _cdp_client
26
+
27
+ # Get credentials from global configuration
28
+ api_key_id = config.cdp_api_key_id
29
+ api_key_secret = config.cdp_api_key_secret
30
+ wallet_secret = config.cdp_wallet_secret
31
+
32
+ _cdp_client = CdpClient(
33
+ api_key_id=api_key_id,
34
+ api_key_secret=api_key_secret,
35
+ wallet_secret=wallet_secret,
36
+ )
37
+ return _cdp_client
38
+
39
+
40
+ def _assert_cdp_wallet_provider(agent: Agent) -> None:
41
+ if agent.wallet_provider != "cdp":
42
+ raise IntentKitAPIError(
43
+ 400,
44
+ "BadWalletProvider",
45
+ "Your agent wallet provider is not cdp but you selected a skill that requires a cdp wallet.",
46
+ )
47
+
48
+
49
+ async def _ensure_evm_account(
50
+ agent: Agent, agent_data: AgentData | None = None
51
+ ) -> tuple[EvmServerAccount, AgentData]:
52
+ cdp_client = get_cdp_client()
53
+ agent_data = agent_data or await AgentData.get(agent.id)
54
+ address = agent_data.evm_wallet_address
55
+ account: EvmServerAccount | None = None
56
+
57
+ if not address:
58
+ logger.info("Creating new wallet...")
59
+ account = await cdp_client.evm.create_account(
60
+ name=agent.id,
61
+ )
62
+ address = account.address
63
+ logger.info("Created new wallet: %s", address)
64
+
65
+ agent_data.evm_wallet_address = address
66
+ await agent_data.save()
67
+ if not agent.slug:
68
+ async with get_session() as db:
69
+ db_agent = await db.get(AgentTable, agent.id)
70
+ if db_agent and not db_agent.slug:
71
+ db_agent.slug = agent_data.evm_wallet_address
72
+ await db.commit()
73
+
74
+ if account is None:
75
+ account = await cdp_client.evm.get_account(address=address)
76
+
77
+ return account, agent_data
78
+
79
+
80
+ async def get_evm_account(agent: Agent) -> EvmServerAccount:
81
+ _assert_cdp_wallet_provider(agent)
82
+ account, _ = await _ensure_evm_account(agent)
83
+ return account
84
+
85
+
86
+ async def get_wallet_provider(agent: Agent) -> CdpEvmWalletProvider:
87
+ _assert_cdp_wallet_provider(agent)
88
+ if not agent.network_id:
89
+ raise IntentKitAPIError(
90
+ 400,
91
+ "BadNetworkID",
92
+ "Your agent network ID is not set. Please set it in the agent config.",
93
+ )
94
+
95
+ agent_data = await AgentData.get(agent.id)
96
+ address = agent_data.evm_wallet_address
97
+
98
+ cache_entry = _wallet_providers.get(agent.id)
99
+ if cache_entry:
100
+ cached_network_id, cached_address, provider = cache_entry
101
+ if cached_network_id == agent.network_id:
102
+ if not address:
103
+ address = cached_address or provider.get_address()
104
+ if cached_address == address:
105
+ return provider
106
+
107
+ account, agent_data = await _ensure_evm_account(agent, agent_data)
108
+ address = account.address
109
+
110
+ # Get credentials from global config
111
+ api_key_id = config.cdp_api_key_id
112
+ api_key_secret = config.cdp_api_key_secret
113
+ wallet_secret = config.cdp_wallet_secret
114
+
115
+ network_id = agent.network_id
116
+
117
+ wallet_provider_config = CdpEvmWalletProviderConfig(
118
+ api_key_id=api_key_id,
119
+ api_key_secret=api_key_secret,
120
+ network_id=network_id,
121
+ address=address,
122
+ wallet_secret=wallet_secret,
123
+ )
124
+ wallet_provider = await asyncio.to_thread(
125
+ CdpEvmWalletProvider, wallet_provider_config
126
+ )
127
+ _wallet_providers[agent.id] = (network_id, address, wallet_provider)
128
+ return wallet_provider
@@ -1,8 +1,8 @@
1
1
  import logging
2
2
  import os
3
3
  import tempfile
4
- from datetime import datetime, timedelta, timezone
5
- from typing import Any, Dict, List, NotRequired, Optional, TypedDict
4
+ from datetime import UTC, datetime, timedelta
5
+ from typing import Any, NotRequired, TypedDict
6
6
  from urllib.parse import urlencode
7
7
 
8
8
  import httpx
@@ -11,15 +11,14 @@ from requests.auth import HTTPBasicAuth
11
11
  from requests_oauthlib import OAuth2Session
12
12
  from tweepy.asynchronous import AsyncClient
13
13
 
14
- from intentkit.abstracts.skill import SkillStoreABC
15
14
  from intentkit.abstracts.twitter import TwitterABC
16
15
  from intentkit.models.agent_data import AgentData
17
16
  from intentkit.models.redis import get_redis
18
17
 
19
18
  logger = logging.getLogger(__name__)
20
19
 
21
- _clients_linked: Dict[str, "TwitterClient"] = {}
22
- _clients_self_key: Dict[str, "TwitterClient"] = {}
20
+ _clients_linked: dict[str, "TwitterClient"] = {}
21
+ _clients_self_key: dict[str, "TwitterClient"] = {}
23
22
 
24
23
  _VERIFIER_KEY = "intentkit:twitter:code_verifier"
25
24
  _CHALLENGE_KEY = "intentkit:twitter:code_challenge"
@@ -30,7 +29,7 @@ class TwitterMedia(BaseModel):
30
29
 
31
30
  media_key: str
32
31
  type: str
33
- url: Optional[str] = None
32
+ url: str | None = None
34
33
 
35
34
 
36
35
  class TwitterUser(BaseModel):
@@ -59,10 +58,10 @@ class Tweet(BaseModel):
59
58
  id: str
60
59
  text: str
61
60
  author_id: str
62
- author: Optional[TwitterUser] = None
61
+ author: TwitterUser | None = None
63
62
  created_at: datetime
64
- referenced_tweets: Optional[List["Tweet"]] = None
65
- attachments: Optional[List[TwitterMedia]] = None
63
+ referenced_tweets: list["Tweet"] | None = None
64
+ attachments: list[TwitterMedia] | None = None
66
65
 
67
66
 
68
67
  class TwitterClientConfig(TypedDict):
@@ -80,33 +79,44 @@ class TwitterClient(TwitterABC):
80
79
 
81
80
  Args:
82
81
  agent_id: The ID of the agent
83
- skill_store: The skill store for retrieving data
84
82
  config: Configuration dictionary that may contain API keys
85
83
  """
86
84
 
87
- def __init__(self, agent_id: str, skill_store: SkillStoreABC, config: Dict) -> None:
85
+ def __init__(self, agent_id: str, config: dict) -> None:
88
86
  """Initialize the Twitter client.
89
87
 
90
88
  Args:
91
89
  agent_id: The ID of the agent
92
- skill_store: The skill store for retrieving data
93
90
  config: Configuration dictionary that may contain API keys
94
91
  """
95
92
  self.agent_id = agent_id
96
- self._client: Optional[AsyncClient] = None
97
- self._skill_store = skill_store
98
- self._agent_data: Optional[AgentData] = None
93
+ self._client: AsyncClient | None = None
94
+ self._agent_data: AgentData | None = None
99
95
  self.use_key = _is_self_key(config)
100
96
  self._config = config
101
97
 
98
+ async def _get_agent_data(self) -> AgentData:
99
+ """Retrieve cached agent data, loading from the database if needed."""
100
+
101
+ if not self._agent_data:
102
+ self._agent_data = await AgentData.get(self.agent_id)
103
+ return self._agent_data
104
+
105
+ async def _refresh_agent_data(self) -> AgentData:
106
+ """Reload agent data from the database."""
107
+
108
+ self._agent_data = await AgentData.get(self.agent_id)
109
+ return self._agent_data
110
+
102
111
  async def get_client(self) -> AsyncClient:
103
112
  """Get the initialized Twitter client.
104
113
 
105
114
  Returns:
106
115
  AsyncClient: The Twitter client if initialized
107
116
  """
108
- if not self._agent_data:
109
- self._agent_data = await self._skill_store.get_agent_data(self.agent_id)
117
+
118
+ agent_data = await self._get_agent_data()
119
+
110
120
  if not self._client:
111
121
  # Check if we have API keys in config
112
122
  if self.use_key:
@@ -118,30 +128,26 @@ class TwitterClient(TwitterABC):
118
128
  return_type=dict,
119
129
  )
120
130
  # refresh userinfo if needed
121
- if not self._agent_data.twitter_self_key_refreshed_at or (
122
- self._agent_data.twitter_self_key_refreshed_at
123
- < datetime.now(tz=timezone.utc) - timedelta(days=1)
131
+ if not agent_data.twitter_self_key_refreshed_at or (
132
+ agent_data.twitter_self_key_refreshed_at
133
+ < datetime.now(tz=UTC) - timedelta(days=1)
124
134
  ):
125
135
  me = await self._client.get_me(
126
136
  user_auth=self.use_key,
127
137
  user_fields="id,username,name,verified",
128
138
  )
129
139
  if me and "data" in me and "id" in me["data"]:
130
- await self._skill_store.set_agent_data(
140
+ await AgentData.patch(
131
141
  self.agent_id,
132
142
  {
133
143
  "twitter_id": me["data"]["id"],
134
144
  "twitter_username": me["data"]["username"],
135
145
  "twitter_name": me["data"]["name"],
136
146
  "twitter_is_verified": me["data"]["verified"],
137
- "twitter_self_key_refreshed_at": datetime.now(
138
- tz=timezone.utc
139
- ),
147
+ "twitter_self_key_refreshed_at": datetime.now(tz=UTC),
140
148
  },
141
149
  )
142
- self._agent_data = await self._skill_store.get_agent_data(
143
- self.agent_id
144
- )
150
+ agent_data = await self._refresh_agent_data()
145
151
  logger.info(
146
152
  f"Twitter self key client initialized. "
147
153
  f"Use API key: {self.use_key}, "
@@ -152,43 +158,38 @@ class TwitterClient(TwitterABC):
152
158
  )
153
159
  return self._client
154
160
  # Otherwise try to get OAuth2 tokens from agent data
155
- if not self._agent_data.twitter_access_token:
161
+ if not agent_data.twitter_access_token:
156
162
  raise Exception(f"[{self.agent_id}] Twitter access token not found")
157
- if not self._agent_data.twitter_access_token_expires_at:
163
+ if not agent_data.twitter_access_token_expires_at:
158
164
  raise Exception(
159
165
  f"[{self.agent_id}] Twitter access token expiration not found"
160
166
  )
161
- if self._agent_data.twitter_access_token_expires_at <= datetime.now(
162
- tz=timezone.utc
163
- ):
167
+ if agent_data.twitter_access_token_expires_at <= datetime.now(tz=UTC):
164
168
  raise Exception(f"[{self.agent_id}] Twitter access token has expired")
165
169
  self._client = AsyncClient(
166
- bearer_token=self._agent_data.twitter_access_token,
170
+ bearer_token=agent_data.twitter_access_token,
167
171
  return_type=dict,
168
172
  )
169
173
  return self._client
174
+
170
175
  if not self.use_key:
171
176
  # check if access token has expired
172
- if self._agent_data.twitter_access_token_expires_at <= datetime.now(
173
- tz=timezone.utc
174
- ):
175
- self._agent_data = await self._skill_store.get_agent_data(self.agent_id)
176
- # check again
177
- if self._agent_data.twitter_access_token_expires_at <= datetime.now(
178
- tz=timezone.utc
179
- ):
177
+ if agent_data.twitter_access_token_expires_at <= datetime.now(tz=UTC):
178
+ agent_data = await self._refresh_agent_data()
179
+ if agent_data.twitter_access_token_expires_at <= datetime.now(tz=UTC):
180
180
  raise Exception(
181
181
  f"[{self.agent_id}] Twitter access token has expired"
182
182
  )
183
183
  self._client = AsyncClient(
184
- bearer_token=self._agent_data.twitter_access_token,
184
+ bearer_token=agent_data.twitter_access_token,
185
185
  return_type=dict,
186
186
  )
187
187
  return self._client
188
+
188
189
  return self._client
189
190
 
190
191
  @property
191
- def self_id(self) -> Optional[str]:
192
+ def self_id(self) -> str | None:
192
193
  """Get the Twitter user ID.
193
194
 
194
195
  Returns:
@@ -201,7 +202,7 @@ class TwitterClient(TwitterABC):
201
202
  return self._agent_data.twitter_id
202
203
 
203
204
  @property
204
- def self_username(self) -> Optional[str]:
205
+ def self_username(self) -> str | None:
205
206
  """Get the Twitter username.
206
207
 
207
208
  Returns:
@@ -214,7 +215,7 @@ class TwitterClient(TwitterABC):
214
215
  return self._agent_data.twitter_username
215
216
 
216
217
  @property
217
- def self_name(self) -> Optional[str]:
218
+ def self_name(self) -> str | None:
218
219
  """Get the Twitter display name.
219
220
 
220
221
  Returns:
@@ -227,7 +228,7 @@ class TwitterClient(TwitterABC):
227
228
  return self._agent_data.twitter_name
228
229
 
229
230
  @property
230
- def self_is_verified(self) -> Optional[bool]:
231
+ def self_is_verified(self) -> bool | None:
231
232
  """Get the Twitter account verification status.
232
233
 
233
234
  Returns:
@@ -239,14 +240,14 @@ class TwitterClient(TwitterABC):
239
240
  return None
240
241
  return self._agent_data.twitter_is_verified
241
242
 
242
- def process_tweets_response(self, response: Dict[str, Any]) -> List[Tweet]:
243
+ def process_tweets_response(self, response: dict[str, Any]) -> list[Tweet]:
243
244
  """Process Twitter API response and convert it to a list of Tweet objects.
244
245
 
245
246
  Args:
246
247
  response: Raw Twitter API response containing tweets data and includes.
247
248
 
248
249
  Returns:
249
- List[Tweet]: List of processed Tweet objects.
250
+ list[Tweet]: List of processed Tweet objects.
250
251
  """
251
252
  result = []
252
253
  if not response.get("data"):
@@ -338,7 +339,7 @@ class TwitterClient(TwitterABC):
338
339
 
339
340
  return result
340
341
 
341
- async def upload_media(self, agent_id: str, image_url: str) -> List[str]:
342
+ async def upload_media(self, agent_id: str, image_url: str) -> list[str]:
342
343
  """Upload media to Twitter and return the media IDs.
343
344
 
344
345
  Args:
@@ -346,13 +347,13 @@ class TwitterClient(TwitterABC):
346
347
  image_url: The URL of the image to upload.
347
348
 
348
349
  Returns:
349
- List[str]: A list of media IDs for the uploaded media.
350
+ list[str]: A list of media IDs for the uploaded media.
350
351
 
351
352
  Raises:
352
353
  ValueError: If there's an error uploading the media.
353
354
  """
354
355
  # Get agent data to access the token
355
- agent_data = await self._skill_store.get_agent_data(agent_id)
356
+ agent_data = await AgentData.get(agent_id)
356
357
  if not agent_data.twitter_access_token:
357
358
  raise ValueError("Only linked X account can post media")
358
359
 
@@ -419,19 +420,17 @@ class TwitterClient(TwitterABC):
419
420
  return media_ids
420
421
 
421
422
 
422
- def _is_self_key(config: Dict) -> bool:
423
+ def _is_self_key(config: dict) -> bool:
423
424
  return config.get("api_key_provider") == "agent_owner"
424
425
 
425
426
 
426
- def get_twitter_client(
427
- agent_id: str, skill_store: SkillStoreABC, config: Dict
428
- ) -> "TwitterClient":
427
+ def get_twitter_client(agent_id: str, config: dict) -> "TwitterClient":
429
428
  if _is_self_key(config):
430
429
  if agent_id not in _clients_self_key:
431
- _clients_self_key[agent_id] = TwitterClient(agent_id, skill_store, config)
430
+ _clients_self_key[agent_id] = TwitterClient(agent_id, config)
432
431
  return _clients_self_key[agent_id]
433
432
  if agent_id not in _clients_linked:
434
- _clients_linked[agent_id] = TwitterClient(agent_id, skill_store, config)
433
+ _clients_linked[agent_id] = TwitterClient(agent_id, config)
435
434
  return _clients_linked[agent_id]
436
435
 
437
436