intentkit 0.6.13.dev2__py3-none-any.whl → 0.8.17__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 (385) hide show
  1. intentkit/__init__.py +1 -1
  2. intentkit/abstracts/agent.py +4 -5
  3. intentkit/abstracts/engine.py +5 -5
  4. intentkit/abstracts/graph.py +14 -7
  5. intentkit/abstracts/skill.py +6 -144
  6. intentkit/abstracts/twitter.py +4 -5
  7. intentkit/clients/__init__.py +5 -2
  8. intentkit/clients/cdp.py +101 -141
  9. intentkit/clients/twitter.py +83 -62
  10. intentkit/clients/web3.py +29 -0
  11. intentkit/config/config.py +8 -5
  12. intentkit/core/agent.py +472 -195
  13. intentkit/core/asset.py +253 -0
  14. intentkit/core/chat.py +51 -0
  15. intentkit/core/client.py +1 -1
  16. intentkit/core/credit.py +460 -130
  17. intentkit/core/engine.py +262 -233
  18. intentkit/core/node.py +15 -16
  19. intentkit/core/prompt.py +62 -28
  20. intentkit/core/scheduler.py +92 -0
  21. intentkit/core/statistics.py +168 -0
  22. intentkit/models/agent.py +1096 -949
  23. intentkit/models/agent_data.py +68 -38
  24. intentkit/models/agent_public.json +98 -0
  25. intentkit/models/agent_schema.json +54 -439
  26. intentkit/models/app_setting.py +96 -33
  27. intentkit/models/chat.py +74 -27
  28. intentkit/models/conversation.py +8 -8
  29. intentkit/models/credit.py +362 -74
  30. intentkit/models/db.py +26 -8
  31. intentkit/models/db_mig.py +2 -2
  32. intentkit/models/llm.csv +28 -0
  33. intentkit/models/llm.py +185 -350
  34. intentkit/models/redis.py +6 -4
  35. intentkit/models/skill.py +186 -72
  36. intentkit/models/skills.csv +174 -0
  37. intentkit/models/user.py +82 -24
  38. intentkit/skills/acolyt/__init__.py +2 -9
  39. intentkit/skills/acolyt/ask.py +3 -4
  40. intentkit/skills/acolyt/base.py +4 -9
  41. intentkit/skills/acolyt/schema.json +4 -3
  42. intentkit/skills/aixbt/__init__.py +2 -13
  43. intentkit/skills/aixbt/base.py +1 -7
  44. intentkit/skills/aixbt/projects.py +14 -15
  45. intentkit/skills/aixbt/schema.json +4 -4
  46. intentkit/skills/allora/__init__.py +2 -9
  47. intentkit/skills/allora/base.py +4 -9
  48. intentkit/skills/allora/price.py +3 -4
  49. intentkit/skills/allora/schema.json +3 -2
  50. intentkit/skills/base.py +248 -85
  51. intentkit/skills/basename/__init__.py +51 -0
  52. intentkit/skills/basename/base.py +11 -0
  53. intentkit/skills/basename/basename.svg +11 -0
  54. intentkit/skills/basename/schema.json +58 -0
  55. intentkit/skills/carv/__init__.py +115 -121
  56. intentkit/skills/carv/base.py +184 -185
  57. intentkit/skills/carv/fetch_news.py +3 -3
  58. intentkit/skills/carv/onchain_query.py +4 -4
  59. intentkit/skills/carv/schema.json +134 -137
  60. intentkit/skills/carv/token_info_and_price.py +5 -5
  61. intentkit/skills/casino/README.md +254 -0
  62. intentkit/skills/casino/__init__.py +86 -0
  63. intentkit/skills/casino/base.py +17 -0
  64. intentkit/skills/casino/casino.png +0 -0
  65. intentkit/skills/casino/deck_draw.py +127 -0
  66. intentkit/skills/casino/deck_shuffle.py +118 -0
  67. intentkit/skills/casino/dice_roll.py +100 -0
  68. intentkit/skills/casino/schema.json +77 -0
  69. intentkit/skills/casino/utils.py +107 -0
  70. intentkit/skills/cdp/__init__.py +22 -84
  71. intentkit/skills/cdp/base.py +1 -7
  72. intentkit/skills/cdp/schema.json +11 -314
  73. intentkit/skills/chainlist/__init__.py +2 -7
  74. intentkit/skills/chainlist/base.py +1 -7
  75. intentkit/skills/chainlist/chain_lookup.py +18 -18
  76. intentkit/skills/chainlist/schema.json +3 -5
  77. intentkit/skills/common/__init__.py +2 -9
  78. intentkit/skills/common/base.py +1 -7
  79. intentkit/skills/common/current_time.py +1 -2
  80. intentkit/skills/common/schema.json +2 -2
  81. intentkit/skills/cookiefun/__init__.py +6 -9
  82. intentkit/skills/cookiefun/base.py +2 -7
  83. intentkit/skills/cookiefun/get_account_details.py +7 -7
  84. intentkit/skills/cookiefun/get_account_feed.py +19 -19
  85. intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
  86. intentkit/skills/cookiefun/get_sectors.py +3 -3
  87. intentkit/skills/cookiefun/schema.json +1 -3
  88. intentkit/skills/cookiefun/search_accounts.py +9 -9
  89. intentkit/skills/cryptocompare/__init__.py +7 -24
  90. intentkit/skills/cryptocompare/api.py +2 -3
  91. intentkit/skills/cryptocompare/base.py +11 -25
  92. intentkit/skills/cryptocompare/fetch_news.py +4 -5
  93. intentkit/skills/cryptocompare/fetch_price.py +6 -7
  94. intentkit/skills/cryptocompare/fetch_top_exchanges.py +4 -5
  95. intentkit/skills/cryptocompare/fetch_top_market_cap.py +4 -5
  96. intentkit/skills/cryptocompare/fetch_top_volume.py +4 -5
  97. intentkit/skills/cryptocompare/fetch_trading_signals.py +5 -6
  98. intentkit/skills/cryptocompare/schema.json +3 -3
  99. intentkit/skills/cryptopanic/__init__.py +7 -10
  100. intentkit/skills/cryptopanic/base.py +51 -55
  101. intentkit/skills/cryptopanic/fetch_crypto_news.py +4 -8
  102. intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +5 -7
  103. intentkit/skills/cryptopanic/schema.json +105 -103
  104. intentkit/skills/dapplooker/__init__.py +2 -9
  105. intentkit/skills/dapplooker/base.py +4 -9
  106. intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
  107. intentkit/skills/dapplooker/schema.json +3 -5
  108. intentkit/skills/defillama/__init__.py +24 -74
  109. intentkit/skills/defillama/api.py +6 -9
  110. intentkit/skills/defillama/base.py +11 -21
  111. intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +8 -10
  112. intentkit/skills/defillama/coins/fetch_block.py +6 -8
  113. intentkit/skills/defillama/coins/fetch_current_prices.py +8 -10
  114. intentkit/skills/defillama/coins/fetch_first_price.py +7 -9
  115. intentkit/skills/defillama/coins/fetch_historical_prices.py +9 -11
  116. intentkit/skills/defillama/coins/fetch_price_chart.py +9 -11
  117. intentkit/skills/defillama/coins/fetch_price_percentage.py +7 -9
  118. intentkit/skills/defillama/config/chains.py +1 -3
  119. intentkit/skills/defillama/fees/fetch_fees_overview.py +24 -26
  120. intentkit/skills/defillama/schema.json +5 -1
  121. intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +16 -18
  122. intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +8 -10
  123. intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +5 -7
  124. intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +7 -9
  125. intentkit/skills/defillama/tests/api_integration.test.py +1 -1
  126. intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +4 -6
  127. intentkit/skills/defillama/tvl/fetch_chains.py +9 -11
  128. intentkit/skills/defillama/tvl/fetch_historical_tvl.py +4 -6
  129. intentkit/skills/defillama/tvl/fetch_protocol.py +32 -38
  130. intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +3 -5
  131. intentkit/skills/defillama/tvl/fetch_protocols.py +37 -45
  132. intentkit/skills/defillama/volumes/fetch_dex_overview.py +42 -48
  133. intentkit/skills/defillama/volumes/fetch_dex_summary.py +35 -37
  134. intentkit/skills/defillama/volumes/fetch_options_overview.py +24 -28
  135. intentkit/skills/defillama/yields/fetch_pool_chart.py +10 -12
  136. intentkit/skills/defillama/yields/fetch_pools.py +26 -30
  137. intentkit/skills/dexscreener/README.md +154 -0
  138. intentkit/skills/dexscreener/__init__.py +97 -93
  139. intentkit/skills/dexscreener/base.py +125 -133
  140. intentkit/skills/dexscreener/get_pair_info.py +158 -0
  141. intentkit/skills/dexscreener/get_token_pairs.py +165 -0
  142. intentkit/skills/dexscreener/get_tokens_info.py +212 -0
  143. intentkit/skills/dexscreener/model/search_token_response.py +80 -82
  144. intentkit/skills/dexscreener/schema.json +91 -48
  145. intentkit/skills/dexscreener/search_token.py +182 -321
  146. intentkit/skills/dexscreener/utils.py +420 -0
  147. intentkit/skills/dune_analytics/__init__.py +7 -9
  148. intentkit/skills/dune_analytics/base.py +48 -52
  149. intentkit/skills/dune_analytics/fetch_kol_buys.py +5 -7
  150. intentkit/skills/dune_analytics/fetch_nation_metrics.py +6 -8
  151. intentkit/skills/dune_analytics/schema.json +104 -99
  152. intentkit/skills/elfa/__init__.py +5 -18
  153. intentkit/skills/elfa/base.py +10 -14
  154. intentkit/skills/elfa/mention.py +19 -21
  155. intentkit/skills/elfa/schema.json +3 -2
  156. intentkit/skills/elfa/stats.py +4 -4
  157. intentkit/skills/elfa/tokens.py +12 -12
  158. intentkit/skills/elfa/utils.py +26 -28
  159. intentkit/skills/enso/__init__.py +11 -31
  160. intentkit/skills/enso/base.py +50 -35
  161. intentkit/skills/enso/best_yield.py +16 -24
  162. intentkit/skills/enso/networks.py +6 -11
  163. intentkit/skills/enso/prices.py +11 -13
  164. intentkit/skills/enso/route.py +34 -38
  165. intentkit/skills/enso/schema.json +3 -2
  166. intentkit/skills/enso/tokens.py +29 -38
  167. intentkit/skills/enso/wallet.py +76 -191
  168. intentkit/skills/erc20/__init__.py +50 -0
  169. intentkit/skills/erc20/base.py +11 -0
  170. intentkit/skills/erc20/erc20.svg +5 -0
  171. intentkit/skills/erc20/schema.json +74 -0
  172. intentkit/skills/erc721/__init__.py +53 -0
  173. intentkit/skills/erc721/base.py +11 -0
  174. intentkit/skills/erc721/erc721.svg +5 -0
  175. intentkit/skills/erc721/schema.json +90 -0
  176. intentkit/skills/firecrawl/README.md +11 -5
  177. intentkit/skills/firecrawl/__init__.py +5 -18
  178. intentkit/skills/firecrawl/base.py +4 -11
  179. intentkit/skills/firecrawl/clear.py +4 -8
  180. intentkit/skills/firecrawl/crawl.py +19 -19
  181. intentkit/skills/firecrawl/query.py +4 -3
  182. intentkit/skills/firecrawl/schema.json +6 -8
  183. intentkit/skills/firecrawl/scrape.py +150 -40
  184. intentkit/skills/firecrawl/utils.py +50 -42
  185. intentkit/skills/github/__init__.py +2 -7
  186. intentkit/skills/github/base.py +1 -7
  187. intentkit/skills/github/github_search.py +1 -2
  188. intentkit/skills/github/schema.json +3 -4
  189. intentkit/skills/heurist/__init__.py +8 -27
  190. intentkit/skills/heurist/base.py +4 -9
  191. intentkit/skills/heurist/image_generation_animagine_xl.py +12 -13
  192. intentkit/skills/heurist/image_generation_arthemy_comics.py +12 -13
  193. intentkit/skills/heurist/image_generation_arthemy_real.py +12 -13
  194. intentkit/skills/heurist/image_generation_braindance.py +12 -13
  195. intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +12 -13
  196. intentkit/skills/heurist/image_generation_flux_1_dev.py +12 -13
  197. intentkit/skills/heurist/image_generation_sdxl.py +12 -13
  198. intentkit/skills/heurist/schema.json +2 -2
  199. intentkit/skills/http/__init__.py +4 -15
  200. intentkit/skills/http/base.py +1 -7
  201. intentkit/skills/http/get.py +21 -16
  202. intentkit/skills/http/post.py +23 -18
  203. intentkit/skills/http/put.py +23 -18
  204. intentkit/skills/http/schema.json +4 -5
  205. intentkit/skills/lifi/__init__.py +8 -13
  206. intentkit/skills/lifi/base.py +1 -7
  207. intentkit/skills/lifi/schema.json +17 -8
  208. intentkit/skills/lifi/token_execute.py +36 -30
  209. intentkit/skills/lifi/token_quote.py +8 -10
  210. intentkit/skills/lifi/utils.py +104 -51
  211. intentkit/skills/moralis/__init__.py +6 -10
  212. intentkit/skills/moralis/api.py +6 -7
  213. intentkit/skills/moralis/base.py +5 -10
  214. intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
  215. intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
  216. intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
  217. intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
  218. intentkit/skills/moralis/schema.json +7 -2
  219. intentkit/skills/morpho/__init__.py +52 -0
  220. intentkit/skills/morpho/base.py +11 -0
  221. intentkit/skills/morpho/morpho.svg +12 -0
  222. intentkit/skills/morpho/schema.json +73 -0
  223. intentkit/skills/nation/__init__.py +4 -9
  224. intentkit/skills/nation/base.py +5 -10
  225. intentkit/skills/nation/nft_check.py +3 -4
  226. intentkit/skills/nation/schema.json +4 -3
  227. intentkit/skills/onchain.py +23 -0
  228. intentkit/skills/openai/__init__.py +17 -18
  229. intentkit/skills/openai/base.py +10 -14
  230. intentkit/skills/openai/dalle_image_generation.py +3 -8
  231. intentkit/skills/openai/gpt_avatar_generator.py +102 -0
  232. intentkit/skills/openai/gpt_image_generation.py +4 -8
  233. intentkit/skills/openai/gpt_image_mini_generator.py +91 -0
  234. intentkit/skills/openai/gpt_image_to_image.py +4 -8
  235. intentkit/skills/openai/image_to_text.py +3 -7
  236. intentkit/skills/openai/schema.json +34 -3
  237. intentkit/skills/portfolio/__init__.py +11 -35
  238. intentkit/skills/portfolio/base.py +33 -19
  239. intentkit/skills/portfolio/schema.json +3 -5
  240. intentkit/skills/portfolio/token_balances.py +21 -21
  241. intentkit/skills/portfolio/wallet_approvals.py +17 -18
  242. intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
  243. intentkit/skills/portfolio/wallet_history.py +31 -31
  244. intentkit/skills/portfolio/wallet_net_worth.py +13 -13
  245. intentkit/skills/portfolio/wallet_nfts.py +19 -19
  246. intentkit/skills/portfolio/wallet_profitability.py +18 -18
  247. intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
  248. intentkit/skills/portfolio/wallet_stats.py +3 -3
  249. intentkit/skills/portfolio/wallet_swaps.py +19 -19
  250. intentkit/skills/pyth/__init__.py +50 -0
  251. intentkit/skills/pyth/base.py +11 -0
  252. intentkit/skills/pyth/pyth.svg +6 -0
  253. intentkit/skills/pyth/schema.json +75 -0
  254. intentkit/skills/skills.toml +40 -0
  255. intentkit/skills/slack/__init__.py +5 -17
  256. intentkit/skills/slack/base.py +3 -9
  257. intentkit/skills/slack/get_channel.py +8 -8
  258. intentkit/skills/slack/get_message.py +9 -9
  259. intentkit/skills/slack/schedule_message.py +5 -5
  260. intentkit/skills/slack/schema.json +2 -2
  261. intentkit/skills/slack/send_message.py +3 -5
  262. intentkit/skills/supabase/__init__.py +7 -23
  263. intentkit/skills/supabase/base.py +9 -13
  264. intentkit/skills/supabase/delete_data.py +5 -6
  265. intentkit/skills/supabase/fetch_data.py +13 -14
  266. intentkit/skills/supabase/insert_data.py +5 -6
  267. intentkit/skills/supabase/invoke_function.py +7 -8
  268. intentkit/skills/supabase/schema.json +2 -3
  269. intentkit/skills/supabase/update_data.py +7 -8
  270. intentkit/skills/supabase/upsert_data.py +5 -6
  271. intentkit/skills/superfluid/__init__.py +53 -0
  272. intentkit/skills/superfluid/base.py +11 -0
  273. intentkit/skills/superfluid/schema.json +89 -0
  274. intentkit/skills/superfluid/superfluid.svg +6 -0
  275. intentkit/skills/system/__init__.py +7 -24
  276. intentkit/skills/system/add_autonomous_task.py +10 -12
  277. intentkit/skills/system/delete_autonomous_task.py +2 -2
  278. intentkit/skills/system/edit_autonomous_task.py +14 -18
  279. intentkit/skills/system/list_autonomous_tasks.py +3 -5
  280. intentkit/skills/system/read_agent_api_key.py +6 -4
  281. intentkit/skills/system/regenerate_agent_api_key.py +6 -4
  282. intentkit/skills/system/schema.json +6 -8
  283. intentkit/skills/tavily/__init__.py +3 -12
  284. intentkit/skills/tavily/base.py +4 -9
  285. intentkit/skills/tavily/schema.json +3 -5
  286. intentkit/skills/tavily/tavily_extract.py +2 -4
  287. intentkit/skills/tavily/tavily_search.py +4 -6
  288. intentkit/skills/token/__init__.py +5 -10
  289. intentkit/skills/token/base.py +7 -11
  290. intentkit/skills/token/erc20_transfers.py +19 -19
  291. intentkit/skills/token/schema.json +3 -6
  292. intentkit/skills/token/token_analytics.py +3 -3
  293. intentkit/skills/token/token_price.py +13 -13
  294. intentkit/skills/token/token_search.py +9 -9
  295. intentkit/skills/twitter/__init__.py +11 -35
  296. intentkit/skills/twitter/base.py +23 -35
  297. intentkit/skills/twitter/follow_user.py +3 -7
  298. intentkit/skills/twitter/get_mentions.py +6 -13
  299. intentkit/skills/twitter/get_timeline.py +5 -13
  300. intentkit/skills/twitter/get_user_by_username.py +3 -7
  301. intentkit/skills/twitter/get_user_tweets.py +6 -14
  302. intentkit/skills/twitter/like_tweet.py +3 -7
  303. intentkit/skills/twitter/post_tweet.py +23 -12
  304. intentkit/skills/twitter/reply_tweet.py +21 -12
  305. intentkit/skills/twitter/retweet.py +3 -7
  306. intentkit/skills/twitter/schema.json +1 -0
  307. intentkit/skills/twitter/search_tweets.py +5 -13
  308. intentkit/skills/unrealspeech/__init__.py +2 -7
  309. intentkit/skills/unrealspeech/base.py +2 -8
  310. intentkit/skills/unrealspeech/schema.json +2 -5
  311. intentkit/skills/unrealspeech/text_to_speech.py +8 -8
  312. intentkit/skills/venice_audio/__init__.py +98 -106
  313. intentkit/skills/venice_audio/base.py +117 -121
  314. intentkit/skills/venice_audio/input.py +41 -41
  315. intentkit/skills/venice_audio/schema.json +151 -152
  316. intentkit/skills/venice_audio/venice_audio.py +38 -21
  317. intentkit/skills/venice_image/__init__.py +147 -154
  318. intentkit/skills/venice_image/api.py +138 -138
  319. intentkit/skills/venice_image/base.py +185 -192
  320. intentkit/skills/venice_image/config.py +33 -35
  321. intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
  322. intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
  323. intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
  324. intentkit/skills/venice_image/image_generation/image_generation_base.py +9 -9
  325. intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
  326. intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
  327. intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
  328. intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
  329. intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
  330. intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
  331. intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
  332. intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
  333. intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
  334. intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
  335. intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
  336. intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
  337. intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
  338. intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
  339. intentkit/skills/venice_image/schema.json +267 -267
  340. intentkit/skills/venice_image/utils.py +77 -78
  341. intentkit/skills/web_scraper/__init__.py +5 -18
  342. intentkit/skills/web_scraper/base.py +21 -7
  343. intentkit/skills/web_scraper/document_indexer.py +7 -6
  344. intentkit/skills/web_scraper/schema.json +2 -6
  345. intentkit/skills/web_scraper/scrape_and_index.py +15 -15
  346. intentkit/skills/web_scraper/utils.py +62 -63
  347. intentkit/skills/web_scraper/website_indexer.py +17 -19
  348. intentkit/skills/weth/__init__.py +49 -0
  349. intentkit/skills/weth/base.py +11 -0
  350. intentkit/skills/weth/schema.json +58 -0
  351. intentkit/skills/weth/weth.svg +6 -0
  352. intentkit/skills/wow/__init__.py +51 -0
  353. intentkit/skills/wow/base.py +11 -0
  354. intentkit/skills/wow/schema.json +89 -0
  355. intentkit/skills/wow/wow.svg +7 -0
  356. intentkit/skills/x402/__init__.py +61 -0
  357. intentkit/skills/x402/ask_agent.py +98 -0
  358. intentkit/skills/x402/base.py +99 -0
  359. intentkit/skills/x402/http_request.py +117 -0
  360. intentkit/skills/x402/schema.json +45 -0
  361. intentkit/skills/x402/x402.webp +0 -0
  362. intentkit/skills/xmtp/__init__.py +4 -15
  363. intentkit/skills/xmtp/base.py +61 -2
  364. intentkit/skills/xmtp/price.py +18 -13
  365. intentkit/skills/xmtp/schema.json +69 -71
  366. intentkit/skills/xmtp/swap.py +22 -25
  367. intentkit/skills/xmtp/transfer.py +71 -32
  368. intentkit/utils/chain.py +3 -3
  369. intentkit/utils/error.py +14 -1
  370. intentkit/utils/logging.py +2 -4
  371. intentkit/utils/s3.py +59 -7
  372. intentkit/utils/schema.py +100 -0
  373. intentkit/utils/slack_alert.py +7 -8
  374. {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/METADATA +14 -16
  375. intentkit-0.8.17.dist-info/RECORD +466 -0
  376. intentkit/abstracts/exception.py +0 -9
  377. intentkit/core/skill.py +0 -200
  378. intentkit/models/generator.py +0 -347
  379. intentkit/skills/cdp/get_balance.py +0 -110
  380. intentkit/skills/cdp/swap.py +0 -121
  381. intentkit/skills/moralis/tests/__init__.py +0 -0
  382. intentkit/skills/moralis/tests/test_wallet.py +0 -511
  383. intentkit-0.6.13.dev2.dist-info/RECORD +0 -409
  384. {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/WHEEL +0 -0
  385. {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,74 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "title": "ERC20",
5
+ "description": "ERC20 token balance and transfer actions via Coinbase AgentKit",
6
+ "x-icon": "https://ai.service.crestal.dev/skills/erc20/erc20.svg",
7
+ "x-tags": [
8
+ "Crypto",
9
+ "DeFi"
10
+ ],
11
+ "properties": {
12
+ "enabled": {
13
+ "type": "boolean",
14
+ "title": "Enabled",
15
+ "description": "Whether this skill is enabled",
16
+ "default": false
17
+ },
18
+ "states": {
19
+ "type": "object",
20
+ "properties": {
21
+ "ERC20ActionProvider_get_balance": {
22
+ "type": "string",
23
+ "title": "Get ERC20 Balance",
24
+ "enum": [
25
+ "disabled",
26
+ "public",
27
+ "private"
28
+ ],
29
+ "x-enum-title": [
30
+ "Disabled",
31
+ "Agent Owner + All Users",
32
+ "Agent Owner Only"
33
+ ],
34
+ "description": "State for ERC20ActionProvider_get_balance",
35
+ "default": "disabled"
36
+ },
37
+ "ERC20ActionProvider_transfer": {
38
+ "type": "string",
39
+ "title": "Transfer ERC20",
40
+ "enum": [
41
+ "disabled",
42
+ "public",
43
+ "private"
44
+ ],
45
+ "x-enum-title": [
46
+ "Disabled",
47
+ "Agent Owner + All Users",
48
+ "Agent Owner Only"
49
+ ],
50
+ "description": "State for ERC20ActionProvider_transfer",
51
+ "default": "disabled"
52
+ }
53
+ },
54
+ "description": "States for each ERC20 skill (disabled, public, or private)"
55
+ },
56
+ "api_key_provider": {
57
+ "type": "string",
58
+ "title": "API Key Provider",
59
+ "description": "Who provides the API key",
60
+ "enum": [
61
+ "platform"
62
+ ],
63
+ "x-enum-title": [
64
+ "Nation Hosted"
65
+ ],
66
+ "default": "platform"
67
+ }
68
+ },
69
+ "required": [
70
+ "states",
71
+ "enabled"
72
+ ],
73
+ "additionalProperties": true
74
+ }
@@ -0,0 +1,53 @@
1
+ """ERC721 AgentKit skills."""
2
+
3
+ from typing import TypedDict
4
+
5
+ from coinbase_agentkit import erc721_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.erc721.base import ERC721BaseTool
15
+
16
+
17
+ class SkillStates(TypedDict):
18
+ Erc721ActionProvider_get_balance: SkillState
19
+ Erc721ActionProvider_mint: SkillState
20
+ Erc721ActionProvider_transfer: SkillState
21
+
22
+
23
+ class Config(SkillConfig):
24
+ """Configuration for ERC721 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[ERC721BaseTool]:
36
+ """Get all ERC721 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, [erc721_action_provider], agent=agent
47
+ )
48
+ tools: list[ERC721BaseTool] = []
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
+ """ERC721 AgentKit skills base class."""
2
+
3
+ from intentkit.skills.cdp.base import CDPBaseTool
4
+
5
+
6
+ class ERC721BaseTool(CDPBaseTool):
7
+ """Base class for ERC721 tools."""
8
+
9
+ @property
10
+ def category(self) -> str:
11
+ return "erc721"
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
2
+ <rect width="128" height="128" fill="#6a1b9a" rx="16" />
3
+ <polygon points="64,24 100,64 64,104 28,64" fill="#ce93d8" />
4
+ <text x="50%" y="72%" font-family="Arial,Helvetica,sans-serif" font-size="40" fill="#4a148c" font-weight="700" text-anchor="middle">721</text>
5
+ </svg>
@@ -0,0 +1,90 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "title": "ERC721",
5
+ "description": "ERC721 NFT management actions via Coinbase AgentKit",
6
+ "x-icon": "https://ai.service.crestal.dev/skills/erc721/erc721.svg",
7
+ "x-tags": [
8
+ "Crypto",
9
+ "NFT"
10
+ ],
11
+ "properties": {
12
+ "enabled": {
13
+ "type": "boolean",
14
+ "title": "Enabled",
15
+ "description": "Whether this skill is enabled",
16
+ "default": false
17
+ },
18
+ "states": {
19
+ "type": "object",
20
+ "properties": {
21
+ "Erc721ActionProvider_get_balance": {
22
+ "type": "string",
23
+ "title": "Get ERC721 Balance",
24
+ "enum": [
25
+ "disabled",
26
+ "public",
27
+ "private"
28
+ ],
29
+ "x-enum-title": [
30
+ "Disabled",
31
+ "Agent Owner + All Users",
32
+ "Agent Owner Only"
33
+ ],
34
+ "description": "State for Erc721ActionProvider_get_balance",
35
+ "default": "disabled"
36
+ },
37
+ "Erc721ActionProvider_mint": {
38
+ "type": "string",
39
+ "title": "Mint ERC721",
40
+ "enum": [
41
+ "disabled",
42
+ "public",
43
+ "private"
44
+ ],
45
+ "x-enum-title": [
46
+ "Disabled",
47
+ "Agent Owner + All Users",
48
+ "Agent Owner Only"
49
+ ],
50
+ "description": "State for Erc721ActionProvider_mint",
51
+ "default": "disabled"
52
+ },
53
+ "Erc721ActionProvider_transfer": {
54
+ "type": "string",
55
+ "title": "Transfer ERC721",
56
+ "enum": [
57
+ "disabled",
58
+ "public",
59
+ "private"
60
+ ],
61
+ "x-enum-title": [
62
+ "Disabled",
63
+ "Agent Owner + All Users",
64
+ "Agent Owner Only"
65
+ ],
66
+ "description": "State for Erc721ActionProvider_transfer",
67
+ "default": "disabled"
68
+ }
69
+ },
70
+ "description": "States for each ERC721 skill (disabled, public, or private)"
71
+ },
72
+ "api_key_provider": {
73
+ "type": "string",
74
+ "title": "API Key Provider",
75
+ "description": "Who provides the API key",
76
+ "enum": [
77
+ "platform"
78
+ ],
79
+ "x-enum-title": [
80
+ "Nation Hosted"
81
+ ],
82
+ "default": "platform"
83
+ }
84
+ },
85
+ "required": [
86
+ "states",
87
+ "enabled"
88
+ ],
89
+ "additionalProperties": true
90
+ }
@@ -5,18 +5,22 @@ The Firecrawl skills provide advanced web scraping and content indexing capabili
5
5
  ## Skills Overview
