intentkit 0.8.34.dev3__tar.gz → 0.8.34.dev6__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 (480) hide show
  1. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/PKG-INFO +1 -1
  2. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/__init__.py +1 -1
  3. {intentkit-0.8.34.dev3/intentkit/utils → intentkit-0.8.34.dev6/intentkit/clients}/s3.py +51 -29
  4. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/config/config.py +8 -6
  5. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/chat.py +2 -5
  6. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/engine.py +8 -6
  7. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/models/db.py +14 -1
  8. intentkit-0.8.34.dev6/intentkit/models/db_mig.py +220 -0
  9. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/models/skills.csv +0 -1
  10. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/heurist/image_generation_animagine_xl.py +1 -2
  11. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/heurist/image_generation_arthemy_comics.py +1 -2
  12. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/heurist/image_generation_arthemy_real.py +1 -2
  13. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/heurist/image_generation_braindance.py +1 -2
  14. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +1 -2
  15. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/heurist/image_generation_flux_1_dev.py +1 -2
  16. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/heurist/image_generation_sdxl.py +1 -2
  17. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/openai/dalle_image_generation.py +1 -1
  18. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/openai/gpt_avatar_generator.py +1 -1
  19. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/openai/gpt_image_generation.py +1 -1
  20. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/openai/gpt_image_mini_generator.py +1 -1
  21. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/openai/gpt_image_to_image.py +1 -1
  22. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_audio/venice_audio.py +1 -1
  23. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/api.py +1 -1
  24. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_generation/image_generation_base.py +2 -1
  25. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/x402/__init__.py +0 -3
  26. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/x402/schema.json +10 -15
  27. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/pyproject.toml +1 -1
  28. intentkit-0.8.34.dev3/intentkit/models/db_mig.py +0 -103
  29. intentkit-0.8.34.dev3/intentkit/skills/x402/ask_agent.py +0 -98
  30. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/.gitignore +0 -0
  31. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/LICENSE +0 -0
  32. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/LICENSE +0 -0
  33. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/MANIFEST.in +0 -0
  34. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/README.md +0 -0
  35. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/abstracts/__init__.py +0 -0
  36. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/abstracts/agent.py +0 -0
  37. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/abstracts/api.py +0 -0
  38. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/abstracts/engine.py +0 -0
  39. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/abstracts/graph.py +0 -0
  40. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/abstracts/skill.py +0 -0
  41. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/abstracts/twitter.py +0 -0
  42. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/clients/__init__.py +0 -0
  43. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/clients/cdp.py +0 -0
  44. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/clients/twitter.py +0 -0
  45. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/clients/web3.py +0 -0
  46. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/config/__init__.py +0 -0
  47. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/__init__.py +0 -0
  48. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/account_checking.py +0 -0
  49. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/agent.py +0 -0
  50. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/api.py +0 -0
  51. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/asset.py +0 -0
  52. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/client.py +0 -0
  53. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/credit.py +0 -0
  54. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/draft.py +0 -0
  55. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/draft_chat.py +0 -0
  56. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/manager/__init__.py +0 -0
  57. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/manager/engine.py +0 -0
  58. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/manager/service.py +0 -0
  59. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/manager/skills.py +0 -0
  60. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/middleware.py +0 -0
  61. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/prompt.py +0 -0
  62. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/scheduler.py +0 -0
  63. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/core/statistics.py +0 -0
  64. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/models/agent.py +0 -0
  65. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/models/agent_data.py +0 -0
  66. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/models/agent_public.json +0 -0
  67. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/models/agent_schema.json +0 -0
  68. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/models/app_setting.py +0 -0
  69. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/models/base.py +0 -0
  70. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/models/chat.py +0 -0
  71. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/models/credit.py +0 -0
  72. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/models/draft.py +0 -0
  73. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/models/llm.csv +0 -0
  74. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/models/llm.py +0 -0
  75. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/models/redis.py +0 -0
  76. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/models/skill.py +0 -0
  77. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/models/team.py +0 -0
  78. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/models/user.py +0 -0
  79. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/__init__.py +0 -0
  80. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/acolyt/__init__.py +0 -0
  81. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/acolyt/acolyt.jpg +0 -0
  82. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/acolyt/ask.py +0 -0
  83. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/acolyt/base.py +0 -0
  84. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/acolyt/schema.json +0 -0
  85. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/aixbt/README.md +0 -0
  86. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/aixbt/__init__.py +0 -0
  87. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/aixbt/aixbt.jpg +0 -0
  88. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/aixbt/base.py +0 -0
  89. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/aixbt/projects.py +0 -0
  90. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/aixbt/schema.json +0 -0
  91. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/allora/__init__.py +0 -0
  92. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/allora/allora.jpeg +0 -0
  93. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/allora/base.py +0 -0
  94. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/allora/price.py +0 -0
  95. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/allora/schema.json +0 -0
  96. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/base.py +0 -0
  97. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/basename/__init__.py +0 -0
  98. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/basename/base.py +0 -0
  99. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/basename/basename.svg +0 -0
  100. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/basename/schema.json +0 -0
  101. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/carv/README.md +0 -0
  102. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/carv/__init__.py +0 -0
  103. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/carv/base.py +0 -0
  104. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/carv/carv.webp +0 -0
  105. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/carv/fetch_news.py +0 -0
  106. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/carv/onchain_query.py +0 -0
  107. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/carv/schema.json +0 -0
  108. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/carv/token_info_and_price.py +0 -0
  109. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/casino/README.md +0 -0
  110. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/casino/__init__.py +0 -0
  111. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/casino/base.py +0 -0
  112. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/casino/casino.png +0 -0
  113. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/casino/deck_draw.py +0 -0
  114. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/casino/deck_shuffle.py +0 -0
  115. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/casino/dice_roll.py +0 -0
  116. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/casino/schema.json +0 -0
  117. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/casino/utils.py +0 -0
  118. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cdp/__init__.py +0 -0
  119. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cdp/base.py +0 -0
  120. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cdp/cdp.png +0 -0
  121. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cdp/schema.json +0 -0
  122. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/chainlist/README.md +0 -0
  123. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/chainlist/__init__.py +0 -0
  124. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/chainlist/base.py +0 -0
  125. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/chainlist/chain_lookup.py +0 -0
  126. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/chainlist/chainlist.png +0 -0
  127. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/chainlist/schema.json +0 -0
  128. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/common/__init__.py +0 -0
  129. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/common/base.py +0 -0
  130. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/common/common.jpg +0 -0
  131. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/common/current_time.py +0 -0
  132. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/common/schema.json +0 -0
  133. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cookiefun/README.md +0 -0
  134. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cookiefun/__init__.py +0 -0
  135. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cookiefun/base.py +0 -0
  136. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cookiefun/constants.py +0 -0
  137. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cookiefun/cookiefun.png +0 -0
  138. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cookiefun/get_account_details.py +0 -0
  139. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cookiefun/get_account_feed.py +0 -0
  140. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cookiefun/get_account_smart_followers.py +0 -0
  141. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cookiefun/get_sectors.py +0 -0
  142. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cookiefun/schema.json +0 -0
  143. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cookiefun/search_accounts.py +0 -0
  144. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cryptocompare/__init__.py +0 -0
  145. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cryptocompare/api.py +0 -0
  146. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cryptocompare/base.py +0 -0
  147. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cryptocompare/cryptocompare.png +0 -0
  148. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cryptocompare/fetch_news.py +0 -0
  149. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cryptocompare/fetch_price.py +0 -0
  150. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cryptocompare/fetch_top_exchanges.py +0 -0
  151. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cryptocompare/fetch_top_market_cap.py +0 -0
  152. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cryptocompare/fetch_top_volume.py +0 -0
  153. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cryptocompare/fetch_trading_signals.py +0 -0
  154. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cryptocompare/schema.json +0 -0
  155. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cryptopanic/__init__.py +0 -0
  156. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cryptopanic/base.py +0 -0
  157. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cryptopanic/cryptopanic.png +0 -0
  158. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cryptopanic/fetch_crypto_news.py +0 -0
  159. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +0 -0
  160. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/cryptopanic/schema.json +0 -0
  161. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dapplooker/README.md +0 -0
  162. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dapplooker/__init__.py +0 -0
  163. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dapplooker/base.py +0 -0
  164. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dapplooker/dapplooker.jpg +0 -0
  165. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dapplooker/dapplooker_token_data.py +0 -0
  166. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dapplooker/schema.json +0 -0
  167. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/__init__.py +0 -0
  168. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/api.py +0 -0
  169. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/base.py +0 -0
  170. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/coins/__init__.py +0 -0
  171. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +0 -0
  172. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/coins/fetch_block.py +0 -0
  173. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/coins/fetch_current_prices.py +0 -0
  174. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/coins/fetch_first_price.py +0 -0
  175. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/coins/fetch_historical_prices.py +0 -0
  176. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/coins/fetch_price_chart.py +0 -0
  177. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/coins/fetch_price_percentage.py +0 -0
  178. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/config/__init__.py +0 -0
  179. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/config/chains.py +0 -0
  180. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/defillama.jpeg +0 -0
  181. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/fees/__init__.py +0 -0
  182. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/fees/fetch_fees_overview.py +0 -0
  183. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/schema.json +0 -0
  184. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/stablecoins/__init__.py +0 -0
  185. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +0 -0
  186. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +0 -0
  187. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +0 -0
  188. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +0 -0
  189. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/tests/__init__.py +0 -0
  190. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/tests/api_integration.test.py +0 -0
  191. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/tests/api_unit.test.py +0 -0
  192. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/tvl/__init__.py +0 -0
  193. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +0 -0
  194. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/tvl/fetch_chains.py +0 -0
  195. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/tvl/fetch_historical_tvl.py +0 -0
  196. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/tvl/fetch_protocol.py +0 -0
  197. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +0 -0
  198. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/tvl/fetch_protocols.py +0 -0
  199. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/volumes/__init__.py +0 -0
  200. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/volumes/fetch_dex_overview.py +0 -0
  201. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/volumes/fetch_dex_summary.py +0 -0
  202. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/volumes/fetch_options_overview.py +0 -0
  203. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/yields/__init__.py +0 -0
  204. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/yields/fetch_pool_chart.py +0 -0
  205. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/defillama/yields/fetch_pools.py +0 -0
  206. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dexscreener/README.md +0 -0
  207. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dexscreener/__init__.py +0 -0
  208. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dexscreener/base.py +0 -0
  209. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dexscreener/dexscreener.png +0 -0
  210. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dexscreener/get_pair_info.py +0 -0
  211. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dexscreener/get_token_pairs.py +0 -0
  212. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dexscreener/get_tokens_info.py +0 -0
  213. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dexscreener/model/__init__.py +0 -0
  214. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dexscreener/model/search_token_response.py +0 -0
  215. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dexscreener/schema.json +0 -0
  216. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dexscreener/search_token.py +0 -0
  217. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dexscreener/utils.py +0 -0
  218. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dune_analytics/__init__.py +0 -0
  219. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dune_analytics/base.py +0 -0
  220. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dune_analytics/dune.png +0 -0
  221. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dune_analytics/fetch_kol_buys.py +0 -0
  222. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dune_analytics/fetch_nation_metrics.py +0 -0
  223. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/dune_analytics/schema.json +0 -0
  224. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/elfa/README.md +0 -0
  225. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/elfa/__init__.py +0 -0
  226. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/elfa/base.py +0 -0
  227. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/elfa/elfa.jpg +0 -0
  228. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/elfa/mention.py +0 -0
  229. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/elfa/schema.json +0 -0
  230. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/elfa/stats.py +0 -0
  231. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/elfa/tokens.py +0 -0
  232. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/elfa/utils.py +0 -0
  233. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/enso/README.md +0 -0
  234. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/enso/__init__.py +0 -0
  235. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/enso/abi/__init__.py +0 -0
  236. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/enso/abi/approval.py +0 -0
  237. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/enso/abi/erc20.py +0 -0
  238. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/enso/abi/route.py +0 -0
  239. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/enso/base.py +0 -0
  240. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/enso/best_yield.py +0 -0
  241. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/enso/enso.jpg +0 -0
  242. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/enso/networks.py +0 -0
  243. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/enso/prices.py +0 -0
  244. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/enso/route.py +0 -0
  245. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/enso/schema.json +0 -0
  246. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/enso/tokens.py +0 -0
  247. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/enso/wallet.py +0 -0
  248. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/erc20/__init__.py +0 -0
  249. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/erc20/base.py +0 -0
  250. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/erc20/erc20.svg +0 -0
  251. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/erc20/schema.json +0 -0
  252. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/erc721/__init__.py +0 -0
  253. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/erc721/base.py +0 -0
  254. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/erc721/erc721.svg +0 -0
  255. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/erc721/schema.json +0 -0
  256. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/firecrawl/README.md +0 -0
  257. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/firecrawl/__init__.py +0 -0
  258. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/firecrawl/base.py +0 -0
  259. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/firecrawl/clear.py +0 -0
  260. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/firecrawl/crawl.py +0 -0
  261. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/firecrawl/firecrawl.png +0 -0
  262. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/firecrawl/query.py +0 -0
  263. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/firecrawl/schema.json +0 -0
  264. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/firecrawl/scrape.py +0 -0
  265. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/firecrawl/utils.py +0 -0
  266. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/github/README.md +0 -0
  267. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/github/__init__.py +0 -0
  268. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/github/base.py +0 -0
  269. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/github/github.jpg +0 -0
  270. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/github/github_search.py +0 -0
  271. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/github/schema.json +0 -0
  272. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/heurist/__init__.py +0 -0
  273. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/heurist/base.py +0 -0
  274. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/heurist/heurist.png +0 -0
  275. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/heurist/schema.json +0 -0
  276. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/http/README.md +0 -0
  277. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/http/__init__.py +0 -0
  278. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/http/base.py +0 -0
  279. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/http/get.py +0 -0
  280. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/http/http.svg +0 -0
  281. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/http/post.py +0 -0
  282. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/http/put.py +0 -0
  283. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/http/schema.json +0 -0
  284. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/lifi/README.md +0 -0
  285. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/lifi/__init__.py +0 -0
  286. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/lifi/base.py +0 -0
  287. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/lifi/lifi.png +0 -0
  288. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/lifi/schema.json +0 -0
  289. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/lifi/token_execute.py +0 -0
  290. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/lifi/token_quote.py +0 -0
  291. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/lifi/utils.py +0 -0
  292. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/moralis/README.md +0 -0
  293. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/moralis/__init__.py +0 -0
  294. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/moralis/api.py +0 -0
  295. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/moralis/base.py +0 -0
  296. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/moralis/fetch_chain_portfolio.py +0 -0
  297. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/moralis/fetch_nft_portfolio.py +0 -0
  298. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/moralis/fetch_solana_portfolio.py +0 -0
  299. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/moralis/fetch_wallet_portfolio.py +0 -0
  300. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/moralis/moralis.png +0 -0
  301. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/moralis/schema.json +0 -0
  302. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/morpho/__init__.py +0 -0
  303. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/morpho/base.py +0 -0
  304. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/morpho/morpho.svg +0 -0
  305. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/morpho/schema.json +0 -0
  306. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/nation/__init__.py +0 -0
  307. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/nation/base.py +0 -0
  308. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/nation/nation.png +0 -0
  309. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/nation/nft_check.py +0 -0
  310. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/nation/schema.json +0 -0
  311. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/onchain.py +0 -0
  312. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/openai/__init__.py +0 -0
  313. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/openai/base.py +0 -0
  314. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/openai/image_to_text.py +0 -0
  315. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/openai/openai.png +0 -0
  316. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/openai/schema.json +0 -0
  317. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/portfolio/README.md +0 -0
  318. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/portfolio/__init__.py +0 -0
  319. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/portfolio/base.py +0 -0
  320. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/portfolio/constants.py +0 -0
  321. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/portfolio/moralis.png +0 -0
  322. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/portfolio/schema.json +0 -0
  323. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/portfolio/token_balances.py +0 -0
  324. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/portfolio/wallet_approvals.py +0 -0
  325. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/portfolio/wallet_defi_positions.py +0 -0
  326. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/portfolio/wallet_history.py +0 -0
  327. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/portfolio/wallet_net_worth.py +0 -0
  328. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/portfolio/wallet_nfts.py +0 -0
  329. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/portfolio/wallet_profitability.py +0 -0
  330. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/portfolio/wallet_profitability_summary.py +0 -0
  331. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/portfolio/wallet_stats.py +0 -0
  332. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/portfolio/wallet_swaps.py +0 -0
  333. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/pyth/__init__.py +0 -0
  334. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/pyth/base.py +0 -0
  335. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/pyth/pyth.svg +0 -0
  336. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/pyth/schema.json +0 -0
  337. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/skills.toml +0 -0
  338. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/slack/__init__.py +0 -0
  339. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/slack/base.py +0 -0
  340. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/slack/get_channel.py +0 -0
  341. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/slack/get_message.py +0 -0
  342. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/slack/schedule_message.py +0 -0
  343. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/slack/schema.json +0 -0
  344. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/slack/send_message.py +0 -0
  345. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/slack/slack.jpg +0 -0
  346. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/supabase/__init__.py +0 -0
  347. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/supabase/base.py +0 -0
  348. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/supabase/delete_data.py +0 -0
  349. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/supabase/fetch_data.py +0 -0
  350. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/supabase/insert_data.py +0 -0
  351. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/supabase/invoke_function.py +0 -0
  352. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/supabase/schema.json +0 -0
  353. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/supabase/supabase.svg +0 -0
  354. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/supabase/update_data.py +0 -0
  355. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/supabase/upsert_data.py +0 -0
  356. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/superfluid/__init__.py +0 -0
  357. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/superfluid/base.py +0 -0
  358. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/superfluid/schema.json +0 -0
  359. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/superfluid/superfluid.svg +0 -0
  360. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/system/__init__.py +0 -0
  361. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/system/add_autonomous_task.py +0 -0
  362. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/system/base.py +0 -0
  363. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/system/delete_autonomous_task.py +0 -0
  364. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/system/edit_autonomous_task.py +0 -0
  365. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/system/list_autonomous_tasks.py +0 -0
  366. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/system/read_agent_api_key.py +0 -0
  367. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/system/regenerate_agent_api_key.py +0 -0
  368. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/system/schema.json +0 -0
  369. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/system/system.svg +0 -0
  370. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/tavily/README.md +0 -0
  371. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/tavily/__init__.py +0 -0
  372. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/tavily/base.py +0 -0
  373. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/tavily/schema.json +0 -0
  374. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/tavily/tavily.jpg +0 -0
  375. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/tavily/tavily_extract.py +0 -0
  376. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/tavily/tavily_search.py +0 -0
  377. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/token/README.md +0 -0
  378. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/token/__init__.py +0 -0
  379. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/token/base.py +0 -0
  380. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/token/constants.py +0 -0
  381. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/token/erc20_transfers.py +0 -0
  382. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/token/moralis.png +0 -0
  383. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/token/schema.json +0 -0
  384. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/token/token_analytics.py +0 -0
  385. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/token/token_price.py +0 -0
  386. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/token/token_search.py +0 -0
  387. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/twitter/__init__.py +0 -0
  388. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/twitter/base.py +0 -0
  389. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/twitter/follow_user.py +0 -0
  390. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/twitter/get_mentions.py +0 -0
  391. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/twitter/get_timeline.py +0 -0
  392. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/twitter/get_user_by_username.py +0 -0
  393. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/twitter/get_user_tweets.py +0 -0
  394. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/twitter/like_tweet.py +0 -0
  395. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/twitter/post_tweet.py +0 -0
  396. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/twitter/reply_tweet.py +0 -0
  397. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/twitter/retweet.py +0 -0
  398. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/twitter/schema.json +0 -0
  399. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/twitter/search_tweets.py +0 -0
  400. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/twitter/twitter.png +0 -0
  401. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/unrealspeech/__init__.py +0 -0
  402. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/unrealspeech/base.py +0 -0
  403. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/unrealspeech/schema.json +0 -0
  404. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/unrealspeech/text_to_speech.py +0 -0
  405. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/unrealspeech/unrealspeech.jpg +0 -0
  406. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_audio/__init__.py +0 -0
  407. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_audio/base.py +0 -0
  408. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_audio/input.py +0 -0
  409. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_audio/schema.json +0 -0
  410. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_audio/venice_logo.jpg +0 -0
  411. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/README.md +0 -0
  412. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/__init__.py +0 -0
  413. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/base.py +0 -0
  414. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/config.py +0 -0
  415. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_enhance/README.md +0 -0
  416. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_enhance/__init__.py +0 -0
  417. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_enhance/image_enhance.py +0 -0
  418. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_enhance/image_enhance_base.py +0 -0
  419. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_enhance/image_enhance_input.py +0 -0
  420. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_generation/README.md +0 -0
  421. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_generation/__init__.py +0 -0
  422. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +0 -0
  423. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +0 -0
  424. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +0 -0
  425. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_generation/image_generation_input.py +0 -0
  426. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +0 -0
  427. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +0 -0
  428. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +0 -0
  429. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +0 -0
  430. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_upscale/README.md +0 -0
  431. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_upscale/__init__.py +0 -0
  432. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_upscale/image_upscale.py +0 -0
  433. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_upscale/image_upscale_base.py +0 -0
  434. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_upscale/image_upscale_input.py +0 -0
  435. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_vision/README.md +0 -0
  436. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_vision/__init__.py +0 -0
  437. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_vision/image_vision.py +0 -0
  438. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_vision/image_vision_base.py +0 -0
  439. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/image_vision/image_vision_input.py +0 -0
  440. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/schema.json +0 -0
  441. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/utils.py +0 -0
  442. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/venice_image/venice_image.jpg +0 -0
  443. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/web_scraper/README.md +0 -0
  444. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/web_scraper/__init__.py +0 -0
  445. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/web_scraper/base.py +0 -0
  446. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/web_scraper/document_indexer.py +0 -0
  447. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/web_scraper/langchain.png +0 -0
  448. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/web_scraper/schema.json +0 -0
  449. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/web_scraper/scrape_and_index.py +0 -0
  450. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/web_scraper/utils.py +0 -0
  451. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/web_scraper/website_indexer.py +0 -0
  452. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/weth/__init__.py +0 -0
  453. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/weth/base.py +0 -0
  454. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/weth/schema.json +0 -0
  455. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/weth/weth.svg +0 -0
  456. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/wow/__init__.py +0 -0
  457. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/wow/base.py +0 -0
  458. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/wow/schema.json +0 -0
  459. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/wow/wow.svg +0 -0
  460. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/x402/base.py +0 -0
  461. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/x402/http_request.py +0 -0
  462. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/x402/x402.webp +0 -0
  463. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/xmtp/README.md +0 -0
  464. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/xmtp/__init__.py +0 -0
  465. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/xmtp/base.py +0 -0
  466. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/xmtp/price.py +0 -0
  467. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/xmtp/schema.json +0 -0
  468. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/xmtp/swap.py +0 -0
  469. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/xmtp/transfer.py +0 -0
  470. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/skills/xmtp/xmtp.png +0 -0
  471. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/utils/__init__.py +0 -0
  472. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/utils/chain.py +0 -0
  473. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/utils/ens.py +0 -0
  474. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/utils/error.py +0 -0
  475. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/utils/logging.py +0 -0
  476. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/utils/random.py +0 -0
  477. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/utils/schema.py +0 -0
  478. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/utils/slack_alert.py +0 -0
  479. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/utils/tx.py +0 -0
  480. {intentkit-0.8.34.dev3 → intentkit-0.8.34.dev6}/intentkit/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intentkit
