intentkit 0.7.5.dev3__py3-none-any.whl → 0.8.34.dev7__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.
Files changed (393) hide show
  1. intentkit/MANIFEST.in +14 -0
  2. intentkit/README.md +88 -0
  3. intentkit/__init__.py +6 -4
  4. intentkit/abstracts/agent.py +4 -5
  5. intentkit/abstracts/engine.py +5 -5
  6. intentkit/abstracts/graph.py +15 -8
  7. intentkit/abstracts/skill.py +6 -144
  8. intentkit/abstracts/twitter.py +4 -5
  9. intentkit/clients/__init__.py +9 -2
  10. intentkit/clients/cdp.py +129 -153
  11. intentkit/{utils → clients}/s3.py +109 -34
  12. intentkit/clients/twitter.py +83 -62
  13. intentkit/clients/web3.py +4 -7
  14. intentkit/config/config.py +123 -90
  15. intentkit/core/account_checking.py +802 -0
  16. intentkit/core/agent.py +313 -498
  17. intentkit/core/asset.py +267 -0
  18. intentkit/core/chat.py +5 -3
  19. intentkit/core/client.py +1 -1
  20. intentkit/core/credit.py +49 -41
  21. intentkit/core/draft.py +201 -0
  22. intentkit/core/draft_chat.py +118 -0
  23. intentkit/core/engine.py +378 -287
  24. intentkit/core/manager/__init__.py +25 -0
  25. intentkit/core/manager/engine.py +220 -0
  26. intentkit/core/manager/service.py +172 -0
  27. intentkit/core/manager/skills.py +178 -0
  28. intentkit/core/middleware.py +231 -0
  29. intentkit/core/prompt.py +74 -114
  30. intentkit/core/scheduler.py +143 -0
  31. intentkit/core/statistics.py +168 -0
  32. intentkit/models/agent.py +931 -518
  33. intentkit/models/agent_data.py +165 -106
  34. intentkit/models/agent_schema.json +38 -251
  35. intentkit/models/app_setting.py +15 -13
  36. intentkit/models/chat.py +86 -140
  37. intentkit/models/credit.py +182 -162
  38. intentkit/models/db.py +42 -23
  39. intentkit/models/db_mig.py +120 -3
  40. intentkit/models/draft.py +222 -0
  41. intentkit/models/llm.csv +31 -0
  42. intentkit/models/llm.py +262 -370
  43. intentkit/models/redis.py +6 -4
  44. intentkit/models/skill.py +222 -101
  45. intentkit/models/skills.csv +173 -0
  46. intentkit/models/team.py +189 -0
  47. intentkit/models/user.py +103 -31
  48. intentkit/skills/acolyt/__init__.py +2 -9
  49. intentkit/skills/acolyt/ask.py +3 -4
  50. intentkit/skills/acolyt/base.py +4 -9
  51. intentkit/skills/acolyt/schema.json +4 -3
  52. intentkit/skills/aixbt/__init__.py +2 -13
  53. intentkit/skills/aixbt/base.py +1 -7
  54. intentkit/skills/aixbt/projects.py +14 -15
  55. intentkit/skills/aixbt/schema.json +4 -4
  56. intentkit/skills/allora/__init__.py +2 -9
  57. intentkit/skills/allora/base.py +4 -9
  58. intentkit/skills/allora/price.py +3 -4
  59. intentkit/skills/allora/schema.json +3 -2
  60. intentkit/skills/base.py +241 -41
  61. intentkit/skills/basename/__init__.py +51 -0
  62. intentkit/skills/basename/base.py +11 -0
  63. intentkit/skills/basename/basename.svg +11 -0
  64. intentkit/skills/basename/schema.json +58 -0
  65. intentkit/skills/carv/__init__.py +115 -121
  66. intentkit/skills/carv/base.py +184 -185
  67. intentkit/skills/carv/fetch_news.py +3 -3
  68. intentkit/skills/carv/onchain_query.py +4 -4
  69. intentkit/skills/carv/schema.json +134 -137
  70. intentkit/skills/carv/token_info_and_price.py +6 -6
  71. intentkit/skills/casino/__init__.py +4 -15
  72. intentkit/skills/casino/base.py +1 -7
  73. intentkit/skills/casino/deck_draw.py +5 -8
  74. intentkit/skills/casino/deck_shuffle.py +6 -6
  75. intentkit/skills/casino/dice_roll.py +2 -4
  76. intentkit/skills/casino/schema.json +0 -1
  77. intentkit/skills/cdp/__init__.py +22 -84
  78. intentkit/skills/cdp/base.py +1 -7
  79. intentkit/skills/cdp/schema.json +11 -314
  80. intentkit/skills/chainlist/__init__.py +2 -7
  81. intentkit/skills/chainlist/base.py +1 -7
  82. intentkit/skills/chainlist/chain_lookup.py +18 -18
  83. intentkit/skills/chainlist/schema.json +3 -5
  84. intentkit/skills/common/__init__.py +2 -9
  85. intentkit/skills/common/base.py +1 -7
  86. intentkit/skills/common/current_time.py +1 -2
  87. intentkit/skills/common/schema.json +2 -2
  88. intentkit/skills/cookiefun/__init__.py +6 -9
  89. intentkit/skills/cookiefun/base.py +2 -7
  90. intentkit/skills/cookiefun/get_account_details.py +7 -7
  91. intentkit/skills/cookiefun/get_account_feed.py +19 -19
  92. intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
  93. intentkit/skills/cookiefun/get_sectors.py +3 -3
  94. intentkit/skills/cookiefun/schema.json +1 -3
  95. intentkit/skills/cookiefun/search_accounts.py +9 -9
  96. intentkit/skills/cryptocompare/__init__.py +7 -24
  97. intentkit/skills/cryptocompare/api.py +2 -3
  98. intentkit/skills/cryptocompare/base.py +10 -24
  99. intentkit/skills/cryptocompare/fetch_news.py +4 -5
  100. intentkit/skills/cryptocompare/fetch_price.py +6 -7
  101. intentkit/skills/cryptocompare/fetch_top_exchanges.py +4 -5
  102. intentkit/skills/cryptocompare/fetch_top_market_cap.py +4 -5
  103. intentkit/skills/cryptocompare/fetch_top_volume.py +4 -5
  104. intentkit/skills/cryptocompare/fetch_trading_signals.py +5 -6
  105. intentkit/skills/cryptocompare/schema.json +3 -3
  106. intentkit/skills/cryptopanic/__init__.py +7 -10
  107. intentkit/skills/cryptopanic/base.py +51 -55
  108. intentkit/skills/cryptopanic/fetch_crypto_news.py +4 -8
  109. intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +5 -7
  110. intentkit/skills/cryptopanic/schema.json +105 -103
  111. intentkit/skills/dapplooker/__init__.py +2 -9
  112. intentkit/skills/dapplooker/base.py +4 -9
  113. intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
  114. intentkit/skills/dapplooker/schema.json +3 -5
  115. intentkit/skills/defillama/__init__.py +24 -74
  116. intentkit/skills/defillama/api.py +6 -9
  117. intentkit/skills/defillama/base.py +8 -19
  118. intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +8 -10
  119. intentkit/skills/defillama/coins/fetch_block.py +6 -8
  120. intentkit/skills/defillama/coins/fetch_current_prices.py +8 -10
  121. intentkit/skills/defillama/coins/fetch_first_price.py +7 -9
  122. intentkit/skills/defillama/coins/fetch_historical_prices.py +9 -11
  123. intentkit/skills/defillama/coins/fetch_price_chart.py +9 -11
  124. intentkit/skills/defillama/coins/fetch_price_percentage.py +7 -9
  125. intentkit/skills/defillama/config/chains.py +1 -3
  126. intentkit/skills/defillama/fees/fetch_fees_overview.py +24 -26
  127. intentkit/skills/defillama/schema.json +5 -1
  128. intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +16 -18
  129. intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +8 -10
  130. intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +5 -7
  131. intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +7 -9
  132. intentkit/skills/defillama/tests/api_integration.test.py +1 -1
  133. intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +4 -6
  134. intentkit/skills/defillama/tvl/fetch_chains.py +9 -11
  135. intentkit/skills/defillama/tvl/fetch_historical_tvl.py +4 -6
  136. intentkit/skills/defillama/tvl/fetch_protocol.py +32 -38
  137. intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +3 -5
  138. intentkit/skills/defillama/tvl/fetch_protocols.py +37 -45
  139. intentkit/skills/defillama/volumes/fetch_dex_overview.py +42 -48
  140. intentkit/skills/defillama/volumes/fetch_dex_summary.py +35 -37
  141. intentkit/skills/defillama/volumes/fetch_options_overview.py +24 -28
  142. intentkit/skills/defillama/yields/fetch_pool_chart.py +10 -12
  143. intentkit/skills/defillama/yields/fetch_pools.py +26 -30
  144. intentkit/skills/dexscreener/__init__.py +97 -102
  145. intentkit/skills/dexscreener/base.py +125 -130
  146. intentkit/skills/dexscreener/get_pair_info.py +4 -5
  147. intentkit/skills/dexscreener/get_token_pairs.py +4 -5
  148. intentkit/skills/dexscreener/get_tokens_info.py +7 -8
  149. intentkit/skills/dexscreener/model/search_token_response.py +80 -82
  150. intentkit/skills/dexscreener/schema.json +91 -93
  151. intentkit/skills/dexscreener/search_token.py +182 -184
  152. intentkit/skills/dexscreener/utils.py +15 -14
  153. intentkit/skills/dune_analytics/__init__.py +7 -9
  154. intentkit/skills/dune_analytics/base.py +48 -52
  155. intentkit/skills/dune_analytics/fetch_kol_buys.py +5 -7
  156. intentkit/skills/dune_analytics/fetch_nation_metrics.py +6 -8
  157. intentkit/skills/dune_analytics/schema.json +104 -99
  158. intentkit/skills/elfa/__init__.py +5 -18
  159. intentkit/skills/elfa/base.py +10 -14
  160. intentkit/skills/elfa/mention.py +19 -21
  161. intentkit/skills/elfa/schema.json +3 -2
  162. intentkit/skills/elfa/stats.py +4 -4
  163. intentkit/skills/elfa/tokens.py +12 -12
  164. intentkit/skills/elfa/utils.py +26 -28
  165. intentkit/skills/enso/__init__.py +11 -31
  166. intentkit/skills/enso/base.py +54 -35
  167. intentkit/skills/enso/best_yield.py +16 -24
  168. intentkit/skills/enso/networks.py +6 -11
  169. intentkit/skills/enso/prices.py +11 -13
  170. intentkit/skills/enso/route.py +34 -38
  171. intentkit/skills/enso/schema.json +3 -2
  172. intentkit/skills/enso/tokens.py +29 -38
  173. intentkit/skills/enso/wallet.py +76 -191
  174. intentkit/skills/erc20/__init__.py +50 -0
  175. intentkit/skills/erc20/base.py +11 -0
  176. intentkit/skills/erc20/erc20.svg +5 -0
  177. intentkit/skills/erc20/schema.json +74 -0
  178. intentkit/skills/erc721/__init__.py +53 -0
  179. intentkit/skills/erc721/base.py +11 -0
  180. intentkit/skills/erc721/erc721.svg +5 -0
  181. intentkit/skills/erc721/schema.json +90 -0
  182. intentkit/skills/firecrawl/__init__.py +5 -18
  183. intentkit/skills/firecrawl/base.py +4 -9
  184. intentkit/skills/firecrawl/clear.py +4 -8
  185. intentkit/skills/firecrawl/crawl.py +19 -19
  186. intentkit/skills/firecrawl/query.py +4 -3
  187. intentkit/skills/firecrawl/schema.json +2 -6
  188. intentkit/skills/firecrawl/scrape.py +17 -22
  189. intentkit/skills/firecrawl/utils.py +50 -42
  190. intentkit/skills/github/__init__.py +2 -7
  191. intentkit/skills/github/base.py +1 -7
  192. intentkit/skills/github/github_search.py +1 -2
  193. intentkit/skills/github/schema.json +3 -4
  194. intentkit/skills/heurist/__init__.py +8 -27
  195. intentkit/skills/heurist/base.py +4 -9
  196. intentkit/skills/heurist/image_generation_animagine_xl.py +13 -15
  197. intentkit/skills/heurist/image_generation_arthemy_comics.py +13 -15
  198. intentkit/skills/heurist/image_generation_arthemy_real.py +13 -15
  199. intentkit/skills/heurist/image_generation_braindance.py +13 -15
  200. intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +13 -15
  201. intentkit/skills/heurist/image_generation_flux_1_dev.py +13 -15
  202. intentkit/skills/heurist/image_generation_sdxl.py +13 -15
  203. intentkit/skills/heurist/schema.json +2 -2
  204. intentkit/skills/http/__init__.py +4 -15
  205. intentkit/skills/http/base.py +1 -7
  206. intentkit/skills/http/get.py +21 -16
  207. intentkit/skills/http/post.py +23 -18
  208. intentkit/skills/http/put.py +23 -18
  209. intentkit/skills/http/schema.json +4 -5
  210. intentkit/skills/lifi/__init__.py +8 -13
  211. intentkit/skills/lifi/base.py +3 -9
  212. intentkit/skills/lifi/schema.json +17 -8
  213. intentkit/skills/lifi/token_execute.py +150 -60
  214. intentkit/skills/lifi/token_quote.py +8 -10
  215. intentkit/skills/lifi/utils.py +104 -51
  216. intentkit/skills/moralis/__init__.py +6 -10
  217. intentkit/skills/moralis/api.py +6 -7
  218. intentkit/skills/moralis/base.py +5 -10
  219. intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
  220. intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
  221. intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
  222. intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
  223. intentkit/skills/moralis/schema.json +7 -2
  224. intentkit/skills/morpho/__init__.py +52 -0
  225. intentkit/skills/morpho/base.py +11 -0
  226. intentkit/skills/morpho/morpho.svg +12 -0
  227. intentkit/skills/morpho/schema.json +73 -0
  228. intentkit/skills/nation/__init__.py +4 -9
  229. intentkit/skills/nation/base.py +5 -10
  230. intentkit/skills/nation/nft_check.py +3 -4
  231. intentkit/skills/nation/schema.json +4 -3
  232. intentkit/skills/onchain.py +30 -0
  233. intentkit/skills/openai/__init__.py +17 -18
  234. intentkit/skills/openai/base.py +10 -14
  235. intentkit/skills/openai/dalle_image_generation.py +4 -9
  236. intentkit/skills/openai/gpt_avatar_generator.py +102 -0
  237. intentkit/skills/openai/gpt_image_generation.py +5 -9
  238. intentkit/skills/openai/gpt_image_mini_generator.py +92 -0
  239. intentkit/skills/openai/gpt_image_to_image.py +5 -9
  240. intentkit/skills/openai/image_to_text.py +3 -7
  241. intentkit/skills/openai/schema.json +34 -3
  242. intentkit/skills/portfolio/__init__.py +11 -35
  243. intentkit/skills/portfolio/base.py +33 -19
  244. intentkit/skills/portfolio/schema.json +3 -5
  245. intentkit/skills/portfolio/token_balances.py +21 -21
  246. intentkit/skills/portfolio/wallet_approvals.py +17 -18
  247. intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
  248. intentkit/skills/portfolio/wallet_history.py +31 -31
  249. intentkit/skills/portfolio/wallet_net_worth.py +13 -13
  250. intentkit/skills/portfolio/wallet_nfts.py +19 -19
  251. intentkit/skills/portfolio/wallet_profitability.py +18 -18
  252. intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
  253. intentkit/skills/portfolio/wallet_stats.py +3 -3
  254. intentkit/skills/portfolio/wallet_swaps.py +19 -19
  255. intentkit/skills/pyth/__init__.py +50 -0
  256. intentkit/skills/pyth/base.py +11 -0
  257. intentkit/skills/pyth/pyth.svg +6 -0
  258. intentkit/skills/pyth/schema.json +75 -0
  259. intentkit/skills/skills.toml +36 -0
  260. intentkit/skills/slack/__init__.py +5 -17
  261. intentkit/skills/slack/base.py +3 -9
  262. intentkit/skills/slack/get_channel.py +8 -8
  263. intentkit/skills/slack/get_message.py +9 -9
  264. intentkit/skills/slack/schedule_message.py +5 -5
  265. intentkit/skills/slack/schema.json +2 -2
  266. intentkit/skills/slack/send_message.py +3 -5
  267. intentkit/skills/supabase/__init__.py +7 -23
  268. intentkit/skills/supabase/base.py +1 -7
  269. intentkit/skills/supabase/delete_data.py +4 -4
  270. intentkit/skills/supabase/fetch_data.py +12 -12
  271. intentkit/skills/supabase/insert_data.py +4 -4
  272. intentkit/skills/supabase/invoke_function.py +6 -6
  273. intentkit/skills/supabase/schema.json +2 -3
  274. intentkit/skills/supabase/update_data.py +6 -6
  275. intentkit/skills/supabase/upsert_data.py +4 -4
  276. intentkit/skills/superfluid/__init__.py +53 -0
  277. intentkit/skills/superfluid/base.py +11 -0
  278. intentkit/skills/superfluid/schema.json +89 -0
  279. intentkit/skills/superfluid/superfluid.svg +6 -0
  280. intentkit/skills/system/__init__.py +7 -24
  281. intentkit/skills/system/add_autonomous_task.py +10 -12
  282. intentkit/skills/system/delete_autonomous_task.py +2 -2
  283. intentkit/skills/system/edit_autonomous_task.py +14 -18
  284. intentkit/skills/system/list_autonomous_tasks.py +3 -5
  285. intentkit/skills/system/read_agent_api_key.py +6 -4
  286. intentkit/skills/system/regenerate_agent_api_key.py +6 -4
  287. intentkit/skills/system/schema.json +6 -8
  288. intentkit/skills/tavily/__init__.py +3 -12
  289. intentkit/skills/tavily/base.py +4 -9
  290. intentkit/skills/tavily/schema.json +3 -5
  291. intentkit/skills/tavily/tavily_extract.py +2 -4
  292. intentkit/skills/tavily/tavily_search.py +4 -6
  293. intentkit/skills/token/__init__.py +5 -10
  294. intentkit/skills/token/base.py +7 -11
  295. intentkit/skills/token/erc20_transfers.py +19 -19
  296. intentkit/skills/token/schema.json +3 -6
  297. intentkit/skills/token/token_analytics.py +3 -3
  298. intentkit/skills/token/token_price.py +13 -13
  299. intentkit/skills/token/token_search.py +9 -9
  300. intentkit/skills/twitter/__init__.py +11 -35
  301. intentkit/skills/twitter/base.py +22 -34
  302. intentkit/skills/twitter/follow_user.py +2 -6
  303. intentkit/skills/twitter/get_mentions.py +5 -12
  304. intentkit/skills/twitter/get_timeline.py +4 -12
  305. intentkit/skills/twitter/get_user_by_username.py +2 -6
  306. intentkit/skills/twitter/get_user_tweets.py +5 -13
  307. intentkit/skills/twitter/like_tweet.py +2 -6
  308. intentkit/skills/twitter/post_tweet.py +6 -9
  309. intentkit/skills/twitter/reply_tweet.py +6 -9
  310. intentkit/skills/twitter/retweet.py +2 -6
  311. intentkit/skills/twitter/schema.json +1 -0
  312. intentkit/skills/twitter/search_tweets.py +4 -12
  313. intentkit/skills/unrealspeech/__init__.py +2 -7
  314. intentkit/skills/unrealspeech/base.py +2 -8
  315. intentkit/skills/unrealspeech/schema.json +2 -5
  316. intentkit/skills/unrealspeech/text_to_speech.py +8 -8
  317. intentkit/skills/venice_audio/__init__.py +98 -106
  318. intentkit/skills/venice_audio/base.py +117 -121
  319. intentkit/skills/venice_audio/input.py +41 -41
  320. intentkit/skills/venice_audio/schema.json +151 -152
  321. intentkit/skills/venice_audio/venice_audio.py +38 -21
  322. intentkit/skills/venice_image/__init__.py +147 -154
  323. intentkit/skills/venice_image/api.py +138 -138
  324. intentkit/skills/venice_image/base.py +185 -192
  325. intentkit/skills/venice_image/config.py +33 -35
  326. intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
  327. intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
  328. intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
  329. intentkit/skills/venice_image/image_generation/image_generation_base.py +11 -10
  330. intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
  331. intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
  332. intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
  333. intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
  334. intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
  335. intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
  336. intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
  337. intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
  338. intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
  339. intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
  340. intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
  341. intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
  342. intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
  343. intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
  344. intentkit/skills/venice_image/schema.json +267 -267
  345. intentkit/skills/venice_image/utils.py +77 -78
  346. intentkit/skills/web_scraper/__init__.py +5 -18
  347. intentkit/skills/web_scraper/base.py +21 -7
  348. intentkit/skills/web_scraper/document_indexer.py +7 -6
  349. intentkit/skills/web_scraper/schema.json +2 -6
  350. intentkit/skills/web_scraper/scrape_and_index.py +15 -15
  351. intentkit/skills/web_scraper/utils.py +62 -63
  352. intentkit/skills/web_scraper/website_indexer.py +17 -19
  353. intentkit/skills/weth/__init__.py +49 -0
  354. intentkit/skills/weth/base.py +11 -0
  355. intentkit/skills/weth/schema.json +58 -0
  356. intentkit/skills/weth/weth.svg +6 -0
  357. intentkit/skills/wow/__init__.py +51 -0
  358. intentkit/skills/wow/base.py +11 -0
  359. intentkit/skills/wow/schema.json +89 -0
  360. intentkit/skills/wow/wow.svg +7 -0
  361. intentkit/skills/x402/__init__.py +58 -0
  362. intentkit/skills/x402/base.py +99 -0
  363. intentkit/skills/x402/http_request.py +117 -0
  364. intentkit/skills/x402/schema.json +40 -0
  365. intentkit/skills/x402/x402.webp +0 -0
  366. intentkit/skills/xmtp/__init__.py +4 -15
  367. intentkit/skills/xmtp/base.py +5 -5
  368. intentkit/skills/xmtp/price.py +7 -6
  369. intentkit/skills/xmtp/schema.json +69 -71
  370. intentkit/skills/xmtp/swap.py +6 -8
  371. intentkit/skills/xmtp/transfer.py +4 -6
  372. intentkit/utils/__init__.py +4 -0
  373. intentkit/utils/chain.py +198 -96
  374. intentkit/utils/ens.py +135 -0
  375. intentkit/utils/error.py +5 -2
  376. intentkit/utils/logging.py +9 -11
  377. intentkit/utils/schema.py +100 -0
  378. intentkit/utils/slack_alert.py +8 -8
  379. intentkit/utils/tx.py +16 -8
  380. intentkit/uv.lock +3377 -0
  381. {intentkit-0.7.5.dev3.dist-info → intentkit-0.8.34.dev7.dist-info}/METADATA +13 -15
  382. intentkit-0.8.34.dev7.dist-info/RECORD +478 -0
  383. intentkit-0.8.34.dev7.dist-info/licenses/LICENSE +21 -0
  384. intentkit/core/node.py +0 -215
  385. intentkit/models/conversation.py +0 -286
  386. intentkit/models/generator.py +0 -347
  387. intentkit/skills/cdp/get_balance.py +0 -110
  388. intentkit/skills/cdp/swap.py +0 -121
  389. intentkit/skills/moralis/tests/__init__.py +0 -0
  390. intentkit/skills/moralis/tests/test_wallet.py +0 -511
  391. intentkit-0.7.5.dev3.dist-info/RECORD +0 -424
  392. {intentkit-0.7.5.dev3.dist-info/licenses → intentkit}/LICENSE +0 -0
  393. {intentkit-0.7.5.dev3.dist-info → intentkit-0.8.34.dev7.dist-info}/WHEEL +0 -0
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Any, Dict, List, Optional, Type
2
+ from typing import Any
3
3
 