6
6
 
7
7
  ### 1. firecrawl_scrape
8
- Scrapes a single webpage and optionally indexes the content for future querying.
8
+ Scrapes a single webpage and REPLACES any existing indexed content for that URL, preventing duplicates.
9
9
 
10
10
  **Parameters:**
11
11
  - `url` (required): The URL to scrape
12
- - `formats` (optional): Output formats - markdown, html, rawHtml, screenshot, links, extract (default: ["markdown"])
12
+ - `formats` (optional): Output formats - markdown, html, rawHtml, screenshot, links, json (default: ["markdown"])
13
+ - `only_main_content` (optional): Extract only main content (default: true)
13
14
  - `include_tags` (optional): HTML tags to include (e.g., ["h1", "h2", "p"])
14
15
  - `exclude_tags` (optional): HTML tags to exclude
15
- - `only_main_content` (optional): Extract only main content (default: true)
16
+ - `wait_for` (optional): Wait time in milliseconds before scraping
17
+ - `timeout` (optional): Maximum timeout in milliseconds (default: 30000)
16
18
  - `index_content` (optional): Whether to index content for querying (default: true)
17
19
  - `chunk_size` (optional): Size of text chunks for indexing (default: 1000)
18
20
  - `chunk_overlap` (optional): Overlap between chunks (default: 200)
