intentkit 0.8.34.dev2__tar.gz → 0.8.34.dev4__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 (479) hide show
  1. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/PKG-INFO +1 -1
  2. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/__init__.py +1 -1
  3. {intentkit-0.8.34.dev2/intentkit/utils → intentkit-0.8.34.dev4/intentkit/clients}/s3.py +51 -29
  4. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/config/config.py +8 -6
  5. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/chat.py +2 -2
  6. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/engine.py +11 -3
  7. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/scheduler.py +0 -10
  8. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/models/db.py +26 -76
  9. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/models/skills.csv +0 -1
  10. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/heurist/image_generation_animagine_xl.py +1 -1
  11. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/heurist/image_generation_arthemy_comics.py +1 -1
  12. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/heurist/image_generation_arthemy_real.py +1 -1
  13. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/heurist/image_generation_braindance.py +1 -1
  14. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +1 -1
  15. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/heurist/image_generation_flux_1_dev.py +1 -1
  16. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/heurist/image_generation_sdxl.py +1 -1
  17. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/openai/dalle_image_generation.py +1 -1
  18. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/openai/gpt_avatar_generator.py +1 -1
  19. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/openai/gpt_image_generation.py +1 -1
  20. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/openai/gpt_image_mini_generator.py +1 -1
  21. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/openai/gpt_image_to_image.py +1 -1
  22. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_audio/venice_audio.py +1 -1
  23. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/api.py +1 -1
  24. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_generation/image_generation_base.py +2 -1
  25. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/x402/__init__.py +0 -3
  26. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/x402/schema.json +10 -15
  27. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/pyproject.toml +1 -1
  28. intentkit-0.8.34.dev2/intentkit/skills/x402/ask_agent.py +0 -98
  29. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/.gitignore +0 -0
  30. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/LICENSE +0 -0
  31. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/LICENSE +0 -0
  32. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/MANIFEST.in +0 -0
  33. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/README.md +0 -0
  34. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/abstracts/__init__.py +0 -0
  35. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/abstracts/agent.py +0 -0
  36. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/abstracts/api.py +0 -0
  37. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/abstracts/engine.py +0 -0
  38. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/abstracts/graph.py +0 -0
  39. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/abstracts/skill.py +0 -0
  40. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/abstracts/twitter.py +0 -0
  41. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/clients/__init__.py +0 -0
  42. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/clients/cdp.py +0 -0
  43. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/clients/twitter.py +0 -0
  44. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/clients/web3.py +0 -0
  45. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/config/__init__.py +0 -0
  46. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/__init__.py +0 -0
  47. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/account_checking.py +0 -0
  48. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/agent.py +0 -0
  49. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/api.py +0 -0
  50. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/asset.py +0 -0
  51. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/client.py +0 -0
  52. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/credit.py +0 -0
  53. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/draft.py +0 -0
  54. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/draft_chat.py +0 -0
  55. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/manager/__init__.py +0 -0
  56. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/manager/engine.py +0 -0
  57. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/manager/service.py +0 -0
  58. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/manager/skills.py +0 -0
  59. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/middleware.py +0 -0
  60. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/prompt.py +0 -0
  61. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/core/statistics.py +0 -0
  62. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/models/agent.py +0 -0
  63. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/models/agent_data.py +0 -0
  64. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/models/agent_public.json +0 -0
  65. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/models/agent_schema.json +0 -0
  66. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/models/app_setting.py +0 -0
  67. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/models/base.py +0 -0
  68. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/models/chat.py +0 -0
  69. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/models/credit.py +0 -0
  70. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/models/db_mig.py +0 -0
  71. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/models/draft.py +0 -0
  72. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/models/llm.csv +0 -0
  73. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/models/llm.py +0 -0
  74. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/models/redis.py +0 -0
  75. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/models/skill.py +0 -0
  76. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/models/team.py +0 -0
  77. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/models/user.py +0 -0
  78. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/__init__.py +0 -0
  79. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/acolyt/__init__.py +0 -0
  80. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/acolyt/acolyt.jpg +0 -0
  81. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/acolyt/ask.py +0 -0
  82. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/acolyt/base.py +0 -0
  83. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/acolyt/schema.json +0 -0
  84. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/aixbt/README.md +0 -0
  85. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/aixbt/__init__.py +0 -0
  86. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/aixbt/aixbt.jpg +0 -0
  87. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/aixbt/base.py +0 -0
  88. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/aixbt/projects.py +0 -0
  89. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/aixbt/schema.json +0 -0
  90. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/allora/__init__.py +0 -0
  91. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/allora/allora.jpeg +0 -0
  92. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/allora/base.py +0 -0
  93. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/allora/price.py +0 -0
  94. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/allora/schema.json +0 -0
  95. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/base.py +0 -0
  96. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/basename/__init__.py +0 -0
  97. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/basename/base.py +0 -0
  98. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/basename/basename.svg +0 -0
  99. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/basename/schema.json +0 -0
  100. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/carv/README.md +0 -0
  101. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/carv/__init__.py +0 -0
  102. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/carv/base.py +0 -0
  103. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/carv/carv.webp +0 -0
  104. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/carv/fetch_news.py +0 -0
  105. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/carv/onchain_query.py +0 -0
  106. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/carv/schema.json +0 -0
  107. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/carv/token_info_and_price.py +0 -0
  108. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/casino/README.md +0 -0
  109. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/casino/__init__.py +0 -0
  110. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/casino/base.py +0 -0
  111. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/casino/casino.png +0 -0
  112. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/casino/deck_draw.py +0 -0
  113. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/casino/deck_shuffle.py +0 -0
  114. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/casino/dice_roll.py +0 -0
  115. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/casino/schema.json +0 -0
  116. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/casino/utils.py +0 -0
  117. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cdp/__init__.py +0 -0
  118. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cdp/base.py +0 -0
  119. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cdp/cdp.png +0 -0
  120. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cdp/schema.json +0 -0
  121. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/chainlist/README.md +0 -0
  122. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/chainlist/__init__.py +0 -0
  123. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/chainlist/base.py +0 -0
  124. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/chainlist/chain_lookup.py +0 -0
  125. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/chainlist/chainlist.png +0 -0
  126. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/chainlist/schema.json +0 -0
  127. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/common/__init__.py +0 -0
  128. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/common/base.py +0 -0
  129. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/common/common.jpg +0 -0
  130. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/common/current_time.py +0 -0
  131. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/common/schema.json +0 -0
  132. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cookiefun/README.md +0 -0
  133. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cookiefun/__init__.py +0 -0
  134. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cookiefun/base.py +0 -0
  135. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cookiefun/constants.py +0 -0
  136. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cookiefun/cookiefun.png +0 -0
  137. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cookiefun/get_account_details.py +0 -0
  138. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cookiefun/get_account_feed.py +0 -0
  139. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cookiefun/get_account_smart_followers.py +0 -0
  140. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cookiefun/get_sectors.py +0 -0
  141. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cookiefun/schema.json +0 -0
  142. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cookiefun/search_accounts.py +0 -0
  143. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cryptocompare/__init__.py +0 -0
  144. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cryptocompare/api.py +0 -0
  145. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cryptocompare/base.py +0 -0
  146. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cryptocompare/cryptocompare.png +0 -0
  147. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cryptocompare/fetch_news.py +0 -0
  148. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cryptocompare/fetch_price.py +0 -0
  149. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cryptocompare/fetch_top_exchanges.py +0 -0
  150. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cryptocompare/fetch_top_market_cap.py +0 -0
  151. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cryptocompare/fetch_top_volume.py +0 -0
  152. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cryptocompare/fetch_trading_signals.py +0 -0
  153. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cryptocompare/schema.json +0 -0
  154. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cryptopanic/__init__.py +0 -0
  155. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cryptopanic/base.py +0 -0
  156. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cryptopanic/cryptopanic.png +0 -0
  157. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cryptopanic/fetch_crypto_news.py +0 -0
  158. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +0 -0
  159. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/cryptopanic/schema.json +0 -0
  160. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dapplooker/README.md +0 -0
  161. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dapplooker/__init__.py +0 -0
  162. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dapplooker/base.py +0 -0
  163. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dapplooker/dapplooker.jpg +0 -0
  164. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dapplooker/dapplooker_token_data.py +0 -0
  165. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dapplooker/schema.json +0 -0
  166. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/__init__.py +0 -0
  167. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/api.py +0 -0
  168. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/base.py +0 -0
  169. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/coins/__init__.py +0 -0
  170. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +0 -0
  171. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/coins/fetch_block.py +0 -0
  172. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/coins/fetch_current_prices.py +0 -0
  173. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/coins/fetch_first_price.py +0 -0
  174. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/coins/fetch_historical_prices.py +0 -0
  175. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/coins/fetch_price_chart.py +0 -0
  176. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/coins/fetch_price_percentage.py +0 -0
  177. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/config/__init__.py +0 -0
  178. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/config/chains.py +0 -0
  179. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/defillama.jpeg +0 -0
  180. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/fees/__init__.py +0 -0
  181. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/fees/fetch_fees_overview.py +0 -0
  182. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/schema.json +0 -0
  183. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/stablecoins/__init__.py +0 -0
  184. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +0 -0
  185. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +0 -0
  186. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +0 -0
  187. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +0 -0
  188. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/tests/__init__.py +0 -0
  189. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/tests/api_integration.test.py +0 -0
  190. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/tests/api_unit.test.py +0 -0
  191. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/tvl/__init__.py +0 -0
  192. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +0 -0
  193. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/tvl/fetch_chains.py +0 -0
  194. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/tvl/fetch_historical_tvl.py +0 -0
  195. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/tvl/fetch_protocol.py +0 -0
  196. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +0 -0
  197. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/tvl/fetch_protocols.py +0 -0
  198. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/volumes/__init__.py +0 -0
  199. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/volumes/fetch_dex_overview.py +0 -0
  200. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/volumes/fetch_dex_summary.py +0 -0
  201. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/volumes/fetch_options_overview.py +0 -0
  202. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/yields/__init__.py +0 -0
  203. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/yields/fetch_pool_chart.py +0 -0
  204. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/defillama/yields/fetch_pools.py +0 -0
  205. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dexscreener/README.md +0 -0
  206. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dexscreener/__init__.py +0 -0
  207. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dexscreener/base.py +0 -0
  208. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dexscreener/dexscreener.png +0 -0
  209. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dexscreener/get_pair_info.py +0 -0
  210. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dexscreener/get_token_pairs.py +0 -0
  211. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dexscreener/get_tokens_info.py +0 -0
  212. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dexscreener/model/__init__.py +0 -0
  213. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dexscreener/model/search_token_response.py +0 -0
  214. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dexscreener/schema.json +0 -0
  215. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dexscreener/search_token.py +0 -0
  216. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dexscreener/utils.py +0 -0
  217. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dune_analytics/__init__.py +0 -0
  218. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dune_analytics/base.py +0 -0
  219. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dune_analytics/dune.png +0 -0
  220. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dune_analytics/fetch_kol_buys.py +0 -0
  221. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dune_analytics/fetch_nation_metrics.py +0 -0
  222. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/dune_analytics/schema.json +0 -0
  223. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/elfa/README.md +0 -0
  224. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/elfa/__init__.py +0 -0
  225. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/elfa/base.py +0 -0
  226. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/elfa/elfa.jpg +0 -0
  227. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/elfa/mention.py +0 -0
  228. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/elfa/schema.json +0 -0
  229. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/elfa/stats.py +0 -0
  230. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/elfa/tokens.py +0 -0
  231. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/elfa/utils.py +0 -0
  232. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/enso/README.md +0 -0
  233. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/enso/__init__.py +0 -0
  234. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/enso/abi/__init__.py +0 -0
  235. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/enso/abi/approval.py +0 -0
  236. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/enso/abi/erc20.py +0 -0
  237. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/enso/abi/route.py +0 -0
  238. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/enso/base.py +0 -0
  239. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/enso/best_yield.py +0 -0
  240. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/enso/enso.jpg +0 -0
  241. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/enso/networks.py +0 -0
  242. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/enso/prices.py +0 -0
  243. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/enso/route.py +0 -0
  244. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/enso/schema.json +0 -0
  245. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/enso/tokens.py +0 -0
  246. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/enso/wallet.py +0 -0
  247. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/erc20/__init__.py +0 -0
  248. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/erc20/base.py +0 -0
  249. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/erc20/erc20.svg +0 -0
  250. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/erc20/schema.json +0 -0
  251. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/erc721/__init__.py +0 -0
  252. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/erc721/base.py +0 -0
  253. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/erc721/erc721.svg +0 -0
  254. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/erc721/schema.json +0 -0
  255. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/firecrawl/README.md +0 -0
  256. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/firecrawl/__init__.py +0 -0
  257. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/firecrawl/base.py +0 -0
  258. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/firecrawl/clear.py +0 -0
  259. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/firecrawl/crawl.py +0 -0
  260. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/firecrawl/firecrawl.png +0 -0
  261. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/firecrawl/query.py +0 -0
  262. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/firecrawl/schema.json +0 -0
  263. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/firecrawl/scrape.py +0 -0
  264. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/firecrawl/utils.py +0 -0
  265. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/github/README.md +0 -0
  266. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/github/__init__.py +0 -0
  267. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/github/base.py +0 -0
  268. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/github/github.jpg +0 -0
  269. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/github/github_search.py +0 -0
  270. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/github/schema.json +0 -0
  271. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/heurist/__init__.py +0 -0
  272. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/heurist/base.py +0 -0
  273. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/heurist/heurist.png +0 -0
  274. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/heurist/schema.json +0 -0
  275. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/http/README.md +0 -0
  276. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/http/__init__.py +0 -0
  277. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/http/base.py +0 -0
  278. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/http/get.py +0 -0
  279. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/http/http.svg +0 -0
  280. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/http/post.py +0 -0
  281. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/http/put.py +0 -0
  282. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/http/schema.json +0 -0
  283. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/lifi/README.md +0 -0
  284. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/lifi/__init__.py +0 -0
  285. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/lifi/base.py +0 -0
  286. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/lifi/lifi.png +0 -0
  287. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/lifi/schema.json +0 -0
  288. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/lifi/token_execute.py +0 -0
  289. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/lifi/token_quote.py +0 -0
  290. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/lifi/utils.py +0 -0
  291. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/moralis/README.md +0 -0
  292. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/moralis/__init__.py +0 -0
  293. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/moralis/api.py +0 -0
  294. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/moralis/base.py +0 -0
  295. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/moralis/fetch_chain_portfolio.py +0 -0
  296. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/moralis/fetch_nft_portfolio.py +0 -0
  297. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/moralis/fetch_solana_portfolio.py +0 -0
  298. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/moralis/fetch_wallet_portfolio.py +0 -0
  299. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/moralis/moralis.png +0 -0
  300. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/moralis/schema.json +0 -0
  301. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/morpho/__init__.py +0 -0
  302. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/morpho/base.py +0 -0
  303. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/morpho/morpho.svg +0 -0
  304. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/morpho/schema.json +0 -0
  305. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/nation/__init__.py +0 -0
  306. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/nation/base.py +0 -0
  307. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/nation/nation.png +0 -0
  308. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/nation/nft_check.py +0 -0
  309. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/nation/schema.json +0 -0
  310. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/onchain.py +0 -0
  311. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/openai/__init__.py +0 -0
  312. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/openai/base.py +0 -0
  313. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/openai/image_to_text.py +0 -0
  314. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/openai/openai.png +0 -0
  315. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/openai/schema.json +0 -0
  316. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/portfolio/README.md +0 -0
  317. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/portfolio/__init__.py +0 -0
  318. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/portfolio/base.py +0 -0
  319. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/portfolio/constants.py +0 -0
  320. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/portfolio/moralis.png +0 -0
  321. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/portfolio/schema.json +0 -0
  322. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/portfolio/token_balances.py +0 -0
  323. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/portfolio/wallet_approvals.py +0 -0
  324. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/portfolio/wallet_defi_positions.py +0 -0
  325. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/portfolio/wallet_history.py +0 -0
  326. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/portfolio/wallet_net_worth.py +0 -0
  327. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/portfolio/wallet_nfts.py +0 -0
  328. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/portfolio/wallet_profitability.py +0 -0
  329. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/portfolio/wallet_profitability_summary.py +0 -0
  330. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/portfolio/wallet_stats.py +0 -0
  331. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/portfolio/wallet_swaps.py +0 -0
  332. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/pyth/__init__.py +0 -0
  333. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/pyth/base.py +0 -0
  334. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/pyth/pyth.svg +0 -0
  335. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/pyth/schema.json +0 -0
  336. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/skills.toml +0 -0
  337. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/slack/__init__.py +0 -0
  338. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/slack/base.py +0 -0
  339. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/slack/get_channel.py +0 -0
  340. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/slack/get_message.py +0 -0
  341. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/slack/schedule_message.py +0 -0
  342. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/slack/schema.json +0 -0
  343. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/slack/send_message.py +0 -0
  344. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/slack/slack.jpg +0 -0
  345. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/supabase/__init__.py +0 -0
  346. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/supabase/base.py +0 -0
  347. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/supabase/delete_data.py +0 -0
  348. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/supabase/fetch_data.py +0 -0
  349. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/supabase/insert_data.py +0 -0
  350. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/supabase/invoke_function.py +0 -0
  351. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/supabase/schema.json +0 -0
  352. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/supabase/supabase.svg +0 -0
  353. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/supabase/update_data.py +0 -0
  354. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/supabase/upsert_data.py +0 -0
  355. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/superfluid/__init__.py +0 -0
  356. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/superfluid/base.py +0 -0
  357. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/superfluid/schema.json +0 -0
  358. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/superfluid/superfluid.svg +0 -0
  359. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/system/__init__.py +0 -0
  360. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/system/add_autonomous_task.py +0 -0
  361. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/system/base.py +0 -0
  362. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/system/delete_autonomous_task.py +0 -0
  363. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/system/edit_autonomous_task.py +0 -0
  364. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/system/list_autonomous_tasks.py +0 -0
  365. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/system/read_agent_api_key.py +0 -0
  366. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/system/regenerate_agent_api_key.py +0 -0
  367. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/system/schema.json +0 -0
  368. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/system/system.svg +0 -0
  369. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/tavily/README.md +0 -0
  370. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/tavily/__init__.py +0 -0
  371. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/tavily/base.py +0 -0
  372. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/tavily/schema.json +0 -0
  373. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/tavily/tavily.jpg +0 -0
  374. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/tavily/tavily_extract.py +0 -0
  375. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/tavily/tavily_search.py +0 -0
  376. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/token/README.md +0 -0
  377. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/token/__init__.py +0 -0
  378. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/token/base.py +0 -0
  379. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/token/constants.py +0 -0
  380. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/token/erc20_transfers.py +0 -0
  381. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/token/moralis.png +0 -0
  382. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/token/schema.json +0 -0
  383. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/token/token_analytics.py +0 -0
  384. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/token/token_price.py +0 -0
  385. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/token/token_search.py +0 -0
  386. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/twitter/__init__.py +0 -0
  387. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/twitter/base.py +0 -0
  388. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/twitter/follow_user.py +0 -0
  389. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/twitter/get_mentions.py +0 -0
  390. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/twitter/get_timeline.py +0 -0
  391. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/twitter/get_user_by_username.py +0 -0
  392. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/twitter/get_user_tweets.py +0 -0
  393. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/twitter/like_tweet.py +0 -0
  394. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/twitter/post_tweet.py +0 -0
  395. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/twitter/reply_tweet.py +0 -0
  396. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/twitter/retweet.py +0 -0
  397. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/twitter/schema.json +0 -0
  398. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/twitter/search_tweets.py +0 -0
  399. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/twitter/twitter.png +0 -0
  400. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/unrealspeech/__init__.py +0 -0
  401. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/unrealspeech/base.py +0 -0
  402. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/unrealspeech/schema.json +0 -0
  403. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/unrealspeech/text_to_speech.py +0 -0
  404. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/unrealspeech/unrealspeech.jpg +0 -0
  405. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_audio/__init__.py +0 -0
  406. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_audio/base.py +0 -0
  407. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_audio/input.py +0 -0
  408. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_audio/schema.json +0 -0
  409. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_audio/venice_logo.jpg +0 -0
  410. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/README.md +0 -0
  411. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/__init__.py +0 -0
  412. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/base.py +0 -0
  413. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/config.py +0 -0
  414. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_enhance/README.md +0 -0
  415. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_enhance/__init__.py +0 -0
  416. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_enhance/image_enhance.py +0 -0
  417. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_enhance/image_enhance_base.py +0 -0
  418. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_enhance/image_enhance_input.py +0 -0
  419. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_generation/README.md +0 -0
  420. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_generation/__init__.py +0 -0
  421. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +0 -0
  422. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +0 -0
  423. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +0 -0
  424. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_generation/image_generation_input.py +0 -0
  425. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +0 -0
  426. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +0 -0
  427. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +0 -0
  428. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +0 -0
  429. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_upscale/README.md +0 -0
  430. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_upscale/__init__.py +0 -0
  431. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_upscale/image_upscale.py +0 -0
  432. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_upscale/image_upscale_base.py +0 -0
  433. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_upscale/image_upscale_input.py +0 -0
  434. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_vision/README.md +0 -0
  435. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_vision/__init__.py +0 -0
  436. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_vision/image_vision.py +0 -0
  437. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_vision/image_vision_base.py +0 -0
  438. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/image_vision/image_vision_input.py +0 -0
  439. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/schema.json +0 -0
  440. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/utils.py +0 -0
  441. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/venice_image/venice_image.jpg +0 -0
  442. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/web_scraper/README.md +0 -0
  443. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/web_scraper/__init__.py +0 -0
  444. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/web_scraper/base.py +0 -0
  445. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/web_scraper/document_indexer.py +0 -0
  446. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/web_scraper/langchain.png +0 -0
  447. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/web_scraper/schema.json +0 -0
  448. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/web_scraper/scrape_and_index.py +0 -0
  449. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/web_scraper/utils.py +0 -0
  450. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/web_scraper/website_indexer.py +0 -0
  451. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/weth/__init__.py +0 -0
  452. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/weth/base.py +0 -0
  453. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/weth/schema.json +0 -0
  454. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/weth/weth.svg +0 -0
  455. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/wow/__init__.py +0 -0
  456. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/wow/base.py +0 -0
  457. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/wow/schema.json +0 -0
  458. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/wow/wow.svg +0 -0
  459. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/x402/base.py +0 -0
  460. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/x402/http_request.py +0 -0
  461. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/x402/x402.webp +0 -0
  462. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/xmtp/README.md +0 -0
  463. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/xmtp/__init__.py +0 -0
  464. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/xmtp/base.py +0 -0
  465. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/xmtp/price.py +0 -0
  466. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/xmtp/schema.json +0 -0
  467. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/xmtp/swap.py +0 -0
  468. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/xmtp/transfer.py +0 -0
  469. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/skills/xmtp/xmtp.png +0 -0
  470. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/utils/__init__.py +0 -0
  471. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/utils/chain.py +0 -0
  472. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/utils/ens.py +0 -0
  473. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/utils/error.py +0 -0
  474. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/utils/logging.py +0 -0
  475. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/utils/random.py +0 -0
  476. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/utils/schema.py +0 -0
  477. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/utils/slack_alert.py +0 -0
  478. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/utils/tx.py +0 -0
  479. {intentkit-0.8.34.dev2 → intentkit-0.8.34.dev4}/intentkit/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intentkit