3
- Version: 0.8.34.dev3
3
+ Version: 0.8.34.dev6
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-dev3"
6
+ __version__ = "0.8.34-dev6"
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,9 +6,7 @@ including clearing thread history using LangGraph's checkpointer.
6
6
 
7
7
  import logging
8
8
 
9
- from langgraph.checkpoint.postgres.shallow import AsyncShallowPostgresSaver
10
-
11
- from intentkit.models.db import get_connection_pool
9
+ from intentkit.models.db import get_checkpointer
12
10
  from intentkit.utils.error import IntentKitAPIError
13
11
 
14
12
  logger = logging.getLogger(__name__)
@@ -36,8 +34,7 @@ async def clear_thread_memory(agent_id: str, chat_id: str) -> bool:
36
34
  thread_id = f"{agent_id}-{chat_id}"
37
35
 
38
36
  # Get the LangGraph checkpointer instance
39
- pool = get_connection_pool()
40
- checkpointer = AsyncShallowPostgresSaver(pool)
37
+ checkpointer = get_checkpointer()
41
38
 
42
39
  # Use the official LangGraph method to delete all thread content
43
40
  await checkpointer.adelete_thread(thread_id)
@@ -27,7 +27,6 @@ from langchain_core.messages import (
27
27
  )
28
28
  from langchain_core.tools import BaseTool