19
21
 
22
+ **Use Case:** Use this when you want to refresh/update content from a URL that was previously scraped, ensuring no duplicate or stale content remains.
23
+
20
24
  ### 2. firecrawl_crawl
21
25
  Crawls multiple pages from a website and indexes all content.
22
26
 
@@ -158,8 +162,9 @@ Prompt: "Use firecrawl_scrape to scrape https://example.com and index the conten
158
162
  ### Documentation Indexing
159
163
  ```
160
164
  1. Scrape main documentation page
161
- 2. Crawl related documentation sections
162
- 3. Query for specific technical information
165
+ 2. Crawl related documentation sections
166
+ 3. Use scrape again to update changed pages (replaces old content)
167
+ 4. Query for specific technical information
163
168
  ```
164
169
 
165
170
  ### Competitive Analysis
@@ -205,6 +210,7 @@ Prompt: "Use firecrawl_scrape to scrape https://example.com and index the conten
205
210
  - **PDF Support**: Can scrape and index PDF documents
206
211
  - **Intelligent Chunking**: Optimized text splitting for better search
207
212
  - **Independent Storage**: Uses its own dedicated vector store for Firecrawl content
213
+ - **Content Replacement**: Replace mode prevents duplicate/stale content
208
214
  - **Metadata Rich**: Includes source URLs, timestamps, and content types
209
215
  - **Semantic Search**: Uses OpenAI embeddings for intelligent querying
210
216
  - **Batch Processing**: Efficient handling of multiple pages
@@ -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.firecrawl.base import FirecrawlBaseTool
9
8
  from intentkit.skills.firecrawl.clear import FirecrawlClearIndexedContent
@@ -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[FirecrawlBaseTool]:
43
41
  """Get all Firecrawl skills.
@@ -45,7 +43,6 @@ async def get_skills(
45
43
  Args:
46
44
  config: The configuration for Firecrawl 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 Firecrawl skills.
@@ -60,18 +57,16 @@ async def get_skills(
60
57
  available_skills.append(skill_name)
61
58
 
62
59
  # Get each skill using the cached getter
63
- return [get_firecrawl_skill(name, store) for name in available_skills]
60
+ return [get_firecrawl_skill(name) for name in available_skills]
64
61
 
65
62
 
66
63
  def get_firecrawl_skill(
67
64
  name: str,
68
- store: SkillStoreABC,
69
65
  ) -> FirecrawlBaseTool:
70
66
  """Get a Firecrawl skill by name.
71
67
 
72
68
  Args:
73
69
  name: The name of the skill to get
74
- store: The skill store for persisting data
75
70
 
76
71
  Returns:
77
72
  The requested Firecrawl skill
@@ -81,27 +76,19 @@ def get_firecrawl_skill(
81
76
  """
82
77
  if name == "firecrawl_scrape":
83
78
  if name not in _cache:
84
- _cache[name] = FirecrawlScrape(
85
- skill_store=store,
86
- )
79
+ _cache[name] = FirecrawlScrape()
87
80
  return _cache[name]
88
81
  elif name == "firecrawl_crawl":
89
82
  if name not in _cache:
90
- _cache[name] = FirecrawlCrawl(
91
- skill_store=store,
92
- )
83
+ _cache[name] = FirecrawlCrawl()
93
84
  return _cache[name]
94
85
  elif name == "firecrawl_query_indexed_content":
95
86
  if name not in _cache:
96
- _cache[name] = FirecrawlQueryIndexedContent(
97
- skill_store=store,
98
- )
87
+ _cache[name] = FirecrawlQueryIndexedContent()
99
88
  return _cache[name]
100
89
  elif name == "firecrawl_clear_indexed_content":
101
90
  if name not in _cache:
102
- _cache[name] = FirecrawlClearIndexedContent(
103
- skill_store=store,
104
- )
91
+ _cache[name] = FirecrawlClearIndexedContent()
105
92
  return _cache[name]
106
93
  else:
107
94
  raise ValueError(f"Unknown Firecrawl skill: {name}")
@@ -1,9 +1,7 @@
1
- from typing import 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
 
6
- from intentkit.abstracts.skill import SkillStoreABC
4
+ from intentkit.config.config import config
7
5
  from intentkit.skills.base import IntentKitSkill
8
6
 
9
7
 
@@ -12,10 +10,7 @@ class FirecrawlBaseTool(IntentKitSkill):
12
10
 
13
11
  name: str = Field(description="The name of the tool")
14
12
  description: str = Field(description="A description of what the tool does")
15
- args_schema: Type[BaseModel]
16
- skill_store: SkillStoreABC = Field(
17
- description="The skill store for persisting data"
18
- )
13
+ args_schema: type[BaseModel]
19
14
 
20
15
  def get_api_key(self) -> str:
21
16
  """Get the Firecrawl API key from configuration."""
@@ -29,9 +24,7 @@ class FirecrawlBaseTool(IntentKitSkill):
29
24
  else:
30
25
  raise ToolException("No api_key found in agent_owner configuration")
31
26
  else:
32
- raise ToolException(
33
- f"Invalid API key provider: {api_key_provider}. Only 'agent_owner' is supported for Firecrawl."
34
- )
27
+ return config.firecrawl_api_key
35
28
 
36
29
  @property
37
30
  def category(self) -> str:
@@ -1,8 +1,8 @@
1
1
  import logging
2
- from typing import Type
3
2
 
4
3
  from pydantic import BaseModel, Field
5
4
 
5
+ from intentkit.models.skill import AgentSkillData
6
6
  from intentkit.skills.firecrawl.base import FirecrawlBaseTool
7
7
 
8
8
  logger = logging.getLogger(__name__)
@@ -30,7 +30,7 @@ class FirecrawlClearIndexedContent(FirecrawlBaseTool):
30
30
  "This will permanently delete all indexed content and cannot be undone.\n"
31
31
  "Use this tool when you want to start fresh with new content."
32
32
  )
33
- args_schema: Type[BaseModel] = FirecrawlClearInput
33
+ args_schema: type[BaseModel] = FirecrawlClearInput
34
34
 
35
35
  async def _arun(
36
36
  self,
@@ -62,15 +62,11 @@ class FirecrawlClearIndexedContent(FirecrawlBaseTool):
62
62
  try:
63
63
  # Delete vector store data (using web_scraper storage format for compatibility)
64
64
  vector_store_key = f"vector_store_{agent_id}"
65
- await self.skill_store.delete_agent_skill_data(
66
- agent_id, "web_scraper", vector_store_key
67
- )
65
+ await AgentSkillData.delete(agent_id, "web_scraper", vector_store_key)
68
66
 
69
67
  # Delete metadata
70
68
  metadata_key = f"indexed_urls_{agent_id}"
71
- await self.skill_store.delete_agent_skill_data(
72
- agent_id, "web_scraper", metadata_key
73
- )
69
+ await AgentSkillData.delete(agent_id, "web_scraper", metadata_key)
74
70
 
75
71
  logger.info(
76
72
  f"firecrawl_clear: Successfully cleared all indexed content for agent {agent_id}"
@@ -1,6 +1,5 @@
1
1
  import asyncio
2
2
  import logging
3
- from typing import List, Optional, Type
4
3
 
5
4
  import httpx
6
5
  from langchain_core.documents import Document
@@ -20,19 +19,19 @@ class FirecrawlCrawlInput(BaseModel):
20
19
  limit: int = Field(
21
20
  description="Maximum number of pages to crawl", default=10, ge=1, le=1000
22
21
  )
23
- formats: List[str] = Field(
22
+ formats: list[str] = Field(
24
23
  description="Output formats to include in the response. Options: 'markdown', 'html', 'rawHtml', 'screenshot', 'links', 'json'",
25
24
  default=["markdown"],
26
25
  )
27
- include_paths: Optional[List[str]] = Field(
26
+ include_paths: list[str] | None = Field(
28
27
  description="Regex patterns to include in the crawl (e.g., ['^/blog/.*$'])",
29
28
  default=None,
30
29
  )
31
- exclude_paths: Optional[List[str]] = Field(
30
+ exclude_paths: list[str] | None = Field(
32
31
  description="Regex patterns to exclude from the crawl (e.g., ['^/admin/.*$'])",
33
32
  default=None,
34
33
  )
35
- max_depth: Optional[int] = Field(
34
+ max_depth: int | None = Field(
36
35
  description="Maximum depth to crawl from the base URL",
37
36
  default=None,
38
37
  ge=1,
@@ -91,16 +90,16 @@ class FirecrawlCrawl(FirecrawlBaseTool):
91
90
  "Optionally indexes all crawled content for later querying using the firecrawl_query_indexed_content tool. "
92
91
  "Use this when you need to gather comprehensive information from a website."
93
92
  )
94
- args_schema: Type[BaseModel] = FirecrawlCrawlInput
93
+ args_schema: type[BaseModel] = FirecrawlCrawlInput
95
94
 
96
95
  async def _arun(
97
96
  self,
98
97
  url: str,
99
98
  limit: int = 10,
100
- formats: List[str] = None,
101
- include_paths: Optional[List[str]] = None,
102
- exclude_paths: Optional[List[str]] = None,
103
- max_depth: Optional[int] = None,
99
+ formats: list[str] = None,
100
+ include_paths: list[str] | None = None,
101
+ exclude_paths: list[str] | None = None,
102
+ max_depth: int | None = None,
104
103
  allow_backward_links: bool = False,
105
104
  allow_external_links: bool = False,
106
105
  allow_subdomains: bool = False,
@@ -137,9 +136,8 @@ class FirecrawlCrawl(FirecrawlBaseTool):
137
136
  "rate_limit_minutes"
138
137
  ):
139
138
  await self.user_rate_limit_by_category(
140
- context.user_id,
141
139
  skill_config["rate_limit_number"],
142
- skill_config["rate_limit_minutes"],
140
+ skill_config["rate_limit_minutes"] * 60,
143
141
  )
144
142
 
145
143
  # Get the API key from the agent's configuration
@@ -279,6 +277,7 @@ class FirecrawlCrawl(FirecrawlBaseTool):
279
277
  # Import indexing utilities from firecrawl utils
280
278
  from intentkit.skills.firecrawl.utils import (
281
279
  FirecrawlMetadataManager,
280
+ FirecrawlVectorStoreManager,
282
281
  index_documents,
283
282
  )
284
283
 
@@ -309,24 +308,25 @@ class FirecrawlCrawl(FirecrawlBaseTool):
309
308
  # Get agent ID for indexing
310
309
  agent_id = context.agent_id
311
310
  if agent_id and documents:
311
+ vector_manager = FirecrawlVectorStoreManager()
312
+
312
313
  # Index all documents
313
314
  total_chunks, was_merged = await index_documents(
314
315
  documents,
315
316
  agent_id,
316
- self.skill_store,
317
+ vector_manager,
317
318
  chunk_size,
318
319
  chunk_overlap,
319
320
  )
320
321
 
321
322
  # Update metadata
322
- metadata_manager = FirecrawlMetadataManager(
323
- self.skill_store
324
- )
325
323
  urls = [doc.metadata["source"] for doc in documents]
326
- new_metadata = metadata_manager.create_url_metadata(
327
- urls, documents, "firecrawl_crawl"
324
+ new_metadata = (
325
+ FirecrawlMetadataManager.create_url_metadata(
326
+ urls, documents, "firecrawl_crawl"
327
+ )
328
328
  )
329
- await metadata_manager.update_metadata(
329
+ await FirecrawlMetadataManager.update_metadata(
330
330
  agent_id, new_metadata
331
331
  )
332
332
 
@@ -1,5 +1,4 @@
1
1
  import logging
2
- from typing import Type
3
2
 
4
3
  from pydantic import BaseModel, Field
5
4
 
@@ -37,7 +36,7 @@ class FirecrawlQueryIndexedContent(FirecrawlBaseTool):
37
36
  "Use this tool to search through content that was previously scraped and indexed using Firecrawl tools.\n"
38
37
  "This tool can help answer questions based on the indexed web content from Firecrawl scraping/crawling."
39
38
  )
40
- args_schema: Type[BaseModel] = FirecrawlQueryInput
39
+ args_schema: type[BaseModel] = FirecrawlQueryInput
41
40
 
42
41
  async def _arun(
43
42
  self,
@@ -62,12 +61,14 @@ class FirecrawlQueryIndexedContent(FirecrawlBaseTool):
62
61
  # Import query utilities from firecrawl utils
63
62
  from intentkit.skills.firecrawl.utils import (
64
63
  FirecrawlDocumentProcessor,
64
+ FirecrawlVectorStoreManager,
65
65
  query_indexed_content,
66
66
  )
67
67
 
68
68
  # Query the indexed content
69
+ vector_manager = FirecrawlVectorStoreManager()
69
70
  docs = await query_indexed_content(
70
- query, agent_id, self.skill_store, max_results
71
+ query, agent_id, vector_manager, max_results
71
72
  )
72
73
 
73
74
  if not docs:
@@ -5,11 +5,7 @@
5
5
  "description": "AI-powered web scraping and crawling capabilities using Firecrawl",
6
6
  "x-icon": "https://ai.service.crestal.dev/skills/firecrawl/firecrawl.png",
7
7
  "x-tags": [
8
- "Web Scraping",
9
- "Crawling",
10
- "Content Extraction",
11
- "Data Mining",
12
- "Website Analysis"
8
+ "Knowledge Base"
13
9
  ],
14
10
  "properties": {
15
11
  "enabled": {
@@ -34,7 +30,7 @@
34
30
  "Agent Owner + All Users",
35
31
  "Agent Owner Only"
36
32
  ],
37
- "description": "Scrape single web pages and extract content in various formats (markdown, HTML, JSON, etc.). Handles JavaScript-rendered content, PDFs, and dynamic websites.",
33
+ "description": "Scrape single web pages and REPLACE any existing indexed content for that URL. Unlike regular scrape, this prevents duplicate content when re-scraping the same page. Use this to refresh/update content from a previously scraped URL.",
38
34
  "default": "private"
39
35
  },
40
36
  "firecrawl_crawl": {
@@ -93,12 +89,14 @@
93
89
  "title": "API Key Provider",
94
90
  "description": "Provider of the API key",
95
91
  "enum": [
92
+ "platform",
96
93
  "agent_owner"
97
94
  ],
98
95
  "x-enum-title": [
96
+ "Nation Hosted",
99
97
  "Owner Provided"
100
98
  ],
101
- "default": "agent_owner"
99
+ "default": "platform"
102
100
  },
103
101
  "api_key": {
104
102
  "type": "string",
@@ -150,4 +148,4 @@
150
148
  }
151
149
  },
152
150
  "additionalProperties": true
153
- }
151
+ }