intentkit 0.5.1__tar.gz → 0.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (401) hide show
  1. {intentkit-0.5.1 → intentkit-0.6.0}/PKG-INFO +1 -1
  2. {intentkit-0.5.1 → intentkit-0.6.0}/__init__.py +1 -1
  3. {intentkit-0.5.1 → intentkit-0.6.0}/abstracts/skill.py +12 -0
  4. intentkit-0.6.0/clients/cdp.py +151 -0
  5. {intentkit-0.5.1 → intentkit-0.6.0}/config/config.py +12 -4
  6. {intentkit-0.5.1 → intentkit-0.6.0}/core/engine.py +39 -31
  7. {intentkit-0.5.1 → intentkit-0.6.0}/core/node.py +8 -4
  8. {intentkit-0.5.1 → intentkit-0.6.0}/core/prompt.py +5 -6
  9. {intentkit-0.5.1 → intentkit-0.6.0}/core/skill.py +11 -0
  10. {intentkit-0.5.1 → intentkit-0.6.0}/models/agent.py +2 -9
  11. {intentkit-0.5.1 → intentkit-0.6.0}/models/agent_data.py +18 -0
  12. {intentkit-0.5.1 → intentkit-0.6.0}/models/agent_schema.json +12 -0
  13. {intentkit-0.5.1 → intentkit-0.6.0}/models/chat.py +50 -0
  14. {intentkit-0.5.1 → intentkit-0.6.0}/models/skill.py +19 -0
  15. {intentkit-0.5.1 → intentkit-0.6.0}/pyproject.toml +10 -11
  16. {intentkit-0.5.1 → intentkit-0.6.0}/skills/base.py +37 -17
  17. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cdp/__init__.py +6 -14
  18. intentkit-0.6.0/skills/cdp/get_balance.py +133 -0
  19. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cdp/schema.json +0 -64
  20. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cryptocompare/fetch_news.py +2 -2
  21. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cryptocompare/fetch_price.py +2 -2
  22. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cryptocompare/fetch_top_exchanges.py +2 -2
  23. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cryptocompare/fetch_top_market_cap.py +2 -2
  24. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cryptocompare/fetch_top_volume.py +2 -2
  25. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cryptocompare/fetch_trading_signals.py +2 -2
  26. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/base.py +3 -3
  27. {intentkit-0.5.1 → intentkit-0.6.0}/skills/enso/base.py +27 -4
  28. {intentkit-0.5.1 → intentkit-0.6.0}/skills/enso/networks.py +1 -1
  29. {intentkit-0.5.1 → intentkit-0.6.0}/skills/enso/route.py +24 -23
  30. {intentkit-0.5.1 → intentkit-0.6.0}/skills/enso/tokens.py +1 -1
  31. {intentkit-0.5.1 → intentkit-0.6.0}/skills/enso/wallet.py +27 -23
  32. intentkit-0.6.0/skills/firecrawl/README.md +211 -0
  33. intentkit-0.6.0/skills/firecrawl/__init__.py +107 -0
  34. intentkit-0.6.0/skills/firecrawl/base.py +28 -0
  35. intentkit-0.6.0/skills/firecrawl/clear.py +87 -0
  36. intentkit-0.6.0/skills/firecrawl/crawl.py +399 -0
  37. intentkit-0.6.0/skills/firecrawl/firecrawl.png +0 -0
  38. intentkit-0.6.0/skills/firecrawl/query.py +123 -0
  39. intentkit-0.6.0/skills/firecrawl/schema.json +153 -0
  40. intentkit-0.6.0/skills/firecrawl/scrape.py +318 -0
  41. intentkit-0.6.0/skills/firecrawl/utils.py +306 -0
  42. {intentkit-0.5.1 → intentkit-0.6.0}/skills/heurist/image_generation_animagine_xl.py +1 -1
  43. {intentkit-0.5.1 → intentkit-0.6.0}/skills/heurist/image_generation_arthemy_comics.py +1 -1
  44. {intentkit-0.5.1 → intentkit-0.6.0}/skills/heurist/image_generation_arthemy_real.py +1 -1
  45. {intentkit-0.5.1 → intentkit-0.6.0}/skills/heurist/image_generation_braindance.py +1 -1
  46. {intentkit-0.5.1 → intentkit-0.6.0}/skills/heurist/image_generation_cyber_realistic_xl.py +1 -1
  47. {intentkit-0.5.1 → intentkit-0.6.0}/skills/heurist/image_generation_flux_1_dev.py +1 -1
  48. {intentkit-0.5.1 → intentkit-0.6.0}/skills/heurist/image_generation_sdxl.py +1 -1
  49. intentkit-0.6.0/skills/http/README.md +78 -0
  50. intentkit-0.6.0/skills/http/__init__.py +100 -0
  51. intentkit-0.6.0/skills/http/base.py +21 -0
  52. intentkit-0.6.0/skills/http/get.py +96 -0
  53. intentkit-0.6.0/skills/http/http.svg +15 -0
  54. intentkit-0.6.0/skills/http/post.py +113 -0
  55. intentkit-0.6.0/skills/http/put.py +113 -0
  56. intentkit-0.6.0/skills/http/schema.json +80 -0
  57. {intentkit-0.5.1 → intentkit-0.6.0}/skills/lifi/token_execute.py +1 -1
  58. {intentkit-0.5.1 → intentkit-0.6.0}/skills/openai/dalle_image_generation.py +1 -1
  59. {intentkit-0.5.1 → intentkit-0.6.0}/skills/openai/gpt_image_generation.py +1 -1
  60. {intentkit-0.5.1 → intentkit-0.6.0}/skills/openai/gpt_image_to_image.py +1 -1
  61. intentkit-0.6.0/skills/supabase/__init__.py +116 -0
  62. intentkit-0.6.0/skills/supabase/base.py +72 -0
  63. intentkit-0.6.0/skills/supabase/delete_data.py +102 -0
  64. intentkit-0.6.0/skills/supabase/fetch_data.py +120 -0
  65. intentkit-0.6.0/skills/supabase/insert_data.py +70 -0
  66. intentkit-0.6.0/skills/supabase/invoke_function.py +74 -0
  67. intentkit-0.6.0/skills/supabase/schema.json +170 -0
  68. intentkit-0.6.0/skills/supabase/supabase.svg +15 -0
  69. intentkit-0.6.0/skills/supabase/update_data.py +105 -0
  70. intentkit-0.6.0/skills/supabase/upsert_data.py +77 -0
  71. {intentkit-0.5.1 → intentkit-0.6.0}/skills/system/read_agent_api_key.py +1 -1
  72. {intentkit-0.5.1 → intentkit-0.6.0}/skills/system/regenerate_agent_api_key.py +1 -1
  73. {intentkit-0.5.1 → intentkit-0.6.0}/skills/token/base.py +1 -39
  74. {intentkit-0.5.1 → intentkit-0.6.0}/skills/twitter/follow_user.py +3 -3
  75. {intentkit-0.5.1 → intentkit-0.6.0}/skills/twitter/get_mentions.py +6 -6
  76. {intentkit-0.5.1 → intentkit-0.6.0}/skills/twitter/get_timeline.py +5 -5
  77. {intentkit-0.5.1 → intentkit-0.6.0}/skills/twitter/get_user_by_username.py +3 -3
  78. {intentkit-0.5.1 → intentkit-0.6.0}/skills/twitter/get_user_tweets.py +5 -5
  79. {intentkit-0.5.1 → intentkit-0.6.0}/skills/twitter/like_tweet.py +3 -3
  80. {intentkit-0.5.1 → intentkit-0.6.0}/skills/twitter/post_tweet.py +4 -4
  81. {intentkit-0.5.1 → intentkit-0.6.0}/skills/twitter/reply_tweet.py +4 -4
  82. {intentkit-0.5.1 → intentkit-0.6.0}/skills/twitter/retweet.py +3 -3
  83. {intentkit-0.5.1 → intentkit-0.6.0}/skills/twitter/search_tweets.py +5 -5
  84. {intentkit-0.5.1 → intentkit-0.6.0}/skills/unrealspeech/text_to_speech.py +1 -1
  85. {intentkit-0.5.1 → intentkit-0.6.0}/skills/web_scraper/README.md +35 -4
  86. {intentkit-0.5.1 → intentkit-0.6.0}/skills/web_scraper/__init__.py +16 -0
  87. intentkit-0.6.0/skills/web_scraper/document_indexer.py +143 -0
  88. {intentkit-0.5.1 → intentkit-0.6.0}/skills/web_scraper/schema.json +28 -0
  89. intentkit-0.6.0/skills/web_scraper/scrape_and_index.py +262 -0
  90. intentkit-0.6.0/skills/web_scraper/utils.py +684 -0
  91. intentkit-0.6.0/skills/web_scraper/website_indexer.py +456 -0
  92. {intentkit-0.5.1 → intentkit-0.6.0}/utils/logging.py +1 -1
  93. intentkit-0.5.1/clients/cdp.py +0 -53
  94. intentkit-0.5.1/skills/cdp/get_balance.py +0 -81
  95. intentkit-0.5.1/skills/web_scraper/scrape_and_index.py +0 -327
  96. {intentkit-0.5.1 → intentkit-0.6.0}/.gitignore +0 -0
  97. {intentkit-0.5.1 → intentkit-0.6.0}/LICENSE +0 -0
  98. {intentkit-0.5.1 → intentkit-0.6.0}/MANIFEST.in +0 -0
  99. {intentkit-0.5.1 → intentkit-0.6.0}/README.md +0 -0
  100. {intentkit-0.5.1 → intentkit-0.6.0}/abstracts/__init__.py +0 -0
  101. {intentkit-0.5.1 → intentkit-0.6.0}/abstracts/agent.py +0 -0
  102. {intentkit-0.5.1 → intentkit-0.6.0}/abstracts/api.py +0 -0
  103. {intentkit-0.5.1 → intentkit-0.6.0}/abstracts/engine.py +0 -0
  104. {intentkit-0.5.1 → intentkit-0.6.0}/abstracts/exception.py +0 -0
  105. {intentkit-0.5.1 → intentkit-0.6.0}/abstracts/graph.py +0 -0
  106. {intentkit-0.5.1 → intentkit-0.6.0}/abstracts/twitter.py +0 -0
  107. {intentkit-0.5.1 → intentkit-0.6.0}/clients/__init__.py +0 -0
  108. {intentkit-0.5.1 → intentkit-0.6.0}/clients/twitter.py +0 -0
  109. {intentkit-0.5.1 → intentkit-0.6.0}/config/__init__.py +0 -0
  110. {intentkit-0.5.1 → intentkit-0.6.0}/core/__init__.py +0 -0
  111. {intentkit-0.5.1 → intentkit-0.6.0}/core/agent.py +0 -0
  112. {intentkit-0.5.1 → intentkit-0.6.0}/core/api.py +0 -0
  113. {intentkit-0.5.1 → intentkit-0.6.0}/core/client.py +0 -0
  114. {intentkit-0.5.1 → intentkit-0.6.0}/core/credit.py +0 -0
  115. {intentkit-0.5.1 → intentkit-0.6.0}/models/app_setting.py +0 -0
  116. {intentkit-0.5.1 → intentkit-0.6.0}/models/base.py +0 -0
  117. {intentkit-0.5.1 → intentkit-0.6.0}/models/conversation.py +0 -0
  118. {intentkit-0.5.1 → intentkit-0.6.0}/models/credit.py +0 -0
  119. {intentkit-0.5.1 → intentkit-0.6.0}/models/db.py +0 -0
  120. {intentkit-0.5.1 → intentkit-0.6.0}/models/db_mig.py +0 -0
  121. {intentkit-0.5.1 → intentkit-0.6.0}/models/generator.py +0 -0
  122. {intentkit-0.5.1 → intentkit-0.6.0}/models/llm.py +0 -0
  123. {intentkit-0.5.1 → intentkit-0.6.0}/models/redis.py +0 -0
  124. {intentkit-0.5.1 → intentkit-0.6.0}/models/user.py +0 -0
  125. {intentkit-0.5.1 → intentkit-0.6.0}/skills/__init__.py +0 -0
  126. {intentkit-0.5.1 → intentkit-0.6.0}/skills/acolyt/__init__.py +0 -0
  127. {intentkit-0.5.1 → intentkit-0.6.0}/skills/acolyt/acolyt.jpg +0 -0
  128. {intentkit-0.5.1 → intentkit-0.6.0}/skills/acolyt/ask.py +0 -0
  129. {intentkit-0.5.1 → intentkit-0.6.0}/skills/acolyt/base.py +0 -0
  130. {intentkit-0.5.1 → intentkit-0.6.0}/skills/acolyt/schema.json +0 -0
  131. {intentkit-0.5.1 → intentkit-0.6.0}/skills/aixbt/README.md +0 -0
  132. {intentkit-0.5.1 → intentkit-0.6.0}/skills/aixbt/__init__.py +0 -0
  133. {intentkit-0.5.1 → intentkit-0.6.0}/skills/aixbt/aixbt.jpg +0 -0
  134. {intentkit-0.5.1 → intentkit-0.6.0}/skills/aixbt/base.py +0 -0
  135. {intentkit-0.5.1 → intentkit-0.6.0}/skills/aixbt/projects.py +0 -0
  136. {intentkit-0.5.1 → intentkit-0.6.0}/skills/aixbt/schema.json +0 -0
  137. {intentkit-0.5.1 → intentkit-0.6.0}/skills/allora/__init__.py +0 -0
  138. {intentkit-0.5.1 → intentkit-0.6.0}/skills/allora/allora.jpeg +0 -0
  139. {intentkit-0.5.1 → intentkit-0.6.0}/skills/allora/base.py +0 -0
  140. {intentkit-0.5.1 → intentkit-0.6.0}/skills/allora/price.py +0 -0
  141. {intentkit-0.5.1 → intentkit-0.6.0}/skills/allora/schema.json +0 -0
  142. {intentkit-0.5.1 → intentkit-0.6.0}/skills/carv/README.md +0 -0
  143. {intentkit-0.5.1 → intentkit-0.6.0}/skills/carv/__init__.py +0 -0
  144. {intentkit-0.5.1 → intentkit-0.6.0}/skills/carv/base.py +0 -0
  145. {intentkit-0.5.1 → intentkit-0.6.0}/skills/carv/carv.webp +0 -0
  146. {intentkit-0.5.1 → intentkit-0.6.0}/skills/carv/fetch_news.py +0 -0
  147. {intentkit-0.5.1 → intentkit-0.6.0}/skills/carv/onchain_query.py +0 -0
  148. {intentkit-0.5.1 → intentkit-0.6.0}/skills/carv/schema.json +0 -0
  149. {intentkit-0.5.1 → intentkit-0.6.0}/skills/carv/token_info_and_price.py +0 -0
  150. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cdp/base.py +0 -0
  151. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cdp/cdp.png +0 -0
  152. {intentkit-0.5.1 → intentkit-0.6.0}/skills/chainlist/README.md +0 -0
  153. {intentkit-0.5.1 → intentkit-0.6.0}/skills/chainlist/__init__.py +0 -0
  154. {intentkit-0.5.1 → intentkit-0.6.0}/skills/chainlist/base.py +0 -0
  155. {intentkit-0.5.1 → intentkit-0.6.0}/skills/chainlist/chain_lookup.py +0 -0
  156. {intentkit-0.5.1 → intentkit-0.6.0}/skills/chainlist/chainlist.png +0 -0
  157. {intentkit-0.5.1 → intentkit-0.6.0}/skills/chainlist/schema.json +0 -0
  158. {intentkit-0.5.1 → intentkit-0.6.0}/skills/common/__init__.py +0 -0
  159. {intentkit-0.5.1 → intentkit-0.6.0}/skills/common/base.py +0 -0
  160. {intentkit-0.5.1 → intentkit-0.6.0}/skills/common/common.jpg +0 -0
  161. {intentkit-0.5.1 → intentkit-0.6.0}/skills/common/current_time.py +0 -0
  162. {intentkit-0.5.1 → intentkit-0.6.0}/skills/common/schema.json +0 -0
  163. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cookiefun/README.md +0 -0
  164. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cookiefun/__init__.py +0 -0
  165. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cookiefun/base.py +0 -0
  166. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cookiefun/constants.py +0 -0
  167. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cookiefun/cookiefun.png +0 -0
  168. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cookiefun/get_account_details.py +0 -0
  169. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cookiefun/get_account_feed.py +0 -0
  170. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cookiefun/get_account_smart_followers.py +0 -0
  171. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cookiefun/get_sectors.py +0 -0
  172. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cookiefun/schema.json +0 -0
  173. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cookiefun/search_accounts.py +0 -0
  174. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cryptocompare/__init__.py +0 -0
  175. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cryptocompare/api.py +0 -0
  176. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cryptocompare/base.py +0 -0
  177. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cryptocompare/cryptocompare.png +0 -0
  178. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cryptocompare/schema.json +0 -0
  179. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cryptopanic/__init__.py +0 -0
  180. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cryptopanic/base.py +0 -0
  181. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cryptopanic/cryptopanic.png +0 -0
  182. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cryptopanic/fetch_crypto_news.py +0 -0
  183. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cryptopanic/fetch_crypto_sentiment.py +0 -0
  184. {intentkit-0.5.1 → intentkit-0.6.0}/skills/cryptopanic/schema.json +0 -0
  185. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dapplooker/README.md +0 -0
  186. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dapplooker/__init__.py +0 -0
  187. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dapplooker/base.py +0 -0
  188. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dapplooker/dapplooker.jpg +0 -0
  189. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dapplooker/dapplooker_token_data.py +0 -0
  190. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dapplooker/schema.json +0 -0
  191. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/__init__.py +0 -0
  192. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/api.py +0 -0
  193. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/coins/__init__.py +0 -0
  194. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/coins/fetch_batch_historical_prices.py +0 -0
  195. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/coins/fetch_block.py +0 -0
  196. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/coins/fetch_current_prices.py +0 -0
  197. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/coins/fetch_first_price.py +0 -0
  198. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/coins/fetch_historical_prices.py +0 -0
  199. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/coins/fetch_price_chart.py +0 -0
  200. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/coins/fetch_price_percentage.py +0 -0
  201. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/config/__init__.py +0 -0
  202. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/config/chains.py +0 -0
  203. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/defillama.jpeg +0 -0
  204. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/fees/__init__.py +0 -0
  205. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/fees/fetch_fees_overview.py +0 -0
  206. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/schema.json +0 -0
  207. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/stablecoins/__init__.py +0 -0
  208. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/stablecoins/fetch_stablecoin_chains.py +0 -0
  209. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/stablecoins/fetch_stablecoin_charts.py +0 -0
  210. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/stablecoins/fetch_stablecoin_prices.py +0 -0
  211. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/stablecoins/fetch_stablecoins.py +0 -0
  212. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/tests/__init__.py +0 -0
  213. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/tests/api_integration.test.py +0 -0
  214. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/tests/api_unit.test.py +0 -0
  215. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/tvl/__init__.py +0 -0
  216. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/tvl/fetch_chain_historical_tvl.py +0 -0
  217. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/tvl/fetch_chains.py +0 -0
  218. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/tvl/fetch_historical_tvl.py +0 -0
  219. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/tvl/fetch_protocol.py +0 -0
  220. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/tvl/fetch_protocol_current_tvl.py +0 -0
  221. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/tvl/fetch_protocols.py +0 -0
  222. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/volumes/__init__.py +0 -0
  223. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/volumes/fetch_dex_overview.py +0 -0
  224. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/volumes/fetch_dex_summary.py +0 -0
  225. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/volumes/fetch_options_overview.py +0 -0
  226. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/yields/__init__.py +0 -0
  227. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/yields/fetch_pool_chart.py +0 -0
  228. {intentkit-0.5.1 → intentkit-0.6.0}/skills/defillama/yields/fetch_pools.py +0 -0
  229. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dexscreener/__init__.py +0 -0
  230. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dexscreener/base.py +0 -0
  231. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dexscreener/dexscreener.png +0 -0
  232. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dexscreener/model/__init__.py +0 -0
  233. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dexscreener/model/search_token_response.py +0 -0
  234. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dexscreener/schema.json +0 -0
  235. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dexscreener/search_token.py +0 -0
  236. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dune_analytics/__init__.py +0 -0
  237. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dune_analytics/base.py +0 -0
  238. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dune_analytics/dune.png +0 -0
  239. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dune_analytics/fetch_kol_buys.py +0 -0
  240. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dune_analytics/fetch_nation_metrics.py +0 -0
  241. {intentkit-0.5.1 → intentkit-0.6.0}/skills/dune_analytics/schema.json +0 -0
  242. {intentkit-0.5.1 → intentkit-0.6.0}/skills/elfa/README.md +0 -0
  243. {intentkit-0.5.1 → intentkit-0.6.0}/skills/elfa/__init__.py +0 -0
  244. {intentkit-0.5.1 → intentkit-0.6.0}/skills/elfa/base.py +0 -0
  245. {intentkit-0.5.1 → intentkit-0.6.0}/skills/elfa/elfa.jpg +0 -0
  246. {intentkit-0.5.1 → intentkit-0.6.0}/skills/elfa/mention.py +0 -0
  247. {intentkit-0.5.1 → intentkit-0.6.0}/skills/elfa/schema.json +0 -0
  248. {intentkit-0.5.1 → intentkit-0.6.0}/skills/elfa/stats.py +0 -0
  249. {intentkit-0.5.1 → intentkit-0.6.0}/skills/elfa/tokens.py +0 -0
  250. {intentkit-0.5.1 → intentkit-0.6.0}/skills/enso/README.md +0 -0
  251. {intentkit-0.5.1 → intentkit-0.6.0}/skills/enso/__init__.py +0 -0
  252. {intentkit-0.5.1 → intentkit-0.6.0}/skills/enso/abi/__init__.py +0 -0
  253. {intentkit-0.5.1 → intentkit-0.6.0}/skills/enso/abi/approval.py +0 -0
  254. {intentkit-0.5.1 → intentkit-0.6.0}/skills/enso/abi/erc20.py +0 -0
  255. {intentkit-0.5.1 → intentkit-0.6.0}/skills/enso/abi/route.py +0 -0
  256. {intentkit-0.5.1 → intentkit-0.6.0}/skills/enso/best_yield.py +0 -0
  257. {intentkit-0.5.1 → intentkit-0.6.0}/skills/enso/enso.jpg +0 -0
  258. {intentkit-0.5.1 → intentkit-0.6.0}/skills/enso/prices.py +0 -0
  259. {intentkit-0.5.1 → intentkit-0.6.0}/skills/enso/schema.json +0 -0
  260. {intentkit-0.5.1 → intentkit-0.6.0}/skills/github/README.md +0 -0
  261. {intentkit-0.5.1 → intentkit-0.6.0}/skills/github/__init__.py +0 -0
  262. {intentkit-0.5.1 → intentkit-0.6.0}/skills/github/base.py +0 -0
  263. {intentkit-0.5.1 → intentkit-0.6.0}/skills/github/github.jpg +0 -0
  264. {intentkit-0.5.1 → intentkit-0.6.0}/skills/github/github_search.py +0 -0
  265. {intentkit-0.5.1 → intentkit-0.6.0}/skills/github/schema.json +0 -0
  266. {intentkit-0.5.1 → intentkit-0.6.0}/skills/heurist/__init__.py +0 -0
  267. {intentkit-0.5.1 → intentkit-0.6.0}/skills/heurist/base.py +0 -0
  268. {intentkit-0.5.1 → intentkit-0.6.0}/skills/heurist/heurist.png +0 -0
  269. {intentkit-0.5.1 → intentkit-0.6.0}/skills/heurist/schema.json +0 -0
  270. {intentkit-0.5.1 → intentkit-0.6.0}/skills/lifi/README.md +0 -0
  271. {intentkit-0.5.1 → intentkit-0.6.0}/skills/lifi/__init__.py +0 -0
  272. {intentkit-0.5.1 → intentkit-0.6.0}/skills/lifi/base.py +0 -0
  273. {intentkit-0.5.1 → intentkit-0.6.0}/skills/lifi/lifi.png +0 -0
  274. {intentkit-0.5.1 → intentkit-0.6.0}/skills/lifi/schema.json +0 -0
  275. {intentkit-0.5.1 → intentkit-0.6.0}/skills/lifi/token_quote.py +0 -0
  276. {intentkit-0.5.1 → intentkit-0.6.0}/skills/lifi/utils.py +0 -0
  277. {intentkit-0.5.1 → intentkit-0.6.0}/skills/moralis/README.md +0 -0
  278. {intentkit-0.5.1 → intentkit-0.6.0}/skills/moralis/__init__.py +0 -0
  279. {intentkit-0.5.1 → intentkit-0.6.0}/skills/moralis/api.py +0 -0
  280. {intentkit-0.5.1 → intentkit-0.6.0}/skills/moralis/base.py +0 -0
  281. {intentkit-0.5.1 → intentkit-0.6.0}/skills/moralis/fetch_chain_portfolio.py +0 -0
  282. {intentkit-0.5.1 → intentkit-0.6.0}/skills/moralis/fetch_nft_portfolio.py +0 -0
  283. {intentkit-0.5.1 → intentkit-0.6.0}/skills/moralis/fetch_solana_portfolio.py +0 -0
  284. {intentkit-0.5.1 → intentkit-0.6.0}/skills/moralis/fetch_wallet_portfolio.py +0 -0
  285. {intentkit-0.5.1 → intentkit-0.6.0}/skills/moralis/moralis.png +0 -0
  286. {intentkit-0.5.1 → intentkit-0.6.0}/skills/moralis/schema.json +0 -0
  287. {intentkit-0.5.1 → intentkit-0.6.0}/skills/moralis/tests/__init__.py +0 -0
  288. {intentkit-0.5.1 → intentkit-0.6.0}/skills/moralis/tests/test_wallet.py +0 -0
  289. {intentkit-0.5.1 → intentkit-0.6.0}/skills/nation/__init__.py +0 -0
  290. {intentkit-0.5.1 → intentkit-0.6.0}/skills/nation/base.py +0 -0
  291. {intentkit-0.5.1 → intentkit-0.6.0}/skills/nation/nation.png +0 -0
  292. {intentkit-0.5.1 → intentkit-0.6.0}/skills/nation/nft_check.py +0 -0
  293. {intentkit-0.5.1 → intentkit-0.6.0}/skills/nation/schema.json +0 -0
  294. {intentkit-0.5.1 → intentkit-0.6.0}/skills/openai/__init__.py +0 -0
  295. {intentkit-0.5.1 → intentkit-0.6.0}/skills/openai/base.py +0 -0
  296. {intentkit-0.5.1 → intentkit-0.6.0}/skills/openai/image_to_text.py +0 -0
  297. {intentkit-0.5.1 → intentkit-0.6.0}/skills/openai/openai.png +0 -0
  298. {intentkit-0.5.1 → intentkit-0.6.0}/skills/openai/schema.json +0 -0
  299. {intentkit-0.5.1 → intentkit-0.6.0}/skills/portfolio/README.md +0 -0
  300. {intentkit-0.5.1 → intentkit-0.6.0}/skills/portfolio/__init__.py +0 -0
  301. {intentkit-0.5.1 → intentkit-0.6.0}/skills/portfolio/base.py +0 -0
  302. {intentkit-0.5.1 → intentkit-0.6.0}/skills/portfolio/constants.py +0 -0
  303. {intentkit-0.5.1 → intentkit-0.6.0}/skills/portfolio/moralis.png +0 -0
  304. {intentkit-0.5.1 → intentkit-0.6.0}/skills/portfolio/schema.json +0 -0
  305. {intentkit-0.5.1 → intentkit-0.6.0}/skills/portfolio/token_balances.py +0 -0
  306. {intentkit-0.5.1 → intentkit-0.6.0}/skills/portfolio/wallet_approvals.py +0 -0
  307. {intentkit-0.5.1 → intentkit-0.6.0}/skills/portfolio/wallet_defi_positions.py +0 -0
  308. {intentkit-0.5.1 → intentkit-0.6.0}/skills/portfolio/wallet_history.py +0 -0
  309. {intentkit-0.5.1 → intentkit-0.6.0}/skills/portfolio/wallet_net_worth.py +0 -0
  310. {intentkit-0.5.1 → intentkit-0.6.0}/skills/portfolio/wallet_nfts.py +0 -0
  311. {intentkit-0.5.1 → intentkit-0.6.0}/skills/portfolio/wallet_profitability.py +0 -0
  312. {intentkit-0.5.1 → intentkit-0.6.0}/skills/portfolio/wallet_profitability_summary.py +0 -0
  313. {intentkit-0.5.1 → intentkit-0.6.0}/skills/portfolio/wallet_stats.py +0 -0
  314. {intentkit-0.5.1 → intentkit-0.6.0}/skills/portfolio/wallet_swaps.py +0 -0
  315. {intentkit-0.5.1 → intentkit-0.6.0}/skills/skills.toml +0 -0
  316. {intentkit-0.5.1 → intentkit-0.6.0}/skills/slack/__init__.py +0 -0
  317. {intentkit-0.5.1 → intentkit-0.6.0}/skills/slack/base.py +0 -0
  318. {intentkit-0.5.1 → intentkit-0.6.0}/skills/slack/get_channel.py +0 -0
  319. {intentkit-0.5.1 → intentkit-0.6.0}/skills/slack/get_message.py +0 -0
  320. {intentkit-0.5.1 → intentkit-0.6.0}/skills/slack/schedule_message.py +0 -0
  321. {intentkit-0.5.1 → intentkit-0.6.0}/skills/slack/schema.json +0 -0
  322. {intentkit-0.5.1 → intentkit-0.6.0}/skills/slack/send_message.py +0 -0
  323. {intentkit-0.5.1 → intentkit-0.6.0}/skills/slack/slack.jpg +0 -0
  324. {intentkit-0.5.1 → intentkit-0.6.0}/skills/system/__init__.py +0 -0
  325. {intentkit-0.5.1 → intentkit-0.6.0}/skills/system/base.py +0 -0
  326. {intentkit-0.5.1 → intentkit-0.6.0}/skills/system/schema.json +0 -0
  327. {intentkit-0.5.1 → intentkit-0.6.0}/skills/system/system.svg +0 -0
  328. {intentkit-0.5.1 → intentkit-0.6.0}/skills/tavily/README.md +0 -0
  329. {intentkit-0.5.1 → intentkit-0.6.0}/skills/tavily/__init__.py +0 -0
  330. {intentkit-0.5.1 → intentkit-0.6.0}/skills/tavily/base.py +0 -0
  331. {intentkit-0.5.1 → intentkit-0.6.0}/skills/tavily/schema.json +0 -0
  332. {intentkit-0.5.1 → intentkit-0.6.0}/skills/tavily/tavily.jpg +0 -0
  333. {intentkit-0.5.1 → intentkit-0.6.0}/skills/tavily/tavily_extract.py +0 -0
  334. {intentkit-0.5.1 → intentkit-0.6.0}/skills/tavily/tavily_search.py +0 -0
  335. {intentkit-0.5.1 → intentkit-0.6.0}/skills/token/README.md +0 -0
  336. {intentkit-0.5.1 → intentkit-0.6.0}/skills/token/__init__.py +0 -0
  337. {intentkit-0.5.1 → intentkit-0.6.0}/skills/token/constants.py +0 -0
  338. {intentkit-0.5.1 → intentkit-0.6.0}/skills/token/erc20_transfers.py +0 -0
  339. {intentkit-0.5.1 → intentkit-0.6.0}/skills/token/moralis.png +0 -0
  340. {intentkit-0.5.1 → intentkit-0.6.0}/skills/token/schema.json +0 -0
  341. {intentkit-0.5.1 → intentkit-0.6.0}/skills/token/token_analytics.py +0 -0
  342. {intentkit-0.5.1 → intentkit-0.6.0}/skills/token/token_price.py +0 -0
  343. {intentkit-0.5.1 → intentkit-0.6.0}/skills/token/token_search.py +0 -0
  344. {intentkit-0.5.1 → intentkit-0.6.0}/skills/twitter/__init__.py +0 -0
  345. {intentkit-0.5.1 → intentkit-0.6.0}/skills/twitter/base.py +0 -0
  346. {intentkit-0.5.1 → intentkit-0.6.0}/skills/twitter/schema.json +0 -0
  347. {intentkit-0.5.1 → intentkit-0.6.0}/skills/twitter/twitter.png +0 -0
  348. {intentkit-0.5.1 → intentkit-0.6.0}/skills/unrealspeech/__init__.py +0 -0
  349. {intentkit-0.5.1 → intentkit-0.6.0}/skills/unrealspeech/base.py +0 -0
  350. {intentkit-0.5.1 → intentkit-0.6.0}/skills/unrealspeech/schema.json +0 -0
  351. {intentkit-0.5.1 → intentkit-0.6.0}/skills/unrealspeech/unrealspeech.jpg +0 -0
  352. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_audio/__init__.py +0 -0
  353. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_audio/base.py +0 -0
  354. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_audio/input.py +0 -0
  355. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_audio/schema.json +0 -0
  356. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_audio/venice_audio.py +0 -0
  357. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_audio/venice_logo.jpg +0 -0
  358. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/README.md +0 -0
  359. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/__init__.py +0 -0
  360. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/api.py +0 -0
  361. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/base.py +0 -0
  362. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/config.py +0 -0
  363. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_enhance/README.md +0 -0
  364. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_enhance/__init__.py +0 -0
  365. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_enhance/image_enhance.py +0 -0
  366. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_enhance/image_enhance_base.py +0 -0
  367. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_enhance/image_enhance_input.py +0 -0
  368. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_generation/README.md +0 -0
  369. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_generation/__init__.py +0 -0
  370. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_generation/image_generation_base.py +0 -0
  371. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_generation/image_generation_fluently_xl.py +0 -0
  372. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_generation/image_generation_flux_dev.py +0 -0
  373. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +0 -0
  374. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_generation/image_generation_input.py +0 -0
  375. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +0 -0
  376. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_generation/image_generation_pony_realism.py +0 -0
  377. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +0 -0
  378. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_generation/image_generation_venice_sd35.py +0 -0
  379. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_upscale/README.md +0 -0
  380. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_upscale/__init__.py +0 -0
  381. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_upscale/image_upscale.py +0 -0
  382. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_upscale/image_upscale_base.py +0 -0
  383. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_upscale/image_upscale_input.py +0 -0
  384. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_vision/README.md +0 -0
  385. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_vision/__init__.py +0 -0
  386. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_vision/image_vision.py +0 -0
  387. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_vision/image_vision_base.py +0 -0
  388. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/image_vision/image_vision_input.py +0 -0
  389. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/schema.json +0 -0
  390. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/utils.py +0 -0
  391. {intentkit-0.5.1 → intentkit-0.6.0}/skills/venice_image/venice_image.jpg +0 -0
  392. {intentkit-0.5.1 → intentkit-0.6.0}/skills/web_scraper/base.py +0 -0
  393. {intentkit-0.5.1 → intentkit-0.6.0}/skills/web_scraper/langchain.png +0 -0
  394. {intentkit-0.5.1 → intentkit-0.6.0}/utils/__init__.py +0 -0
  395. {intentkit-0.5.1 → intentkit-0.6.0}/utils/chain.py +0 -0
  396. {intentkit-0.5.1 → intentkit-0.6.0}/utils/error.py +0 -0
  397. {intentkit-0.5.1 → intentkit-0.6.0}/utils/middleware.py +0 -0
  398. {intentkit-0.5.1 → intentkit-0.6.0}/utils/random.py +0 -0
  399. {intentkit-0.5.1 → intentkit-0.6.0}/utils/s3.py +0 -0
  400. {intentkit-0.5.1 → intentkit-0.6.0}/utils/slack_alert.py +0 -0
  401. {intentkit-0.5.1 → intentkit-0.6.0}/utils/tx.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intentkit
