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.
- intentkit/__init__.py +1 -1
- intentkit/abstracts/agent.py +4 -5
- intentkit/abstracts/engine.py +5 -5
- intentkit/abstracts/graph.py +14 -7
- intentkit/abstracts/skill.py +6 -144
- intentkit/abstracts/twitter.py +4 -5
- intentkit/clients/__init__.py +5 -2
- intentkit/clients/cdp.py +101 -141
- intentkit/clients/twitter.py +83 -62
- intentkit/clients/web3.py +29 -0
- intentkit/config/config.py +8 -5
- intentkit/core/agent.py +472 -195
- intentkit/core/asset.py +253 -0
- intentkit/core/chat.py +51 -0
- intentkit/core/client.py +1 -1
- intentkit/core/credit.py +460 -130
- intentkit/core/engine.py +262 -233
- intentkit/core/node.py +15 -16
- intentkit/core/prompt.py +62 -28
- intentkit/core/scheduler.py +92 -0
- intentkit/core/statistics.py +168 -0
- intentkit/models/agent.py +1096 -949
- intentkit/models/agent_data.py +68 -38
- intentkit/models/agent_public.json +98 -0
- intentkit/models/agent_schema.json +54 -439
- intentkit/models/app_setting.py +96 -33
- intentkit/models/chat.py +74 -27
- intentkit/models/conversation.py +8 -8
- intentkit/models/credit.py +362 -74
- intentkit/models/db.py +26 -8
- intentkit/models/db_mig.py +2 -2
- intentkit/models/llm.csv +28 -0
- intentkit/models/llm.py +185 -350
- intentkit/models/redis.py +6 -4
- intentkit/models/skill.py +186 -72
- intentkit/models/skills.csv +174 -0
- intentkit/models/user.py +82 -24
- intentkit/skills/acolyt/__init__.py +2 -9
- intentkit/skills/acolyt/ask.py +3 -4
- intentkit/skills/acolyt/base.py +4 -9
- intentkit/skills/acolyt/schema.json +4 -3
- intentkit/skills/aixbt/__init__.py +2 -13
- intentkit/skills/aixbt/base.py +1 -7
- intentkit/skills/aixbt/projects.py +14 -15
- intentkit/skills/aixbt/schema.json +4 -4
- intentkit/skills/allora/__init__.py +2 -9
- intentkit/skills/allora/base.py +4 -9
- intentkit/skills/allora/price.py +3 -4
- intentkit/skills/allora/schema.json +3 -2
- intentkit/skills/base.py +248 -85
- intentkit/skills/basename/__init__.py +51 -0
- intentkit/skills/basename/base.py +11 -0
- intentkit/skills/basename/basename.svg +11 -0
- intentkit/skills/basename/schema.json +58 -0
- intentkit/skills/carv/__init__.py +115 -121
- intentkit/skills/carv/base.py +184 -185
- intentkit/skills/carv/fetch_news.py +3 -3
- intentkit/skills/carv/onchain_query.py +4 -4
- intentkit/skills/carv/schema.json +134 -137
- intentkit/skills/carv/token_info_and_price.py +5 -5
- intentkit/skills/casino/README.md +254 -0
- intentkit/skills/casino/__init__.py +86 -0
- intentkit/skills/casino/base.py +17 -0
- intentkit/skills/casino/casino.png +0 -0
- intentkit/skills/casino/deck_draw.py +127 -0
- intentkit/skills/casino/deck_shuffle.py +118 -0
- intentkit/skills/casino/dice_roll.py +100 -0
- intentkit/skills/casino/schema.json +77 -0
- intentkit/skills/casino/utils.py +107 -0
- intentkit/skills/cdp/__init__.py +22 -84
- intentkit/skills/cdp/base.py +1 -7
- intentkit/skills/cdp/schema.json +11 -314
- intentkit/skills/chainlist/__init__.py +2 -7
- intentkit/skills/chainlist/base.py +1 -7
- intentkit/skills/chainlist/chain_lookup.py +18 -18
- intentkit/skills/chainlist/schema.json +3 -5
- intentkit/skills/common/__init__.py +2 -9
- intentkit/skills/common/base.py +1 -7
- intentkit/skills/common/current_time.py +1 -2
- intentkit/skills/common/schema.json +2 -2
- intentkit/skills/cookiefun/__init__.py +6 -9
- intentkit/skills/cookiefun/base.py +2 -7
- intentkit/skills/cookiefun/get_account_details.py +7 -7
- intentkit/skills/cookiefun/get_account_feed.py +19 -19
- intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
- intentkit/skills/cookiefun/get_sectors.py +3 -3
- intentkit/skills/cookiefun/schema.json +1 -3
- intentkit/skills/cookiefun/search_accounts.py +9 -9
- intentkit/skills/cryptocompare/__init__.py +7 -24
- intentkit/skills/cryptocompare/api.py +2 -3
- intentkit/skills/cryptocompare/base.py +11 -25
- intentkit/skills/cryptocompare/fetch_news.py +4 -5
- intentkit/skills/cryptocompare/fetch_price.py +6 -7
- intentkit/skills/cryptocompare/fetch_top_exchanges.py +4 -5
- intentkit/skills/cryptocompare/fetch_top_market_cap.py +4 -5
- intentkit/skills/cryptocompare/fetch_top_volume.py +4 -5
- intentkit/skills/cryptocompare/fetch_trading_signals.py +5 -6
- intentkit/skills/cryptocompare/schema.json +3 -3
- intentkit/skills/cryptopanic/__init__.py +7 -10
- intentkit/skills/cryptopanic/base.py +51 -55
- intentkit/skills/cryptopanic/fetch_crypto_news.py +4 -8
- intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +5 -7
- intentkit/skills/cryptopanic/schema.json +105 -103
- intentkit/skills/dapplooker/__init__.py +2 -9
- intentkit/skills/dapplooker/base.py +4 -9
- intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
- intentkit/skills/dapplooker/schema.json +3 -5
- intentkit/skills/defillama/__init__.py +24 -74
- intentkit/skills/defillama/api.py +6 -9
- intentkit/skills/defillama/base.py +11 -21
- intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +8 -10
- intentkit/skills/defillama/coins/fetch_block.py +6 -8
- intentkit/skills/defillama/coins/fetch_current_prices.py +8 -10
- intentkit/skills/defillama/coins/fetch_first_price.py +7 -9
- intentkit/skills/defillama/coins/fetch_historical_prices.py +9 -11
- intentkit/skills/defillama/coins/fetch_price_chart.py +9 -11
- intentkit/skills/defillama/coins/fetch_price_percentage.py +7 -9
- intentkit/skills/defillama/config/chains.py +1 -3
- intentkit/skills/defillama/fees/fetch_fees_overview.py +24 -26
- intentkit/skills/defillama/schema.json +5 -1
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +16 -18
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +8 -10
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +5 -7
- intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +7 -9
- intentkit/skills/defillama/tests/api_integration.test.py +1 -1
- intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +4 -6
- intentkit/skills/defillama/tvl/fetch_chains.py +9 -11
- intentkit/skills/defillama/tvl/fetch_historical_tvl.py +4 -6
- intentkit/skills/defillama/tvl/fetch_protocol.py +32 -38
- intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +3 -5
- intentkit/skills/defillama/tvl/fetch_protocols.py +37 -45
- intentkit/skills/defillama/volumes/fetch_dex_overview.py +42 -48
- intentkit/skills/defillama/volumes/fetch_dex_summary.py +35 -37
- intentkit/skills/defillama/volumes/fetch_options_overview.py +24 -28
- intentkit/skills/defillama/yields/fetch_pool_chart.py +10 -12
- intentkit/skills/defillama/yields/fetch_pools.py +26 -30
- intentkit/skills/dexscreener/README.md +154 -0
- intentkit/skills/dexscreener/__init__.py +97 -93
- intentkit/skills/dexscreener/base.py +125 -133
- intentkit/skills/dexscreener/get_pair_info.py +158 -0
- intentkit/skills/dexscreener/get_token_pairs.py +165 -0
- intentkit/skills/dexscreener/get_tokens_info.py +212 -0
- intentkit/skills/dexscreener/model/search_token_response.py +80 -82
- intentkit/skills/dexscreener/schema.json +91 -48
- intentkit/skills/dexscreener/search_token.py +182 -321
- intentkit/skills/dexscreener/utils.py +420 -0
- intentkit/skills/dune_analytics/__init__.py +7 -9
- intentkit/skills/dune_analytics/base.py +48 -52
- intentkit/skills/dune_analytics/fetch_kol_buys.py +5 -7
- intentkit/skills/dune_analytics/fetch_nation_metrics.py +6 -8
- intentkit/skills/dune_analytics/schema.json +104 -99
- intentkit/skills/elfa/__init__.py +5 -18
- intentkit/skills/elfa/base.py +10 -14
- intentkit/skills/elfa/mention.py +19 -21
- intentkit/skills/elfa/schema.json +3 -2
- intentkit/skills/elfa/stats.py +4 -4
- intentkit/skills/elfa/tokens.py +12 -12
- intentkit/skills/elfa/utils.py +26 -28
- intentkit/skills/enso/__init__.py +11 -31
- intentkit/skills/enso/base.py +50 -35
- intentkit/skills/enso/best_yield.py +16 -24
- intentkit/skills/enso/networks.py +6 -11
- intentkit/skills/enso/prices.py +11 -13
- intentkit/skills/enso/route.py +34 -38
- intentkit/skills/enso/schema.json +3 -2
- intentkit/skills/enso/tokens.py +29 -38
- intentkit/skills/enso/wallet.py +76 -191
- intentkit/skills/erc20/__init__.py +50 -0
- intentkit/skills/erc20/base.py +11 -0
- intentkit/skills/erc20/erc20.svg +5 -0
- intentkit/skills/erc20/schema.json +74 -0
- intentkit/skills/erc721/__init__.py +53 -0
- intentkit/skills/erc721/base.py +11 -0
- intentkit/skills/erc721/erc721.svg +5 -0
- intentkit/skills/erc721/schema.json +90 -0
- intentkit/skills/firecrawl/README.md +11 -5
- intentkit/skills/firecrawl/__init__.py +5 -18
- intentkit/skills/firecrawl/base.py +4 -11
- intentkit/skills/firecrawl/clear.py +4 -8
- intentkit/skills/firecrawl/crawl.py +19 -19
- intentkit/skills/firecrawl/query.py +4 -3
- intentkit/skills/firecrawl/schema.json +6 -8
- intentkit/skills/firecrawl/scrape.py +150 -40
- intentkit/skills/firecrawl/utils.py +50 -42
- intentkit/skills/github/__init__.py +2 -7
- intentkit/skills/github/base.py +1 -7
- intentkit/skills/github/github_search.py +1 -2
- intentkit/skills/github/schema.json +3 -4
- intentkit/skills/heurist/__init__.py +8 -27
- intentkit/skills/heurist/base.py +4 -9
- intentkit/skills/heurist/image_generation_animagine_xl.py +12 -13
- intentkit/skills/heurist/image_generation_arthemy_comics.py +12 -13
- intentkit/skills/heurist/image_generation_arthemy_real.py +12 -13
- intentkit/skills/heurist/image_generation_braindance.py +12 -13
- intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +12 -13
- intentkit/skills/heurist/image_generation_flux_1_dev.py +12 -13
- intentkit/skills/heurist/image_generation_sdxl.py +12 -13
- intentkit/skills/heurist/schema.json +2 -2
- intentkit/skills/http/__init__.py +4 -15
- intentkit/skills/http/base.py +1 -7
- intentkit/skills/http/get.py +21 -16
- intentkit/skills/http/post.py +23 -18
- intentkit/skills/http/put.py +23 -18
- intentkit/skills/http/schema.json +4 -5
- intentkit/skills/lifi/__init__.py +8 -13
- intentkit/skills/lifi/base.py +1 -7
- intentkit/skills/lifi/schema.json +17 -8
- intentkit/skills/lifi/token_execute.py +36 -30
- intentkit/skills/lifi/token_quote.py +8 -10
- intentkit/skills/lifi/utils.py +104 -51
- intentkit/skills/moralis/__init__.py +6 -10
- intentkit/skills/moralis/api.py +6 -7
- intentkit/skills/moralis/base.py +5 -10
- intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
- intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
- intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
- intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
- intentkit/skills/moralis/schema.json +7 -2
- intentkit/skills/morpho/__init__.py +52 -0
- intentkit/skills/morpho/base.py +11 -0
- intentkit/skills/morpho/morpho.svg +12 -0
- intentkit/skills/morpho/schema.json +73 -0
- intentkit/skills/nation/__init__.py +4 -9
- intentkit/skills/nation/base.py +5 -10
- intentkit/skills/nation/nft_check.py +3 -4
- intentkit/skills/nation/schema.json +4 -3
- intentkit/skills/onchain.py +23 -0
- intentkit/skills/openai/__init__.py +17 -18
- intentkit/skills/openai/base.py +10 -14
- intentkit/skills/openai/dalle_image_generation.py +3 -8
- intentkit/skills/openai/gpt_avatar_generator.py +102 -0
- intentkit/skills/openai/gpt_image_generation.py +4 -8
- intentkit/skills/openai/gpt_image_mini_generator.py +91 -0
- intentkit/skills/openai/gpt_image_to_image.py +4 -8
- intentkit/skills/openai/image_to_text.py +3 -7
- intentkit/skills/openai/schema.json +34 -3
- intentkit/skills/portfolio/__init__.py +11 -35
- intentkit/skills/portfolio/base.py +33 -19
- intentkit/skills/portfolio/schema.json +3 -5
- intentkit/skills/portfolio/token_balances.py +21 -21
- intentkit/skills/portfolio/wallet_approvals.py +17 -18
- intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
- intentkit/skills/portfolio/wallet_history.py +31 -31
- intentkit/skills/portfolio/wallet_net_worth.py +13 -13
- intentkit/skills/portfolio/wallet_nfts.py +19 -19
- intentkit/skills/portfolio/wallet_profitability.py +18 -18
- intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
- intentkit/skills/portfolio/wallet_stats.py +3 -3
- intentkit/skills/portfolio/wallet_swaps.py +19 -19
- intentkit/skills/pyth/__init__.py +50 -0
- intentkit/skills/pyth/base.py +11 -0
- intentkit/skills/pyth/pyth.svg +6 -0
- intentkit/skills/pyth/schema.json +75 -0
- intentkit/skills/skills.toml +40 -0
- intentkit/skills/slack/__init__.py +5 -17
- intentkit/skills/slack/base.py +3 -9
- intentkit/skills/slack/get_channel.py +8 -8
- intentkit/skills/slack/get_message.py +9 -9
- intentkit/skills/slack/schedule_message.py +5 -5
- intentkit/skills/slack/schema.json +2 -2
- intentkit/skills/slack/send_message.py +3 -5
- intentkit/skills/supabase/__init__.py +7 -23
- intentkit/skills/supabase/base.py +9 -13
- intentkit/skills/supabase/delete_data.py +5 -6
- intentkit/skills/supabase/fetch_data.py +13 -14
- intentkit/skills/supabase/insert_data.py +5 -6
- intentkit/skills/supabase/invoke_function.py +7 -8
- intentkit/skills/supabase/schema.json +2 -3
- intentkit/skills/supabase/update_data.py +7 -8
- intentkit/skills/supabase/upsert_data.py +5 -6
- intentkit/skills/superfluid/__init__.py +53 -0
- intentkit/skills/superfluid/base.py +11 -0
- intentkit/skills/superfluid/schema.json +89 -0
- intentkit/skills/superfluid/superfluid.svg +6 -0
- intentkit/skills/system/__init__.py +7 -24
- intentkit/skills/system/add_autonomous_task.py +10 -12
- intentkit/skills/system/delete_autonomous_task.py +2 -2
- intentkit/skills/system/edit_autonomous_task.py +14 -18
- intentkit/skills/system/list_autonomous_tasks.py +3 -5
- intentkit/skills/system/read_agent_api_key.py +6 -4
- intentkit/skills/system/regenerate_agent_api_key.py +6 -4
- intentkit/skills/system/schema.json +6 -8
- intentkit/skills/tavily/__init__.py +3 -12
- intentkit/skills/tavily/base.py +4 -9
- intentkit/skills/tavily/schema.json +3 -5
- intentkit/skills/tavily/tavily_extract.py +2 -4
- intentkit/skills/tavily/tavily_search.py +4 -6
- intentkit/skills/token/__init__.py +5 -10
- intentkit/skills/token/base.py +7 -11
- intentkit/skills/token/erc20_transfers.py +19 -19
- intentkit/skills/token/schema.json +3 -6
- intentkit/skills/token/token_analytics.py +3 -3
- intentkit/skills/token/token_price.py +13 -13
- intentkit/skills/token/token_search.py +9 -9
- intentkit/skills/twitter/__init__.py +11 -35
- intentkit/skills/twitter/base.py +23 -35
- intentkit/skills/twitter/follow_user.py +3 -7
- intentkit/skills/twitter/get_mentions.py +6 -13
- intentkit/skills/twitter/get_timeline.py +5 -13
- intentkit/skills/twitter/get_user_by_username.py +3 -7
- intentkit/skills/twitter/get_user_tweets.py +6 -14
- intentkit/skills/twitter/like_tweet.py +3 -7
- intentkit/skills/twitter/post_tweet.py +23 -12
- intentkit/skills/twitter/reply_tweet.py +21 -12
- intentkit/skills/twitter/retweet.py +3 -7
- intentkit/skills/twitter/schema.json +1 -0
- intentkit/skills/twitter/search_tweets.py +5 -13
- intentkit/skills/unrealspeech/__init__.py +2 -7
- intentkit/skills/unrealspeech/base.py +2 -8
- intentkit/skills/unrealspeech/schema.json +2 -5
- intentkit/skills/unrealspeech/text_to_speech.py +8 -8
- intentkit/skills/venice_audio/__init__.py +98 -106
- intentkit/skills/venice_audio/base.py +117 -121
- intentkit/skills/venice_audio/input.py +41 -41
- intentkit/skills/venice_audio/schema.json +151 -152
- intentkit/skills/venice_audio/venice_audio.py +38 -21
- intentkit/skills/venice_image/__init__.py +147 -154
- intentkit/skills/venice_image/api.py +138 -138
- intentkit/skills/venice_image/base.py +185 -192
- intentkit/skills/venice_image/config.py +33 -35
- intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
- intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
- intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
- intentkit/skills/venice_image/image_generation/image_generation_base.py +9 -9
- intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
- intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
- intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
- intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
- intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
- intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
- intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
- intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
- intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
- intentkit/skills/venice_image/schema.json +267 -267
- intentkit/skills/venice_image/utils.py +77 -78
- intentkit/skills/web_scraper/__init__.py +5 -18
- intentkit/skills/web_scraper/base.py +21 -7
- intentkit/skills/web_scraper/document_indexer.py +7 -6
- intentkit/skills/web_scraper/schema.json +2 -6
- intentkit/skills/web_scraper/scrape_and_index.py +15 -15
- intentkit/skills/web_scraper/utils.py +62 -63
- intentkit/skills/web_scraper/website_indexer.py +17 -19
- intentkit/skills/weth/__init__.py +49 -0
- intentkit/skills/weth/base.py +11 -0
- intentkit/skills/weth/schema.json +58 -0
- intentkit/skills/weth/weth.svg +6 -0
- intentkit/skills/wow/__init__.py +51 -0
- intentkit/skills/wow/base.py +11 -0
- intentkit/skills/wow/schema.json +89 -0
- intentkit/skills/wow/wow.svg +7 -0
- intentkit/skills/x402/__init__.py +61 -0
- intentkit/skills/x402/ask_agent.py +98 -0
- intentkit/skills/x402/base.py +99 -0
- intentkit/skills/x402/http_request.py +117 -0
- intentkit/skills/x402/schema.json +45 -0
- intentkit/skills/x402/x402.webp +0 -0
- intentkit/skills/xmtp/__init__.py +4 -15
- intentkit/skills/xmtp/base.py +61 -2
- intentkit/skills/xmtp/price.py +18 -13
- intentkit/skills/xmtp/schema.json +69 -71
- intentkit/skills/xmtp/swap.py +22 -25
- intentkit/skills/xmtp/transfer.py +71 -32
- intentkit/utils/chain.py +3 -3
- intentkit/utils/error.py +14 -1
- intentkit/utils/logging.py +2 -4
- intentkit/utils/s3.py +59 -7
- intentkit/utils/schema.py +100 -0
- intentkit/utils/slack_alert.py +7 -8
- {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/METADATA +14 -16
- intentkit-0.8.17.dist-info/RECORD +466 -0
- intentkit/abstracts/exception.py +0 -9
- intentkit/core/skill.py +0 -200
- intentkit/models/generator.py +0 -347
- intentkit/skills/cdp/get_balance.py +0 -110
- intentkit/skills/cdp/swap.py +0 -121
- intentkit/skills/moralis/tests/__init__.py +0 -0
- intentkit/skills/moralis/tests/test_wallet.py +0 -511
- intentkit-0.6.13.dev2.dist-info/RECORD +0 -409
- {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/WHEEL +0 -0
- {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,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
|
|
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,
|
|
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
|
-
- `
|
|
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.
|
|
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
|
|
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
|
|
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.
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
101
|
-
include_paths:
|
|
102
|
-
exclude_paths:
|
|
103
|
-
max_depth:
|
|
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
|
-
|
|
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 =
|
|
327
|
-
|
|
324
|
+
new_metadata = (
|
|
325
|
+
FirecrawlMetadataManager.create_url_metadata(
|
|
326
|
+
urls, documents, "firecrawl_crawl"
|
|
327
|
+
)
|
|
328
328
|
)
|
|
329
|
-
await
|
|
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:
|
|
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,
|
|
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
|
-
"
|
|
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
|
|
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": "
|
|
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
|
+
}
|