3
- Version: 0.8.34.dev2
3
+ Version: 0.8.34.dev4
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.8.34-dev2"
6
+ __version__ = "0.8.34-dev4"
7
7
  __author__ = "Ruihua"
8
8
  __email__ = "ruihua@crestal.network"
9
9
 
@@ -13,6 +13,8 @@ import httpx
13
13
  from botocore.exceptions import ClientError
14
14
  from mypy_boto3_s3.client import S3Client
15
15
 
16
+ from intentkit.config.config import config
17
+
16
18
  logger = logging.getLogger(__name__)
17
19
 
18
20
  # Global variables for S3 configuration
@@ -22,31 +24,47 @@ _prefix: str | None = None
22
24
  _cdn_url: str | None = None
23
25
 
24
26
 
25
- def init_s3(bucket: str, cdn_url: str, env: str) -> None:
27
+ def get_s3_client() -> S3Client | None:
26
28
  """
27
- Initialize S3 configuration.
28
-
29
- Args:
30
- bucket: S3 bucket name
31
- cdn_url: CDN URL for the S3 bucket
32
- env: Environment name for the prefix
33
-
34
- Raises:
35
- ValueError: If bucket or cdn_url is empty
29
+ Get or initialize S3 client and configuration.
30
+ Returns None if configuration is missing.
36
31
  """
37
32
  global _bucket, _client, _prefix, _cdn_url
38
33
 
39
- if not bucket:
40
- raise ValueError("S3 bucket name cannot be empty")
41
- if not cdn_url:
42
- raise ValueError("S3 CDN URL cannot be empty")
34
+ if _client is not None:
35
+ return _client
43
36
 
44
- _bucket = bucket
45
- _cdn_url = cdn_url
46
- _prefix = f"{env}/intentkit/"
47
- _client = cast(S3Client, boto3.client("s3"))
37
+ if not config.aws_s3_bucket or not config.aws_s3_cdn_url:
38
+ # Only log once or if needed, but here we just return None
39
+ # The calling functions usually log "S3 not initialized"
40
+ return None
48
41
 
49
- logger.info(f"S3 initialized with bucket: {bucket}, prefix: {_prefix}")
42
+ _bucket = config.aws_s3_bucket
43
+ _cdn_url = config.aws_s3_cdn_url
44
+ _prefix = f"{config.env}/intentkit/"
45
+
46
+ try:
47
+ if config.aws_s3_endpoint_url:
48
+ _client = cast(
49
+ S3Client,
50
+ boto3.client(
51
+ "s3",
52
+ endpoint_url=config.aws_s3_endpoint_url,
53
+ region_name=config.aws_s3_region_name,
54
+ aws_access_key_id=config.aws_s3_access_key_id,
55
+ aws_secret_access_key=config.aws_s3_secret_access_key,
56
+ ),
57
+ )
58
+ logger.info(
59
+ f"S3 initialized with custom endpoint: {config.aws_s3_endpoint_url}, bucket: {_bucket}, prefix: {_prefix}"
60
+ )
61
+ else:
62
+ _client = cast(S3Client, boto3.client("s3"))
63
+ logger.info(f"S3 initialized with bucket: {_bucket}, prefix: {_prefix}")
64
+ return _client
65
+ except Exception as e:
66
+ logger.error(f"Failed to initialize S3 client: {e}")
67
+ return None
50
68
 
51
69
 
52
70
  async def store_image(url: str, key: str) -> str:
@@ -64,15 +82,16 @@ async def store_image(url: str, key: str) -> str:
64
82
  ClientError: If the upload fails
65
83
  httpx.HTTPError: If the download fails
66
84
  """
67
- if not _client or not _bucket or not _prefix or not _cdn_url:
85
+ client = get_s3_client()
86
+ if not client or not _bucket or not _prefix or not _cdn_url:
68
87
  # If S3 is not initialized, log and return the original URL
69
88
  logger.info("S3 not initialized. Returning original URL.")
70
89
  return url
71
90
 
72
91
  try:
73
92
  # Download the image from the URL asynchronously
74
- async with httpx.AsyncClient() as client:
75
- response = await client.get(url, follow_redirects=True)
93
+ async with httpx.AsyncClient() as http_client:
94
+ response = await http_client.get(url, follow_redirects=True)
76
95
  response.raise_for_status()
77
96
 
78
97
  # Prepare the S3 key with prefix
@@ -93,7 +112,7 @@ async def store_image(url: str, key: str) -> str:
93
112
  content_type = "image/jpeg"
94
113
 
95
114
  # Upload to S3
96
- _client.upload_fileobj(
115
+ client.upload_fileobj(
97
116
  file_obj,
98
117
  _bucket,
99
118
  prefixed_key,
@@ -131,7 +150,8 @@ async def store_image_bytes(
131
150
  ClientError: If the upload fails
132
151
  ValueError: If S3 is not initialized or image_bytes is empty
133
152
  """
