intentkit 0.5.0__py3-none-any.whl → 0.5.2__py3-none-any.whl

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 (366) hide show
  1. intentkit/__init__.py +17 -0
  2. intentkit/abstracts/__init__.py +0 -0
  3. intentkit/abstracts/agent.py +60 -0
  4. intentkit/abstracts/api.py +4 -0
  5. intentkit/abstracts/engine.py +38 -0
  6. intentkit/abstracts/exception.py +9 -0
  7. intentkit/abstracts/graph.py +25 -0
  8. intentkit/abstracts/skill.py +129 -0
  9. intentkit/abstracts/twitter.py +54 -0
  10. intentkit/clients/__init__.py +14 -0
  11. intentkit/clients/cdp.py +53 -0
  12. intentkit/clients/twitter.py +445 -0
  13. intentkit/config/__init__.py +0 -0
  14. intentkit/config/config.py +164 -0
  15. intentkit/core/__init__.py +0 -0
  16. intentkit/core/agent.py +191 -0
  17. intentkit/core/api.py +40 -0
  18. intentkit/core/client.py +45 -0
  19. intentkit/core/credit.py +1767 -0
  20. intentkit/core/engine.py +1018 -0
  21. intentkit/core/node.py +223 -0
  22. intentkit/core/prompt.py +58 -0
  23. intentkit/core/skill.py +124 -0
  24. intentkit/models/agent.py +1689 -0
  25. intentkit/models/agent_data.py +810 -0
  26. intentkit/models/agent_schema.json +733 -0
  27. intentkit/models/app_setting.py +156 -0
  28. intentkit/models/base.py +9 -0
  29. intentkit/models/chat.py +581 -0
  30. intentkit/models/conversation.py +286 -0
  31. intentkit/models/credit.py +1406 -0
  32. intentkit/models/db.py +120 -0
  33. intentkit/models/db_mig.py +102 -0
  34. intentkit/models/generator.py +347 -0
  35. intentkit/models/llm.py +746 -0
  36. intentkit/models/redis.py +132 -0
  37. intentkit/models/skill.py +466 -0
  38. intentkit/models/user.py +243 -0
  39. intentkit/skills/__init__.py +12 -0
  40. intentkit/skills/acolyt/__init__.py +83 -0
  41. intentkit/skills/acolyt/acolyt.jpg +0 -0
  42. intentkit/skills/acolyt/ask.py +128 -0
  43. intentkit/skills/acolyt/base.py +28 -0
  44. intentkit/skills/acolyt/schema.json +89 -0
  45. intentkit/skills/aixbt/README.md +71 -0
  46. intentkit/skills/aixbt/__init__.py +73 -0
  47. intentkit/skills/aixbt/aixbt.jpg +0 -0
  48. intentkit/skills/aixbt/base.py +21 -0
  49. intentkit/skills/aixbt/projects.py +153 -0
  50. intentkit/skills/aixbt/schema.json +99 -0
  51. intentkit/skills/allora/__init__.py +83 -0
  52. intentkit/skills/allora/allora.jpeg +0 -0
  53. intentkit/skills/allora/base.py +28 -0
  54. intentkit/skills/allora/price.py +130 -0
  55. intentkit/skills/allora/schema.json +89 -0
  56. intentkit/skills/base.py +174 -0
  57. intentkit/skills/carv/README.md +95 -0
  58. intentkit/skills/carv/__init__.py +121 -0
  59. intentkit/skills/carv/base.py +183 -0
  60. intentkit/skills/carv/carv.webp +0 -0
  61. intentkit/skills/carv/fetch_news.py +92 -0
  62. intentkit/skills/carv/onchain_query.py +164 -0
  63. intentkit/skills/carv/schema.json +137 -0
  64. intentkit/skills/carv/token_info_and_price.py +110 -0
  65. intentkit/skills/cdp/__init__.py +137 -0
  66. intentkit/skills/cdp/base.py +21 -0
  67. intentkit/skills/cdp/cdp.png +0 -0
  68. intentkit/skills/cdp/get_balance.py +81 -0
  69. intentkit/skills/cdp/schema.json +473 -0
  70. intentkit/skills/chainlist/README.md +38 -0
  71. intentkit/skills/chainlist/__init__.py +54 -0
  72. intentkit/skills/chainlist/base.py +21 -0
  73. intentkit/skills/chainlist/chain_lookup.py +208 -0
  74. intentkit/skills/chainlist/chainlist.png +0 -0
  75. intentkit/skills/chainlist/schema.json +47 -0
  76. intentkit/skills/common/__init__.py +82 -0
  77. intentkit/skills/common/base.py +21 -0
  78. intentkit/skills/common/common.jpg +0 -0
  79. intentkit/skills/common/current_time.py +84 -0
  80. intentkit/skills/common/schema.json +57 -0
  81. intentkit/skills/cookiefun/README.md +121 -0
  82. intentkit/skills/cookiefun/__init__.py +78 -0
  83. intentkit/skills/cookiefun/base.py +41 -0
  84. intentkit/skills/cookiefun/constants.py +18 -0
  85. intentkit/skills/cookiefun/cookiefun.png +0 -0
  86. intentkit/skills/cookiefun/get_account_details.py +171 -0
  87. intentkit/skills/cookiefun/get_account_feed.py +282 -0
  88. intentkit/skills/cookiefun/get_account_smart_followers.py +181 -0
  89. intentkit/skills/cookiefun/get_sectors.py +128 -0
  90. intentkit/skills/cookiefun/schema.json +155 -0
  91. intentkit/skills/cookiefun/search_accounts.py +225 -0
  92. intentkit/skills/cryptocompare/__init__.py +130 -0
  93. intentkit/skills/cryptocompare/api.py +159 -0
  94. intentkit/skills/cryptocompare/base.py +303 -0
  95. intentkit/skills/cryptocompare/cryptocompare.png +0 -0
  96. intentkit/skills/cryptocompare/fetch_news.py +96 -0
  97. intentkit/skills/cryptocompare/fetch_price.py +99 -0
  98. intentkit/skills/cryptocompare/fetch_top_exchanges.py +113 -0
  99. intentkit/skills/cryptocompare/fetch_top_market_cap.py +109 -0
  100. intentkit/skills/cryptocompare/fetch_top_volume.py +108 -0
  101. intentkit/skills/cryptocompare/fetch_trading_signals.py +107 -0
  102. intentkit/skills/cryptocompare/schema.json +168 -0
  103. intentkit/skills/cryptopanic/__init__.py +108 -0
  104. intentkit/skills/cryptopanic/base.py +51 -0
  105. intentkit/skills/cryptopanic/cryptopanic.png +0 -0
  106. intentkit/skills/cryptopanic/fetch_crypto_news.py +153 -0
  107. intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +136 -0
  108. intentkit/skills/cryptopanic/schema.json +103 -0
  109. intentkit/skills/dapplooker/README.md +92 -0
  110. intentkit/skills/dapplooker/__init__.py +83 -0
  111. intentkit/skills/dapplooker/base.py +26 -0
  112. intentkit/skills/dapplooker/dapplooker.jpg +0 -0
  113. intentkit/skills/dapplooker/dapplooker_token_data.py +476 -0
  114. intentkit/skills/dapplooker/schema.json +91 -0
  115. intentkit/skills/defillama/__init__.py +323 -0
  116. intentkit/skills/defillama/api.py +315 -0
  117. intentkit/skills/defillama/base.py +135 -0
  118. intentkit/skills/defillama/coins/__init__.py +0 -0
  119. intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +116 -0
  120. intentkit/skills/defillama/coins/fetch_block.py +98 -0
  121. intentkit/skills/defillama/coins/fetch_current_prices.py +105 -0
  122. intentkit/skills/defillama/coins/fetch_first_price.py +100 -0
  123. intentkit/skills/defillama/coins/fetch_historical_prices.py +110 -0
  124. intentkit/skills/defillama/coins/fetch_price_chart.py +109 -0
  125. intentkit/skills/defillama/coins/fetch_price_percentage.py +93 -0
  126. intentkit/skills/defillama/config/__init__.py +0 -0
  127. intentkit/skills/defillama/config/chains.py +433 -0
  128. intentkit/skills/defillama/defillama.jpeg +0 -0
  129. intentkit/skills/defillama/fees/__init__.py +0 -0
  130. intentkit/skills/defillama/fees/fetch_fees_overview.py +130 -0
  131. intentkit/skills/defillama/schema.json +383 -0
  132. intentkit/skills/defillama/stablecoins/__init__.py +0 -0
  133. intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +100 -0
  134. intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +129 -0
  135. intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +83 -0
  136. intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +126 -0
  137. intentkit/skills/defillama/tests/__init__.py +0 -0
  138. intentkit/skills/defillama/tests/api_integration.test.py +192 -0
  139. intentkit/skills/defillama/tests/api_unit.test.py +583 -0
  140. intentkit/skills/defillama/tvl/__init__.py +0 -0
  141. intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +106 -0
  142. intentkit/skills/defillama/tvl/fetch_chains.py +107 -0
  143. intentkit/skills/defillama/tvl/fetch_historical_tvl.py +91 -0
  144. intentkit/skills/defillama/tvl/fetch_protocol.py +207 -0
  145. intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +93 -0
  146. intentkit/skills/defillama/tvl/fetch_protocols.py +196 -0
  147. intentkit/skills/defillama/volumes/__init__.py +0 -0
  148. intentkit/skills/defillama/volumes/fetch_dex_overview.py +157 -0
  149. intentkit/skills/defillama/volumes/fetch_dex_summary.py +123 -0
  150. intentkit/skills/defillama/volumes/fetch_options_overview.py +131 -0
  151. intentkit/skills/defillama/yields/__init__.py +0 -0
  152. intentkit/skills/defillama/yields/fetch_pool_chart.py +100 -0
  153. intentkit/skills/defillama/yields/fetch_pools.py +126 -0
  154. intentkit/skills/dexscreener/__init__.py +93 -0
  155. intentkit/skills/dexscreener/base.py +133 -0
  156. intentkit/skills/dexscreener/dexscreener.png +0 -0
  157. intentkit/skills/dexscreener/model/__init__.py +0 -0
  158. intentkit/skills/dexscreener/model/search_token_response.py +82 -0
  159. intentkit/skills/dexscreener/schema.json +48 -0
  160. intentkit/skills/dexscreener/search_token.py +321 -0
  161. intentkit/skills/dune_analytics/__init__.py +103 -0
  162. intentkit/skills/dune_analytics/base.py +46 -0
  163. intentkit/skills/dune_analytics/dune.png +0 -0
  164. intentkit/skills/dune_analytics/fetch_kol_buys.py +128 -0
  165. intentkit/skills/dune_analytics/fetch_nation_metrics.py +237 -0
  166. intentkit/skills/dune_analytics/schema.json +99 -0
  167. intentkit/skills/elfa/README.md +100 -0
  168. intentkit/skills/elfa/__init__.py +123 -0
  169. intentkit/skills/elfa/base.py +28 -0
  170. intentkit/skills/elfa/elfa.jpg +0 -0
  171. intentkit/skills/elfa/mention.py +504 -0
  172. intentkit/skills/elfa/schema.json +153 -0
  173. intentkit/skills/elfa/stats.py +118 -0
  174. intentkit/skills/elfa/tokens.py +126 -0
  175. intentkit/skills/enso/README.md +75 -0
  176. intentkit/skills/enso/__init__.py +114 -0
  177. intentkit/skills/enso/abi/__init__.py +0 -0
  178. intentkit/skills/enso/abi/approval.py +279 -0
  179. intentkit/skills/enso/abi/erc20.py +14 -0
  180. intentkit/skills/enso/abi/route.py +129 -0
  181. intentkit/skills/enso/base.py +44 -0
  182. intentkit/skills/enso/best_yield.py +286 -0
  183. intentkit/skills/enso/enso.jpg +0 -0
  184. intentkit/skills/enso/networks.py +105 -0
  185. intentkit/skills/enso/prices.py +93 -0
  186. intentkit/skills/enso/route.py +300 -0
  187. intentkit/skills/enso/schema.json +212 -0
  188. intentkit/skills/enso/tokens.py +223 -0
  189. intentkit/skills/enso/wallet.py +381 -0
  190. intentkit/skills/github/README.md +63 -0
  191. intentkit/skills/github/__init__.py +54 -0
  192. intentkit/skills/github/base.py +21 -0
  193. intentkit/skills/github/github.jpg +0 -0
  194. intentkit/skills/github/github_search.py +183 -0
  195. intentkit/skills/github/schema.json +59 -0
  196. intentkit/skills/heurist/__init__.py +143 -0
  197. intentkit/skills/heurist/base.py +26 -0
  198. intentkit/skills/heurist/heurist.png +0 -0
  199. intentkit/skills/heurist/image_generation_animagine_xl.py +162 -0
  200. intentkit/skills/heurist/image_generation_arthemy_comics.py +162 -0
  201. intentkit/skills/heurist/image_generation_arthemy_real.py +162 -0
  202. intentkit/skills/heurist/image_generation_braindance.py +162 -0
  203. intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +162 -0
  204. intentkit/skills/heurist/image_generation_flux_1_dev.py +162 -0
  205. intentkit/skills/heurist/image_generation_sdxl.py +161 -0
  206. intentkit/skills/heurist/schema.json +196 -0
  207. intentkit/skills/lifi/README.md +294 -0
  208. intentkit/skills/lifi/__init__.py +141 -0
  209. intentkit/skills/lifi/base.py +21 -0
  210. intentkit/skills/lifi/lifi.png +0 -0
  211. intentkit/skills/lifi/schema.json +89 -0
  212. intentkit/skills/lifi/token_execute.py +472 -0
  213. intentkit/skills/lifi/token_quote.py +190 -0
  214. intentkit/skills/lifi/utils.py +656 -0
  215. intentkit/skills/moralis/README.md +490 -0
  216. intentkit/skills/moralis/__init__.py +110 -0
  217. intentkit/skills/moralis/api.py +281 -0
  218. intentkit/skills/moralis/base.py +55 -0
  219. intentkit/skills/moralis/fetch_chain_portfolio.py +191 -0
  220. intentkit/skills/moralis/fetch_nft_portfolio.py +284 -0
  221. intentkit/skills/moralis/fetch_solana_portfolio.py +331 -0
  222. intentkit/skills/moralis/fetch_wallet_portfolio.py +301 -0
  223. intentkit/skills/moralis/moralis.png +0 -0
  224. intentkit/skills/moralis/schema.json +156 -0
  225. intentkit/skills/moralis/tests/__init__.py +0 -0
  226. intentkit/skills/moralis/tests/test_wallet.py +511 -0
  227. intentkit/skills/nation/__init__.py +62 -0
  228. intentkit/skills/nation/base.py +31 -0
  229. intentkit/skills/nation/nation.png +0 -0
  230. intentkit/skills/nation/nft_check.py +106 -0
  231. intentkit/skills/nation/schema.json +58 -0
  232. intentkit/skills/openai/__init__.py +107 -0
  233. intentkit/skills/openai/base.py +32 -0
  234. intentkit/skills/openai/dalle_image_generation.py +128 -0
  235. intentkit/skills/openai/gpt_image_generation.py +152 -0
  236. intentkit/skills/openai/gpt_image_to_image.py +186 -0
  237. intentkit/skills/openai/image_to_text.py +126 -0
  238. intentkit/skills/openai/openai.png +0 -0
  239. intentkit/skills/openai/schema.json +139 -0
  240. intentkit/skills/portfolio/README.md +55 -0
  241. intentkit/skills/portfolio/__init__.py +151 -0
  242. intentkit/skills/portfolio/base.py +107 -0
  243. intentkit/skills/portfolio/constants.py +9 -0
  244. intentkit/skills/portfolio/moralis.png +0 -0
  245. intentkit/skills/portfolio/schema.json +237 -0
  246. intentkit/skills/portfolio/token_balances.py +155 -0
  247. intentkit/skills/portfolio/wallet_approvals.py +102 -0
  248. intentkit/skills/portfolio/wallet_defi_positions.py +80 -0
  249. intentkit/skills/portfolio/wallet_history.py +155 -0
  250. intentkit/skills/portfolio/wallet_net_worth.py +112 -0
  251. intentkit/skills/portfolio/wallet_nfts.py +139 -0
  252. intentkit/skills/portfolio/wallet_profitability.py +101 -0
  253. intentkit/skills/portfolio/wallet_profitability_summary.py +91 -0
  254. intentkit/skills/portfolio/wallet_stats.py +79 -0
  255. intentkit/skills/portfolio/wallet_swaps.py +147 -0
  256. intentkit/skills/skills.toml +103 -0
  257. intentkit/skills/slack/__init__.py +98 -0
  258. intentkit/skills/slack/base.py +55 -0
  259. intentkit/skills/slack/get_channel.py +109 -0
  260. intentkit/skills/slack/get_message.py +136 -0
  261. intentkit/skills/slack/schedule_message.py +92 -0
  262. intentkit/skills/slack/schema.json +135 -0
  263. intentkit/skills/slack/send_message.py +81 -0
  264. intentkit/skills/slack/slack.jpg +0 -0
  265. intentkit/skills/system/__init__.py +90 -0
  266. intentkit/skills/system/base.py +22 -0
  267. intentkit/skills/system/read_agent_api_key.py +87 -0
  268. intentkit/skills/system/regenerate_agent_api_key.py +77 -0
  269. intentkit/skills/system/schema.json +53 -0
  270. intentkit/skills/system/system.svg +76 -0
  271. intentkit/skills/tavily/README.md +86 -0
  272. intentkit/skills/tavily/__init__.py +91 -0
  273. intentkit/skills/tavily/base.py +27 -0
  274. intentkit/skills/tavily/schema.json +119 -0
  275. intentkit/skills/tavily/tavily.jpg +0 -0
  276. intentkit/skills/tavily/tavily_extract.py +147 -0
  277. intentkit/skills/tavily/tavily_search.py +139 -0
  278. intentkit/skills/token/README.md +89 -0
  279. intentkit/skills/token/__init__.py +107 -0
  280. intentkit/skills/token/base.py +154 -0
  281. intentkit/skills/token/constants.py +9 -0
  282. intentkit/skills/token/erc20_transfers.py +145 -0
  283. intentkit/skills/token/moralis.png +0 -0
  284. intentkit/skills/token/schema.json +141 -0
  285. intentkit/skills/token/token_analytics.py +81 -0
  286. intentkit/skills/token/token_price.py +132 -0
  287. intentkit/skills/token/token_search.py +121 -0
  288. intentkit/skills/twitter/__init__.py +146 -0
  289. intentkit/skills/twitter/base.py +68 -0
  290. intentkit/skills/twitter/follow_user.py +69 -0
  291. intentkit/skills/twitter/get_mentions.py +124 -0
  292. intentkit/skills/twitter/get_timeline.py +111 -0
  293. intentkit/skills/twitter/get_user_by_username.py +84 -0
  294. intentkit/skills/twitter/get_user_tweets.py +123 -0
  295. intentkit/skills/twitter/like_tweet.py +65 -0
  296. intentkit/skills/twitter/post_tweet.py +90 -0
  297. intentkit/skills/twitter/reply_tweet.py +98 -0
  298. intentkit/skills/twitter/retweet.py +76 -0
  299. intentkit/skills/twitter/schema.json +258 -0
  300. intentkit/skills/twitter/search_tweets.py +115 -0
  301. intentkit/skills/twitter/twitter.png +0 -0
  302. intentkit/skills/unrealspeech/__init__.py +55 -0
  303. intentkit/skills/unrealspeech/base.py +21 -0
  304. intentkit/skills/unrealspeech/schema.json +100 -0
  305. intentkit/skills/unrealspeech/text_to_speech.py +177 -0
  306. intentkit/skills/unrealspeech/unrealspeech.jpg +0 -0
  307. intentkit/skills/venice_audio/__init__.py +106 -0
  308. intentkit/skills/venice_audio/base.py +119 -0
  309. intentkit/skills/venice_audio/input.py +41 -0
  310. intentkit/skills/venice_audio/schema.json +152 -0
  311. intentkit/skills/venice_audio/venice_audio.py +240 -0
  312. intentkit/skills/venice_audio/venice_logo.jpg +0 -0
  313. intentkit/skills/venice_image/README.md +119 -0
  314. intentkit/skills/venice_image/__init__.py +154 -0
  315. intentkit/skills/venice_image/api.py +138 -0
  316. intentkit/skills/venice_image/base.py +188 -0
  317. intentkit/skills/venice_image/config.py +35 -0
  318. intentkit/skills/venice_image/image_enhance/README.md +119 -0
  319. intentkit/skills/venice_image/image_enhance/__init__.py +0 -0
  320. intentkit/skills/venice_image/image_enhance/image_enhance.py +80 -0
  321. intentkit/skills/venice_image/image_enhance/image_enhance_base.py +23 -0
  322. intentkit/skills/venice_image/image_enhance/image_enhance_input.py +40 -0
  323. intentkit/skills/venice_image/image_generation/README.md +144 -0
  324. intentkit/skills/venice_image/image_generation/__init__.py +0 -0
  325. intentkit/skills/venice_image/image_generation/image_generation_base.py +117 -0
  326. intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -0
  327. intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -0
  328. intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -0
  329. intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -0
  330. intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -0
  331. intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -0
  332. intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -0
  333. intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -0
  334. intentkit/skills/venice_image/image_upscale/README.md +111 -0
  335. intentkit/skills/venice_image/image_upscale/__init__.py +0 -0
  336. intentkit/skills/venice_image/image_upscale/image_upscale.py +90 -0
  337. intentkit/skills/venice_image/image_upscale/image_upscale_base.py +23 -0
  338. intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -0
  339. intentkit/skills/venice_image/image_vision/README.md +112 -0
  340. intentkit/skills/venice_image/image_vision/__init__.py +0 -0
  341. intentkit/skills/venice_image/image_vision/image_vision.py +100 -0
  342. intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -0
  343. intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -0
  344. intentkit/skills/venice_image/schema.json +267 -0
  345. intentkit/skills/venice_image/utils.py +78 -0
  346. intentkit/skills/venice_image/venice_image.jpg +0 -0
  347. intentkit/skills/web_scraper/README.md +82 -0
  348. intentkit/skills/web_scraper/__init__.py +92 -0
  349. intentkit/skills/web_scraper/base.py +21 -0
  350. intentkit/skills/web_scraper/langchain.png +0 -0
  351. intentkit/skills/web_scraper/schema.json +115 -0
  352. intentkit/skills/web_scraper/scrape_and_index.py +327 -0
  353. intentkit/utils/__init__.py +1 -0
  354. intentkit/utils/chain.py +436 -0
  355. intentkit/utils/error.py +134 -0
  356. intentkit/utils/logging.py +70 -0
  357. intentkit/utils/middleware.py +61 -0
  358. intentkit/utils/random.py +16 -0
  359. intentkit/utils/s3.py +267 -0
  360. intentkit/utils/slack_alert.py +79 -0
  361. intentkit/utils/tx.py +37 -0
  362. {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/METADATA +1 -1
  363. intentkit-0.5.2.dist-info/RECORD +365 -0
  364. intentkit-0.5.0.dist-info/RECORD +0 -4
  365. {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/WHEEL +0 -0
  366. {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,208 @@
1
+ import logging
2
+ from typing import Any, Dict, List, Optional, Type
3
+
4
+ import httpx
5
+ from langchain_core.runnables import RunnableConfig
6
+ from pydantic import BaseModel, Field
7
+
8
+ from intentkit.skills.chainlist.base import ChainlistBaseTool
9
+
10
+ logger = logging.getLogger(__name__)
11
+
12
+
13
+ class ChainLookupInput(BaseModel):
14
+ """Input for ChainLookup tool."""
15
+
16
+ search_term: Optional[str] = Field(
17
+ description="Term to search for (chain name, symbol, or chain ID)",
18
+ default=None,
19
+ )
20
+ chain_id: Optional[int] = Field(
21
+ description="Specific chain ID to look up",
22
+ default=None,
23
+ )
24
+ no_tracking: Optional[bool] = Field(
25
+ description="Whether to return only RPC endpoints with no tracking",
26
+ default=False,
27
+ )
28
+ limit: Optional[int] = Field(
29
+ description="Limit the number of results returned",
30
+ default=5,
31
+ )
32
+
33
+
34
+ class ChainLookup(ChainlistBaseTool):
35
+ """Tool for looking up blockchain RPC endpoints from Chainlist."""
36
+
37
+ name: str = "chain_lookup"
38
+ description: str = (
39
+ "Look up blockchain RPC endpoints and details by chain name, symbol, or chain ID.\n"
40
+ "Returns information about blockchains including RPC endpoints, native currency, and explorers."
41
+ )
42
+ args_schema: Type[BaseModel] = ChainLookupInput
43
+
44
+ def _normalize_text(self, text: str) -> str:
45
+ """Normalize text for searching (lowercase, remove spaces)."""
46
+ if not text:
47
+ return ""
48
+ return text.lower().strip()
49
+
50
+ async def _fetch_chains_data(self) -> List[Dict[str, Any]]:
51
+ """Fetch chains data from Chainlist API."""
52
+ chainlist_api_url = "https://chainlist.org/rpcs.json"
53
+
54
+ async with httpx.AsyncClient(timeout=10.0) as client:
55
+ response = await client.get(chainlist_api_url)
56
+ response.raise_for_status()
57
+ return response.json()
58
+
59
+ def _filter_chains(
60
+ self,
61
+ chains: List[Dict[str, Any]],
62
+ search_term: Optional[str] = None,
63
+ chain_id: Optional[int] = None,
64
+ no_tracking: bool = False,
65
+ limit: int = 5,
66
+ ) -> List[Dict[str, Any]]:
67
+ """Filter chains based on search criteria."""
68
+ filtered_chains = chains
69
+
70
+ # Filter by chain_id if provided
71
+ if chain_id is not None:
72
+ filtered_chains = [
73
+ chain for chain in filtered_chains if chain.get("chainId") == chain_id
74
+ ]
75
+
76
+ # Filter by search term if provided
77
+ if search_term and chain_id is None:
78
+ normalized_term = self._normalize_text(search_term)
79
+ result = []
80
+
81
+ for chain in filtered_chains:
82
+ name = self._normalize_text(chain.get("name", ""))
83
+ symbol = self._normalize_text(chain.get("chain", ""))
84
+ short_name = self._normalize_text(chain.get("shortName", ""))
85
+
86
+ if (
87
+ normalized_term in name
88
+ or normalized_term in symbol
89
+ or normalized_term in short_name
90
+ ):
91
+ result.append(chain)
92
+
93
+ filtered_chains = result
94
+
95
+ # Filter RPC endpoints for each chain if no_tracking is True
96
+ if no_tracking:
97
+ filtered_result = []
98
+ for chain in filtered_chains:
99
+ if "rpc" not in chain:
100
+ continue
101
+
102
+ chain_copy = dict(chain)
103
+ chain_copy["rpc"] = [
104
+ rpc
105
+ for rpc in chain["rpc"]
106
+ if isinstance(rpc, dict) and rpc.get("tracking") == "none"
107
+ ]
108
+
109
+ if chain_copy[
110
+ "rpc"
111
+ ]: # Only include if it has RPC endpoints after filtering
112
+ filtered_result.append(chain_copy)
113
+
114
+ filtered_chains = filtered_result
115
+
116
+ # Apply limit
117
+ if limit > 0:
118
+ filtered_chains = filtered_chains[:limit]
119
+
120
+ return filtered_chains
121
+
122
+ def _format_chain(self, chain: Dict[str, Any]) -> Dict[str, Any]:
123
+ """Format a chain entry for response."""
124
+ # Format RPC endpoints
125
+ formatted_rpcs = []
126
+ if "rpc" in chain:
127
+ for rpc in chain["rpc"]:
128
+ if isinstance(rpc, dict):
129
+ url = rpc.get("url")
130
+ tracking = rpc.get("tracking", "unspecified")
131
+ formatted_rpcs.append({"url": url, "tracking": tracking})
132
+ elif isinstance(rpc, str):
133
+ formatted_rpcs.append({"url": rpc, "tracking": "unspecified"})
134
+
135
+ # Format chain data
136
+ formatted_chain = {
137
+ "name": chain.get("name"),
138
+ "chain": chain.get("chain"),
139
+ "chainId": chain.get("chainId"),
140
+ "networkId": chain.get("networkId"),
141
+ "shortName": chain.get("shortName"),
142
+ "infoURL": chain.get("infoURL", ""),
143
+ "nativeCurrency": chain.get("nativeCurrency", {}),
144
+ "rpc": formatted_rpcs[:3], # Limit to 3 RPC endpoints per chain
145
+ "total_rpc_count": len(chain.get("rpc", [])),
146
+ }
147
+
148
+ # Add explorers if available
149
+ if "explorers" in chain and chain["explorers"]:
150
+ formatted_chain["explorers"] = [
151
+ {"name": explorer.get("name", ""), "url": explorer.get("url", "")}
152
+ for explorer in chain["explorers"][:2] # Limit to 2 explorers
153
+ ]
154
+
155
+ return formatted_chain
156
+
157
+ async def _arun(
158
+ self,
159
+ search_term: Optional[str] = None,
160
+ chain_id: Optional[int] = None,
161
+ no_tracking: Optional[bool] = False,
162
+ limit: Optional[int] = 5,
163
+ config: Optional[RunnableConfig] = None,
164
+ **kwargs,
165
+ ) -> Dict:
166
+ """Lookup blockchain RPC endpoints from Chainlist."""
167
+ if not search_term and not chain_id:
168
+ return {
169
+ "error": "Please provide either a search term or a chain ID to lookup."
170
+ }
171
+
172
+ try:
173
+ # Fetch data
174
+ chains_data = await self._fetch_chains_data()
175
+
176
+ # Filter chains based on criteria
177
+ filtered_chains = self._filter_chains(
178
+ chains_data,
179
+ search_term=search_term,
180
+ chain_id=chain_id,
181
+ no_tracking=no_tracking,
182
+ limit=limit,
183
+ )
184
+
185
+ # Handle no results
186
+ if not filtered_chains:
187
+ return {
188
+ "found": False,
189
+ "message": "No chains found matching the search criteria.",
190
+ }
191
+
192
+ # Format results
193
+ formatted_chains = [self._format_chain(chain) for chain in filtered_chains]
194
+
195
+ return {
196
+ "found": True,
197
+ "count": len(formatted_chains),
198
+ "chains": formatted_chains,
199
+ }
200
+
201
+ except httpx.HTTPStatusError as e:
202
+ logger.error(f"HTTP error fetching chain data: {e}")
203
+ return {
204
+ "error": f"Error fetching chain data: HTTP status code {e.response.status_code}"
205
+ }
206
+ except Exception as e:
207
+ logger.error(f"Error fetching chain data: {str(e)}")
208
+ return {"error": f"An error occurred while fetching chain data: {str(e)}"}
Binary file
@@ -0,0 +1,47 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "title": "Chainlist Skills",
5
+ "description": "Access blockchain RPC endpoints and network information from chainlist.org. Enable this skill to look up EVM-compatible networks by name, symbol, or chain ID and get their RPC endpoints, native currencies, and explorer links.",
6
+ "x-icon": "https://ai.service.crestal.dev/skills/chainlist/chainlist.png",
7
+ "x-tags": [
8
+ "Blockchain",
9
+ "RPC",
10
+ "EVM",
11
+ "Network"
12
+ ],
13
+ "properties": {
14
+ "enabled": {
15
+ "type": "boolean",
16
+ "title": "Enabled",
17
+ "default": false
18
+ },
19
+ "states": {
20
+ "type": "object",
21
+ "properties": {
22
+ "chain_lookup": {
23
+ "type": "string",
24
+ "title": "Chain Lookup",
25
+ "enum": [
26
+ "disabled",
27
+ "public",
28
+ "private"
29
+ ],
30
+ "x-enum-title": [
31
+ "Disabled",
32
+ "Agent Owner + All Users",
33
+ "Agent Owner Only"
34
+ ],
35
+ "description": "Enables looking up blockchain RPC endpoints and network information. When public, available to all users; when private, only to authenticated users.",
36
+ "default": "disabled"
37
+ }
38
+ },
39
+ "description": "Configure visibility for chainlist skills (disabled: unavailable, public: available to all, private: available only to authenticated users)"
40
+ }
41
+ },
42
+ "required": [
43
+ "enabled",
44
+ "states"
45
+ ],
46
+ "additionalProperties": true
47
+ }
@@ -0,0 +1,82 @@
1
+ """Common utility skills."""
2
+
3
+ import logging
4
+ from typing import TypedDict
5
+
6
+ from intentkit.abstracts.skill import SkillStoreABC
7
+ from intentkit.skills.base import SkillConfig, SkillState
8
+ from intentkit.skills.common.base import CommonBaseTool
9
+ from intentkit.skills.common.current_time import CurrentTime
10
+
11
+ # Cache skills at the system level, because they are stateless
12
+ _cache: dict[str, CommonBaseTool] = {}
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class SkillStates(TypedDict):
18
+ current_time: SkillState
19
+
20
+
21
+ class Config(SkillConfig):
22
+ """Configuration for common utility skills."""
23
+
24
+ states: SkillStates
25
+
26
+
27
+ async def get_skills(
28
+ config: "Config",
29
+ is_private: bool,
30
+ store: SkillStoreABC,
31
+ **_,
32
+ ) -> list[CommonBaseTool]:
33
+ """Get all common utility skills.
34
+
35
+ Args:
36
+ config: The configuration for common utility skills.
37
+ is_private: Whether to include private skills.
38
+ store: The skill store for persisting data.
39
+
40
+ Returns:
41
+ A list of common utility skills.
42
+ """
43
+ available_skills = []
44
+
45
+ # Include skills based on their state
46
+ for skill_name, state in config["states"].items():
47
+ if state == "disabled":
48
+ continue
49
+ elif state == "public" or (state == "private" and is_private):
50
+ available_skills.append(skill_name)
51
+
52
+ # Get each skill using the cached getter
53
+ result = []
54
+ for name in available_skills:
55
+ skill = get_common_skill(name, store)
56
+ if skill:
57
+ result.append(skill)
58
+ return result
59
+
60
+
61
+ def get_common_skill(
62
+ name: str,
63
+ store: SkillStoreABC,
64
+ ) -> CommonBaseTool:
65
+ """Get a common utility skill by name.
66
+
67
+ Args:
68
+ name: The name of the skill to get
69
+ store: The skill store for persisting data
70
+
71
+ Returns:
72
+ The requested common utility skill
73
+ """
74
+ if name == "current_time":
75
+ if name not in _cache:
76
+ _cache[name] = CurrentTime(
77
+ skill_store=store,
78
+ )
79
+ return _cache[name]
80
+ else:
81
+ logger.warning(f"Unknown common skill: {name}")
82
+ return None
@@ -0,0 +1,21 @@
1
+ from typing import Type
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+ from intentkit.abstracts.skill import SkillStoreABC
6
+ from intentkit.skills.base import IntentKitSkill
7
+
8
+
9
+ class CommonBaseTool(IntentKitSkill):
10
+ """Base class for common utility tools."""
11
+
12
+ name: str = Field(description="The name of the tool")
13
+ description: str = Field(description="A description of what the tool does")
14
+ args_schema: Type[BaseModel]
15
+ skill_store: SkillStoreABC = Field(
16
+ description="The skill store for persisting data"
17
+ )
18
+
19
+ @property
20
+ def category(self) -> str:
21
+ return "common"
Binary file
@@ -0,0 +1,84 @@
1
+ import logging
2
+ from datetime import datetime
3
+ from typing import Type
4
+
5
+ import pytz
6
+ from langchain_core.runnables import RunnableConfig
7
+ from pydantic import BaseModel, Field
8
+
9
+ from intentkit.skills.common.base import CommonBaseTool
10
+
11
+ logger = logging.getLogger(__name__)
12
+
13
+
14
+ class CurrentTimeInput(BaseModel):
15
+ """Input for CurrentTime tool."""
16
+
17
+ timezone: str = Field(
18
+ description="Timezone to format the time in (e.g., 'UTC', 'US/Pacific', 'Europe/London', 'Asia/Tokyo'). Default is UTC.",
19
+ default="UTC",
20
+ )
21
+
22
+
23
+ class CurrentTime(CommonBaseTool):
24
+ """Tool for getting the current time.
25
+
26
+ This tool returns the current time and converts it to the specified timezone.
27
+ By default, it returns the time in UTC.
28
+
29
+ Attributes:
30
+ name: The name of the tool.
31
+ description: A description of what the tool does.
32
+ args_schema: The schema for the tool's input arguments.
33
+ """
34
+
35
+ name: str = "common_current_time"
36
+ description: str = (
37
+ "Get the current time, converted to a specified timezone.\n"
38
+ "You must call this tool whenever the user asks for the time."
39
+ )
40
+ args_schema: Type[BaseModel] = CurrentTimeInput
41
+
42
+ async def _arun(self, timezone: str, config: RunnableConfig, **kwargs) -> str:
43
+ """Implementation of the tool to get the current time.
44
+
45
+ Args:
46
+ timezone (str): The timezone to format the time in. Defaults to "UTC".
47
+
48
+ Returns:
49
+ str: A formatted string with the current time in the specified timezone.
50
+ """
51
+ # Get current UTC time
52
+ utc_now = datetime.now(pytz.UTC)
53
+
54
+ # Convert to the requested timezone
55
+ if timezone.upper() != "UTC":
56
+ try:
57
+ tz = pytz.timezone(timezone)
58
+ converted_time = utc_now.astimezone(tz)
59
+ except pytz.exceptions.UnknownTimeZoneError:
60
+ # Provide some suggestions for common timezones
61
+ common_timezones = [
62
+ "US/Eastern",
63
+ "US/Central",
64
+ "US/Pacific",
65
+ "Europe/London",
66
+ "Europe/Paris",
67
+ "Europe/Berlin",
68
+ "Asia/Shanghai",
69
+ "Asia/Tokyo",
70
+ "Asia/Singapore",
71
+ "Australia/Sydney",
72
+ ]
73
+ suggestion_str = ", ".join([f"'{tz}'" for tz in common_timezones])
74
+ return (
75
+ f"Error: Unknown timezone '{timezone}'. Using UTC instead.\n"
76
+ f"Some common timezone options: {suggestion_str}"
77
+ )
78
+ else:
79
+ converted_time = utc_now
80
+
81
+ # Format the time
82
+ formatted_time = converted_time.strftime("%Y-%m-%d %H:%M:%S %Z")
83
+
84
+ return f"Current time: {formatted_time}"
@@ -0,0 +1,57 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "title": "Common Utilities",
5
+ "description": "Utility skills",
6
+ "x-icon": "https://ai.service.crestal.dev/skills/common/common.jpg",
7
+ "x-tags": [
8
+ "Utility"
9
+ ],
10
+ "properties": {
11
+ "enabled": {
12
+ "type": "boolean",
13
+ "title": "Enabled",
14
+ "description": "Whether this skill is enabled",
15
+ "default": true
16
+ },
17
+ "states": {
18
+ "type": "object",
19
+ "properties": {
20
+ "current_time": {
21
+ "type": "string",
22
+ "title": "Current Time",
23
+ "enum": [
24
+ "disabled",
25
+ "public",
26
+ "private"
27
+ ],
28
+ "x-enum-title": [
29
+ "Disabled",
30
+ "Agent Owner + All Users",
31
+ "Agent Owner Only"
32
+ ],
33
+ "description": "Provides localized timekeeping with automatic timezone detection using IP geolocation",
34
+ "default": "private"
35
+ }
36
+ },
37
+ "description": "States for each common utility skill (disabled, public, or private)"
38
+ },
39
+ "api_key_provider": {
40
+ "type": "string",
41
+ "title": "API Key Provider",
42
+ "description": "Who provides the API key",
43
+ "enum": [
44
+ "platform"
45
+ ],
46
+ "x-enum-title": [
47
+ "Nation Hosted"
48
+ ],
49
+ "default": "platform"
50
+ }
51
+ },
52
+ "required": [
53
+ "states",
54
+ "enabled"
55
+ ],
56
+ "additionalProperties": true
57
+ }
@@ -0,0 +1,121 @@
1
+ # CookieFun Skills
2
+
3
+ This skill category provides access to CookieFun API for Twitter/X analytics and account insights.
4
+
5
+ ### Features
6
+
7
+ The CookieFun skills allow you to:
8
+
9
+ - Get a list of all available sectors
10
+ - Get detailed information about Twitter accounts
11
+ - Get the feed of tweets from specific accounts
12
+ - Find smart followers for Twitter accounts
13
+ - Search for Twitter accounts matching specific criteria
14
+
15
+ ### API Key
16
+
17
+ You need a CookieFun API key to use these skills. You can get one by signing up at [CookieFun](https://cookie.fun/).
18
+
19
+ ### Skills
20
+
21
+ #### Get Sectors
22
+
23
+ Returns a list of all available sectors in the CookieFun system.
24
+
25
+ Example usage:
26
+ ```
27
+ Call the get_sectors skill to fetch all sectors available in the CookieFun system.
28
+ ```
29
+
30
+ Example prompts:
31
+ - "What sectors are available in CookieFun?"
32
+ - "Show me all the sectors in CookieFun"
33
+ - "Get a list of all sectors from CookieFun"
34
+
35
+ #### Get Account Details
36
+
37
+ Retrieves detailed information about a Twitter account including followers, following, posts, metrics, and engagement data.
38
+
39
+ Example usage:
40
+ ```
41
+ Call the get_account_details skill with parameters:
42
+ - username: "elonmusk"
43
+ ```
44
+
45
+ or
46
+
47
+ ```
48
+ Call the get_account_details skill with parameters:
49
+ - userId: "1234567890"
50
+ ```
51
+
52
+ Example prompts:
53
+ - "Get details about the Twitter account @elonmusk"
54
+ - "Fetch information about Elon Musk's Twitter profile"
55
+ - "Show me stats for the Twitter user elonmusk"
56
+ - "What's the engagement rate for @elonmusk?"
57
+
58
+ #### Get Account Smart Followers
59
+
60
+ Returns a list of top smart followers for a specific Twitter account, with detailed metrics about these followers.
61
+
62
+ Example usage:
63
+ ```
64
+ Call the get_account_smart_followers skill with parameters:
65
+ - username: "elonmusk"
66
+ ```
67
+
68
+ or
69
+
70
+ ```
71
+ Call the get_account_smart_followers skill with parameters:
72
+ - userId: "1234567890"
73
+ ```
74
+
75
+ Example prompts:
76
+ - "Who are the top smart followers of @elonmusk?"
77
+ - "Get me a list of the most influential followers of Elon Musk"
78
+ - "Show me the smart followers for Twitter user elonmusk"
79
+ - "Find the most engaged followers of @elonmusk"
80
+
81
+ #### Search Accounts
82
+
83
+ Searches for Twitter accounts that authored tweets matching specified search criteria.
84
+
85
+ Example usage:
86
+ ```
87
+ Call the search_accounts skill with parameters:
88
+ - searchQuery: "bitcoin"
89
+ - type: 0 # Optional: 0 for Original, 1 for Reply, 2 for Quote
90
+ - sortBy: 0 # Optional: 0 for SmartEngagementPoints, 1 for Impressions, 2 for MatchingTweetsCount
91
+ - sortOrder: 1 # Optional: 0 for Ascending, 1 for Descending
92
+ ```
93
+
94
+ Example prompts:
95
+ - "Find Twitter accounts talking about bitcoin"
96
+ - "Search for accounts that tweet about AI sorted by engagement"
97
+ - "Who are the top accounts posting original tweets about NFTs?"
98
+ - "Find Twitter users discussing climate change with the most impressions"
99
+
100
+ #### Get Account Feed
101
+
102
+ Retrieves a list of tweets for a specific Twitter account with various filtering options.
103
+
104
+ Example usage:
105
+ ```
106
+ Call the get_account_feed skill with parameters:
107
+ - username: "elonmusk"
108
+ - startDate: "01/05/2023" # Optional: Filter tweets after this date
109
+ - endDate: "31/05/2023" # Optional: Filter tweets before this date
110
+ - type: 0 # Optional: 0 for Original, 1 for Reply, 2 for Quote
111
+ - hasMedia: true # Optional: Filter to only tweets with media
112
+ - sortBy: 0 # Optional: 0 for CreatedDate, 1 for Impressions
113
+ - sortOrder: 1 # Optional: 0 for Ascending, 1 for Descending
114
+ ```
115
+
116
+ Example prompts:
117
+ - "Show me Elon Musk's tweets from May 2023"
118
+ - "Get the most popular tweets from @elonmusk"
119
+ - "Fetch only original tweets (not replies) from elonmusk"
120
+ - "Show me tweets with media from @elonmusk posted in the last month"
121
+ - "What are the latest tweets from Elon Musk sorted by impressions?"