3
- Version: 0.5.1
3
+ Version: 0.6.0
4
4
  Summary: Intent-based AI Agent Platform - Core Package
5
5
  Project-URL: Homepage, https://github.com/crestal-network/intentkit
6
6
  Project-URL: Repository, https://github.com/crestal-network/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.5.1"
6
+ __version__ = "0.6.0"
7
7
  __author__ = "hyacinthus"
8
8
  __email__ = "hyacinthus@gmail.com"
9
9
 
@@ -91,6 +91,18 @@ class SkillStoreABC(ABC):
91
91
  """
92
92
  pass
93
93
 
94
+ @staticmethod
95
+ @abstractmethod
96
+ async def delete_agent_skill_data(agent_id: str, skill: str, key: str) -> None:
97
+ """Delete skill data for an agent.
98
+
99
+ Args:
100
+ agent_id: ID of the agent
101
+ skill: Name of the skill
102
+ key: Data key
103
+ """
104
+ pass
105
+
94
106
  @staticmethod
95
107
  @abstractmethod
96
108
  async def get_thread_skill_data(
@@ -0,0 +1,151 @@
1
+ import json
2
+ import logging
3
+ from typing import Dict, Optional
4
+
5
+ from bip32 import BIP32
6
+ from cdp import CdpClient as OriginCdpClient
7
+ from cdp import EvmServerAccount
8
+ from coinbase_agentkit import (
9
+ CdpEvmServerWalletProvider,
10
+ CdpEvmServerWalletProviderConfig,
11
+ )
12
+ from eth_keys.datatypes import PrivateKey
13
+ from eth_utils import to_checksum_address
14
+
15
+ from intentkit.abstracts.skill import SkillStoreABC
16
+ from intentkit.models.agent import Agent
17
+ from intentkit.models.agent_data import AgentData
18
+
19
+ _clients: Dict[str, "CdpClient"] = {}
20
+
21
+ logger = logging.getLogger(__name__)
22
+
23
+
24
+ def bip39_seed_to_eth_keys(seed_hex: str) -> Dict[str, str]:
25
+ """
26
+ Converts a BIP39 seed to an Ethereum private key, public key, and address.
27
+
28
+ Args:
29
+ seed_hex: The BIP39 seed in hexadecimal format
30
+
31
+ Returns:
32
+ Dict containing private_key, public_key, and address
33
+ """
34
+ # Convert the hex seed to bytes
35
+ seed_bytes = bytes.fromhex(seed_hex)
36
+
37
+ # Derive the master key from the seed
38
+ bip32 = BIP32.from_seed(seed_bytes)
39
+
40
+ # Derive the Ethereum address using the standard derivation path
41
+ private_key_bytes = bip32.get_privkey_from_path("m/44'/60'/0'/0/0")
42
+
43
+ # Create a private key object
44
+ private_key = PrivateKey(private_key_bytes)
45
+
46
+ # Get the public key
47
+ public_key = private_key.public_key
48
+
49
+ # Get the Ethereum address
50
+ address = public_key.to_address()
51
+
52
+ return {
53
+ "private_key": private_key.to_hex(),
54
+ "public_key": public_key.to_hex(),
55
+ "address": to_checksum_address(address),
56
+ }
57
+
58
+
59
+ class CdpClient:
60
+ def __init__(self, agent_id: str, skill_store: SkillStoreABC) -> None:
61
+ self._agent_id = agent_id
62
+ self._skill_store = skill_store
63
+ self._wallet_provider: Optional[CdpEvmServerWalletProvider] = None
64
+ self._wallet_provider_config: Optional[CdpEvmServerWalletProviderConfig] = None
65
+
66
+ async def get_wallet_provider(self) -> CdpEvmServerWalletProvider:
67
+ if self._wallet_provider:
68
+ return self._wallet_provider
69
+ agent: Agent = await self._skill_store.get_agent_config(self._agent_id)
70
+ agent_data: AgentData = await self._skill_store.get_agent_data(self._agent_id)
71
+ network_id = agent.network_id or agent.cdp_network_id
72
+
73
+ # Get credentials from skill store system config
74
+ api_key_id = self._skill_store.get_system_config("cdp_api_key_id")
75
+ api_key_secret = self._skill_store.get_system_config("cdp_api_key_secret")
76
+ wallet_secret = self._skill_store.get_system_config("cdp_wallet_secret")
77
+
78
+ # already have address
79
+ address = agent_data.evm_wallet_address
80
+
81
+ # new agent or address not migrated yet
82
+ if not address:
83
+ # create cdp client for later use
84
+ cdp_client = OriginCdpClient(
85
+ api_key_id=api_key_id,
86
+ api_key_secret=api_key_secret,
87
+ wallet_secret=wallet_secret,
88
+ )
89
+ # try migrating from v1 cdp_wallet_data
90
+ if agent_data.cdp_wallet_data:
91
+ wallet_data = json.loads(agent_data.cdp_wallet_data)
92
+ if not isinstance(wallet_data, dict):
93
+ raise ValueError("Invalid wallet data format")
94
+ if wallet_data.get("default_address_id") and wallet_data.get("seed"):
95
+ # verify seed and convert to pk
96
+ keys = bip39_seed_to_eth_keys(wallet_data["seed"])
97
+ if keys["address"] != wallet_data["default_address_id"]:
98
+ raise ValueError(
99
+ "Bad wallet data, seed does not match default_address_id"
100
+ )
101
+ # try to import wallet to v2
102
+ logger.info("Migrating wallet data to v2...")
103
+ await cdp_client.evm.import_account(
104
+ name=agent.id,
105
+ private_key=keys["private_key"],
106
+ )
107
+ address = keys["address"]
108
+ logger.info("Migrated wallet data to v2 successfully: %s", address)
109
+ # still not address
110
+ if not address:
111
+ logger.info("Creating new wallet...")
112
+ new_account = await cdp_client.evm.create_account(
113
+ name=agent.id,
114
+ )
115
+ address = new_account.address
116
+ logger.info("Created new wallet: %s", address)
117
+ # now it should be created or migrated, store it
118
+ agent_data.evm_wallet_address = address
119
+ await agent_data.save()
120
+
121
+ # it must have v2 account now, load agentkit wallet provider
122
+ self._wallet_provider_config = CdpEvmServerWalletProviderConfig(
123
+ api_key_id=api_key_id,
124
+ api_key_secret=api_key_secret,
125
+ network_id=network_id,
126
+ address=address,
127
+ wallet_secret=wallet_secret,
128
+ )
129
+ self._wallet_provider = CdpEvmServerWalletProvider(self._wallet_provider_config)
130
+ return self._wallet_provider
131
+
132
+ async def get_account(self) -> EvmServerAccount:
133
+ """Get the account object from the wallet provider.
134
+
135
+ Returns:
136
+ EvmServerAccount: The account object that can be used for balance checks, transfers, etc.
137
+ """
138
+ wallet_provider = await self.get_wallet_provider()
139
+ # Access the internal account object
140
+ return wallet_provider._account
141
+
142
+ async def get_provider_config(self) -> CdpEvmServerWalletProviderConfig:
143
+ if not self._wallet_provider_config:
144
+ await self.get_wallet_provider()
145
+ return self._wallet_provider_config
146
+
147
+
148
+ async def get_cdp_client(agent_id: str, skill_store: SkillStoreABC) -> "CdpClient":
149
+ if agent_id not in _clients:
150
+ _clients[agent_id] = CdpClient(agent_id, skill_store)
151
+ return _clients[agent_id]
@@ -83,9 +83,10 @@ class Config:
83
83
  self.payment_enabled = self.load("PAYMENT_ENABLED", "false") == "true"
84
84
  # Open API for agent
85
85
  self.open_api_base_url = self.load("OPEN_API_BASE_URL", "http://localhost:8000")
86
- # CDP
87
- self.cdp_api_key_name = self.load("CDP_API_KEY_NAME")
88
- self.cdp_api_key_private_key = self.load("CDP_API_KEY_PRIVATE_KEY")
86
+ # CDP - AgentKit 0.6.0 Configuration
87
+ self.cdp_api_key_id = self.load("CDP_API_KEY_ID")
88
+ self.cdp_api_key_secret = self.load("CDP_API_KEY_SECRET")
89
+ self.cdp_wallet_secret = self.load("CDP_WALLET_SECRET")
89
90
  # LLM providers
90
91
  self.openai_api_key = self.load("OPENAI_API_KEY")
91
92
  self.deepseek_api_key = self.load("DEEPSEEK_API_KEY")
@@ -120,6 +121,7 @@ class Config:
120
121
  self.moralis_api_key = self.load("MORALIS_API_KEY")
121
122
  self.tavily_api_key = self.load("TAVILY_API_KEY")
122
123
  self.cookiefun_api_key = self.load("COOKIEFUN_API_KEY")
124
+ self.firecrawl_api_key = self.load("FIRECRAWL_API_KEY")
123
125
  # Sentry
124
126
  self.sentry_dsn = self.load("SENTRY_DSN")
125
127
  self.sentry_sample_rate = float(self.load("SENTRY_SAMPLE_RATE", "0.1"))
@@ -149,6 +151,7 @@ class Config:
149
151
  # Now we know the env, set up logging
150
152
  setup_logging(self.env, self.debug)
151
153
  logger.info("config loaded")
154
+
152
155
  # If the slack alert token exists, init it
153
156
  if self.slack_alert_token and self.slack_alert_channel:
154
157
  init_slack(self.slack_alert_token, self.slack_alert_channel)
@@ -158,7 +161,12 @@ class Config:
158
161
 
159
162
  def load(self, key, default=None):
160
163
  """Load a secret from the secrets map or env"""
161
- return self.secrets.get(key, os.getenv(key, default))
164
+ value = self.secrets.get(key, os.getenv(key, default))
165
+ if value:
166
+ value = value.replace("\\n", "\n")
167
+ if value and value.startswith("'") and value.endswith("'"):
168
+ value = value[1:-1]
169
+ return value
162
170
 
163
171
 
164
172
  config: Config = Config()
@@ -187,8 +187,7 @@ async def create_agent(
187
187
  if config.admin_llm_skill_control:
188
188
  escaped_prompt = await explain_prompt(escaped_prompt)
189
189
  prompt_array = [
190
- ("system", escaped_prompt),
191
- ("placeholder", "{entrypoint_prompt}"),
190
+ ("placeholder", "{system_prompt}"),
192
191
  ("placeholder", "{messages}"),
193
192
  ]
194
193
  if agent.prompt_append:
@@ -201,18 +200,43 @@ async def create_agent(
201
200
 
202
201
  prompt_temp = ChatPromptTemplate.from_messages(prompt_array)
203
202
 
204
- def formatted_prompt(
203
+ async def formatted_prompt(
205
204
  state: AgentState, config: RunnableConfig
206
205
  ) -> list[BaseMessage]:
207
- entrypoint_prompt = []
208
- if config.get("configurable") and config["configurable"].get(
209
- "entrypoint_prompt"
210
- ):
211
- entrypoint_prompt = [
212
- ("system", config["configurable"]["entrypoint_prompt"])
213
- ]
206
+ final_system_prompt = escaped_prompt
207
+ if config.get("configurable") and config["configurable"].get("entrypoint"):
208
+ entrypoint = config["configurable"]["entrypoint"]
209
+ entrypoint_prompt = None
210
+ if (
211
+ agent.twitter_entrypoint_enabled
212
+ and agent.twitter_entrypoint_prompt
213
+ and entrypoint == AuthorType.TWITTER.value
214
+ ):
215
+ entrypoint_prompt = agent.twitter_entrypoint_prompt
216
+ logger.debug("twitter entrypoint prompt added")
217
+ elif (
218
+ agent.telegram_entrypoint_enabled
219
+ and agent.telegram_entrypoint_prompt
220
+ and entrypoint == AuthorType.TELEGRAM.value
221
+ ):
222
+ entrypoint_prompt = agent.telegram_entrypoint_prompt
223
+ logger.debug("telegram entrypoint prompt added")
224
+ if entrypoint_prompt:
225
+ entrypoint_prompt = await explain_prompt(entrypoint_prompt)
226
+ final_system_prompt = f"{final_system_prompt}## Entrypoint rules\n\n{entrypoint_prompt}\n\n"
227
+ if config.get("configurable"):
228
+ final_system_prompt = f"{final_system_prompt}## Internal Info\n\n"
229
+ "These are for your internal use. You can use them when querying or storing data, "
230
+ "but please do not directly share this information with users.\n\n"
231
+ chat_id = config["configurable"].get("chat_id")
232
+ if chat_id:
233
+ final_system_prompt = f"{final_system_prompt}chat_id: {chat_id}\n\n"
234
+ user_id = config["configurable"].get("user_id")
235
+ if user_id:
236
+ final_system_prompt = f"{final_system_prompt}user_id: {user_id}\n\n"
237
+ system_prompt = [("system", final_system_prompt)]
214
238
  return prompt_temp.invoke(
215
- {"messages": state["messages"], "entrypoint_prompt": entrypoint_prompt},
239
+ {"messages": state["messages"], "system_prompt": system_prompt},
216
240
  config,
217
241
  )
218
242
 
@@ -518,33 +542,17 @@ async def stream_agent(message: ChatMessageCreate):
518
542
  HumanMessage(content=content),
519
543
  ]
520
544
 
521
- entrypoint_prompt = None
522
- if (
523
- agent.twitter_entrypoint_enabled
524
- and agent.twitter_entrypoint_prompt
525
- and input.author_type == AuthorType.TWITTER
526
- ):
527
- entrypoint_prompt = agent.twitter_entrypoint_prompt
528
- logger.debug("twitter entrypoint prompt added")
529
- elif (
530
- agent.telegram_entrypoint_enabled
531
- and agent.telegram_entrypoint_prompt
532
- and input.author_type == AuthorType.TELEGRAM
533
- ):
534
- entrypoint_prompt = agent.telegram_entrypoint_prompt
535
- logger.debug("telegram entrypoint prompt added")
536
- if entrypoint_prompt and config.admin_llm_skill_control:
537
- entrypoint_prompt = await explain_prompt(entrypoint_prompt)
538
-
539
545
  # stream config
540
546
  thread_id = f"{input.agent_id}-{input.chat_id}"
541
547
  stream_config = {
542
548
  "configurable": {
543
- "agent": agent,
549
+ "agent_id": agent.id,
544
550
  "thread_id": thread_id,
551
+ "chat_id": input.chat_id,
545
552
  "user_id": input.user_id,
553
+ "app_id": input.app_id,
546
554
  "entrypoint": input.author_type,
547
- "entrypoint_prompt": entrypoint_prompt,
555
+ "is_private": is_private,
548
556
  "payer": payer if payment_enabled else None,
549
557
  },
550
558
  "recursion_limit": recursion_limit,
@@ -25,6 +25,7 @@ from pydantic import BaseModel
25
25
 
26
26
  from intentkit.abstracts.graph import AgentError, AgentState
27
27
  from intentkit.core.credit import skill_cost
28
+ from intentkit.models.agent import Agent
28
29
  from intentkit.models.credit import CreditAccount, OwnerType
29
30
  from intentkit.models.skill import Skill
30
31
 
@@ -138,9 +139,11 @@ class PreModelNode(RunnableCallable):
138
139
  f"Too few messages after trim: {len(trimmed_messages)}"
139
140
  )
140
141
  return {}
141
- return {
142
- "messages": [RemoveMessage(REMOVE_ALL_MESSAGES)] + trimmed_messages,
143
- }
142
+ return {
143
+ "messages": [RemoveMessage(REMOVE_ALL_MESSAGES)] + trimmed_messages,
144
+ }
145
+ else:
146
+ return {}
144
147
  if self.short_term_memory_strategy == "summarize":
145
148
  # if last message is not human message, skip summarize
146
149
  if not isinstance(messages[-1], HumanMessage):
@@ -200,7 +203,8 @@ class PostModelNode(RunnableCallable):
200
203
  return state_update
201
204
  logger.debug(f"last: {messages[-1]}")
202
205
  msg = messages[-1]
203
- agent = cfg.get("agent")
206
+ agent_id = cfg.get("agent_id")
207
+ agent = await Agent.get(agent_id)
204
208
  account = await CreditAccount.get_or_create(OwnerType.USER, payer)
205
209
  if hasattr(msg, "tool_calls") and msg.tool_calls:
206
210
  for tool_call in msg.tool_calls:
@@ -1,5 +1,3 @@
1
- import json
2
-
3
1
  from intentkit.config.config import config
4
2
  from intentkit.models.agent import Agent
5
3
  from intentkit.models.agent_data import AgentData
@@ -34,10 +32,11 @@ def agent_prompt(agent: Agent, agent_data: AgentData) -> str:
34
32
  if agent_data.telegram_name:
35
33
  prompt += f"Your telegram bot name is {agent_data.telegram_name}.\n"
36
34
  # CDP
37
- if agent_data.cdp_wallet_data:
38
- network_id = agent.network_id or agent.cdp_network_id
39
- wallet_data = json.loads(agent_data.cdp_wallet_data)
40
- prompt += f"Your wallet address in {network_id} is {wallet_data['default_address_id']} .\n"
35
+ network_id = agent.network_id or agent.cdp_network_id
36
+ if agent_data.evm_wallet_address and network_id != "solana":
37
+ prompt += f"Your wallet address in {network_id} is {agent_data.evm_wallet_address} .\n"
38
+ if agent_data.solana_wallet_address and network_id == "solana":
39
+ prompt += f"Your wallet address in {network_id} is {agent_data.solana_wallet_address} .\n"
41
40
  prompt += "\n"
42
41
  if agent.purpose:
43
42
  prompt += f"## Purpose\n\n{agent.purpose}\n\n"
@@ -78,6 +78,17 @@ class SkillStore(SkillStoreABC):
78
78
  )
79
79
  await skill_data.save()
80
80
 
81
+ @staticmethod
82
+ async def delete_agent_skill_data(agent_id: str, skill: str, key: str) -> None:
83
+ """Delete skill data for an agent.
84
+
85
+ Args:
86
+ agent_id: ID of the agent
87
+ skill: Name of the skill
88
+ key: Data key
89
+ """
90
+ await AgentSkillData.delete(agent_id, skill, key)
91
+
81
92
  @staticmethod
82
93
  async def get_thread_skill_data(
83
94
  thread_id: str, skill: str, key: str
@@ -1319,7 +1319,7 @@ class AgentResponse(BaseModel):
1319
1319
  ]
1320
1320
  # auto increment number by db
1321
1321
  number: Annotated[
1322
- int,
1322
+ Optional[int],
1323
1323
  PydanticField(
1324
1324
  description="Auto-incrementing number assigned by the system for easy reference",
1325
1325
  ),
@@ -1564,7 +1564,6 @@ class AgentResponse(BaseModel):
1564
1564
  str: ETag value for the agent
1565
1565
  """
1566
1566
  import hashlib
1567
- import json
1568
1567
 
1569
1568
  # Generate hash from the entire object data using json mode to handle datetime objects
1570
1569
  # Sort keys to ensure consistent ordering of dictionary keys
@@ -1622,13 +1621,7 @@ class AgentResponse(BaseModel):
1622
1621
  data["skills"] = filtered_skills
1623
1622
 
1624
1623
  # Process CDP wallet address
1625
- cdp_wallet_address = None
1626
- if agent_data and agent_data.cdp_wallet_data:
1627
- try:
1628
- wallet_data = json.loads(agent_data.cdp_wallet_data)
1629
- cdp_wallet_address = wallet_data.get("default_address_id")
1630
- except (json.JSONDecodeError, AttributeError):
1631
- pass
1624
+ cdp_wallet_address = agent_data.evm_wallet_address if agent_data else None
1632
1625
 
1633
1626
  # Process Twitter linked status
1634
1627
  has_twitter_linked = False
@@ -29,6 +29,10 @@ class AgentDataTable(Base):
29
29
  __tablename__ = "agent_data"
30
30
 
31
31
  id = Column(String, primary_key=True, comment="Same as Agent.id")
32
+ evm_wallet_address = Column(String, nullable=True, comment="EVM wallet address")
33
+ solana_wallet_address = Column(
34
+ String, nullable=True, comment="Solana wallet address"
35
+ )
32
36
  cdp_wallet_data = Column(String, nullable=True, comment="CDP wallet data")
33
37
  crossmint_wallet_data = Column(
34
38
  JSON().with_variant(JSONB(), "postgresql"),
@@ -94,6 +98,20 @@ class AgentData(BaseModel):
94
98
  description="Same as Agent.id",
95
99
  ),
96
100
  ]
101
+ evm_wallet_address: Annotated[
102
+ Optional[str],
103
+ PydanticField(
104
+ default=None,
105
+ description="EVM wallet address",
106
+ ),
107
+ ]
108
+ solana_wallet_address: Annotated[
109
+ Optional[str],
110
+ PydanticField(
111
+ default=None,
112
+ description="Solana wallet address",
113
+ ),
114
+ ]
97
115
  cdp_wallet_data: Annotated[
98
116
  Optional[str],
99
117
  PydanticField(
@@ -535,10 +535,18 @@
535
535
  "title": "System",
536
536
  "$ref": "../skills/system/schema.json"
537
537
  },
538
+ "http": {
539
+ "title": "HTTP Client",
540
+ "$ref": "../skills/http/schema.json"
541
+ },
538
542
  "web_scraper": {
539
543
  "title": "Web Scraper & Content Indexing",
540
544
  "$ref": "../skills/web_scraper/schema.json"
541
545
  },
546
+ "firecrawl": {
547
+ "title": "Firecrawl Web Scraping",
548
+ "$ref": "../skills/firecrawl/schema.json"
549
+ },
542
550
  "aixbt": {
543
551
  "title": "AIXBT",
544
552
  "$ref": "../skills/aixbt/schema.json"
@@ -563,6 +571,10 @@
563
571
  "title": "Slack",
564
572
  "$ref": "../skills/slack/schema.json"
565
573
  },
574
+ "supabase": {
575
+ "title": "Supabase",
576
+ "$ref": "../skills/supabase/schema.json"
577
+ },
566
578
  "venice_audio": {
567
579
  "title": "Venice Audio",
568
580
  "$ref": "../skills/venice_audio/schema.json"
@@ -8,6 +8,7 @@ from intentkit.models.base import Base
8
8
  from intentkit.models.db import get_session
9
9
  from pydantic import BaseModel, ConfigDict, Field
10
10
  from sqlalchemy import (
11
+ Boolean,
11
12
  Column,
12
13
  DateTime,
13
14
  Float,
@@ -101,6 +102,14 @@ class ChatMessageRequest(BaseModel):
101
102
  min_length=1,
102
103
  ),
103
104
  ]
105
+ app_id: Annotated[
106
+ Optional[str],
107
+ Field(
108
+ None,
109
+ description="Optional application identifier",
110
+ examples=["app-789"],
111
+ ),
112
+ ]
104
113
  user_id: Annotated[
105
114
  str,
106
115
  Field(
@@ -120,6 +129,20 @@ class ChatMessageRequest(BaseModel):
120
129
  max_length=65535,
121
130
  ),
122
131
  ]
132
+ search_mode: Annotated[
133
+ Optional[bool],
134
+ Field(
135
+ None,
136
+ description="Optional flag to enable search mode",
137
+ ),
138
+ ]
139
+ super_mode: Annotated[
140
+ Optional[bool],
141
+ Field(
142
+ None,
143
+ description="Optional flag to enable super mode",
144
+ ),
145
+ ]
123
146
  attachments: Annotated[
124
147
  Optional[List[ChatMessageAttachment]],
125
148
  Field(
@@ -134,8 +157,11 @@ class ChatMessageRequest(BaseModel):
134
157
  json_schema_extra={
135
158
  "example": {
136
159
  "chat_id": "chat-123",
160
+ "app_id": "app-789",
137
161
  "user_id": "user-456",
138
162
  "message": "Hello, how can you help me today?",
163
+ "search_mode": True,
164
+ "super_mode": False,
139
165
  "attachments": [
140
166
  {
141
167
  "type": "link",
@@ -229,6 +255,18 @@ class ChatMessageTable(Base):
229
255
  Float,
230
256
  default=0,
231
257
  )
258
+ app_id = Column(
259
+ String,
260
+ nullable=True,
261
+ )
262
+ search_mode = Column(
263
+ Boolean,
264
+ nullable=True,
265
+ )
266
+ super_mode = Column(
267
+ Boolean,
268
+ nullable=True,
269
+ )
232
270
  created_at = Column(
233
271
  DateTime(timezone=True),
234
272
  nullable=False,
@@ -302,6 +340,18 @@ class ChatMessageCreate(BaseModel):
302
340
  float,
303
341
  Field(0.0, description="Cost for the cold start of the message in seconds"),
304
342
  ]
343
+ app_id: Annotated[
344
+ Optional[str],
345
+ Field(None, description="Optional application identifier"),
346
+ ]
347
+ search_mode: Annotated[
348
+ Optional[bool],
349
+ Field(None, description="Optional flag to enable search mode"),
350
+ ]
351
+ super_mode: Annotated[
352
+ Optional[bool],
353
+ Field(None, description="Optional flag to enable super mode"),
354
+ ]
305
355
 
306
356
  async def save_in_session(self, db: AsyncSession) -> "ChatMessage":
307
357
  """Save the chat message to the database.
@@ -172,6 +172,25 @@ class AgentSkillData(AgentSkillDataCreate):
172
172
  )
173
173
  return result.data if result else None
174
174
 
175
+ @classmethod
176
+ async def delete(cls, agent_id: str, skill: str, key: str) -> None:
177
+ """Delete skill data for an agent.
178
+
179
+ Args:
180
+ agent_id: ID of the agent
181
+ skill: Name of the skill
182
+ key: Data key
183
+ """
184
+ async with get_session() as db:
185
+ await db.execute(
186
+ delete(AgentSkillDataTable).where(
187
+ AgentSkillDataTable.agent_id == agent_id,
188
+ AgentSkillDataTable.skill == skill,
189
+ AgentSkillDataTable.key == key,
190
+ )
191
+ )
192
+ await db.commit()
193
+
175
194
  @classmethod
176
195
  async def clean_data(cls, agent_id: str):
177
196
  """Clean all skill data for an agent.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "intentkit"
3
- version = "0.5.1"
3
+ version = "0.6.0"
4
4
  description = "Intent-based AI Agent Platform - Core Package"
5
5
  authors = [{ name = "hyacinthus", email = "hyacinthus@gmail.com" }]
6
6
  requires-python = ">=3.12"
@@ -110,16 +110,15 @@ dev = [
110
110
  requires = ["hatchling"]
111
111
  build-backend = "hatchling.build"
112
112
 
113
- [tool.hatch.build.targets.wheel]
114
- packages = [
115
- "abstracts",
116
- "clients",
117
- "config",
118
- "core",
119
- "models",
120
- "skills",
121
- "utils",
122
- ]
113
+ [tool.hatch.build.targets.wheel.force-include]
114
+ "__init__.py" = "intentkit/__init__.py"
115
+ "abstracts" = "intentkit/abstracts"
116
+ "clients" = "intentkit/clients"
117
+ "config" = "intentkit/config"
118
+ "core" = "intentkit/core"
119
+ "models" = "intentkit/models"
120
+ "skills" = "intentkit/skills"
121
+ "utils" = "intentkit/utils"
123
122
 
124
123
  [tool.hatch.build.targets.sdist]
125
124
  include = [