4
4
  from pydantic import BaseModel, Field
5
5
 
@@ -21,35 +21,35 @@ class WalletSwapsInput(BaseModel):
21
21
  description="The chain to query (e.g., 'eth', 'bsc', 'polygon').",
22
22
  default=DEFAULT_CHAIN,
23
23
  )
24
- cursor: Optional[str] = Field(
24
+ cursor: str | None = Field(
25
25
  description="The cursor for pagination.",
26
26
  default=None,
27
27
  )
28
- limit: Optional[int] = Field(
28
+ limit: int | None = Field(
29
29
  description="The number of results per page.",
30
30
  default=DEFAULT_LIMIT,
31
31
  )
32
- from_block: Optional[str] = Field(
32
+ from_block: str | None = Field(
33
33
  description="The minimum block number to get transactions from.",
34
34
  default=None,
35
35
  )
36
- to_block: Optional[str] = Field(
36
+ to_block: str | None = Field(
37
37
  description="The maximum block number to get transactions from.",
38
38
  default=None,
39
39
  )
40
- from_date: Optional[str] = Field(
40
+ from_date: str | None = Field(
41
41
  description="The start date to get transactions from (format in seconds or datestring).",
42
42
  default=None,
43
43
  )
44
- to_date: Optional[str] = Field(
44
+ to_date: str | None = Field(
45
45
  description="The end date to get transactions from (format in seconds or datestring).",
46
46
  default=None,
47
47
  )
48
- order: Optional[str] = Field(
48
+ order: str | None = Field(
49
49
  description="The order of the result (ASC or DESC).",
50
50
  default=DEFAULT_ORDER,
51
51
  )
52
- transaction_types: Optional[List[str]] = Field(
52
+ transaction_types: list[str] | None = Field(
53
53
  description="Array of transaction types. Allowed values are 'buy', 'sell'.",
54
54
  default=None,
55
55
  )
@@ -67,22 +67,22 @@ class WalletSwaps(PortfolioBaseTool):
67
67
  "Get all swap-related transactions (buy, sell) for a wallet address. "
68
68
  "Note that swaps data is only available from September 2024 onwards."
69
69
  )
70
- args_schema: Type[BaseModel] = WalletSwapsInput
70
+ args_schema: type[BaseModel] = WalletSwapsInput
71
71
 
72
72
  async def _arun(
73
73
  self,
74
74
  address: str,
75
75
  chain: str = DEFAULT_CHAIN,
76
- cursor: Optional[str] = None,
77
- limit: Optional[int] = DEFAULT_LIMIT,
78
- from_block: Optional[str] = None,
79
- to_block: Optional[str] = None,
80
- from_date: Optional[str] = None,
81
- to_date: Optional[str] = None,
82
- order: Optional[str] = DEFAULT_ORDER,
83
- transaction_types: Optional[List[str]] = None,
76
+ cursor: str | None = None,
77
+ limit: int | None = DEFAULT_LIMIT,
78
+ from_block: str | None = None,
79
+ to_block: str | None = None,
80
+ from_date: str | None = None,
81
+ to_date: str | None = None,
82
+ order: str | None = DEFAULT_ORDER,
83
+ transaction_types: list[str] | None = None,
84
84
  **kwargs,
85
- ) -> Dict[str, Any]:
85
+ ) -> dict[str, Any]:
86
86
  """Fetch wallet swap transactions from Moralis.
87
87
 
88
88
  Args:
@@ -0,0 +1,50 @@
1
+ """Pyth AgentKit skills."""
2
+
3
+ from typing import TypedDict
4
+
5
+ from coinbase_agentkit import pyth_action_provider
6
+
7
+ from intentkit.models.agent import Agent
8
+ from intentkit.skills.base import (
9
+ SkillConfig,
10
+ SkillState,
11
+ action_to_structured_tool,
12
+ get_agentkit_actions,
13
+ )
14
+ from intentkit.skills.pyth.base import PythBaseTool
15
+
16
+
17
+ class SkillStates(TypedDict):
18
+ PythActionProvider_fetch_price: SkillState
19
+ PythActionProvider_fetch_price_feed: SkillState
20
+
21
+
22
+ class Config(SkillConfig):
23
+ """Configuration for Pyth skills."""
24
+
25
+ states: SkillStates
26
+
27
+
28
+ async def get_skills(
29
+ config: "Config",
30
+ is_private: bool,
31
+ agent_id: str,
32
+ agent: Agent | None = None,
33
+ **_,
34
+ ) -> list[PythBaseTool]:
35
+ """Get all Pyth skills."""
36
+
37
+ available_skills: list[str] = []
38
+ for skill_name, state in config["states"].items():
39
+ if state == "disabled":
40
+ continue
41
+ if state == "public" or (state == "private" and is_private):
42
+ available_skills.append(skill_name)
43
+
44
+ actions = await get_agentkit_actions(agent_id, [pyth_action_provider], agent=agent)
45
+ tools: list[PythBaseTool] = []
46
+ for skill in available_skills:
47
+ for action in actions:
48
+ if action.name.endswith(skill):
49
+ tools.append(action_to_structured_tool(action))
50
+ return tools
@@ -0,0 +1,11 @@
1
+ """Pyth AgentKit skills base class."""
2
+
3
+ from intentkit.skills.cdp.base import CDPBaseTool
4
+
5
+
6
+ class PythBaseTool(CDPBaseTool):
7
+ """Base class for Pyth tools."""
8
+
9
+ @property
10
+ def category(self) -> str:
11
+ return "pyth"
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
2
+ <rect width="128" height="128" fill="#111827" rx="16" />
3
+ <path d="M40 44h48l-12 40H28z" fill="#38bdf8" opacity="0.85" />
4
+ <path d="M88 84H40l12-40h48z" fill="#f472b6" opacity="0.75" />
5
+ <text x="50%" y="92" font-family="Arial,Helvetica,sans-serif" font-size="18" fill="#f8fafc" text-anchor="middle">PYTH</text>
6
+ </svg>
@@ -0,0 +1,75 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "title": "Pyth",
5
+ "description": "Pyth oracle price data via Coinbase AgentKit",
6
+ "x-icon": "https://ai.service.crestal.dev/skills/pyth/pyth.svg",
7
+ "x-tags": [
8
+ "Analytics",
9
+ "Crypto",
10
+ "DeFi"
11
+ ],
12
+ "properties": {
13
+ "enabled": {
14
+ "type": "boolean",
15
+ "title": "Enabled",
16
+ "description": "Whether this skill is enabled",
17
+ "default": false
18
+ },
19
+ "states": {
20
+ "type": "object",
21
+ "properties": {
22
+ "PythActionProvider_fetch_price": {
23
+ "type": "string",
24
+ "title": "Fetch Price",
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": "State for PythActionProvider_fetch_price",
36
+ "default": "disabled"
37
+ },
38
+ "PythActionProvider_fetch_price_feed": {
39
+ "type": "string",
40
+ "title": "Fetch Price Feed",
41
+ "enum": [
42
+ "disabled",
43
+ "public",
44
+ "private"
45
+ ],
46
+ "x-enum-title": [
47
+ "Disabled",
48
+ "Agent Owner + All Users",
49
+ "Agent Owner Only"
50
+ ],
51
+ "description": "State for PythActionProvider_fetch_price_feed",
52
+ "default": "disabled"
53
+ }
54
+ },
55
+ "description": "States for each Pyth skill (disabled, public, or private)"
56
+ },
57
+ "api_key_provider": {
58
+ "type": "string",
59
+ "title": "API Key Provider",
60
+ "description": "Who provides the API key",
61
+ "enum": [
62
+ "platform"
63
+ ],
64
+ "x-enum-title": [
65
+ "Nation Hosted"
66
+ ],
67
+ "default": "platform"
68
+ }
69
+ },
70
+ "required": [
71
+ "states",
72
+ "enabled"
73
+ ],
74
+ "additionalProperties": true
75
+ }
@@ -10,6 +10,10 @@ author_wallet = "0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0"
10
10
  author_github = "TxCorpi0x"
11
11
  author_wallet = "0x2Bd32A312280bF5A01140e68ca630fB76cE8A3De"
12
12
 
13
+ [basename]
14
+ author_github = "hyacinthus"
15
+ author_wallet = "0x445750026A4a1906b61302442E085f9cbAfe206a"
16
+
13
17
  [cdp]
14
18
  author_github = "hyacinthus"
15
19
  author_wallet = "0x445750026A4a1906b61302442E085f9cbAfe206a"
@@ -50,6 +54,14 @@ author_wallet = "0x2Bd32A312280bF5A01140e68ca630fB76cE8A3De"
50
54
  author_github = "TxCorpi0x"
51
55
  author_wallet = "0x2Bd32A312280bF5A01140e68ca630fB76cE8A3De"
52
56
 
57
+ [erc20]
58
+ author_github = "hyacinthus"
59
+ author_wallet = "0x445750026A4a1906b61302442E085f9cbAfe206a"
60
+
61
+ [erc721]
62
+ author_github = "hyacinthus"
63
+ author_wallet = "0x445750026A4a1906b61302442E085f9cbAfe206a"
64
+
53
65
  [github]
54
66
  author_github = "bluntbrain"
55
67
  author_wallet = "0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0"
@@ -66,6 +78,10 @@ author_wallet = "0x445750026A4a1906b61302442E085f9cbAfe206a"
66
78
  author_github = "developerfred"
67
79
  author_wallet = "0xd1a8Dd23e356B9fAE27dF5DeF9ea025A602EC81e"
68
80
 
81
+ [morpho]
82
+ author_github = "hyacinthus"
83
+ author_wallet = "0x445750026A4a1906b61302442E085f9cbAfe206a"
84
+
69
85
  [nation]
70
86
  author_github = "spidemen"
71
87
  author_wallet = "0x275960ad41DbE218bBf72cDF612F88b5C6f40648"
@@ -78,6 +94,10 @@ author_wallet = "0x445750026A4a1906b61302442E085f9cbAfe206a"
78
94
  author_github = "hyacinthus"
79
95
  author_wallet = "0x445750026A4a1906b61302442E085f9cbAfe206a"
80
96
 
97
+ [superfluid]
98
+ author_github = "hyacinthus"
99
+ author_wallet = "0x445750026A4a1906b61302442E085f9cbAfe206a"
100
+
81
101
  [system]
82
102
  author_github = "hyacinthus"
83
103
  author_wallet = "0x445750026A4a1906b61302442E085f9cbAfe206a"
@@ -98,10 +118,26 @@ author_wallet = "0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0"
98
118
  author_github = "yornfifty"
99
119
  author_wallet = "0xF60D4B6780D5D51827602D7aC319458bc9e921F4"
100
120
 
121
+ [x402]
122
+ author_github = "hyacinthus"
123
+ author_wallet = "0x445750026A4a1906b61302442E085f9cbAfe206a"
124
+
101
125
  [portfolio]
102
126
  author_github = "bluntbrain"
103
127
  author_wallet = "0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0"
104
128
 
129
+ [pyth]
130
+ author_github = "hyacinthus"
131
+ author_wallet = "0x445750026A4a1906b61302442E085f9cbAfe206a"
132
+
105
133
  [token]
106
134
  author_github = "bluntbrain"
107
135
  author_wallet = "0x3cdd051eeC909f94965F9c1c657f5b70a172B2C0"
136
+
137
+ [weth]
138
+ author_github = "hyacinthus"
139
+ author_wallet = "0x445750026A4a1906b61302442E085f9cbAfe206a"
140
+
141
+ [wow]
142
+ author_github = "hyacinthus"
143
+ author_wallet = "0x445750026A4a1906b61302442E085f9cbAfe206a"
@@ -3,7 +3,6 @@
3
3
  import logging
4
4
  from typing import TypedDict
5
5
 
6
- from intentkit.abstracts.skill import SkillStoreABC
7
6
  from intentkit.skills.base import SkillConfig, SkillState
8
7
  from intentkit.skills.slack.base import SlackBaseTool
9
8
  from intentkit.skills.slack.get_channel import SlackGetChannel
@@ -34,7 +33,6 @@ class Config(SkillConfig):
34
33
  async def get_skills(
35
34
  config: "Config",
36
35
  is_private: bool,
37
- store: SkillStoreABC,
38
36
  **_,
39
37
  ) -> list[SlackBaseTool]:
40
38
  """Get all Slack skills."""
@@ -50,7 +48,7 @@ async def get_skills(
50
48
  # Get each skill using the cached getter
51
49
  result = []
52
50
  for name in available_skills:
53
- skill = get_slack_skill(name, store)
51
+ skill = get_slack_skill(name)
54
52
  if skill:
55
53
  result.append(skill)
56
54
  return result
@@ -58,40 +56,30 @@ async def get_skills(
58
56
 
59
57
  def get_slack_skill(
60
58
  name: str,
61
- store: SkillStoreABC,
62
59
  ) -> SlackBaseTool:
63
60
  """Get a Slack skill by name.
64
61
 
65
62
  Args:
66
63
  name: The name of the skill to get
67
- store: The skill store for persisting data
68
64
 
69
65
  Returns:
70
66
  The requested Slack skill
71
67
  """
72
68
  if name == "get_channel":
73
69
  if name not in _cache:
74
- _cache[name] = SlackGetChannel(
75
- skill_store=store,
76
- )
70
+ _cache[name] = SlackGetChannel()
77
71
  return _cache[name]
78
72
  elif name == "get_message":
79
73
  if name not in _cache:
80
- _cache[name] = SlackGetMessage(
81
- skill_store=store,
82
- )
74
+ _cache[name] = SlackGetMessage()
83
75
  return _cache[name]
84
76
  elif name == "schedule_message":
85
77
  if name not in _cache:
86
- _cache[name] = SlackScheduleMessage(
87
- skill_store=store,
88
- )
78
+ _cache[name] = SlackScheduleMessage()
89
79
  return _cache[name]
90
80
  elif name == "send_message":
91
81
  if name not in _cache:
92
- _cache[name] = SlackSendMessage(
93
- skill_store=store,
94
- )
82
+ _cache[name] = SlackSendMessage()
95
83
  return _cache[name]
96
84
  else:
97
85
  logger.warning(f"Unknown Slack skill: {name}")
@@ -1,10 +1,7 @@
1
- from typing import Optional, Type
2
-
3
- from langchain.tools.base import ToolException
1
+ from langchain_core.tools.base import ToolException
4
2
  from pydantic import BaseModel, Field
5
3
  from slack_sdk import WebClient
6
4
 
7
- from intentkit.abstracts.skill import SkillStoreABC
8
5
  from intentkit.skills.base import IntentKitSkill
9
6
 
10
7
 
@@ -13,10 +10,7 @@ class SlackBaseTool(IntentKitSkill):
13
10
 
14
11
  name: str = Field(description="The name of the tool")
15
12
  description: str = Field(description="A description of what the tool does")
16
- args_schema: Type[BaseModel]
17
- skill_store: SkillStoreABC = Field(
18
- description="The skill store for persisting data"
19
- )
13
+ args_schema: type[BaseModel]
20
14
 
21
15
  def get_api_key(self) -> str:
22
16
  context = self.get_context()
@@ -70,4 +64,4 @@ class SlackMessage(BaseModel):
70
64
  text: str
71
65
  user: str
72
66
  channel: str
73
- thread_ts: Optional[str] = None
67
+ thread_ts: str | None = None
@@ -1,4 +1,4 @@
1
- from typing import Any, Dict, Optional, Type, Union
1
+ from typing import Any
2
2
 
3
3
  from pydantic import BaseModel, Field
4
4
 
@@ -8,11 +8,11 @@ from intentkit.skills.slack.base import SlackBaseTool, SlackChannel
8
8
  class SlackGetChannelSchema(BaseModel):
9
9
  """Input schema for SlackGetChannel."""
10
10
 
11
- channel_id: Optional[str] = Field(
11
+ channel_id: str | None = Field(
12
12
  None,
13
13
  description="The ID of the channel to get information about. Provide either channel_id or channel_name.",
14
14
  )
15
- channel_name: Optional[str] = Field(
15
+ channel_name: str | None = Field(
16
16
  None,
17
17
  description="The name of the channel to get information about. Provide either channel_id or channel_name.",
18
18
  )
@@ -23,14 +23,14 @@ class SlackGetChannel(SlackBaseTool):
23
23
 
24
24
  name: str = "slack_get_channel"
25
25
  description: str = "Get information about a Slack channel by ID or name"
26
- args_schema: Type[BaseModel] = SlackGetChannelSchema
26
+ args_schema: type[BaseModel] = SlackGetChannelSchema
27
27
 
28
28
  async def _arun(
29
29
  self,
30
- channel_id: Optional[str] = None,
31
- channel_name: Optional[str] = None,
30
+ channel_id: str | None = None,
31
+ channel_name: str | None = None,
32
32
  **kwargs,
33
- ) -> Union[SlackChannel, Dict[str, SlackChannel]]:
33
+ ) -> SlackChannel | dict[str, SlackChannel]:
34
34
  """Run the tool to get information about a Slack channel.
35
35
 
36
36
  Args:
@@ -88,7 +88,7 @@ class SlackGetChannel(SlackBaseTool):
88
88
  except Exception as e:
89
89
  raise Exception(f"Error getting channel information: {str(e)}")
90
90
 
91
- def _format_channel(self, channel: Dict[str, Any]) -> SlackChannel:
91
+ def _format_channel(self, channel: dict[str, Any]) -> SlackChannel:
92
92
  """Format the channel data into a SlackChannel model.
93
93
 
94
94
  Args:
@@ -1,4 +1,4 @@
1
- from typing import Any, Dict, Optional, Type
1
+ from typing import Any
2
2
 
3
3
  from pydantic import BaseModel, Field
4
4
 
@@ -11,15 +11,15 @@ class SlackGetMessageSchema(BaseModel):
11
11
  channel_id: str = Field(
12
12
  description="The ID of the channel containing the message",
13
13
  )
14
- ts: Optional[str] = Field(
14
+ ts: str | None = Field(
15
15
  None,
16
16
  description="The timestamp of a specific message to retrieve. If not provided, returns recent messages.",
17
17
  )
18
- thread_ts: Optional[str] = Field(
18
+ thread_ts: str | None = Field(
19
19
  None,
20
20
  description="If provided, retrieve messages from this thread instead of the channel.",
21
21
  )
22
- limit: Optional[int] = Field(
22
+ limit: int | None = Field(
23
23
  10,
24
24
  description="The maximum number of messages to return (1-100, default 10).",
25
25
  )
@@ -30,16 +30,16 @@ class SlackGetMessage(SlackBaseTool):
30
30
 
31
31
  name: str = "slack_get_message"
32
32
  description: str = "Get messages from a Slack channel or thread"
33
- args_schema: Type[BaseModel] = SlackGetMessageSchema
33
+ args_schema: type[BaseModel] = SlackGetMessageSchema
34
34
 
35
35
  async def _arun(
36
36
  self,
37
37
  channel_id: str,
38
- ts: Optional[str] = None,
39
- thread_ts: Optional[str] = None,
38
+ ts: str | None = None,
39
+ thread_ts: str | None = None,
40
40
  limit: int = 10,
41
41
  **kwargs,
42
- ) -> Dict[str, Any]:
42
+ ) -> dict[str, Any]:
43
43
  """Run the tool to get Slack messages.
44
44
 
45
45
  Args:
@@ -116,7 +116,7 @@ class SlackGetMessage(SlackBaseTool):
116
116
  except Exception as e:
117
117
  raise Exception(f"Error getting messages: {str(e)}")
118
118
 
119
- def _format_message(self, message: Dict[str, Any], channel_id: str) -> SlackMessage:
119
+ def _format_message(self, message: dict[str, Any], channel_id: str) -> SlackMessage:
120
120
  """Format the message data into a SlackMessage model.
121
121
 
122
122
  Args:
@@ -1,5 +1,5 @@
1
1
  from datetime import datetime
2
- from typing import Any, Dict, Optional, Type
2
+ from typing import Any
3
3
 
4
4
  from pydantic import BaseModel, Field
5
5
 
@@ -18,7 +18,7 @@ class SlackScheduleMessageSchema(BaseModel):
18
18
  post_at: str = Field(
19
19
  description="The time to send the message in ISO format (e.g., '2023-12-25T10:00:00Z')",
20
20
  )
21
- thread_ts: Optional[str] = Field(
21
+ thread_ts: str | None = Field(
22
22
  None,
23
23
  description="The timestamp of the thread to reply to, if sending a thread reply",
24
24
  )
@@ -29,16 +29,16 @@ class SlackScheduleMessage(SlackBaseTool):
29
29
 
30
30
  name: str = "slack_schedule_message"
31
31
  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"
32
- args_schema: Type[BaseModel] = SlackScheduleMessageSchema
32
+ args_schema: type[BaseModel] = SlackScheduleMessageSchema
33
33
 
34
34
  async def _arun(
35
35
  self,
36
36
  channel_id: str,
37
37
  text: str,
38
38
  post_at: str,
39
- thread_ts: Optional[str] = None,
39
+ thread_ts: str | None = None,
40
40
  **kwargs,
41
- ) -> Dict[str, Any]:
41
+ ) -> dict[str, Any]:
42
42
  """Run the tool to schedule a Slack message.
43
43
 
44
44
  Args:
@@ -5,7 +5,7 @@
5
5
  "description": "Integration with Slack API enabling workspace communication including channel management, message retrieval, and posting capabilities for team collaboration",
6
6
  "x-icon": "https://ai.service.crestal.dev/skills/slack/slack.jpg",
7
7
  "x-tags": [
8
- "Social"
8
+ "Communication"
9
9
  ],
10
10
  "properties": {
11
11
  "enabled": {
@@ -132,4 +132,4 @@
132
132
  }
133
133
  },
134
134
  "additionalProperties": true
135
- }
135
+ }
@@ -1,5 +1,3 @@
1
- from typing import Optional, Type
2
-
3
1
  from pydantic import BaseModel, Field
4
2
 
5
3
  from intentkit.skills.slack.base import SlackBaseTool, SlackMessage
@@ -14,7 +12,7 @@ class SlackSendMessageSchema(BaseModel):
14
12
  text: str = Field(
15
13
  description="The text content of the message to send",
16
14
  )
17
- thread_ts: Optional[str] = Field(
15
+ thread_ts: str | None = Field(
18
16
  None,
19
17
  description="The timestamp of the thread to reply to, if sending a thread reply",
20
18
  )
@@ -25,13 +23,13 @@ class SlackSendMessage(SlackBaseTool):
25
23
 
26
24
  name: str = "slack_send_message"
27
25
  description: str = "Send a message to a Slack channel or thread"
28
- args_schema: Type[BaseModel] = SlackSendMessageSchema
26
+ args_schema: type[BaseModel] = SlackSendMessageSchema
29
27
 
30
28
  async def _arun(
31
29
  self,
32
30
  channel_id: str,
33
31
  text: str,
34
- thread_ts: Optional[str] = None,
32
+ thread_ts: str | None = None,
35
33
  **kwargs,
36
34
  ) -> SlackMessage:
37
35
  """Run the tool to send a Slack message.
@@ -3,7 +3,6 @@
3
3
  import logging
4
4
  from typing import NotRequired, TypedDict
5
5
 
6
- from intentkit.abstracts.skill import SkillStoreABC
7
6
  from intentkit.skills.base import SkillConfig, SkillState
8
7
  from intentkit.skills.supabase.base import SupabaseBaseTool
9
8
  from intentkit.skills.supabase.delete_data import SupabaseDeleteData
@@ -41,7 +40,6 @@ class Config(SkillConfig):
41
40
  async def get_skills(
42
41
  config: "Config",
43
42
  is_private: bool,
44
- store: SkillStoreABC,
45
43
  **_,
46
44
  ) -> list[SupabaseBaseTool]:
47
45
  """Get all Supabase skills."""
@@ -57,7 +55,7 @@ async def get_skills(
57
55
  # Get each skill using the cached getter
58
56
  result = []
59
57
  for name in available_skills:
60
- skill = get_supabase_skill(name, store)
58
+ skill = get_supabase_skill(name)
61
59
  if skill:
62
60
  result.append(skill)
63
61
  return result
@@ -65,52 +63,38 @@ async def get_skills(
65
63
 
66
64
  def get_supabase_skill(
67
65
  name: str,
68
- store: SkillStoreABC,
69
66
  ) -> SupabaseBaseTool:
70
67
  """Get a Supabase skill by name.
71
68
 
72
69
  Args:
73
70
  name: The name of the skill to get
74
- store: The skill store for persisting data
75
71
 
76
72
  Returns:
77
73
  The requested Supabase skill
78
74
  """
79
75
  if name == "fetch_data":
80
76
  if name not in _cache:
81
- _cache[name] = SupabaseFetchData(
82
- skill_store=store,
83
- )
77
+ _cache[name] = SupabaseFetchData()
84
78
  return _cache[name]
85
79
  elif name == "insert_data":
86
80
  if name not in _cache:
87
- _cache[name] = SupabaseInsertData(
88
- skill_store=store,
89
- )
81
+ _cache[name] = SupabaseInsertData()
90
82
  return _cache[name]
91
83
  elif name == "update_data":
92
84
  if name not in _cache:
93
- _cache[name] = SupabaseUpdateData(
94
- skill_store=store,
95
- )
85
+ _cache[name] = SupabaseUpdateData()
96
86
  return _cache[name]
97
87
  elif name == "upsert_data":
98
88
  if name not in _cache:
99
- _cache[name] = SupabaseUpsertData(
100
- skill_store=store,
101
- )
89
+ _cache[name] = SupabaseUpsertData()
102
90
  return _cache[name]
103
91
  elif name == "delete_data":
104
92
  if name not in _cache:
105
- _cache[name] = SupabaseDeleteData(
106
- skill_store=store,
107
- )
93
+ _cache[name] = SupabaseDeleteData()
108
94
  return _cache[name]
109
95
  elif name == "invoke_function":
110
96
  if name not in _cache:
111
- _cache[name] = SupabaseInvokeFunction(
112
- skill_store=store,
113
- )
97
+ _cache[name] = SupabaseInvokeFunction()
114
98
  return _cache[name]
115
99
  else:
116
100
  logger.warning(f"Unknown Supabase skill: {name}")