134
- if not _client or not _bucket or not _prefix or not _cdn_url:
153
+ client = get_s3_client()
154
+ if not client or not _bucket or not _prefix or not _cdn_url:
135
155
  # If S3 is not initialized, log and return empty string
136
156
  logger.info("S3 not initialized. Cannot store image bytes.")
137
157
  return ""
@@ -158,7 +178,7 @@ async def store_image_bytes(
158
178
 
159
179
  logger.info("uploading image to s3")
160
180
  # Upload to S3
161
- _client.upload_fileobj(
181
+ client.upload_fileobj(
162
182
  file_obj,
163
183
  _bucket,
164
184
  prefixed_key,
@@ -189,7 +209,8 @@ async def store_file(
189
209
  size: int | None = None,
190
210
  ) -> str:
191
211
  """Store raw file bytes with automatic content type detection."""
192
- if not _client or not _bucket or not _prefix or not _cdn_url:
212
+ client = get_s3_client()
213
+ if not client or not _bucket or not _prefix or not _cdn_url:
193
214
  logger.info("S3 not initialized. Cannot store file bytes.")
194
215
  return ""
195
216
 
@@ -220,7 +241,7 @@ async def store_file(
220
241
  effective_size,
221
242
  )
222
243
 
223
- _client.upload_fileobj(
244
+ client.upload_fileobj(
224
245
  file_obj,
225
246
  _bucket,
226
247
  prefixed_key,
@@ -257,7 +278,8 @@ async def store_file_bytes(
257
278
  ClientError: If the upload fails
258
279
  ValueError: If S3 is not initialized, file_bytes is empty, or file exceeds size limit
259
280
  """
260
- if not _client or not _bucket or not _prefix or not _cdn_url:
281
+ client = get_s3_client()
282
+ if not client or not _bucket or not _prefix or not _cdn_url:
261
283
  logger.info("S3 not initialized. Cannot store file bytes.")
262
284
  return ""
263
285
  if not file_bytes:
@@ -303,7 +325,7 @@ async def store_file_bytes(
303
325
  logger.info(f"Uploading {file_type} to S3 with content type {content_type}")
304
326
 
305
327
  # Upload to S3
306
- _client.upload_fileobj(
328
+ client.upload_fileobj(
307
329
  file_obj,
308
330
  _bucket,
309
331
  prefixed_key,
@@ -7,7 +7,6 @@ from dotenv import load_dotenv
7
7
 
8
8
  from intentkit.utils.chain import ChainProvider, QuicknodeChainProvider
9
9
  from intentkit.utils.logging import setup_logging
10
- from intentkit.utils.s3 import init_s3
11
10
  from intentkit.utils.slack_alert import init_slack
12
11
 
13
12
  SecretsMap = dict[str, str | int]
@@ -71,9 +70,16 @@ class Config:
71
70
  self.redis_host: str | None = self.load("REDIS_HOST")
72
71
  self.redis_port: int = self.load_int("REDIS_PORT", 6379)
73
72
  self.redis_db: int = self.load_int("REDIS_DB", 0)
74
- # AWS
73
+ # AWS S3
75
74
  self.aws_s3_bucket: str | None = self.load("AWS_S3_BUCKET")
76
75
  self.aws_s3_cdn_url: str | None = self.load("AWS_S3_CDN_URL")
76
+ # If using custom S3 endpoint
77
+ self.aws_s3_endpoint_url: str | None = self.load("AWS_S3_ENDPOINT_URL")
78
+ self.aws_s3_region_name: str | None = self.load("AWS_S3_REGION_NAME")
79
+ self.aws_s3_access_key_id: str | None = self.load("AWS_S3_ACCESS_KEY_ID")
80
+ self.aws_s3_secret_access_key: str | None = self.load(
81
+ "AWS_S3_SECRET_ACCESS_KEY"
82
+ )
77
83
  # Internal API
78
84
  self.internal_base_url: str = self.load(
79
85
  "INTERNAL_BASE_URL", "http://intent-api"
@@ -89,7 +95,6 @@ class Config:
89
95
  self.debug_password: str | None = self.load("DEBUG_PASSWORD")
90
96
  # Payment
91
97
  self.payment_enabled: bool = self.load("PAYMENT_ENABLED", "false") == "true"
92
- self.x402_fee_address: str | None = self.load("X402_FEE_ADDRESS")
93
98
  # Open API for agent
94
99
  self.open_api_base_url: str = self.load(
95
100
  "OPEN_API_BASE_URL", "http://localhost:8000"
@@ -183,9 +188,6 @@ class Config:
183
188
  # If the slack alert token exists, init it
184
189
  if self.slack_alert_token and self.slack_alert_channel:
185
190
  init_slack(self.slack_alert_token, self.slack_alert_channel)
186
- # If the AWS S3 bucket and CDN URL exist, init it
187
- if self.aws_s3_bucket and self.aws_s3_cdn_url:
188
- init_s3(self.aws_s3_bucket, self.aws_s3_cdn_url, self.env)
189
191
 
190
192
  @overload
191
193
  def load(self, key: str) -> str | None: ... # noqa: F811
@@ -6,7 +6,7 @@ including clearing thread history using LangGraph's checkpointer.
6
6
 
7
7
  import logging
8
8
 
9
- from intentkit.models.db import get_langgraph_checkpointer
9
+ from intentkit.models.db import get_checkpointer
10
10
  from intentkit.utils.error import IntentKitAPIError
11
11
 
12
12
  logger = logging.getLogger(__name__)
@@ -34,7 +34,7 @@ async def clear_thread_memory(agent_id: str, chat_id: str) -> bool:
34
34
  thread_id = f"{agent_id}-{chat_id}"
35
35
 
36
36
  # Get the LangGraph checkpointer instance
37
- checkpointer = get_langgraph_checkpointer()
37
+ checkpointer = get_checkpointer()
38
38
 
39
39
  # Use the official LangGraph method to delete all thread content
40
40
  await checkpointer.adelete_thread(thread_id)
@@ -26,6 +26,7 @@ from langchain_core.messages import (
26
26
  HumanMessage,
27
27
  )
28
28
  from langchain_core.tools import BaseTool
29
+ from langgraph.checkpoint.memory import InMemorySaver
29
30
  from langgraph.errors import GraphRecursionError
30
31
  from langgraph.graph.state import CompiledStateGraph
31
32
  from sqlalchemy import func, update
@@ -53,7 +54,10 @@ from intentkit.models.chat import (
53
54
  ChatMessageSkillCall,
54
55
  )
55
56
  from intentkit.models.credit import CreditAccount, OwnerType
56
- from intentkit.models.db import get_langgraph_checkpointer, get_session
57
+ from intentkit.models.db import (
58
+ get_checkpointer,
59
+ get_session,
60
+ )
57
61
  from intentkit.models.llm import LLMModelInfo, create_llm_model
58
62
  from intentkit.models.skill import AgentSkillData, ChatSkillData, Skill
59
63
  from intentkit.models.user import User
@@ -121,7 +125,10 @@ async def build_agent(
121
125
  )
122
126
 
123
127
  # ==== Store buffered conversation history in memory.
124
- memory = get_langgraph_checkpointer()
128
+ try:
129
+ checkpointer = get_checkpointer()
130
+ except RuntimeError:
131
+ checkpointer = InMemorySaver()
125
132
 
126
133
  # ==== Load skills
127
134
  tools: list[BaseTool | dict] = []
@@ -192,7 +199,7 @@ async def build_agent(
192
199
  middleware=middleware,
193
200
  state_schema=AgentState,
194
201
  context_schema=AgentContext,
195
- checkpointer=memory,
202
+ checkpointer=checkpointer,
196
203
  debug=config.debug_checkpoint,
197
204
  name=agent.id,
198
205
  )
@@ -367,6 +374,7 @@ async def stream_agent_raw(
367
374
  payer = user_message.user_id
368
375
  if user_message.author_type in [
369
376
  AuthorType.TELEGRAM,
377
+ AuthorType.DISCORD,
370
378
  AuthorType.TWITTER,
371
379
  AuthorType.API,
372
380
  AuthorType.X402,
@@ -15,7 +15,6 @@ from intentkit.core.agent import (
15
15
  )
16
16
  from intentkit.core.credit import refill_all_free_credits
17
17
  from intentkit.models.agent_data import AgentQuota
18
- from intentkit.models.db import cleanup_checkpoints
19
18
 
20
19
 
21
20
  def create_scheduler(
@@ -141,13 +140,4 @@ def create_scheduler(
141
140
  replace_existing=True,
142
141
  )
143
142
 
144
- # Clean up old LangGraph checkpoints daily at UTC 2:30
145
- scheduler.add_job(
146
- cleanup_checkpoints,
147
- trigger=CronTrigger(hour=2, minute=30, timezone="UTC"),
148
- id="cleanup_checkpoints",
149
- name="Clean up old checkpoints",
150
- replace_existing=True,
151
- )
152
-
153
143
  return scheduler
@@ -3,19 +3,17 @@ from contextlib import asynccontextmanager
3
3
  from typing import Annotated
4
4
  from urllib.parse import quote_plus
5
5
 
6
- from langgraph.checkpoint.memory import InMemorySaver
7
- from langgraph.checkpoint.postgres.aio import AsyncPostgresSaver
8
- from langgraph.types import Checkpointer
6
+ from langgraph.checkpoint.postgres.shallow import AsyncShallowPostgresSaver
9
7
  from psycopg import OperationalError
10
8
  from psycopg_pool import AsyncConnectionPool
11
9
  from pydantic import Field
12
- from sqlalchemy import text
13
10
  from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession, create_async_engine
14
11
 
15
12
  from intentkit.models.db_mig import safe_migrate
16
13
 
17
14
  engine: AsyncEngine | None = None
18
- _langgraph_checkpointer: Checkpointer | None = None
15
+ _connection_pool: AsyncConnectionPool | None = None
16
+ _checkpointer: AsyncShallowPostgresSaver | None = None
19
17
 
20
18
 
21
19
  async def check_connection(conn):
@@ -54,9 +52,9 @@ async def init_db(
54
52
  auto_migrate: Whether to run migrations automatically (default: True)
55
53
  pool_size: Database connection pool size (default: 3)
56
54
  """
57
- global engine, _langgraph_checkpointer
58
- # Initialize psycopg pool and AsyncPostgresSaver if not already initialized
59
- if _langgraph_checkpointer is None:
55
+ global engine, _connection_pool, _checkpointer
56
+ # Initialize psycopg pool and AsyncShallowPostgresSaver if not already initialized
57
+ if _connection_pool is None:
60
58
  if host:
61
59
  conn_string = (
62
60
  f"postgresql://{username}:{quote_plus(password)}@{host}:{port}/{dbname}"
@@ -72,13 +70,17 @@ async def init_db(
72
70
  # Set connection max lifetime to prevent stale connections
73
71
  max_lifetime=3600, # 1 hour
74
72
  )
75
- _langgraph_checkpointer = AsyncPostgresSaver(pool)
73
+ _connection_pool = pool
74
+ _checkpointer = AsyncShallowPostgresSaver(pool)
76
75
  if auto_migrate:
77
76
  # Migrate can not use pool, so we start from scratch
78
- async with AsyncPostgresSaver.from_conn_string(conn_string) as saver:
77
+ async with AsyncShallowPostgresSaver.from_conn_string(
78
+ conn_string
79
+ ) as saver:
79
80
  await saver.setup()
80
81
  else:
81
- _langgraph_checkpointer = InMemorySaver()
82
+ # For in-memory, we don't need a pool, but we need to handle it if requested
83
+ pass
82
84
  # Initialize SQLAlchemy engine with pool settings
83
85
  if engine is None:
84
86
  if host:
@@ -141,75 +143,23 @@ def get_engine() -> AsyncEngine:
141
143
  return engine
142
144
 
143
145
 
144
- def get_langgraph_checkpointer() -> Checkpointer:
145
- """Get the AsyncPostgresSaver instance for langgraph.
146
+ def get_connection_pool() -> AsyncConnectionPool:
147
+ """Get the AsyncConnectionPool instance.
146
148
 
147
149
  Returns:
148
- AsyncPostgresSaver: The AsyncPostgresSaver instance
150
+ AsyncConnectionPool: The AsyncConnectionPool instance
149
151
  """
150
- if _langgraph_checkpointer is None:
152
+ if _connection_pool is None:
151
153
  raise RuntimeError("Database pool not initialized. Call init_db first.")
152
- return _langgraph_checkpointer
154
+ return _connection_pool
153
155
 
154
156
 
155
- async def cleanup_checkpoints() -> None:
156
- """
157
- Clean up old checkpoints, writes, and blobs, keeping only the latest one for each thread.
158
- This helps reduce database size while maintaining the current state of agents.
159
- """
160
- assert engine is not None, "Database engine not initialized. Call init_db first."
161
-
162
- # SQL to keep only the latest checkpoint for each thread
163
- # We assume checkpoint_id is sortable (ULID/UUIDv7 style which LangGraph uses)
164
- cleanup_checkpoints_sql = text("""
165
- DELETE FROM checkpoints
166
- WHERE (thread_id, checkpoint_ns, checkpoint_id) NOT IN (
167
- SELECT DISTINCT ON (thread_id, checkpoint_ns)
168
- thread_id, checkpoint_ns, checkpoint_id
169
- FROM checkpoints
170
- ORDER BY thread_id, checkpoint_ns, checkpoint_id DESC
171
- );
172
- """)
173
-
174
- # SQL to clean up writes that reference deleted checkpoints
175
- cleanup_writes_sql = text("""
176
- DELETE FROM checkpoint_writes
177
- WHERE (thread_id, checkpoint_ns, checkpoint_id) NOT IN (
178
- SELECT thread_id, checkpoint_ns, checkpoint_id
179
- FROM checkpoints
180
- );
181
- """)
182
-
183
- # SQL to clean up blobs that are not referenced by any remaining checkpoint
184
- # Optimized using NOT EXISTS instead of NOT IN for better performance
185
- # Using CTE to materialize active channel versions first
186
- cleanup_blobs_sql = text("""
187
- WITH active_versions AS (
188
- SELECT DISTINCT
189
- thread_id,
190
- checkpoint_ns,
191
- key as channel,
192
- value as version
193
- FROM checkpoints,
194
- jsonb_each_text(checkpoint -> 'channel_versions')
195
- )
196
- DELETE FROM checkpoint_blobs cb
197
- WHERE NOT EXISTS (
198
- SELECT 1
199
- FROM active_versions av
200
- WHERE av.thread_id = cb.thread_id
201
- AND av.checkpoint_ns = cb.checkpoint_ns
202
- AND av.channel = cb.channel
203
- AND av.version = cb.version
204
- );
205
- """)
157
+ def get_checkpointer() -> AsyncShallowPostgresSaver:
158
+ """Get the AsyncShallowPostgresSaver instance.
206
159
 
207
- async with AsyncSession(engine) as session:
208
- try:
209
- await session.execute(cleanup_checkpoints_sql)
210
- await session.execute(cleanup_writes_sql)
211
- await session.execute(cleanup_blobs_sql)
212
- await session.commit()
213
- except Exception as e:
214
- await session.rollback()
215
- raise e
160
+ Returns:
161
+ AsyncShallowPostgresSaver: The AsyncShallowPostgresSaver instance
162
+ """
163
+ if _checkpointer is None:
164
+ raise RuntimeError("Database pool not initialized. Call init_db first.")
165
+ return _checkpointer
@@ -167,7 +167,6 @@ firecrawl,firecrawl_clear_indexed_content,firecrawl_clear_indexed_content,TRUE,1
167
167
  xmtp,xmtp_transfer,xmtp_transfer,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
168
168
  xmtp,xmtp_swap,xmtp_swap,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
169
169
  xmtp,xmtp_get_swap_price,xmtp_get_swap_price,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
170
- x402,x402_ask_agent,x402_ask_agent,TRUE,1,1,1,,,0x445750026A4a1906b61302442E085f9cbAfe206a
171
170
  x402,x402_http_request,x402_http_request,TRUE,1,1,1,,,0x445750026A4a1906b61302442E085f9cbAfe206a
172
171
  casino,deck_shuffle,casino_deck_shuffle,true,1,5,5,,,0x3cdd051eec909f94965f9c1c657f5b70a172b2c0
173
172
  casino,deck_draw,casino_deck_draw,true,1,5,5,,,0x3cdd051eec909f94965f9c1c657f5b70a172b2c0
@@ -4,9 +4,9 @@ import httpx
4
4
  from epyxid import XID
5
5
  from pydantic import BaseModel, Field
6
6
 
7
+ from intentkit.clients.s3 import store_image
7
8
  from intentkit.config.config import config
8
9
  from intentkit.skills.heurist.base import HeuristBaseTool
9
- from intentkit.utils.s3 import store_image
10
10
 
11
11
  logger = logging.getLogger(__name__)
12
12
 
@@ -4,9 +4,9 @@ import httpx
4
4
  from epyxid import XID
5
5
  from pydantic import BaseModel, Field
6
6
 
7
+ from intentkit.clients.s3 import store_image
7
8
  from intentkit.config.config import config
8
9
  from intentkit.skills.heurist.base import HeuristBaseTool
9
- from intentkit.utils.s3 import store_image
10
10
 
11
11
  logger = logging.getLogger(__name__)
12
12
 
@@ -4,9 +4,9 @@ import httpx
4
4
  from epyxid import XID
5
5
  from pydantic import BaseModel, Field
6
6
 
7
+ from intentkit.clients.s3 import store_image
7
8
  from intentkit.config.config import config
8
9
  from intentkit.skills.heurist.base import HeuristBaseTool
9
- from intentkit.utils.s3 import store_image
10
10
 
11
11
  logger = logging.getLogger(__name__)
12
12
 
@@ -4,9 +4,9 @@ import httpx
4
4
  from epyxid import XID
5
5
  from pydantic import BaseModel, Field
6
6
 
7
+ from intentkit.clients.s3 import store_image
7
8
  from intentkit.config.config import config
8
9
  from intentkit.skills.heurist.base import HeuristBaseTool
9
- from intentkit.utils.s3 import store_image
10
10
 
11
11
  logger = logging.getLogger(__name__)
12
12
 
@@ -4,9 +4,9 @@ import httpx
4
4
  from epyxid import XID
5
5
  from pydantic import BaseModel, Field
6
6
 
7
+ from intentkit.clients.s3 import store_image
7
8
  from intentkit.config.config import config
8
9
  from intentkit.skills.heurist.base import HeuristBaseTool
9
- from intentkit.utils.s3 import store_image
10
10
 
11
11
  logger = logging.getLogger(__name__)
12
12
 
@@ -4,9 +4,9 @@ import httpx
4
4
  from epyxid import XID
5
5
  from pydantic import BaseModel, Field
6
6
 
7
+ from intentkit.clients.s3 import store_image
7
8
  from intentkit.config.config import config
8
9
  from intentkit.skills.heurist.base import HeuristBaseTool
9
- from intentkit.utils.s3 import store_image
10
10
 
11
11
  logger = logging.getLogger(__name__)
12
12
 
@@ -4,9 +4,9 @@ import httpx
4
4
  from epyxid import XID
5
5
  from pydantic import BaseModel, Field
6
6
 
7
+ from intentkit.clients.s3 import store_image
7
8
  from intentkit.config.config import config
8
9
  from intentkit.skills.heurist.base import HeuristBaseTool
9
- from intentkit.utils.s3 import store_image
10
10
 
11
11
  logger = logging.getLogger(__name__)
12
12
 
@@ -6,8 +6,8 @@ import openai
6
6
  from epyxid import XID
7
7
  from pydantic import BaseModel, Field
8
8
 
9
+ from intentkit.clients.s3 import store_image
9
10
  from intentkit.skills.openai.base import OpenAIBaseTool
10
- from intentkit.utils.s3 import store_image
11
11
 
12
12
  logger = logging.getLogger(__name__)
13
13
 
@@ -7,8 +7,8 @@ import openai
7
7
  from epyxid import XID
8
8
  from pydantic import BaseModel, Field
9
9
 
10
+ from intentkit.clients.s3 import store_image_bytes
10
11
  from intentkit.skills.openai.base import OpenAIBaseTool
11
- from intentkit.utils.s3 import store_image_bytes
12
12
 
13
13
  logger = logging.getLogger(__name__)
14
14
 
@@ -8,8 +8,8 @@ import openai
8
8
  from epyxid import XID
9
9
  from pydantic import BaseModel, Field
10
10
 
11
+ from intentkit.clients.s3 import store_image_bytes
11
12
  from intentkit.skills.openai.base import OpenAIBaseTool
12
- from intentkit.utils.s3 import store_image_bytes
13
13
 
14
14
  logger = logging.getLogger(__name__)
15
15
 
@@ -8,9 +8,9 @@ import openai
8
8
  from epyxid import XID
9
9
  from pydantic import BaseModel
10
10
 
11
+ from intentkit.clients.s3 import store_image_bytes
11
12
  from intentkit.skills.openai.base import OpenAIBaseTool
12
13
  from intentkit.skills.openai.gpt_image_generation import GPTImageGenerationInput
13
- from intentkit.utils.s3 import store_image_bytes
14
14
 
15
15
  logger = logging.getLogger(__name__)
16
16
 
@@ -10,8 +10,8 @@ import openai
10
10
  from epyxid import XID
11
11
  from pydantic import BaseModel, Field
12
12
 
13
+ from intentkit.clients.s3 import store_image_bytes
13
14
  from intentkit.skills.openai.base import OpenAIBaseTool
14
- from intentkit.utils.s3 import store_image_bytes
15
15
 
16
16
  logger = logging.getLogger(__name__)
17
17
 
@@ -6,9 +6,9 @@ from typing import Any
6
6
  import httpx
7
7
  from pydantic import BaseModel
8
8
 
9
+ from intentkit.clients.s3 import store_file
9
10
  from intentkit.skills.venice_audio.base import VeniceAudioBaseTool
10
11
  from intentkit.skills.venice_audio.input import AllowedAudioFormat, VeniceAudioInput
11
- from intentkit.utils.s3 import store_file
12
12
 
13
13
  logger = logging.getLogger(__name__)
14
14
 
@@ -12,7 +12,7 @@ from typing import Any
12
12
 
13
13
  import httpx
14
14
 
15
- from intentkit.utils.s3 import store_image_bytes
15
+ from intentkit.clients.s3 import store_image_bytes
16
16
 
17
17
  logger = logging.getLogger(__name__)
18
18
 
@@ -5,13 +5,14 @@ from typing import Any, Literal
5
5
 
6
6
  from pydantic import BaseModel, Field
7
7
 
8
+ from intentkit.clients.s3 import store_image_bytes
9
+
8
10
  # Import the generic base
9
11
  from intentkit.skills.base import ToolException
10
12
  from intentkit.skills.venice_image.base import VeniceImageBaseTool
11
13
  from intentkit.skills.venice_image.image_generation.image_generation_input import (
12
14
  VeniceImageGenerationInput,
13
15
  )
14
- from intentkit.utils.s3 import store_image_bytes
15
16
 
16
17
  logger = logging.getLogger(__name__)
17
18