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,10 +1,7 @@
1
- from typing import Type
2
-
3
1
  from langchain_core.tools import ToolException
4
2
  from pydantic import BaseModel, Field
5
3
 
6
4
  from intentkit.abstracts.graph import AgentContext
7
- from intentkit.abstracts.skill import SkillStoreABC
8
5
  from intentkit.skills.base import IntentKitSkill
9
6
 
10
7
 
@@ -13,10 +10,7 @@ class SupabaseBaseTool(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
  @property
22
16
  def category(self) -> str:
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Any, Dict, Type
2
+ from typing import Any
3
3
 
4
4
  from langchain_core.tools import ToolException
5
5
  from pydantic import BaseModel, Field
@@ -17,7 +17,7 @@ class SupabaseDeleteDataInput(BaseModel):
17
17
  """Input for SupabaseDeleteData tool."""
18
18
 
19
19
  table: str = Field(description="The name of the table to delete data from")
20
- filters: Dict[str, Any] = Field(
20
+ filters: dict[str, Any] = Field(
21
21
  description="Dictionary of filters to identify which records to delete (e.g., {'id': 123})"
22
22
  )
23
23
  returning: str = Field(
@@ -34,12 +34,12 @@ class SupabaseDeleteData(SupabaseBaseTool):
34
34
 
35
35
  name: str = NAME
36
36
  description: str = PROMPT
37
- args_schema: Type[BaseModel] = SupabaseDeleteDataInput
37
+ args_schema: type[BaseModel] = SupabaseDeleteDataInput
38
38
 
39
39
  async def _arun(
40
40
  self,
41
41
  table: str,
42
- filters: Dict[str, Any],
42
+ filters: dict[str, Any],
43
43
  returning: str = "*",
44
44
  **kwargs,
45
45
  ):
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Any, Dict, Optional, Type
2
+ from typing import Any
3
3
 
4
4
  from langchain_core.tools import ToolException
5
5
  from pydantic import BaseModel, Field
@@ -17,22 +17,22 @@ class SupabaseFetchDataInput(BaseModel):
17
17
  """Input for SupabaseFetchData tool."""
18
18
 
19
19
  table: str = Field(description="The name of the table to fetch data from")
20
- columns: Optional[str] = Field(
20
+ columns: str | None = Field(
21
21
  default="*",
22
22
  description="Comma-separated list of columns to select (default: '*' for all)",
23
23
  )
24
- filters: Optional[Dict[str, Any]] = Field(
24
+ filters: dict[str, Any] | None = Field(
25
25
  default=None,
26
26
  description="Dictionary of filters to apply (e.g., {'column': 'value', 'age': {'gte': 18}})",
27
27
  )
28
- order_by: Optional[str] = Field(default=None, description="Column to order by")
28
+ order_by: str | None = Field(default=None, description="Column to order by")
29
29
  ascending: bool = Field(
30
30
  default=True, description="Whether to order in ascending order (default: True)"
31
31
  )
32
- limit: Optional[int] = Field(
32
+ limit: int | None = Field(
33
33
  default=None, description="Maximum number of records to return"
34
34
  )
35
- offset: Optional[int] = Field(
35
+ offset: int | None = Field(
36
36
  default=None, description="Number of records to skip for pagination"
37
37
  )
38
38
 
@@ -45,17 +45,17 @@ class SupabaseFetchData(SupabaseBaseTool):
45
45
 
46
46
  name: str = NAME
47
47
  description: str = PROMPT
48
- args_schema: Type[BaseModel] = SupabaseFetchDataInput
48
+ args_schema: type[BaseModel] = SupabaseFetchDataInput
49
49
 
50
50
  async def _arun(
51
51
  self,
52
52
  table: str,
53
- columns: Optional[str] = "*",
54
- filters: Optional[Dict[str, Any]] = None,
55
- order_by: Optional[str] = None,
53
+ columns: str | None = "*",
54
+ filters: dict[str, Any] | None = None,
55
+ order_by: str | None = None,
56
56
  ascending: bool = True,
57
- limit: Optional[int] = None,
58
- offset: Optional[int] = None,
57
+ limit: int | None = None,
58
+ offset: int | None = None,
59
59
  **kwargs,
60
60
  ):
61
61
  try:
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Any, Dict, List, Type, Union
2
+ from typing import Any
3
3
 
4
4
  from langchain_core.tools import ToolException
5
5
  from pydantic import BaseModel, Field
@@ -17,7 +17,7 @@ class SupabaseInsertDataInput(BaseModel):
17
17
  """Input for SupabaseInsertData tool."""
18
18
 
19
19
  table: str = Field(description="The name of the table to insert data into")
20
- data: Union[Dict[str, Any], List[Dict[str, Any]]] = Field(
20
+ data: dict[str, Any] | list[dict[str, Any]] = Field(
21
21
  description="The data to insert. Can be a single object or a list of objects"
22
22
  )
23
23
  returning: str = Field(
@@ -34,12 +34,12 @@ class SupabaseInsertData(SupabaseBaseTool):
34
34
 
35
35
  name: str = NAME
36
36
  description: str = PROMPT
37
- args_schema: Type[BaseModel] = SupabaseInsertDataInput
37
+ args_schema: type[BaseModel] = SupabaseInsertDataInput
38
38
 
39
39
  async def _arun(
40
40
  self,
41
41
  table: str,
42
- data: Union[Dict[str, Any], List[Dict[str, Any]]],
42
+ data: dict[str, Any] | list[dict[str, Any]],
43
43
  returning: str = "*",
44
44
  **kwargs,
45
45
  ):
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Any, Dict, Optional, Type
2
+ from typing import Any
3
3
 
4
4
  from langchain_core.tools import ToolException
5
5
  from pydantic import BaseModel, Field
@@ -17,10 +17,10 @@ class SupabaseInvokeFunctionInput(BaseModel):
17
17
  """Input for SupabaseInvokeFunction tool."""
18
18
 
19
19
  function_name: str = Field(description="The name of the Edge Function to invoke")
20
- parameters: Optional[Dict[str, Any]] = Field(
20
+ parameters: dict[str, Any] | None = Field(
21
21
  default=None, description="Optional parameters to pass to the function"
22
22
  )
23
- headers: Optional[Dict[str, str]] = Field(
23
+ headers: dict[str, str] | None = Field(
24
24
  default=None, description="Optional headers to include in the request"
25
25
  )
26
26
 
@@ -33,13 +33,13 @@ class SupabaseInvokeFunction(SupabaseBaseTool):
33
33
 
34
34
  name: str = NAME
35
35
  description: str = PROMPT
36
- args_schema: Type[BaseModel] = SupabaseInvokeFunctionInput
36
+ args_schema: type[BaseModel] = SupabaseInvokeFunctionInput
37
37
 
38
38
  async def _arun(
39
39
  self,
40
40
  function_name: str,
41
- parameters: Optional[Dict[str, Any]] = None,
42
- headers: Optional[Dict[str, str]] = None,
41
+ parameters: dict[str, Any] | None = None,
42
+ headers: dict[str, str] | None = None,
43
43
  **kwargs,
44
44
  ):
45
45
  try:
@@ -5,8 +5,7 @@
5
5
  "description": "Integration with Supabase backend-as-a-service platform enabling database operations and Edge Function invocations",
6
6
  "x-icon": "https://ai.service.crestal.dev/skills/supabase/supabase.svg",
7
7
  "x-tags": [
8
- "Database",
9
- "Backend"
8
+ "Infrastructure"
10
9
  ],
11
10
  "properties": {
12
11
  "enabled": {
@@ -173,4 +172,4 @@
173
172
  "supabase_key"
174
173
  ]
175
174
  }
176
- }
175
+ }
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Any, Dict, Type
2
+ from typing import Any
3
3
 
4
4
  from langchain_core.tools import ToolException
5
5
  from pydantic import BaseModel, Field
@@ -17,10 +17,10 @@ class SupabaseUpdateDataInput(BaseModel):
17
17
  """Input for SupabaseUpdateData tool."""
18
18
 
19
19
  table: str = Field(description="The name of the table to update data in")
20
- data: Dict[str, Any] = Field(
20
+ data: dict[str, Any] = Field(
21
21
  description="The data to update (key-value pairs of columns and new values)"
22
22
  )
23
- filters: Dict[str, Any] = Field(
23
+ filters: dict[str, Any] = Field(
24
24
  description="Dictionary of filters to identify which records to update (e.g., {'id': 123})"
25
25
  )
26
26
  returning: str = Field(
@@ -36,13 +36,13 @@ class SupabaseUpdateData(SupabaseBaseTool):
36
36
 
37
37
  name: str = NAME
38
38
  description: str = PROMPT
39
- args_schema: Type[BaseModel] = SupabaseUpdateDataInput
39
+ args_schema: type[BaseModel] = SupabaseUpdateDataInput
40
40
 
41
41
  async def _arun(
42
42
  self,
43
43
  table: str,
44
- data: Dict[str, Any],
45
- filters: Dict[str, Any],
44
+ data: dict[str, Any],
45
+ filters: dict[str, Any],
46
46
  returning: str = "*",
47
47
  **kwargs,
48
48
  ):
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Any, Dict, List, Type, Union
2
+ from typing import Any
3
3
 
4
4
  from langchain_core.tools import ToolException
5
5
  from pydantic import BaseModel, Field
@@ -19,7 +19,7 @@ class SupabaseUpsertDataInput(BaseModel):
19
19
  """Input for SupabaseUpsertData tool."""
20
20
 
21
21
  table: str = Field(description="The name of the table to upsert data into")
22
- data: Union[Dict[str, Any], List[Dict[str, Any]]] = Field(
22
+ data: dict[str, Any] | list[dict[str, Any]] = Field(
23
23
  description="The data to upsert. Can be a single object or a list of objects"
24
24
  )
25
25
  on_conflict: str = Field(
@@ -38,12 +38,12 @@ class SupabaseUpsertData(SupabaseBaseTool):
38
38
 
39
39
  name: str = NAME
40
40
  description: str = PROMPT
41
- args_schema: Type[BaseModel] = SupabaseUpsertDataInput
41
+ args_schema: type[BaseModel] = SupabaseUpsertDataInput
42
42
 
43
43
  async def _arun(
44
44
  self,
45
45
  table: str,
46
- data: Union[Dict[str, Any], List[Dict[str, Any]]],
46
+ data: dict[str, Any] | list[dict[str, Any]],
47
47
  on_conflict: str,
48
48
  returning: str = "*",
49
49
  **kwargs,
@@ -0,0 +1,53 @@
1
+ """Superfluid AgentKit skills."""
2
+
3
+ from typing import TypedDict
4
+
5
+ from coinbase_agentkit import superfluid_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.superfluid.base import SuperfluidBaseTool
15
+
16
+
17
+ class SkillStates(TypedDict):
18
+ SuperfluidActionProvider_create_flow: SkillState
19
+ SuperfluidActionProvider_delete_flow: SkillState
20
+ SuperfluidActionProvider_update_flow: SkillState
21
+
22
+
23
+ class Config(SkillConfig):
24
+ """Configuration for Superfluid skills."""
25
+
26
+ states: SkillStates
27
+
28
+
29
+ async def get_skills(
30
+ config: Config,
31
+ is_private: bool,
32
+ agent_id: str,
33
+ agent: Agent | None = None,
34
+ **_,
35
+ ) -> list[SuperfluidBaseTool]:
36
+ """Get all Superfluid skills."""
37
+
38
+ available_skills: list[str] = []
39
+ for skill_name, state in config["states"].items():
40
+ if state == "disabled":
41
+ continue
42
+ if state == "public" or (state == "private" and is_private):
43
+ available_skills.append(skill_name)
44
+
45
+ actions = await get_agentkit_actions(
46
+ agent_id, [superfluid_action_provider], agent=agent
47
+ )
48
+ tools: list[SuperfluidBaseTool] = []
49
+ for skill in available_skills:
50
+ for action in actions:
51
+ if action.name.endswith(skill):
52
+ tools.append(action_to_structured_tool(action))
53
+ return tools
@@ -0,0 +1,11 @@
1
+ """Superfluid AgentKit skills base class."""
2
+
3
+ from intentkit.skills.cdp.base import CDPBaseTool
4
+
5
+
6
+ class SuperfluidBaseTool(CDPBaseTool):
7
+ """Base class for Superfluid tools."""
8
+
9
+ @property
10
+ def category(self) -> str:
11
+ return "superfluid"
@@ -0,0 +1,89 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "title": "Superfluid",
5
+ "description": "Superfluid streaming actions via Coinbase AgentKit",
6
+ "x-icon": "https://ai.service.crestal.dev/skills/superfluid/superfluid.svg",
7
+ "x-tags": [
8
+ "DeFi"
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
+ "SuperfluidActionProvider_create_flow": {
21
+ "type": "string",
22
+ "title": "Create Flow",
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 for SuperfluidActionProvider_create_flow",
34
+ "default": "disabled"
35
+ },
36
+ "SuperfluidActionProvider_delete_flow": {
37
+ "type": "string",
38
+ "title": "Delete Flow",
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 for SuperfluidActionProvider_delete_flow",
50
+ "default": "disabled"
51
+ },
52
+ "SuperfluidActionProvider_update_flow": {
53
+ "type": "string",
54
+ "title": "Update Flow",
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 for SuperfluidActionProvider_update_flow",
66
+ "default": "disabled"
67
+ }
68
+ },
69
+ "description": "States for each Superfluid skill (disabled, public, or private)"
70
+ },
71
+ "api_key_provider": {
72
+ "type": "string",
73
+ "title": "API Key Provider",
74
+ "description": "Who provides the API key",
75
+ "enum": [
76
+ "platform"
77
+ ],
78
+ "x-enum-title": [
79
+ "Nation Hosted"
80
+ ],
81
+ "default": "platform"
82
+ }
83
+ },
84
+ "required": [
85
+ "states",
86
+ "enabled"
87
+ ],
88
+ "additionalProperties": true
89
+ }
@@ -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="#0f172a" rx="16" />
3
+ <path d="M32 72c0-18 14-32 32-32s32 14 32 32" fill="none" stroke="#38bdf8" stroke-width="10" stroke-linecap="round" />
4
+ <path d="M32 72c0 18 14 32 32 32s32-14 32-32" fill="none" stroke="#22d3ee" stroke-width="10" stroke-linecap="round" />
5
+ <circle cx="64" cy="72" r="12" fill="#f8fafc" />
6
+ </svg>
@@ -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, SkillOwnerState
8
7
  from intentkit.skills.system.add_autonomous_task import AddAutonomousTask
9
8
  from intentkit.skills.system.base import SystemBaseTool
@@ -37,7 +36,6 @@ class Config(SkillConfig):
37
36
  async def get_skills(
38
37
  config: "Config",
39
38
  is_private: bool,
40
- store: SkillStoreABC,
41
39
  **_,
42
40
  ) -> list[SystemBaseTool]:
43
41
  """Get all system skills.
@@ -45,7 +43,6 @@ async def get_skills(
45
43
  Args:
46
44
  config: The configuration for system skills.
47
45
  is_private: Whether to include private skills.
48
- store: The skill store for persisting data.
49
46
 
50
47
  Returns:
51
48
  A list of system skills.
@@ -62,7 +59,7 @@ async def get_skills(
62
59
  # Get each skill using the cached getter
63
60
  result = []
64
61
  for name in available_skills:
65
- skill = get_system_skill(name, store)
62
+ skill = get_system_skill(name)
66
63
  if skill:
67
64
  result.append(skill)
68
65
  return result
@@ -70,52 +67,38 @@ async def get_skills(
70
67
 
71
68
  def get_system_skill(
72
69
  name: str,
73
- store: SkillStoreABC,
74
70
  ) -> SystemBaseTool:
75
71
  """Get a system skill by name.
76
72
 
77
73
  Args:
78
74
  name: The name of the skill to get
79
- store: The skill store for persisting data
80
75
 
81
76
  Returns:
82
77
  The requested system skill
83
78
  """
84
79
  if name == "read_agent_api_key":
85
80
  if name not in _cache:
86
- _cache[name] = ReadAgentApiKey(
87
- skill_store=store,
88
- )
81
+ _cache[name] = ReadAgentApiKey()
89
82
  return _cache[name]
90
83
  elif name == "regenerate_agent_api_key":
91
84
  if name not in _cache:
92
- _cache[name] = RegenerateAgentApiKey(
93
- skill_store=store,
94
- )
85
+ _cache[name] = RegenerateAgentApiKey()
95
86
  return _cache[name]
96
87
  elif name == "list_autonomous_tasks":
97
88
  if name not in _cache:
98
- _cache[name] = ListAutonomousTasks(
99
- skill_store=store,
100
- )
89
+ _cache[name] = ListAutonomousTasks()
101
90
  return _cache[name]
102
91
  elif name == "add_autonomous_task":
103
92
  if name not in _cache:
104
- _cache[name] = AddAutonomousTask(
105
- skill_store=store,
106
- )
93
+ _cache[name] = AddAutonomousTask()
107
94
  return _cache[name]
108
95
  elif name == "delete_autonomous_task":
109
96
  if name not in _cache:
110
- _cache[name] = DeleteAutonomousTask(
111
- skill_store=store,
112
- )
97
+ _cache[name] = DeleteAutonomousTask()
113
98
  return _cache[name]
114
99
  elif name == "edit_autonomous_task":
115
100
  if name not in _cache:
116
- _cache[name] = EditAutonomousTask(
117
- skill_store=store,
118
- )
101
+ _cache[name] = EditAutonomousTask()
119
102
  return _cache[name]
120
103
  else:
121
104
  logger.warning(f"Unknown system skill: {name}")
@@ -1,5 +1,3 @@
1
- from typing import Optional
2
-
3
1
  from pydantic import BaseModel, Field
4
2
 
5
3
  from intentkit.models.agent import AgentAutonomous
@@ -9,21 +7,21 @@ from intentkit.skills.system.base import SystemBaseTool
9
7
  class AddAutonomousTaskInput(BaseModel):
10
8
  """Input model for add_autonomous_task skill."""
11
9
 
12
- name: Optional[str] = Field(
10
+ name: str | None = Field(
13
11
  default=None,
14
12
  description="Display name of the autonomous task configuration",
15
13
  max_length=50,
16
14
  )
17
- description: Optional[str] = Field(
15
+ description: str | None = Field(
18
16
  default=None,
19
17
  description="Description of the autonomous task configuration",
20
18
  max_length=200,
21
19
  )
22
- minutes: Optional[int] = Field(
20
+ minutes: int | None = Field(
23
21
  default=None,
24
22
  description="Interval in minutes between operations, mutually exclusive with cron",
25
23
  )
26
- cron: Optional[str] = Field(
24
+ cron: str | None = Field(
27
25
  default=None,
28
26
  description="Cron expression for scheduling operations, mutually exclusive with minutes",
29
27
  )
@@ -54,10 +52,10 @@ class AddAutonomousTask(SystemBaseTool):
54
52
 
55
53
  async def _arun(
56
54
  self,
57
- name: Optional[str] = None,
58
- description: Optional[str] = None,
59
- minutes: Optional[int] = None,
60
- cron: Optional[str] = None,
55
+ name: str | None = None,
56
+ description: str | None = None,
57
+ minutes: int | None = None,
58
+ cron: str | None = None,
61
59
  prompt: str = "",
62
60
  **kwargs,
63
61
  ) -> AddAutonomousTaskOutput:
@@ -75,7 +73,7 @@ class AddAutonomousTask(SystemBaseTool):
75
73
  AddAutonomousTaskOutput: The created task
76
74
  """
77
75
  context = self.get_context()
78
- agent_id = context.agent_id
76
+ agent = context.agent
79
77
 
80
78
  task = AgentAutonomous(
81
79
  name=name,
@@ -86,6 +84,6 @@ class AddAutonomousTask(SystemBaseTool):
86
84
  enabled=True,
87
85
  )
88
86
 
89
- created_task = await self.skill_store.add_autonomous_task(agent_id, task)
87
+ created_task = await agent.add_autonomous_task(task)
90
88
 
91
89
  return AddAutonomousTaskOutput(task=created_task)
@@ -45,9 +45,9 @@ class DeleteAutonomousTask(SystemBaseTool):
45
45
  DeleteAutonomousTaskOutput: Confirmation of deletion
46
46
  """
47
47
  context = self.get_context()
48
- agent_id = context.agent_id
48
+ agent = context.agent
49
49
 
50
- await self.skill_store.delete_autonomous_task(agent_id, task_id)
50
+ await agent.delete_autonomous_task(task_id)
51
51
 
52
52
  return DeleteAutonomousTaskOutput(
53
53
  success=True, message=f"Successfully deleted autonomous task {task_id}"
@@ -1,5 +1,3 @@
1
- from typing import Optional
2
-
3
1
  from pydantic import BaseModel, Field
4
2
 
5
3
  from intentkit.models.agent import AgentAutonomous
@@ -12,28 +10,28 @@ class EditAutonomousTaskInput(BaseModel):
12
10
  task_id: str = Field(
13
11
  description="The unique identifier of the autonomous task to edit"
14
12
  )
15
- name: Optional[str] = Field(
13
+ name: str | None = Field(
16
14
  default=None,
17
15
  description="Display name of the autonomous task configuration",
18
16
  max_length=50,
19
17
  )
20
- description: Optional[str] = Field(
18
+ description: str | None = Field(
21
19
  default=None,
22
20
  description="Description of the autonomous task configuration",
23
21
  max_length=200,
24
22
  )
25
- minutes: Optional[int] = Field(
23
+ minutes: int | None = Field(
26
24
  default=None,
27
25
  description="Interval in minutes between operations, mutually exclusive with cron",
28
26
  )
29
- cron: Optional[str] = Field(
27
+ cron: str | None = Field(
30
28
  default=None,
31
29
  description="Cron expression for scheduling operations, mutually exclusive with minutes",
32
30
  )
33
- prompt: Optional[str] = Field(
31
+ prompt: str | None = Field(
34
32
  default=None, description="Special prompt used during autonomous operation"
35
33
  )
36
- enabled: Optional[bool] = Field(
34
+ enabled: bool | None = Field(
37
35
  default=None, description="Whether the autonomous task is enabled"
38
36
  )
39
37
 
@@ -61,12 +59,12 @@ class EditAutonomousTask(SystemBaseTool):
61
59
  async def _arun(
62
60
  self,
63
61
  task_id: str,
64
- name: Optional[str] = None,
65
- description: Optional[str] = None,
66
- minutes: Optional[int] = None,
67
- cron: Optional[str] = None,
68
- prompt: Optional[str] = None,
69
- enabled: Optional[bool] = None,
62
+ name: str | None = None,
63
+ description: str | None = None,
64
+ minutes: int | None = None,
65
+ cron: str | None = None,
66
+ prompt: str | None = None,
67
+ enabled: bool | None = None,
70
68
  **kwargs,
71
69
  ) -> EditAutonomousTaskOutput:
72
70
  """Edit an autonomous task for the agent.
@@ -85,7 +83,7 @@ class EditAutonomousTask(SystemBaseTool):
85
83
  EditAutonomousTaskOutput: The updated task
86
84
  """
87
85
  context = self.get_context()
88
- agent_id = context.agent_id
86
+ agent = context.agent
89
87
 
90
88
  if minutes is not None and cron is not None:
91
89
  raise ValueError("minutes and cron are mutually exclusive")
@@ -107,8 +105,6 @@ class EditAutonomousTask(SystemBaseTool):
107
105
  if enabled is not None:
108
106
  task_updates["enabled"] = enabled
109
107
 
110
- updated_task = await self.skill_store.update_autonomous_task(
111
- agent_id, task_id, task_updates
112
- )
108
+ updated_task = await agent.update_autonomous_task(task_id, task_updates)
113
109
 
114
110
  return EditAutonomousTaskOutput(task=updated_task)