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