29
29
  from langgraph.checkpoint.memory import InMemorySaver
30
- from langgraph.checkpoint.postgres.shallow import AsyncShallowPostgresSaver
31
30
  from langgraph.errors import GraphRecursionError
32
31
  from langgraph.graph.state import CompiledStateGraph
33
32
  from sqlalchemy import func, update
@@ -55,7 +54,10 @@ from intentkit.models.chat import (
55
54
  ChatMessageSkillCall,
56
55
  )
57
56
  from intentkit.models.credit import CreditAccount, OwnerType
58
- from intentkit.models.db import get_connection_pool, get_session
57
+ from intentkit.models.db import (
58
+ get_checkpointer,
59
+ get_session,
60
+ )
59
61
  from intentkit.models.llm import LLMModelInfo, create_llm_model
60
62
  from intentkit.models.skill import AgentSkillData, ChatSkillData, Skill
61
63
  from intentkit.models.user import User
@@ -124,10 +126,9 @@ async def build_agent(
124
126
 
125
127
  # ==== Store buffered conversation history in memory.
126
128
  try:
127
- pool = get_connection_pool()
128
- memory = AsyncShallowPostgresSaver(pool)
129
+ checkpointer = get_checkpointer()
129
130
  except RuntimeError:
130
- memory = InMemorySaver()
131
+ checkpointer = InMemorySaver()
131
132
 
132
133
  # ==== Load skills
133
134
  tools: list[BaseTool | dict] = []
@@ -198,7 +199,7 @@ async def build_agent(
198
199
  middleware=middleware,
199
200
  state_schema=AgentState,
200
201
  context_schema=AgentContext,
201
- checkpointer=memory,
202
+ checkpointer=checkpointer,
202
203
  debug=config.debug_checkpoint,
203
204
  name=agent.id,
204
205
  )
@@ -373,6 +374,7 @@ async def stream_agent_raw(
373
374
  payer = user_message.user_id
374
375
  if user_message.author_type in [
375
376
  AuthorType.TELEGRAM,
377
+ AuthorType.DISCORD,
376
378
  AuthorType.TWITTER,
377
379
  AuthorType.API,
378
380
  AuthorType.X402,
@@ -13,6 +13,7 @@ from intentkit.models.db_mig import safe_migrate
13
13
 
14
14
  engine: AsyncEngine | None = None
15
15
  _connection_pool: AsyncConnectionPool | None = None
16
+ _checkpointer: AsyncShallowPostgresSaver | None = None
16
17
 
17
18
 
18
19
  async def check_connection(conn):
@@ -51,7 +52,7 @@ async def init_db(
51
52
  auto_migrate: Whether to run migrations automatically (default: True)
52
53
  pool_size: Database connection pool size (default: 3)
53
54
  """
54
- global engine, _connection_pool
55
+ global engine, _connection_pool, _checkpointer
55
56
  # Initialize psycopg pool and AsyncShallowPostgresSaver if not already initialized
56
57
  if _connection_pool is None:
57
58
  if host:
@@ -70,6 +71,7 @@ async def init_db(
70
71
  max_lifetime=3600, # 1 hour
71
72
  )
72
73
  _connection_pool = pool
74
+ _checkpointer = AsyncShallowPostgresSaver(pool)
73
75
  if auto_migrate:
74
76
  # Migrate can not use pool, so we start from scratch
75
77
  async with AsyncShallowPostgresSaver.from_conn_string(
@@ -150,3 +152,14 @@ def get_connection_pool() -> AsyncConnectionPool:
150
152
  if _connection_pool is None:
151
153
  raise RuntimeError("Database pool not initialized. Call init_db first.")
152
154
  return _connection_pool
155
+
156
+
157
+ def get_checkpointer() -> AsyncShallowPostgresSaver:
158
+ """Get the AsyncShallowPostgresSaver instance.
159
+
160
+ Returns:
161
+ AsyncShallowPostgresSaver: The AsyncShallowPostgresSaver instance
162
+ """
163
+ if _checkpointer is None:
164
+ raise RuntimeError("Database checkpointer not initialized. Call init_db first.")
165
+ return _checkpointer
@@ -0,0 +1,220 @@
1
+ """Database migration utilities."""
2
+
3
+ import logging
4
+ from collections.abc import Callable
5
+
6
+ from sqlalchemy import Column, MetaData, inspect, text
7
+
8
+ from intentkit.models.base import Base
9
+
10
+ logger = logging.getLogger(__name__)
11
+
12
+
13
+ async def add_column_if_not_exists(
14
+ conn, dialect, table_name: str, column: Column
15
+ ) -> None:
16
+ """Add a column to a table if it doesn't exist.
17
+
18
+ Args:
19
+ conn: SQLAlchemy conn
20
+ table_name: Name of the table
21
+ column: Column to add
22
+ """
23
+
24
+ # Use run_sync to perform inspection on the connection
25
+ def _get_columns(connection):
26
+ inspector = inspect(connection)
27
+ return [c["name"] for c in inspector.get_columns(table_name)]
28
+
29
+ columns = await conn.run_sync(_get_columns)
30
+
31
+ if column.name not in columns:
32
+ # Build column definition
33
+ column_def = f"{column.name} {column.type.compile(dialect)}"
34
+
35
+ # Add DEFAULT if specified
36
+ if column.default is not None:
37
+ if hasattr(column.default, "arg"):
38
+ default_value = column.default.arg
39
+ if not isinstance(default_value, Callable):
40
+ if isinstance(default_value, bool):
41
+ default_value = str(default_value).lower()
42
+ elif isinstance(default_value, str):
43
+ default_value = f"'{default_value}'"
44
+ elif isinstance(default_value, list | dict):
45
+ default_value = "'{}'"
46
+ column_def += f" DEFAULT {default_value}"
47
+
48
+ # Execute ALTER TABLE
49
+ await conn.execute(text(f"ALTER TABLE {table_name} ADD COLUMN {column_def}"))
50
+ logger.info(f"Added column {column.name} to table {table_name}")
51
+
52
+
53
+ async def update_table_schema(conn, dialect, model_cls) -> None:
54
+ """Update table schema by adding missing columns from the model.
55
+
56
+ Args:
57
+ conn: SQLAlchemy conn
58
+ dialect: SQLAlchemy dialect
59
+ model_cls: SQLAlchemy model class to check for new columns
60
+ """
61
+ if not hasattr(model_cls, "__table__"):
62
+ return
63
+
64
+ table_name = model_cls.__tablename__
65
+ for name, column in model_cls.__table__.columns.items():
66
+ if name != "id": # Skip primary key
67
+ await add_column_if_not_exists(conn, dialect, table_name, column)
68
+
69
+
70
+ async def safe_migrate(engine) -> None:
71
+ """Safely migrate all SQLAlchemy models by adding new columns.
72
+
73
+ Args:
74
+ engine: SQLAlchemy engine
75
+ """
76
+ logger.info("Starting database schema migration")
77
+ dialect = engine.dialect
78
+
79
+ async with engine.begin() as conn:
80
+ try:
81
+ # Create tables if they don't exist
82
+ await conn.run_sync(Base.metadata.create_all)
83
+
84
+ # Get existing table metadata
85
+ metadata = MetaData()
86
+ await conn.run_sync(metadata.reflect)
87
+
88
+ # Update schema for all model classes
89
+ for mapper in Base.registry.mappers:
90
+ model_cls = mapper.class_
91
+ if hasattr(model_cls, "__tablename__"):
92
+ table_name = model_cls.__tablename__
93
+ if table_name in metadata.tables:
94
+ # We need a sync wrapper for the async update_table_schema
95
+ async def update_table_wrapper():
96
+ await update_table_schema(conn, dialect, model_cls)
97
+
98
+ await update_table_wrapper()
99
+
100
+ # Migrate checkpoints tables
101
+ await migrate_checkpoints_table(conn)
102
+ except Exception as e:
103
+ logger.error(f"Error updating database schema: {str(e)}")
104
+ raise
105
+
106
+ logger.info("Database schema updated successfully")
107
+
108
+
109
+ async def migrate_checkpoints_table(conn) -> None:
110
+ """Migrate checkpoints tables to support langgraph 2.0."""
111
+ tables = ["checkpoints", "checkpoint_blobs", "checkpoint_writes"]
112
+
113
+ def _get_tables(connection):
114
+ insp = inspect(connection)
115
+ return insp.get_table_names()
116
+
117
+ existing_tables = await conn.run_sync(_get_tables)
118
+
119
+ for table in tables:
120
+ if table not in existing_tables:
121
+ continue
122
+
123
+ # 1. Add checkpoint_ns column
124
+ await conn.execute(
125
+ text(
126
+ f"ALTER TABLE {table} ADD COLUMN IF NOT EXISTS checkpoint_ns TEXT DEFAULT ''"
127
+ )
128
+ )
129
+
130
+ # 2. Drop columns that ShallowPostgresSaver doesn't use
131
+ if table == "checkpoints":
132
+ # ShallowPostgresSaver doesn't use checkpoint_id or parent_checkpoint_id
133
+ await conn.execute(
134
+ text("ALTER TABLE checkpoints DROP COLUMN IF EXISTS checkpoint_id")
135
+ )
136
+ await conn.execute(
137
+ text(
138
+ "ALTER TABLE checkpoints DROP COLUMN IF EXISTS parent_checkpoint_id"
139
+ )
140
+ )
141
+ elif table == "checkpoint_blobs":
142
+ # ShallowPostgresSaver doesn't use version column
143
+ await conn.execute(
144
+ text("ALTER TABLE checkpoint_blobs DROP COLUMN IF EXISTS version")
145
+ )
146
+
147
+ # 3. Update Primary Key
148
+ def _check_pk(connection, table_name=table):
149
+ insp = inspect(connection)
150
+ return insp.get_pk_constraint(table_name)
151
+
152
+ pk = await conn.run_sync(_check_pk)
153
+ current_cols = set(pk.get("constrained_columns", []))
154
+
155
+ # Expected columns depend on table
156
+ expected_cols = set()
157
+ pk_cols = ""
158
+ if table == "checkpoints":
159
+ expected_cols = {"thread_id", "checkpoint_ns"}
160
+ pk_cols = "thread_id, checkpoint_ns"
161
+ elif table == "checkpoint_blobs":
162
+ expected_cols = {"thread_id", "checkpoint_ns", "channel"}
163
+ pk_cols = "thread_id, checkpoint_ns, channel"
164
+ elif table == "checkpoint_writes":
165
+ expected_cols = {
166
+ "thread_id",
167
+ "checkpoint_ns",
168
+ "checkpoint_id",
169
+ "task_id",
170
+ "idx",
171
+ }
172
+ pk_cols = "thread_id, checkpoint_ns, checkpoint_id, task_id, idx"
173
+
174
+ if current_cols != expected_cols:
175
+ logger.info(f"Migrating {table} PK from {current_cols} to {expected_cols}")
176
+
177
+ # If migrating checkpoints to (thread_id, checkpoint_ns), we need to handle duplicates
178
+ if table == "checkpoints" and expected_cols == {
179
+ "thread_id",
180
+ "checkpoint_ns",
181
+ }:
182
+ # Keep only the latest checkpoint for each (thread_id, checkpoint_ns) based on checkpoint_id (time-ordered)
183
+ await conn.execute(
184
+ text("""
185
+ DELETE FROM checkpoints
186
+ WHERE (thread_id, checkpoint_ns, checkpoint_id) NOT IN (
187
+ SELECT thread_id, checkpoint_ns, MAX(checkpoint_id)
188
+ FROM checkpoints
189
+ GROUP BY thread_id, checkpoint_ns
190
+ )
191
+ """)
192
+ )
193
+
194
+ # If migrating checkpoint_blobs to (thread_id, checkpoint_ns, channel), we need to handle duplicates
195
+ elif table == "checkpoint_blobs" and expected_cols == {
196
+ "thread_id",
197
+ "checkpoint_ns",
198
+ "channel",
199
+ }:
200
+ # Keep only blobs that are referenced by the remaining checkpoints
201
+ # The relationship is: checkpoints.checkpoint -> 'channel_versions' ->> blob.channel = blob.version
202
+ await conn.execute(
203
+ text("""
204
+ DELETE FROM checkpoint_blobs cb
205
+ WHERE NOT EXISTS (
206
+ SELECT 1
207
+ FROM checkpoints cp
208
+ WHERE cp.thread_id = cb.thread_id
209
+ AND cp.checkpoint_ns = cb.checkpoint_ns
210
+ AND (cp.checkpoint -> 'channel_versions' ->> cb.channel) = cb.version
211
+ )
212
+ """)
213
+ )
214
+
215
+ if pk.get("name"):
216
+ await conn.execute(
217
+ text(f"ALTER TABLE {table} DROP CONSTRAINT {pk['name']}")
218
+ )
219
+
220
+ await conn.execute(text(f"ALTER TABLE {table} ADD PRIMARY KEY ({pk_cols})"))
@@ -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
 
@@ -77,7 +77,6 @@ class ImageGenerationAnimagineXL(HeuristBaseTool):
77
77
  """
78
78
  context = self.get_context()
79
79
  skill_config = context.agent.skill_config(self.category)
80
- skill_config = skill_config
81
80
 
82
81
  # Get the Heurist API key from configuration
83
82
  if "api_key" in skill_config and skill_config["api_key"]:
@@ -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
 
@@ -76,7 +76,6 @@ class ImageGenerationArthemyComics(HeuristBaseTool):
76
76
  """
77
77
  context = self.get_context()
78
78
  skill_config = context.agent.skill_config(self.category)
79
- skill_config = skill_config
80
79
 
81
80
  # Get the Heurist API key from configuration
82
81
  if "api_key" in skill_config and skill_config["api_key"]:
@@ -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
 
@@ -76,7 +76,6 @@ class ImageGenerationArthemyReal(HeuristBaseTool):
76
76
  """
77
77
  context = self.get_context()
78
78
  skill_config = context.agent.skill_config(self.category)
79
- skill_config = skill_config
80
79
 
81
80
  # Get the Heurist API key from configuration
82
81
  if "api_key" in skill_config and skill_config["api_key"]:
@@ -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
 
@@ -76,7 +76,6 @@ class ImageGenerationBrainDance(HeuristBaseTool):
76
76
  """
77
77
  context = self.get_context()
78
78
  skill_config = context.agent.skill_config(self.category)
79
- skill_config = skill_config
80
79
 
81
80
  # Get the Heurist API key from configuration
82
81
  if "api_key" in skill_config and skill_config["api_key"]:
@@ -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
 
@@ -76,7 +76,6 @@ class ImageGenerationCyberRealisticXL(HeuristBaseTool):
76
76
  """
77
77
  context = self.get_context()
78
78
  skill_config = context.agent.skill_config(self.category)
79
- skill_config = skill_config
80
79
 
81
80
  # Get the Heurist API key from configuration
82
81
  if "api_key" in skill_config and skill_config["api_key"]:
@@ -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
 
@@ -76,7 +76,6 @@ class ImageGenerationFlux1Dev(HeuristBaseTool):
76
76
  """
77
77
  context = self.get_context()
78
78
  skill_config = context.agent.skill_config(self.category)
79
- skill_config = skill_config
80
79
 
81
80
  # Get the Heurist API key from configuration
82
81
  if "api_key" in skill_config and skill_config["api_key"]: