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,92 @@
1
+ from datetime import datetime
2
+ from typing import Any, Dict, Optional, Type
3
+
4
+ from langchain_core.runnables import RunnableConfig
5
+ from pydantic import BaseModel, Field
6
+
7
+ from intentkit.skills.slack.base import SlackBaseTool
8
+
9
+
10
+ class SlackScheduleMessageSchema(BaseModel):
11
+ """Input schema for SlackScheduleMessage."""
12
+
13
+ channel_id: str = Field(
14
+ description="The ID of the channel to send the scheduled message to",
15
+ )
16
+ text: str = Field(
17
+ description="The text content of the message to schedule",
18
+ )
19
+ post_at: str = Field(
20
+ description="The time to send the message in ISO format (e.g., '2023-12-25T10:00:00Z')",
21
+ )
22
+ thread_ts: Optional[str] = Field(
23
+ None,
24
+ description="The timestamp of the thread to reply to, if sending a thread reply",
25
+ )
26
+
27
+
28
+ class SlackScheduleMessage(SlackBaseTool):
29
+ """Tool for scheduling messages to be sent to a Slack channel or thread."""
30
+
31
+ name: str = "slack_schedule_message"
32
+ description: str = "Schedule a message to be sent to a Slack channel or thread at a specific time, if you need current time, use skill common_current_time"
33
+ args_schema: Type[BaseModel] = SlackScheduleMessageSchema
34
+
35
+ async def _arun(
36
+ self,
37
+ config: RunnableConfig,
38
+ channel_id: str,
39
+ text: str,
40
+ post_at: str,
41
+ thread_ts: Optional[str] = None,
42
+ **kwargs,
43
+ ) -> Dict[str, Any]:
44
+ """Run the tool to schedule a Slack message.
45
+
46
+ Args:
47
+ channel_id: The ID of the channel to send the message to
48
+ text: The text content of the message to schedule
49
+ post_at: The time to send the message in ISO format
50
+ thread_ts: The timestamp of the thread to reply to, if sending a thread reply
51
+
52
+ Returns:
53
+ Information about the scheduled message
54
+
55
+ Raises:
56
+ Exception: If an error occurs scheduling the message
57
+ """
58
+ context = self.context_from_config(config)
59
+ client = self.get_client(context.config.get("slack_bot_token"))
60
+
61
+ try:
62
+ # Convert ISO datetime string to Unix timestamp
63
+ post_datetime = datetime.fromisoformat(post_at.replace("Z", "+00:00"))
64
+ post_time_unix = int(post_datetime.timestamp())
65
+
66
+ # Prepare message parameters
67
+ message_params = {
68
+ "channel": channel_id,
69
+ "text": text,
70
+ "post_at": post_time_unix,
71
+ }
72
+
73
+ # Add thread_ts if replying to a thread
74
+ if thread_ts:
75
+ message_params["thread_ts"] = thread_ts
76
+
77
+ # Schedule the message
78
+ response = client.chat_scheduleMessage(**message_params)
79
+
80
+ if response["ok"]:
81
+ return {
82
+ "channel": channel_id,
83
+ "scheduled_message_id": response["scheduled_message_id"],
84
+ "post_at": post_at,
85
+ "text": text,
86
+ "thread_ts": thread_ts,
87
+ }
88
+ else:
89
+ raise Exception(f"Error scheduling message: {response.get('error')}")
90
+
91
+ except Exception as e:
92
+ raise Exception(f"Error scheduling message: {str(e)}")
@@ -0,0 +1,135 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "title": "Slack",
5
+ "description": "Integration with Slack API enabling workspace communication including channel management, message retrieval, and posting capabilities for team collaboration",
6
+ "x-icon": "https://ai.service.crestal.dev/skills/slack/slack.jpg",
7
+ "x-tags": [
8
+ "Social"
9
+ ],
10
+ "properties": {
11
+ "enabled": {
12
+ "type": "boolean",
13
+ "title": "Enabled",
14
+ "description": "Whether this skill is enabled",
15
+ "default": false
16
+ },
17
+ "states": {
18
+ "type": "object",
19
+ "properties": {
20
+ "get_channel": {
21
+ "type": "string",
22
+ "title": "Get Channel",
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": "State of the get_channel skill",
34
+ "default": "disabled"
35
+ },
36
+ "get_message": {
37
+ "type": "string",
38
+ "title": "Get Message",
39
+ "enum": [
40
+ "disabled",
41
+ "public",
42
+ "private"
43
+ ],
44
+ "x-enum-title": [
45
+ "Disabled",
46
+ "Agent Owner + All Users",
47
+ "Agent Owner Only"
48
+ ],
49
+ "description": "State of the get_message skill",
50
+ "default": "disabled"
51
+ },
52
+ "schedule_message": {
53
+ "type": "string",
54
+ "title": "Schedule Message",
55
+ "enum": [
56
+ "disabled",
57
+ "public",
58
+ "private"
59
+ ],
60
+ "x-enum-title": [
61
+ "Disabled",
62
+ "Agent Owner + All Users",
63
+ "Agent Owner Only"
64
+ ],
65
+ "description": "State of the schedule_message skill",
66
+ "default": "disabled"
67
+ },
68
+ "send_message": {
69
+ "type": "string",
70
+ "title": "Send Message",
71
+ "enum": [
72
+ "disabled",
73
+ "public",
74
+ "private"
75
+ ],
76
+ "x-enum-title": [
77
+ "Disabled",
78
+ "Agent Owner + All Users",
79
+ "Agent Owner Only"
80
+ ],
81
+ "description": "State of the send_message skill",
82
+ "default": "disabled"
83
+ }
84
+ },
85
+ "description": "States for each Slack skill (disabled, public, or private)"
86
+ },
87
+ "api_key_provider": {
88
+ "type": "string",
89
+ "title": "API Key Provider",
90
+ "description": "Provider of the API key for AIXBT API service",
91
+ "enum": [
92
+ "agent_owner"
93
+ ],
94
+ "x-enum-title": [
95
+ "Owner Provided"
96
+ ],
97
+ "default": "agent_owner"
98
+ }
99
+ },
100
+ "required": [
101
+ "states",
102
+ "enabled"
103
+ ],
104
+ "if": {
105
+ "properties": {
106
+ "api_key_provider": {
107
+ "const": "agent_owner"
108
+ }
109
+ }
110
+ },
111
+ "then": {
112
+ "properties": {
113
+ "slack_bot_token": {
114
+ "type": "string",
115
+ "title": "Slack Bot Token",
116
+ "x-link": "[Get your API key](https://api.slack.com/)",
117
+ "x-sensitive": true,
118
+ "description": "Slack bot token for API access"
119
+ }
120
+ },
121
+ "if": {
122
+ "properties": {
123
+ "enabled": {
124
+ "const": true
125
+ }
126
+ }
127
+ },
128
+ "then": {
129
+ "required": [
130
+ "slack_bot_token"
131
+ ]
132
+ }
133
+ },
134
+ "additionalProperties": true
135
+ }
@@ -0,0 +1,81 @@
1
+ from typing import Optional, Type
2
+
3
+ from langchain_core.runnables import RunnableConfig
4
+ from pydantic import BaseModel, Field
5
+
6
+ from intentkit.skills.slack.base import SlackBaseTool, SlackMessage
7
+
8
+
9
+ class SlackSendMessageSchema(BaseModel):
10
+ """Input schema for SlackSendMessage."""
11
+
12
+ channel_id: str = Field(
13
+ description="The ID of the channel to send the message to",
14
+ )
15
+ text: str = Field(
16
+ description="The text content of the message to send",
17
+ )
18
+ thread_ts: Optional[str] = Field(
19
+ None,
20
+ description="The timestamp of the thread to reply to, if sending a thread reply",
21
+ )
22
+
23
+
24
+ class SlackSendMessage(SlackBaseTool):
25
+ """Tool for sending messages to a Slack channel or thread."""
26
+
27
+ name: str = "slack_send_message"
28
+ description: str = "Send a message to a Slack channel or thread"
29
+ args_schema: Type[BaseModel] = SlackSendMessageSchema
30
+
31
+ async def _arun(
32
+ self,
33
+ config: RunnableConfig,
34
+ channel_id: str,
35
+ text: str,
36
+ thread_ts: Optional[str] = None,
37
+ **kwargs,
38
+ ) -> SlackMessage:
39
+ """Run the tool to send a Slack message.
40
+
41
+ Args:
42
+ channel_id: The ID of the channel to send the message to
43
+ text: The text content of the message to send
44
+ thread_ts: The timestamp of the thread to reply to, if sending a thread reply
45
+
46
+ Returns:
47
+ Information about the sent message
48
+
49
+ Raises:
50
+ Exception: If an error occurs sending the message
51
+ """
52
+ context = self.context_from_config(config)
53
+ client = self.get_client(context.config.get("slack_bot_token"))
54
+
55
+ try:
56
+ # Prepare message parameters
57
+ message_params = {
58
+ "channel": channel_id,
59
+ "text": text,
60
+ }
61
+
62
+ # Add thread_ts if replying to a thread
63
+ if thread_ts:
64
+ message_params["thread_ts"] = thread_ts
65
+
66
+ # Send the message
67
+ response = client.chat_postMessage(**message_params)
68
+
69
+ if response["ok"]:
70
+ return SlackMessage(
71
+ ts=response["ts"],
72
+ text=text,
73
+ user=response["message"]["user"],
74
+ channel=channel_id,
75
+ thread_ts=thread_ts,
76
+ )
77
+ else:
78
+ raise Exception(f"Error sending message: {response.get('error')}")
79
+
80
+ except Exception as e:
81
+ raise Exception(f"Error sending message: {str(e)}")
Binary file
@@ -0,0 +1,90 @@
1
+ """System 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, SkillOwnerState
8
+ from intentkit.skills.system.base import SystemBaseTool
9
+ from intentkit.skills.system.read_agent_api_key import ReadAgentApiKey
10
+ from intentkit.skills.system.regenerate_agent_api_key import RegenerateAgentApiKey
11
+
12
+ # Cache skills at the system level, because they are stateless
13
+ _cache: dict[str, SystemBaseTool] = {}
14
+
15
+ logger = logging.getLogger(__name__)
16
+
17
+
18
+ class SkillStates(TypedDict):
19
+ read_agent_api_key: SkillOwnerState
20
+ regenerate_agent_api_key: SkillOwnerState
21
+
22
+
23
+ class Config(SkillConfig):
24
+ """Configuration for system skills."""
25
+
26
+ states: SkillStates
27
+
28
+
29
+ async def get_skills(
30
+ config: "Config",
31
+ is_private: bool,
32
+ store: SkillStoreABC,
33
+ **_,
34
+ ) -> list[SystemBaseTool]:
35
+ """Get all system skills.
36
+
37
+ Args:
38
+ config: The configuration for system skills.
39
+ is_private: Whether to include private skills.
40
+ store: The skill store for persisting data.
41
+
42
+ Returns:
43
+ A list of system skills.
44
+ """
45
+ available_skills = []
46
+
47
+ # Include skills based on their state
48
+ for skill_name, state in config["states"].items():
49
+ if state == "disabled":
50
+ continue
51
+ elif state == "public" or (state == "private" and is_private):
52
+ available_skills.append(skill_name)
53
+
54
+ # Get each skill using the cached getter
55
+ result = []
56
+ for name in available_skills:
57
+ skill = get_system_skill(name, store)
58
+ if skill:
59
+ result.append(skill)
60
+ return result
61
+
62
+
63
+ def get_system_skill(
64
+ name: str,
65
+ store: SkillStoreABC,
66
+ ) -> SystemBaseTool:
67
+ """Get a system skill by name.
68
+
69
+ Args:
70
+ name: The name of the skill to get
71
+ store: The skill store for persisting data
72
+
73
+ Returns:
74
+ The requested system skill
75
+ """
76
+ if name == "read_agent_api_key":
77
+ if name not in _cache:
78
+ _cache[name] = ReadAgentApiKey(
79
+ skill_store=store,
80
+ )
81
+ return _cache[name]
82
+ elif name == "regenerate_agent_api_key":
83
+ if name not in _cache:
84
+ _cache[name] = RegenerateAgentApiKey(
85
+ skill_store=store,
86
+ )
87
+ return _cache[name]
88
+ else:
89
+ logger.warning(f"Unknown system skill: {name}")
90
+ return None
@@ -0,0 +1,22 @@
1
+ import secrets
2
+
3
+ from intentkit.skills.base import IntentKitSkill
4
+
5
+
6
+ class SystemBaseTool(IntentKitSkill):
7
+ """Base class for system-related skills."""
8
+
9
+ @property
10
+ def category(self) -> str:
11
+ """Return the skill category."""
12
+ return "system"
13
+
14
+ def _generate_api_key(self) -> str:
15
+ """Generate a new API key using secure random bytes."""
16
+ # Generate 32 random bytes and convert to hex string
17
+ return f"sk-{secrets.token_hex(32)}"
18
+
19
+ def _generate_public_api_key(self) -> str:
20
+ """Generate a new public API key using secure random bytes."""
21
+ # Generate 32 random bytes and convert to hex string
22
+ return f"pk-{secrets.token_hex(32)}"
@@ -0,0 +1,87 @@
1
+ from langchain_core.runnables import RunnableConfig
2
+ from pydantic import BaseModel, Field
3
+
4
+ from intentkit.skills.system.base import SystemBaseTool
5
+
6
+
7
+ class ReadAgentApiKeyInput(BaseModel):
8
+ """Input model for read_agent_api_key skill."""
9
+
10
+ pass
11
+
12
+
13
+ class ReadAgentApiKeyOutput(BaseModel):
14
+ """Output model for read_agent_api_key skill."""
15
+
16
+ api_key: str = Field(description="The private API key for the agent (sk-)")
17
+ api_key_public: str = Field(description="The public API key for the agent (pk-)")
18
+ is_new: bool = Field(description="Whether new API keys were generated")
19
+ open_api_base_url: str = Field(description="The base URL for the API")
20
+ api_endpoint: str = Field(description="The full API endpoint URL")
21
+
22
+
23
+ class ReadAgentApiKey(SystemBaseTool):
24
+ """Skill to retrieve or generate an API key for the agent."""
25
+
26
+ name: str = "system_read_agent_api_key"
27
+ description: str = (
28
+ "Retrieve the API keys for the agent. "
29
+ "Returns both private (sk-) and public (pk-) API keys. "
30
+ "Private API key can access all skills (public and owner-only). "
31
+ "Public API key can only access public skills. "
32
+ "Make sure to tell the user the base URL and endpoint. "
33
+ "Tell user in OpenAI sdk or Desktop client like Cherry Studio, input the base URL and API key. "
34
+ "Always use markdown code block to wrap the API keys, base URL, and endpoint. "
35
+ "Tell user to check more doc in https://github.com/crestalnetwork/intentkit/blob/main/docs/skills/agent_api_key.md "
36
+ )
37
+ args_schema = ReadAgentApiKeyInput
38
+
39
+ async def _arun(self, config: RunnableConfig, **kwargs) -> ReadAgentApiKeyOutput:
40
+ """Retrieve or generate an API key for the agent."""
41
+ # Get context from runnable config to access agent.id
42
+ context = self.context_from_config(config)
43
+ agent_id = context.agent.id
44
+
45
+ # Get agent data from skill store
46
+ agent_data = await self.skill_store.get_agent_data(agent_id)
47
+
48
+ if not agent_data:
49
+ raise ValueError(f"Agent data not found for agent_id: {agent_id}")
50
+
51
+ # Get API base URL from system config
52
+ open_api_base_url = self.skill_store.get_system_config("open_api_base_url")
53
+ api_endpoint = f"{open_api_base_url}/v1/chat/completions"
54
+
55
+ # Check if API keys exist
56
+ if agent_data.api_key and agent_data.api_key_public:
57
+ return ReadAgentApiKeyOutput(
58
+ api_key=agent_data.api_key,
59
+ api_key_public=agent_data.api_key_public,
60
+ is_new=False,
61
+ open_api_base_url=open_api_base_url,
62
+ api_endpoint=api_endpoint,
63
+ )
64
+
65
+ # Generate new API keys if any are missing
66
+ new_api_key = agent_data.api_key or self._generate_api_key()
67
+ new_public_api_key = (
68
+ agent_data.api_key_public or self._generate_public_api_key()
69
+ )
70
+
71
+ # Save the API keys to agent data
72
+ update_data = {}
73
+ if not agent_data.api_key:
74
+ update_data["api_key"] = new_api_key
75
+ if not agent_data.api_key_public:
76
+ update_data["api_key_public"] = new_public_api_key
77
+
78
+ if update_data:
79
+ await self.skill_store.set_agent_data(agent_id, update_data)
80
+
81
+ return ReadAgentApiKeyOutput(
82
+ api_key=new_api_key,
83
+ api_key_public=new_public_api_key,
84
+ is_new=bool(update_data),
85
+ open_api_base_url=open_api_base_url,
86
+ api_endpoint=api_endpoint,
87
+ )
@@ -0,0 +1,77 @@
1
+ from langchain_core.runnables import RunnableConfig
2
+ from pydantic import BaseModel, Field
3
+
4
+ from intentkit.skills.system.base import SystemBaseTool
5
+
6
+
7
+ class RegenerateAgentApiKeyInput(BaseModel):
8
+ """Input model for regenerate_agent_api_key skill."""
9
+
10
+ pass
11
+
12
+
13
+ class RegenerateAgentApiKeyOutput(BaseModel):
14
+ """Output model for regenerate_agent_api_key skill."""
15
+
16
+ api_key: str = Field(description="The new private API key for the agent (sk-)")
17
+ api_key_public: str = Field(
18
+ description="The new public API key for the agent (pk-)"
19
+ )
20
+ previous_key_existed: bool = Field(description="Whether previous API keys existed")
21
+ open_api_base_url: str = Field(description="The base URL for the API")
22
+ api_endpoint: str = Field(description="The full API endpoint URL")
23
+
24
+
25
+ class RegenerateAgentApiKey(SystemBaseTool):
26
+ """Skill to regenerate and reset the API key for the agent."""
27
+
28
+ name: str = "system_regenerate_agent_api_key"
29
+ description: str = (
30
+ "Generate new API keys for the agent, revoke any existing keys. "
31
+ "Generates both private (sk-) and public (pk-) API keys. "
32
+ "Private API key can access all skills (public and owner-only). "
33
+ "Public API key can only access public skills. "
34
+ "Make sure to tell the user the base URL and endpoint. "
35
+ "Tell user in OpenAI sdk or Desktop client like Cherry Studio, input the base URL and API key. "
36
+ "Always use markdown code block to wrap the API keys, base URL, and endpoint. "
37
+ "Tell user to check more doc in https://github.com/crestalnetwork/intentkit/blob/main/docs/skills/agent_api_key.md "
38
+ )
39
+ args_schema = RegenerateAgentApiKeyInput
40
+
41
+ async def _arun(
42
+ self, config: RunnableConfig, **kwargs
43
+ ) -> RegenerateAgentApiKeyOutput:
44
+ """Generate and set a new API key for the agent."""
45
+ # Get context from runnable config to access agent.id
46
+ context = self.context_from_config(config)
47
+ agent_id = context.agent.id
48
+
49
+ # Get agent data from skill store
50
+ agent_data = await self.skill_store.get_agent_data(agent_id)
51
+
52
+ if not agent_data:
53
+ raise ValueError(f"Agent data not found for agent_id: {agent_id}")
54
+
55
+ # Get API base URL from system config
56
+ open_api_base_url = self.skill_store.get_system_config("open_api_base_url")
57
+ api_endpoint = f"{open_api_base_url}/v1/chat/completions"
58
+
59
+ # Check if previous API keys existed
60
+ previous_key_existed = bool(agent_data.api_key or agent_data.api_key_public)
61
+
62
+ # Generate new API keys
63
+ new_api_key = self._generate_api_key()
64
+ new_public_api_key = self._generate_public_api_key()
65
+
66
+ # Save the new API keys to agent data (overwrites existing)
67
+ await self.skill_store.set_agent_data(
68
+ agent_id, {"api_key": new_api_key, "api_key_public": new_public_api_key}
69
+ )
70
+
71
+ return RegenerateAgentApiKeyOutput(
72
+ api_key=new_api_key,
73
+ api_key_public=new_public_api_key,
74
+ previous_key_existed=previous_key_existed,
75
+ open_api_base_url=open_api_base_url,
76
+ api_endpoint=api_endpoint,
77
+ )
@@ -0,0 +1,53 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "title": "System",
5
+ "description": "System management and configuration skills for agent operations including API key management",
6
+ "x-icon": "https://ai.service.crestal.dev/skills/system/system.svg",
7
+ "x-tags": [
8
+ "System",
9
+ "Management",
10
+ "Configuration"
11
+ ],
12
+ "properties": {
13
+ "enabled": {
14
+ "type": "boolean",
15
+ "title": "Enabled",
16
+ "description": "Whether this skill is enabled",
17
+ "default": true
18
+ },
19
+ "states": {
20
+ "type": "object",
21
+ "properties": {
22
+ "read_agent_api_key": {
23
+ "type": "string",
24
+ "title": "Read Agent API Key",
25
+ "enum": [
26
+ "disabled",
27
+ "private"
28
+ ],
29
+ "x-enum-title": [
30
+ "Disabled",
31
+ "Agent Owner Only"
32
+ ],
33
+ "description": "Retrieve the API key for the agent. If no API key exists, generates and sets a new one.",
34
+ "default": "private"
35
+ },
36
+ "regenerate_agent_api_key": {
37
+ "type": "string",
38
+ "title": "Regenerate Agent API Key",
39
+ "enum": [
40
+ "disabled",
41
+ "private"
42
+ ],
43
+ "x-enum-title": [
44
+ "Disabled",
45
+ "Agent Owner Only"
46
+ ],
47
+ "description": "Generate a new API key for the agent, replacing any existing key.",
48
+ "default": "private"
49
+ }
50
+ }
51
+ }
52
+ }
53
+ }