intentkit 0.7.5.dev26__tar.gz → 0.7.5.dev28__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.

Potentially problematic release.


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

Files changed (460) hide show
  1. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/PKG-INFO +1 -1
  2. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/__init__.py +1 -1
  3. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/core/agent.py +212 -33
  4. intentkit-0.7.5.dev28/core/asset.py +208 -0
  5. intentkit-0.7.5.dev28/core/statistics.py +169 -0
  6. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/pyproject.toml +1 -1
  7. intentkit-0.7.5.dev26/skills/moralis/tests/test_wallet.py +0 -511
  8. intentkit-0.7.5.dev26/skills/venice_image/image_vision/__init__.py +0 -0
  9. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/.gitignore +0 -0
  10. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/LICENSE +0 -0
  11. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/MANIFEST.in +0 -0
  12. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/README.md +0 -0
  13. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/abstracts/__init__.py +0 -0
  14. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/abstracts/agent.py +0 -0
  15. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/abstracts/api.py +0 -0
  16. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/abstracts/engine.py +0 -0
  17. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/abstracts/graph.py +0 -0
  18. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/abstracts/skill.py +0 -0
  19. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/abstracts/twitter.py +0 -0
  20. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/clients/__init__.py +0 -0
  21. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/clients/cdp.py +0 -0
  22. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/clients/twitter.py +0 -0
  23. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/clients/web3.py +0 -0
  24. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/config/__init__.py +0 -0
  25. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/config/config.py +0 -0
  26. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/core/__init__.py +0 -0
  27. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/core/api.py +0 -0
  28. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/core/chat.py +0 -0
  29. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/core/client.py +0 -0
  30. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/core/credit.py +0 -0
  31. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/core/engine.py +0 -0
  32. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/core/node.py +0 -0
  33. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/core/prompt.py +0 -0
  34. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/models/agent.py +0 -0
  35. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/models/agent_data.py +0 -0
  36. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/models/agent_public.json +0 -0
  37. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/models/agent_schema.json +0 -0
  38. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/models/app_setting.py +0 -0
  39. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/models/base.py +0 -0
  40. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/models/chat.py +0 -0
  41. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/models/conversation.py +0 -0
  42. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/models/credit.py +0 -0
  43. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/models/db.py +0 -0
  44. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/models/db_mig.py +0 -0
  45. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/models/generator.py +0 -0
  46. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/models/llm.csv +0 -0
  47. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/models/llm.py +0 -0
  48. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/models/redis.py +0 -0
  49. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/models/skill.py +0 -0
  50. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/models/skills.csv +0 -0
  51. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/models/user.py +0 -0
  52. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/__init__.py +0 -0
  53. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/acolyt/__init__.py +0 -0
  54. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/acolyt/acolyt.jpg +0 -0
  55. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/acolyt/ask.py +0 -0
  56. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/acolyt/base.py +0 -0
  57. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/acolyt/schema.json +0 -0
  58. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/aixbt/README.md +0 -0
  59. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/aixbt/__init__.py +0 -0
  60. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/aixbt/aixbt.jpg +0 -0
  61. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/aixbt/base.py +0 -0
  62. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/aixbt/projects.py +0 -0
  63. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/aixbt/schema.json +0 -0
  64. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/allora/__init__.py +0 -0
  65. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/allora/allora.jpeg +0 -0
  66. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/allora/base.py +0 -0
  67. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/allora/price.py +0 -0
  68. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/allora/schema.json +0 -0
  69. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/base.py +0 -0
  70. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/basename/__init__.py +0 -0
  71. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/basename/base.py +0 -0
  72. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/basename/basename.svg +0 -0
  73. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/basename/schema.json +0 -0
  74. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/carv/README.md +0 -0
  75. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/carv/__init__.py +0 -0
  76. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/carv/base.py +0 -0
  77. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/carv/carv.webp +0 -0
  78. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/carv/fetch_news.py +0 -0
  79. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/carv/onchain_query.py +0 -0
  80. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/carv/schema.json +0 -0
  81. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/carv/token_info_and_price.py +0 -0
  82. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/casino/README.md +0 -0
  83. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/casino/__init__.py +0 -0
  84. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/casino/base.py +0 -0
  85. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/casino/casino.png +0 -0
  86. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/casino/deck_draw.py +0 -0
  87. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/casino/deck_shuffle.py +0 -0
  88. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/casino/dice_roll.py +0 -0
  89. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/casino/schema.json +0 -0
  90. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/casino/utils.py +0 -0
  91. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cdp/__init__.py +0 -0
  92. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cdp/base.py +0 -0
  93. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cdp/cdp.png +0 -0
  94. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cdp/schema.json +0 -0
  95. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/chainlist/README.md +0 -0
  96. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/chainlist/__init__.py +0 -0
  97. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/chainlist/base.py +0 -0
  98. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/chainlist/chain_lookup.py +0 -0
  99. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/chainlist/chainlist.png +0 -0
  100. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/chainlist/schema.json +0 -0
  101. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/common/__init__.py +0 -0
  102. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/common/base.py +0 -0
  103. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/common/common.jpg +0 -0
  104. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/common/current_time.py +0 -0
  105. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/common/schema.json +0 -0
  106. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cookiefun/README.md +0 -0
  107. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cookiefun/__init__.py +0 -0
  108. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cookiefun/base.py +0 -0
  109. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cookiefun/constants.py +0 -0
  110. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cookiefun/cookiefun.png +0 -0
  111. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cookiefun/get_account_details.py +0 -0
  112. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cookiefun/get_account_feed.py +0 -0
  113. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cookiefun/get_account_smart_followers.py +0 -0
  114. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cookiefun/get_sectors.py +0 -0
  115. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cookiefun/schema.json +0 -0
  116. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cookiefun/search_accounts.py +0 -0
  117. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cryptocompare/__init__.py +0 -0
  118. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cryptocompare/api.py +0 -0
  119. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cryptocompare/base.py +0 -0
  120. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cryptocompare/cryptocompare.png +0 -0
  121. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cryptocompare/fetch_news.py +0 -0
  122. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cryptocompare/fetch_price.py +0 -0
  123. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cryptocompare/fetch_top_exchanges.py +0 -0
  124. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cryptocompare/fetch_top_market_cap.py +0 -0
  125. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cryptocompare/fetch_top_volume.py +0 -0
  126. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cryptocompare/fetch_trading_signals.py +0 -0
  127. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cryptocompare/schema.json +0 -0
  128. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cryptopanic/__init__.py +0 -0
  129. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cryptopanic/base.py +0 -0
  130. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cryptopanic/cryptopanic.png +0 -0
  131. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cryptopanic/fetch_crypto_news.py +0 -0
  132. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cryptopanic/fetch_crypto_sentiment.py +0 -0
  133. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/cryptopanic/schema.json +0 -0
  134. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dapplooker/README.md +0 -0
  135. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dapplooker/__init__.py +0 -0
  136. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dapplooker/base.py +0 -0
  137. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dapplooker/dapplooker.jpg +0 -0
  138. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dapplooker/dapplooker_token_data.py +0 -0
  139. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dapplooker/schema.json +0 -0
  140. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/__init__.py +0 -0
  141. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/api.py +0 -0
  142. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/base.py +0 -0
  143. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/coins/__init__.py +0 -0
  144. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/coins/fetch_batch_historical_prices.py +0 -0
  145. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/coins/fetch_block.py +0 -0
  146. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/coins/fetch_current_prices.py +0 -0
  147. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/coins/fetch_first_price.py +0 -0
  148. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/coins/fetch_historical_prices.py +0 -0
  149. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/coins/fetch_price_chart.py +0 -0
  150. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/coins/fetch_price_percentage.py +0 -0
  151. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/config/__init__.py +0 -0
  152. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/config/chains.py +0 -0
  153. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/defillama.jpeg +0 -0
  154. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/fees/__init__.py +0 -0
  155. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/fees/fetch_fees_overview.py +0 -0
  156. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/schema.json +0 -0
  157. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/stablecoins/__init__.py +0 -0
  158. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/stablecoins/fetch_stablecoin_chains.py +0 -0
  159. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/stablecoins/fetch_stablecoin_charts.py +0 -0
  160. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/stablecoins/fetch_stablecoin_prices.py +0 -0
  161. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/stablecoins/fetch_stablecoins.py +0 -0
  162. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/tests/__init__.py +0 -0
  163. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/tests/api_integration.test.py +0 -0
  164. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/tests/api_unit.test.py +0 -0
  165. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/tvl/__init__.py +0 -0
  166. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/tvl/fetch_chain_historical_tvl.py +0 -0
  167. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/tvl/fetch_chains.py +0 -0
  168. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/tvl/fetch_historical_tvl.py +0 -0
  169. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/tvl/fetch_protocol.py +0 -0
  170. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/tvl/fetch_protocol_current_tvl.py +0 -0
  171. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/tvl/fetch_protocols.py +0 -0
  172. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/volumes/__init__.py +0 -0
  173. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/volumes/fetch_dex_overview.py +0 -0
  174. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/volumes/fetch_dex_summary.py +0 -0
  175. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/volumes/fetch_options_overview.py +0 -0
  176. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/yields/__init__.py +0 -0
  177. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/yields/fetch_pool_chart.py +0 -0
  178. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/defillama/yields/fetch_pools.py +0 -0
  179. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dexscreener/README.md +0 -0
  180. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dexscreener/__init__.py +0 -0
  181. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dexscreener/base.py +0 -0
  182. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dexscreener/dexscreener.png +0 -0
  183. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dexscreener/get_pair_info.py +0 -0
  184. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dexscreener/get_token_pairs.py +0 -0
  185. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dexscreener/get_tokens_info.py +0 -0
  186. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dexscreener/model/__init__.py +0 -0
  187. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dexscreener/model/search_token_response.py +0 -0
  188. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dexscreener/schema.json +0 -0
  189. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dexscreener/search_token.py +0 -0
  190. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dexscreener/utils.py +0 -0
  191. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dune_analytics/__init__.py +0 -0
  192. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dune_analytics/base.py +0 -0
  193. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dune_analytics/dune.png +0 -0
  194. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dune_analytics/fetch_kol_buys.py +0 -0
  195. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dune_analytics/fetch_nation_metrics.py +0 -0
  196. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/dune_analytics/schema.json +0 -0
  197. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/elfa/README.md +0 -0
  198. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/elfa/__init__.py +0 -0
  199. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/elfa/base.py +0 -0
  200. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/elfa/elfa.jpg +0 -0
  201. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/elfa/mention.py +0 -0
  202. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/elfa/schema.json +0 -0
  203. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/elfa/stats.py +0 -0
  204. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/elfa/tokens.py +0 -0
  205. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/elfa/utils.py +0 -0
  206. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/enso/README.md +0 -0
  207. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/enso/__init__.py +0 -0
  208. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/enso/abi/__init__.py +0 -0
  209. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/enso/abi/approval.py +0 -0
  210. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/enso/abi/erc20.py +0 -0
  211. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/enso/abi/route.py +0 -0
  212. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/enso/base.py +0 -0
  213. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/enso/best_yield.py +0 -0
  214. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/enso/enso.jpg +0 -0
  215. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/enso/networks.py +0 -0
  216. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/enso/prices.py +0 -0
  217. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/enso/route.py +0 -0
  218. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/enso/schema.json +0 -0
  219. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/enso/tokens.py +0 -0
  220. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/enso/wallet.py +0 -0
  221. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/erc20/__init__.py +0 -0
  222. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/erc20/base.py +0 -0
  223. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/erc20/erc20.svg +0 -0
  224. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/erc20/schema.json +0 -0
  225. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/erc721/__init__.py +0 -0
  226. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/erc721/base.py +0 -0
  227. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/erc721/erc721.svg +0 -0
  228. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/erc721/schema.json +0 -0
  229. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/firecrawl/README.md +0 -0
  230. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/firecrawl/__init__.py +0 -0
  231. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/firecrawl/base.py +0 -0
  232. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/firecrawl/clear.py +0 -0
  233. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/firecrawl/crawl.py +0 -0
  234. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/firecrawl/firecrawl.png +0 -0
  235. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/firecrawl/query.py +0 -0
  236. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/firecrawl/schema.json +0 -0
  237. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/firecrawl/scrape.py +0 -0
  238. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/firecrawl/utils.py +0 -0
  239. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/github/README.md +0 -0
  240. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/github/__init__.py +0 -0
  241. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/github/base.py +0 -0
  242. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/github/github.jpg +0 -0
  243. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/github/github_search.py +0 -0
  244. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/github/schema.json +0 -0
  245. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/heurist/__init__.py +0 -0
  246. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/heurist/base.py +0 -0
  247. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/heurist/heurist.png +0 -0
  248. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/heurist/image_generation_animagine_xl.py +0 -0
  249. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/heurist/image_generation_arthemy_comics.py +0 -0
  250. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/heurist/image_generation_arthemy_real.py +0 -0
  251. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/heurist/image_generation_braindance.py +0 -0
  252. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/heurist/image_generation_cyber_realistic_xl.py +0 -0
  253. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/heurist/image_generation_flux_1_dev.py +0 -0
  254. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/heurist/image_generation_sdxl.py +0 -0
  255. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/heurist/schema.json +0 -0
  256. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/http/README.md +0 -0
  257. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/http/__init__.py +0 -0
  258. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/http/base.py +0 -0
  259. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/http/get.py +0 -0
  260. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/http/http.svg +0 -0
  261. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/http/post.py +0 -0
  262. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/http/put.py +0 -0
  263. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/http/schema.json +0 -0
  264. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/lifi/README.md +0 -0
  265. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/lifi/__init__.py +0 -0
  266. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/lifi/base.py +0 -0
  267. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/lifi/lifi.png +0 -0
  268. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/lifi/schema.json +0 -0
  269. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/lifi/token_execute.py +0 -0
  270. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/lifi/token_quote.py +0 -0
  271. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/lifi/utils.py +0 -0
  272. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/moralis/README.md +0 -0
  273. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/moralis/__init__.py +0 -0
  274. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/moralis/api.py +0 -0
  275. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/moralis/base.py +0 -0
  276. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/moralis/fetch_chain_portfolio.py +0 -0
  277. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/moralis/fetch_nft_portfolio.py +0 -0
  278. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/moralis/fetch_solana_portfolio.py +0 -0
  279. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/moralis/fetch_wallet_portfolio.py +0 -0
  280. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/moralis/moralis.png +0 -0
  281. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/moralis/schema.json +0 -0
  282. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/morpho/__init__.py +0 -0
  283. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/morpho/base.py +0 -0
  284. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/morpho/morpho.svg +0 -0
  285. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/morpho/schema.json +0 -0
  286. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/nation/__init__.py +0 -0
  287. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/nation/base.py +0 -0
  288. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/nation/nation.png +0 -0
  289. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/nation/nft_check.py +0 -0
  290. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/nation/schema.json +0 -0
  291. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/openai/__init__.py +0 -0
  292. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/openai/base.py +0 -0
  293. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/openai/dalle_image_generation.py +0 -0
  294. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/openai/gpt_image_generation.py +0 -0
  295. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/openai/gpt_image_to_image.py +0 -0
  296. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/openai/image_to_text.py +0 -0
  297. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/openai/openai.png +0 -0
  298. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/openai/schema.json +0 -0
  299. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/portfolio/README.md +0 -0
  300. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/portfolio/__init__.py +0 -0
  301. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/portfolio/base.py +0 -0
  302. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/portfolio/constants.py +0 -0
  303. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/portfolio/moralis.png +0 -0
  304. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/portfolio/schema.json +0 -0
  305. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/portfolio/token_balances.py +0 -0
  306. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/portfolio/wallet_approvals.py +0 -0
  307. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/portfolio/wallet_defi_positions.py +0 -0
  308. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/portfolio/wallet_history.py +0 -0
  309. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/portfolio/wallet_net_worth.py +0 -0
  310. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/portfolio/wallet_nfts.py +0 -0
  311. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/portfolio/wallet_profitability.py +0 -0
  312. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/portfolio/wallet_profitability_summary.py +0 -0
  313. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/portfolio/wallet_stats.py +0 -0
  314. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/portfolio/wallet_swaps.py +0 -0
  315. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/pyth/__init__.py +0 -0
  316. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/pyth/base.py +0 -0
  317. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/pyth/pyth.svg +0 -0
  318. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/pyth/schema.json +0 -0
  319. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/skills.toml +0 -0
  320. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/slack/__init__.py +0 -0
  321. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/slack/base.py +0 -0
  322. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/slack/get_channel.py +0 -0
  323. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/slack/get_message.py +0 -0
  324. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/slack/schedule_message.py +0 -0
  325. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/slack/schema.json +0 -0
  326. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/slack/send_message.py +0 -0
  327. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/slack/slack.jpg +0 -0
  328. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/supabase/__init__.py +0 -0
  329. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/supabase/base.py +0 -0
  330. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/supabase/delete_data.py +0 -0
  331. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/supabase/fetch_data.py +0 -0
  332. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/supabase/insert_data.py +0 -0
  333. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/supabase/invoke_function.py +0 -0
  334. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/supabase/schema.json +0 -0
  335. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/supabase/supabase.svg +0 -0
  336. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/supabase/update_data.py +0 -0
  337. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/supabase/upsert_data.py +0 -0
  338. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/superfluid/__init__.py +0 -0
  339. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/superfluid/base.py +0 -0
  340. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/superfluid/schema.json +0 -0
  341. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/superfluid/superfluid.svg +0 -0
  342. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/system/__init__.py +0 -0
  343. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/system/add_autonomous_task.py +0 -0
  344. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/system/base.py +0 -0
  345. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/system/delete_autonomous_task.py +0 -0
  346. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/system/edit_autonomous_task.py +0 -0
  347. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/system/list_autonomous_tasks.py +0 -0
  348. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/system/read_agent_api_key.py +0 -0
  349. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/system/regenerate_agent_api_key.py +0 -0
  350. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/system/schema.json +0 -0
  351. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/system/system.svg +0 -0
  352. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/tavily/README.md +0 -0
  353. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/tavily/__init__.py +0 -0
  354. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/tavily/base.py +0 -0
  355. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/tavily/schema.json +0 -0
  356. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/tavily/tavily.jpg +0 -0
  357. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/tavily/tavily_extract.py +0 -0
  358. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/tavily/tavily_search.py +0 -0
  359. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/token/README.md +0 -0
  360. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/token/__init__.py +0 -0
  361. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/token/base.py +0 -0
  362. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/token/constants.py +0 -0
  363. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/token/erc20_transfers.py +0 -0
  364. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/token/moralis.png +0 -0
  365. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/token/schema.json +0 -0
  366. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/token/token_analytics.py +0 -0
  367. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/token/token_price.py +0 -0
  368. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/token/token_search.py +0 -0
  369. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/twitter/__init__.py +0 -0
  370. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/twitter/base.py +0 -0
  371. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/twitter/follow_user.py +0 -0
  372. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/twitter/get_mentions.py +0 -0
  373. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/twitter/get_timeline.py +0 -0
  374. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/twitter/get_user_by_username.py +0 -0
  375. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/twitter/get_user_tweets.py +0 -0
  376. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/twitter/like_tweet.py +0 -0
  377. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/twitter/post_tweet.py +0 -0
  378. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/twitter/reply_tweet.py +0 -0
  379. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/twitter/retweet.py +0 -0
  380. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/twitter/schema.json +0 -0
  381. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/twitter/search_tweets.py +0 -0
  382. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/twitter/twitter.png +0 -0
  383. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/unrealspeech/__init__.py +0 -0
  384. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/unrealspeech/base.py +0 -0
  385. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/unrealspeech/schema.json +0 -0
  386. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/unrealspeech/text_to_speech.py +0 -0
  387. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/unrealspeech/unrealspeech.jpg +0 -0
  388. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_audio/__init__.py +0 -0
  389. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_audio/base.py +0 -0
  390. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_audio/input.py +0 -0
  391. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_audio/schema.json +0 -0
  392. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_audio/venice_audio.py +0 -0
  393. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_audio/venice_logo.jpg +0 -0
  394. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/README.md +0 -0
  395. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/__init__.py +0 -0
  396. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/api.py +0 -0
  397. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/base.py +0 -0
  398. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/config.py +0 -0
  399. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_enhance/README.md +0 -0
  400. {intentkit-0.7.5.dev26/skills/moralis/tests → intentkit-0.7.5.dev28/skills/venice_image/image_enhance}/__init__.py +0 -0
  401. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_enhance/image_enhance.py +0 -0
  402. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_enhance/image_enhance_base.py +0 -0
  403. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_enhance/image_enhance_input.py +0 -0
  404. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_generation/README.md +0 -0
  405. {intentkit-0.7.5.dev26/skills/venice_image/image_enhance → intentkit-0.7.5.dev28/skills/venice_image/image_generation}/__init__.py +0 -0
  406. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_generation/image_generation_base.py +0 -0
  407. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_generation/image_generation_fluently_xl.py +0 -0
  408. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_generation/image_generation_flux_dev.py +0 -0
  409. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +0 -0
  410. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_generation/image_generation_input.py +0 -0
  411. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +0 -0
  412. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_generation/image_generation_pony_realism.py +0 -0
  413. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +0 -0
  414. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_generation/image_generation_venice_sd35.py +0 -0
  415. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_upscale/README.md +0 -0
  416. {intentkit-0.7.5.dev26/skills/venice_image/image_generation → intentkit-0.7.5.dev28/skills/venice_image/image_upscale}/__init__.py +0 -0
  417. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_upscale/image_upscale.py +0 -0
  418. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_upscale/image_upscale_base.py +0 -0
  419. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_upscale/image_upscale_input.py +0 -0
  420. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_vision/README.md +0 -0
  421. {intentkit-0.7.5.dev26/skills/venice_image/image_upscale → intentkit-0.7.5.dev28/skills/venice_image/image_vision}/__init__.py +0 -0
  422. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_vision/image_vision.py +0 -0
  423. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_vision/image_vision_base.py +0 -0
  424. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/image_vision/image_vision_input.py +0 -0
  425. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/schema.json +0 -0
  426. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/utils.py +0 -0
  427. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/venice_image/venice_image.jpg +0 -0
  428. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/web_scraper/README.md +0 -0
  429. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/web_scraper/__init__.py +0 -0
  430. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/web_scraper/base.py +0 -0
  431. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/web_scraper/document_indexer.py +0 -0
  432. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/web_scraper/langchain.png +0 -0
  433. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/web_scraper/schema.json +0 -0
  434. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/web_scraper/scrape_and_index.py +0 -0
  435. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/web_scraper/utils.py +0 -0
  436. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/web_scraper/website_indexer.py +0 -0
  437. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/weth/__init__.py +0 -0
  438. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/weth/base.py +0 -0
  439. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/weth/schema.json +0 -0
  440. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/weth/weth.svg +0 -0
  441. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/wow/__init__.py +0 -0
  442. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/wow/base.py +0 -0
  443. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/wow/schema.json +0 -0
  444. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/wow/wow.svg +0 -0
  445. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/xmtp/README.md +0 -0
  446. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/xmtp/__init__.py +0 -0
  447. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/xmtp/base.py +0 -0
  448. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/xmtp/price.py +0 -0
  449. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/xmtp/schema.json +0 -0
  450. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/xmtp/swap.py +0 -0
  451. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/xmtp/transfer.py +0 -0
  452. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/skills/xmtp/xmtp.png +0 -0
  453. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/utils/__init__.py +0 -0
  454. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/utils/chain.py +0 -0
  455. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/utils/error.py +0 -0
  456. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/utils/logging.py +0 -0
  457. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/utils/random.py +0 -0
  458. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/utils/s3.py +0 -0
  459. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/utils/slack_alert.py +0 -0
  460. {intentkit-0.7.5.dev26 → intentkit-0.7.5.dev28}/utils/tx.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intentkit
3
- Version: 0.7.5.dev26
3
+ Version: 0.7.5.dev28
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
@@ -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.7.5-dev26"
6
+ __version__ = "0.7.5-dev28"
7
7
  __author__ = "hyacinthus"
8
8
  __email__ = "hyacinthus@gmail.com"
9
9
 
@@ -2,7 +2,7 @@ import logging
2
2
  import time
3
3
  from datetime import datetime, timedelta, timezone
4
4
  from decimal import Decimal
5
- from typing import Any, Dict, List, Optional, Tuple
5
+ from typing import Any, AsyncGenerator, Dict, List, Optional, Tuple
6
6
 
7
7
  from sqlalchemy import func, select, text, update
8
8
 
@@ -17,7 +17,13 @@ from intentkit.models.agent import (
17
17
  AgentUpdate,
18
18
  )
19
19
  from intentkit.models.agent_data import AgentData, AgentQuota, AgentQuotaTable
20
- from intentkit.models.credit import CreditEventTable, EventType, UpstreamType
20
+ from intentkit.models.credit import (
21
+ CreditAccount,
22
+ CreditEventTable,
23
+ EventType,
24
+ OwnerType,
25
+ UpstreamType,
26
+ )
21
27
  from intentkit.models.db import get_session
22
28
  from intentkit.models.skill import (
23
29
  AgentSkillData,
@@ -660,7 +666,31 @@ class AgentStore(SkillStoreABC):
660
666
  agent_store = AgentStore()
661
667
 
662
668
 
663
- async def update_agent_action_cost():
669
+ async def _iterate_agent_id_batches(
670
+ batch_size: int = 100,
671
+ ) -> AsyncGenerator[list[str], None]:
672
+ """Yield agent IDs in ascending batches to limit memory usage."""
673
+
674
+ last_id: Optional[str] = None
675
+ while True:
676
+ async with get_session() as session:
677
+ query = select(AgentTable.id).order_by(AgentTable.id)
678
+
679
+ if last_id:
680
+ query = query.where(AgentTable.id > last_id)
681
+
682
+ query = query.limit(batch_size)
683
+ result = await session.execute(query)
684
+ agent_ids = [row[0] for row in result]
685
+
686
+ if not agent_ids:
687
+ break
688
+
689
+ yield agent_ids
690
+ last_id = agent_ids[-1]
691
+
692
+
693
+ async def update_agent_action_cost(batch_size: int = 100) -> None:
664
694
  """
665
695
  Update action costs for all agents.
666
696
 
@@ -677,42 +707,20 @@ async def update_agent_action_cost():
677
707
  """
678
708
  logger.info("Starting update of agent average action costs")
679
709
  start_time = time.time()
680
- batch_size = 100
681
- last_id = None
682
710
  total_updated = 0
683
711
 
684
- while True:
685
- # Get a batch of agent IDs ordered by ID
686
- async with get_session() as session:
687
- query = select(AgentTable.id).order_by(AgentTable.id)
688
-
689
- # Apply pagination if we have a last_id from previous batch
690
- if last_id:
691
- query = query.where(AgentTable.id > last_id)
692
-
693
- query = query.limit(batch_size)
694
- result = await session.execute(query)
695
- agent_ids = [row[0] for row in result]
696
-
697
- # If no more agents, we're done
698
- if not agent_ids:
699
- break
700
-
701
- # Update last_id for next batch
702
- last_id = agent_ids[-1]
703
-
704
- # Process this batch of agents
712
+ async for agent_ids in _iterate_agent_id_batches(batch_size):
705
713
  logger.info(
706
- f"Processing batch of {len(agent_ids)} agents starting with ID {agent_ids[0]}"
714
+ "Processing batch of %s agents starting with ID %s",
715
+ len(agent_ids),
716
+ agent_ids[0],
707
717
  )
708
718
  batch_start_time = time.time()
709
719
 
710
720
  for agent_id in agent_ids:
711
721
  try:
712
- # Calculate action costs for this agent
713
722
  costs = await agent_action_cost(agent_id)
714
723
 
715
- # Update the agent's quota record
716
724
  async with get_session() as session:
717
725
  update_stmt = (
718
726
  update(AgentQuotaTable)
@@ -730,17 +738,188 @@ async def update_agent_action_cost():
730
738
  await session.commit()
731
739
 
732
740
  total_updated += 1
733
- except Exception as e:
741
+ except Exception as e: # pragma: no cover - log path only
742
+ logger.error(
743
+ "Error updating action costs for agent %s: %s", agent_id, str(e)
744
+ )
745
+
746
+ batch_time = time.time() - batch_start_time
747
+ logger.info("Completed batch in %.3fs", batch_time)
748
+
749
+ total_time = time.time() - start_time
750
+ logger.info(
751
+ "Finished updating action costs for %s agents in %.3fs",
752
+ total_updated,
753
+ total_time,
754
+ )
755
+
756
+
757
+ async def update_agents_account_snapshot(batch_size: int = 100) -> None:
758
+ """Refresh the cached credit account snapshot for every agent."""
759
+
760
+ logger.info("Starting update of agent account snapshots")
761
+ start_time = time.time()
762
+ total_updated = 0
763
+
764
+ async for agent_ids in _iterate_agent_id_batches(batch_size):
765
+ logger.info(
766
+ "Processing snapshot batch of %s agents starting with ID %s",
767
+ len(agent_ids),
768
+ agent_ids[0],
769
+ )
770
+ batch_start_time = time.time()
771
+
772
+ for agent_id in agent_ids:
773
+ try:
774
+ async with get_session() as session:
775
+ account = await CreditAccount.get_or_create_in_session(
776
+ session, OwnerType.AGENT, agent_id
777
+ )
778
+ await session.execute(
779
+ update(AgentTable)
780
+ .where(AgentTable.id == agent_id)
781
+ .values(
782
+ account_snapshot=account.model_dump(mode="json"),
783
+ )
784
+ )
785
+ await session.commit()
786
+
787
+ total_updated += 1
788
+ except Exception as exc: # pragma: no cover - log path only
789
+ logger.error(
790
+ "Error updating account snapshot for agent %s: %s",
791
+ agent_id,
792
+ exc,
793
+ )
794
+
795
+ batch_time = time.time() - batch_start_time
796
+ logger.info("Completed snapshot batch in %.3fs", batch_time)
797
+
798
+ total_time = time.time() - start_time
799
+ logger.info(
800
+ "Finished updating account snapshots for %s agents in %.3fs",
801
+ total_updated,
802
+ total_time,
803
+ )
804
+
805
+
806
+ async def update_agents_assets(batch_size: int = 100) -> None:
807
+ """Refresh cached asset information for all agents."""
808
+
809
+ from intentkit.core.asset import agent_asset
810
+
811
+ logger.info("Starting update of agent assets")
812
+ start_time = time.time()
813
+ total_updated = 0
814
+
815
+ async for agent_ids in _iterate_agent_id_batches(batch_size):
816
+ logger.info(
817
+ "Processing asset batch of %s agents starting with ID %s",
818
+ len(agent_ids),
819
+ agent_ids[0],
820
+ )
821
+ batch_start_time = time.time()
822
+
823
+ for agent_id in agent_ids:
824
+ try:
825
+ assets = await agent_asset(agent_id)
826
+ except IntentKitAPIError as exc: # pragma: no cover - log path only
827
+ logger.warning(
828
+ "Skipping asset update for agent %s due to API error: %s",
829
+ agent_id,
830
+ exc,
831
+ )
832
+ continue
833
+ except Exception as exc: # pragma: no cover - log path only
834
+ logger.error("Error retrieving assets for agent %s: %s", agent_id, exc)
835
+ continue
836
+
837
+ try:
838
+ async with get_session() as session:
839
+ await session.execute(
840
+ update(AgentTable)
841
+ .where(AgentTable.id == agent_id)
842
+ .values(assets=assets.model_dump(mode="json"))
843
+ )
844
+ await session.commit()
845
+
846
+ total_updated += 1
847
+ except Exception as exc: # pragma: no cover - log path only
848
+ logger.error(
849
+ "Error updating asset cache for agent %s: %s", agent_id, exc
850
+ )
851
+
852
+ batch_time = time.time() - batch_start_time
853
+ logger.info("Completed asset batch in %.3fs", batch_time)
854
+
855
+ total_time = time.time() - start_time
856
+ logger.info(
857
+ "Finished updating assets for %s agents in %.3fs",
858
+ total_updated,
859
+ total_time,
860
+ )
861
+
862
+
863
+ async def update_agents_statistics(
864
+ *, end_time: Optional[datetime] = None, batch_size: int = 100
865
+ ) -> None:
866
+ """Refresh cached statistics for every agent."""
867
+
868
+ from intentkit.core.statistics import get_agent_statistics
869
+
870
+ if end_time is None:
871
+ end_time = datetime.now(timezone.utc)
872
+ elif end_time.tzinfo is None:
873
+ end_time = end_time.replace(tzinfo=timezone.utc)
874
+ else:
875
+ end_time = end_time.astimezone(timezone.utc)
876
+
877
+ logger.info("Starting update of agent statistics using end_time %s", end_time)
878
+ start_time = time.time()
879
+ total_updated = 0
880
+
881
+ async for agent_ids in _iterate_agent_id_batches(batch_size):
882
+ logger.info(
883
+ "Processing statistics batch of %s agents starting with ID %s",
884
+ len(agent_ids),
885
+ agent_ids[0],
886
+ )
887
+ batch_start_time = time.time()
888
+
889
+ for agent_id in agent_ids:
890
+ try:
891
+ statistics = await get_agent_statistics(agent_id, end_time=end_time)
892
+ except Exception as exc: # pragma: no cover - log path only
893
+ logger.error(
894
+ "Error computing statistics for agent %s: %s", agent_id, exc
895
+ )
896
+ continue
897
+
898
+ try:
899
+ async with get_session() as session:
900
+ await session.execute(
901
+ update(AgentTable)
902
+ .where(AgentTable.id == agent_id)
903
+ .values(statistics=statistics.model_dump(mode="json"))
904
+ )
905
+ await session.commit()
906
+
907
+ total_updated += 1
908
+ except Exception as exc: # pragma: no cover - log path only
734
909
  logger.error(
735
- f"Error updating action costs for agent {agent_id}: {str(e)}"
910
+ "Error updating statistics cache for agent %s: %s",
911
+ agent_id,
912
+ exc,
736
913
  )
737
914
 
738
915
  batch_time = time.time() - batch_start_time
739
- logger.info(f"Completed batch in {batch_time:.3f}s")
916
+ logger.info("Completed statistics batch in %.3fs", batch_time)
740
917
 
741
918
  total_time = time.time() - start_time
742
919
  logger.info(
743
- f"Finished updating action costs for {total_updated} agents in {total_time:.3f}s"
920
+ "Finished updating statistics for %s agents in %.3fs",
921
+ total_updated,
922
+ total_time,
744
923
  )
745
924
 
746
925
 
@@ -0,0 +1,208 @@
1
+ """Shared asset retrieval utilities for agents."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import logging
6
+ from decimal import Decimal
7
+ from typing import Optional
8
+
9
+ import httpx
10
+ from pydantic import BaseModel, Field
11
+ from web3 import Web3
12
+
13
+ from intentkit.clients.web3 import get_web3_client
14
+ from intentkit.config.config import config
15
+ from intentkit.core.agent import agent_store
16
+ from intentkit.models.agent import Agent
17
+ from intentkit.models.agent_data import AgentData
18
+ from intentkit.utils.error import IntentKitAPIError
19
+
20
+ logger = logging.getLogger(__name__)
21
+
22
+ # USDC contract addresses for different networks
23
+ USDC_ADDRESSES = {
24
+ "base-mainnet": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
25
+ "ethereum-mainnet": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
26
+ "arbitrum-mainnet": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
27
+ "optimism-mainnet": "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
28
+ "polygon-mainnet": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
29
+ }
30
+
31
+ # NATION token address for base-mainnet
32
+ NATION_ADDRESS = "0x2f74f818e81685c8086dd783837a4605a90474b8"
33
+
34
+
35
+ class Asset(BaseModel):
36
+ """Model for individual asset with symbol and balance."""
37
+
38
+ symbol: str = Field(description="Asset symbol (e.g., ETH, USDC, NATION)")
39
+ balance: Decimal = Field(description="Asset balance as decimal")
40
+
41
+
42
+ class AgentAssets(BaseModel):
43
+ """Simplified agent asset response with wallet net worth and tokens."""
44
+
45
+ net_worth: str = Field(description="Total wallet net worth in USD")
46
+ tokens: list[Asset] = Field(description="List of assets with symbol and balance")
47
+
48
+
49
+ async def _get_token_balance(
50
+ web3_client: Web3, wallet_address: str, token_address: str
51
+ ) -> Decimal:
52
+ """Get ERC-20 token balance for a wallet address."""
53
+ try:
54
+ # ERC-20 standard ABI for balanceOf and decimals
55
+ erc20_abi = [
56
+ {
57
+ "constant": True,
58
+ "inputs": [{"name": "_owner", "type": "address"}],
59
+ "name": "balanceOf",
60
+ "outputs": [{"name": "balance", "type": "uint256"}],
61
+ "type": "function",
62
+ },
63
+ {
64
+ "constant": True,
65
+ "inputs": [],
66
+ "name": "decimals",
67
+ "outputs": [{"name": "", "type": "uint8"}],
68
+ "type": "function",
69
+ },
70
+ ]
71
+
72
+ contract = web3_client.eth.contract(
73
+ address=web3_client.to_checksum_address(token_address), abi=erc20_abi
74
+ )
75
+
76
+ balance_wei = contract.functions.balanceOf(
77
+ web3_client.to_checksum_address(wallet_address)
78
+ ).call()
79
+ decimals = contract.functions.decimals().call()
80
+
81
+ # Convert from wei to token units using actual decimals
82
+ balance = Decimal(balance_wei) / Decimal(10**decimals)
83
+ return balance
84
+ except Exception as exc: # pragma: no cover - log path only
85
+ logger.error("Error getting token balance: %s", exc)
86
+ return Decimal("0")
87
+
88
+
89
+ async def _get_eth_balance(web3_client: Web3, wallet_address: str) -> Decimal:
90
+ """Get ETH balance for a wallet address."""
91
+ try:
92
+ balance_wei = web3_client.eth.get_balance(
93
+ web3_client.to_checksum_address(wallet_address)
94
+ )
95
+ balance = Decimal(balance_wei) / Decimal(10**18)
96
+ return balance
97
+ except Exception as exc: # pragma: no cover - log path only
98
+ logger.error("Error getting ETH balance: %s", exc)
99
+ return Decimal("0")
100
+
101
+
102
+ async def _get_wallet_net_worth(wallet_address: str) -> str:
103
+ """Get wallet net worth using Moralis API."""
104
+ try:
105
+ async with httpx.AsyncClient() as client:
106
+ url = (
107
+ "https://deep-index.moralis.io/api/v2.2/wallets/"
108
+ f"{wallet_address}/net-worth"
109
+ )
110
+ headers = {
111
+ "accept": "application/json",
112
+ "X-API-Key": config.moralis_api_key,
113
+ }
114
+ params = {
115
+ "exclude_spam": "true",
116
+ "exclude_unverified_contracts": "true",
117
+ "chains": ["eth", "base", "polygon", "arbitrum", "optimism"],
118
+ }
119
+
120
+ response = await client.get(url, headers=headers, params=params)
121
+ response.raise_for_status()
122
+ data = response.json()
123
+ return data.get("total_networth_usd", "0")
124
+ except Exception as exc: # pragma: no cover - log path only
125
+ logger.error("Error getting wallet net worth for %s: %s", wallet_address, exc)
126
+ return "0"
127
+
128
+
129
+ async def _build_assets_list(
130
+ agent: Agent, agent_data: AgentData, web3_client: Web3
131
+ ) -> list[Asset]:
132
+ """Build the assets list based on network conditions and agent configuration."""
133
+ assets: list[Asset] = []
134
+
135
+ if not agent_data or not agent_data.evm_wallet_address:
136
+ return assets
137
+
138
+ wallet_address = agent_data.evm_wallet_address
139
+ network_id: Optional[str] = agent.network_id
140
+
141
+ # ETH is always included
142
+ eth_balance = await _get_eth_balance(web3_client, wallet_address)
143
+ assets.append(Asset(symbol="ETH", balance=eth_balance))
144
+
145
+ if network_id and network_id.endswith("-mainnet"):
146
+ usdc_address = USDC_ADDRESSES.get(str(network_id))
147
+ if usdc_address:
148
+ usdc_balance = await _get_token_balance(
149
+ web3_client, wallet_address, usdc_address
150
+ )
151
+ assets.append(Asset(symbol="USDC", balance=usdc_balance))
152
+
153
+ if network_id == "base-mainnet":
154
+ nation_balance = await _get_token_balance(
155
+ web3_client, wallet_address, NATION_ADDRESS
156
+ )
157
+ assets.append(Asset(symbol="NATION", balance=nation_balance))
158
+
159
+ if agent.ticker and agent.token_address:
160
+ lower_addresses = [addr.lower() for addr in USDC_ADDRESSES.values()]
161
+ is_usdc = agent.token_address.lower() in lower_addresses
162
+ is_nation = agent.token_address.lower() == NATION_ADDRESS.lower()
163
+
164
+ if not is_usdc and not is_nation:
165
+ custom_balance = await _get_token_balance(
166
+ web3_client, wallet_address, agent.token_address
167
+ )
168
+ assets.append(Asset(symbol=agent.ticker, balance=custom_balance))
169
+
170
+ return assets
171
+
172
+
173
+ async def agent_asset(agent_id: str) -> AgentAssets:
174
+ """Fetch wallet net worth and token balances for an agent."""
175
+ agent = await Agent.get(agent_id)
176
+ if not agent:
177
+ raise IntentKitAPIError(404, "AgentNotFound", "Agent not found")
178
+
179
+ agent_data = await AgentData.get(agent_id)
180
+ if not agent_data or not agent_data.evm_wallet_address:
181
+ return AgentAssets(net_worth="0", tokens=[])
182
+
183
+ if not agent.network_id:
184
+ return AgentAssets(net_worth="0", tokens=[])
185
+
186
+ try:
187
+ web3_client = get_web3_client(str(agent.network_id), agent_store)
188
+ tokens = await _build_assets_list(agent, agent_data, web3_client)
189
+ net_worth = await _get_wallet_net_worth(agent_data.evm_wallet_address)
190
+ return AgentAssets(net_worth=net_worth, tokens=tokens)
191
+ except IntentKitAPIError:
192
+ raise
193
+ except Exception as exc:
194
+ logger.error("Error getting agent assets for %s: %s", agent_id, exc)
195
+ raise IntentKitAPIError(
196
+ 500, "AgentAssetError", "Failed to retrieve agent assets"
197
+ ) from exc
198
+
199
+
200
+ __all__ = [
201
+ "Asset",
202
+ "AgentAssets",
203
+ "USDC_ADDRESSES",
204
+ "NATION_ADDRESS",
205
+ "agent_asset",
206
+ "_build_assets_list",
207
+ "_get_wallet_net_worth",
208
+ ]
@@ -0,0 +1,169 @@
1
+ """Agent statistics utilities."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from datetime import datetime, timedelta, timezone
6
+ from decimal import Decimal
7
+ from typing import Optional
8
+
9
+ from pydantic import BaseModel, Field
10
+ from sqlalchemy import func, select
11
+ from sqlalchemy.ext.asyncio import AsyncSession
12
+
13
+ from intentkit.models.agent_data import AgentQuota, AgentQuotaTable
14
+ from intentkit.models.credit import CreditAccount, CreditEventTable, OwnerType
15
+ from intentkit.models.db import get_session
16
+
17
+
18
+ class AgentStatistics(BaseModel):
19
+ """Aggregated statistics for an agent credit account."""
20
+
21
+ agent_id: str = Field(description="ID of the agent")
22
+ account_id: str = Field(description="ID of the associated credit account")
23
+ balance: Decimal = Field(description="Current credit account balance")
24
+ total_income: Decimal = Field(description="Total income across all events")
25
+ net_income: Decimal = Field(description="Net income from fee allocations")
26
+ permanent_income: Decimal = Field(
27
+ description="Total permanent income across all events"
28
+ )
29
+ permanent_profit: Decimal = Field(
30
+ description="Permanent profit allocated to the agent"
31
+ )
32
+ last_24h_income: Decimal = Field(
33
+ description="Income generated during the last 24 hours"
34
+ )
35
+ last_24h_permanent_income: Decimal = Field(
36
+ description="Permanent income generated during the last 24 hours"
37
+ )
38
+ avg_action_cost: Decimal = Field(description="Average action cost")
39
+ min_action_cost: Decimal = Field(description="Minimum action cost")
40
+ max_action_cost: Decimal = Field(description="Maximum action cost")
41
+ low_action_cost: Decimal = Field(description="20th percentile action cost")
42
+ medium_action_cost: Decimal = Field(description="60th percentile action cost")
43
+ high_action_cost: Decimal = Field(description="80th percentile action cost")
44
+
45
+
46
+ async def get_agent_statistics(
47
+ agent_id: str,
48
+ *,
49
+ end_time: Optional[datetime] = None,
50
+ session: Optional[AsyncSession] = None,
51
+ ) -> AgentStatistics:
52
+ """Calculate statistics for an agent credit account.
53
+
54
+ Args:
55
+ agent_id: ID of the agent.
56
+ end_time: Optional end time used as the inclusive boundary for
57
+ time-windowed aggregations. Defaults to the current UTC time.
58
+ session: Optional database session to reuse. When omitted, a
59
+ standalone session will be created and committed automatically.
60
+
61
+ Returns:
62
+ Aggregated statistics for the agent.
63
+ """
64
+
65
+ managed_session = session is None
66
+ if end_time is None:
67
+ end_time = datetime.now(timezone.utc)
68
+ elif end_time.tzinfo is None:
69
+ end_time = end_time.replace(tzinfo=timezone.utc)
70
+ else:
71
+ end_time = end_time.astimezone(timezone.utc)
72
+
73
+ async def _compute(session: AsyncSession) -> AgentStatistics:
74
+ account = await CreditAccount.get_or_create_in_session(
75
+ session, OwnerType.AGENT, agent_id
76
+ )
77
+ balance = account.free_credits + account.reward_credits + account.credits
78
+
79
+ totals_stmt = select(
80
+ func.sum(CreditEventTable.total_amount).label("total_income"),
81
+ func.sum(CreditEventTable.fee_agent_amount).label("net_income"),
82
+ func.sum(CreditEventTable.permanent_amount).label("permanent_income"),
83
+ func.sum(CreditEventTable.fee_agent_permanent_amount).label(
84
+ "permanent_profit"
85
+ ),
86
+ ).where(CreditEventTable.agent_id == agent_id)
87
+ totals_result = await session.execute(totals_stmt)
88
+ totals_row = totals_result.first()
89
+
90
+ total_income = (
91
+ totals_row.total_income
92
+ if totals_row and totals_row.total_income
93
+ else Decimal("0")
94
+ )
95
+ net_income = (
96
+ totals_row.net_income
97
+ if totals_row and totals_row.net_income
98
+ else Decimal("0")
99
+ )
100
+ permanent_income = (
101
+ totals_row.permanent_income
102
+ if totals_row and totals_row.permanent_income
103
+ else Decimal("0")
104
+ )
105
+ permanent_profit = (
106
+ totals_row.permanent_profit
107
+ if totals_row and totals_row.permanent_profit
108
+ else Decimal("0")
109
+ )
110
+
111
+ window_start = end_time - timedelta(hours=24)
112
+ window_stmt = select(
113
+ func.sum(CreditEventTable.total_amount).label("last_24h_income"),
114
+ func.sum(CreditEventTable.permanent_amount).label(
115
+ "last_24h_permanent_income"
116
+ ),
117
+ ).where(
118
+ CreditEventTable.agent_id == agent_id,
119
+ CreditEventTable.created_at >= window_start,
120
+ CreditEventTable.created_at <= end_time,
121
+ )
122
+ window_result = await session.execute(window_stmt)
123
+ window_row = window_result.first()
124
+
125
+ last_24h_income = (
126
+ window_row.last_24h_income
127
+ if window_row and window_row.last_24h_income
128
+ else Decimal("0")
129
+ )
130
+ last_24h_permanent_income = (
131
+ window_row.last_24h_permanent_income
132
+ if window_row and window_row.last_24h_permanent_income
133
+ else Decimal("0")
134
+ )
135
+
136
+ quota_row = await session.get(AgentQuotaTable, agent_id)
137
+ quota = (
138
+ AgentQuota.model_validate(quota_row)
139
+ if quota_row
140
+ else AgentQuota(id=agent_id)
141
+ )
142
+
143
+ return AgentStatistics(
144
+ agent_id=agent_id,
145
+ account_id=account.id,
146
+ balance=balance,
147
+ total_income=total_income,
148
+ net_income=net_income,
149
+ permanent_income=permanent_income,
150
+ permanent_profit=permanent_profit,
151
+ last_24h_income=last_24h_income,
152
+ last_24h_permanent_income=last_24h_permanent_income,
153
+ avg_action_cost=quota.avg_action_cost,
154
+ min_action_cost=quota.min_action_cost,
155
+ max_action_cost=quota.max_action_cost,
156
+ low_action_cost=quota.low_action_cost,
157
+ medium_action_cost=quota.medium_action_cost,
158
+ high_action_cost=quota.high_action_cost,
159
+ )
160
+
161
+ if managed_session:
162
+ async with get_session() as managed:
163
+ statistics = await _compute(managed)
164
+ await managed.commit()
165
+ return statistics
166
+ return await _compute(session)
167
+
168
+
169
+ __all__ = ["AgentStatistics", "get_agent_statistics"]
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "intentkit"
3
- version = "0.7.5-dev26"
3
+ version = "0.7.5-dev28"
4
4
  description = "Intent-based AI Agent Platform - Core Package"
5
5
  authors = [{ name = "hyacinthus", email = "hyacinthus@gmail.com" }]
6
6
  requires-python = ">=3.12"