intentkit 0.6.0.dev12__tar.gz → 0.6.0.dev14__tar.gz
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-0.6.0.dev12 → intentkit-0.6.0.dev14}/PKG-INFO +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/__init__.py +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/abstracts/skill.py +12 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/core/engine.py +2 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/core/node.py +3 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/core/skill.py +11 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/models/skill.py +19 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/pyproject.toml +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/base.py +37 -17
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptocompare/fetch_news.py +2 -2
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptocompare/fetch_price.py +2 -2
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptocompare/fetch_top_exchanges.py +2 -2
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptocompare/fetch_top_market_cap.py +2 -2
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptocompare/fetch_top_volume.py +2 -2
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptocompare/fetch_trading_signals.py +2 -2
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/base.py +3 -3
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/enso/base.py +2 -2
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/enso/networks.py +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/enso/route.py +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/enso/tokens.py +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/firecrawl/README.md +35 -2
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/firecrawl/__init__.py +8 -0
- intentkit-0.6.0.dev14/skills/firecrawl/clear.py +87 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/firecrawl/crawl.py +2 -10
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/firecrawl/query.py +4 -4
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/firecrawl/schema.json +16 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/firecrawl/scrape.py +2 -8
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/firecrawl/utils.py +63 -44
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/heurist/image_generation_animagine_xl.py +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/heurist/image_generation_arthemy_comics.py +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/heurist/image_generation_arthemy_real.py +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/heurist/image_generation_braindance.py +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/heurist/image_generation_cyber_realistic_xl.py +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/heurist/image_generation_flux_1_dev.py +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/heurist/image_generation_sdxl.py +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/lifi/token_execute.py +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/openai/dalle_image_generation.py +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/openai/gpt_image_generation.py +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/openai/gpt_image_to_image.py +1 -1
- intentkit-0.6.0.dev14/skills/supabase/__init__.py +116 -0
- intentkit-0.6.0.dev14/skills/supabase/base.py +72 -0
- intentkit-0.6.0.dev14/skills/supabase/delete_data.py +102 -0
- intentkit-0.6.0.dev14/skills/supabase/fetch_data.py +120 -0
- intentkit-0.6.0.dev14/skills/supabase/insert_data.py +70 -0
- intentkit-0.6.0.dev14/skills/supabase/invoke_function.py +74 -0
- intentkit-0.6.0.dev14/skills/supabase/schema.json +168 -0
- intentkit-0.6.0.dev14/skills/supabase/supabase.svg +15 -0
- intentkit-0.6.0.dev14/skills/supabase/update_data.py +105 -0
- intentkit-0.6.0.dev14/skills/supabase/upsert_data.py +77 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/system/read_agent_api_key.py +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/system/regenerate_agent_api_key.py +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/token/base.py +1 -39
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/twitter/follow_user.py +3 -3
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/twitter/get_mentions.py +6 -6
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/twitter/get_timeline.py +5 -5
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/twitter/get_user_by_username.py +3 -3
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/twitter/get_user_tweets.py +5 -5
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/twitter/like_tweet.py +3 -3
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/twitter/post_tweet.py +4 -4
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/twitter/reply_tweet.py +4 -4
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/twitter/retweet.py +3 -3
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/twitter/search_tweets.py +5 -5
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/unrealspeech/text_to_speech.py +1 -1
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/web_scraper/document_indexer.py +2 -2
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/web_scraper/scrape_and_index.py +8 -8
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/web_scraper/website_indexer.py +4 -4
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/.gitignore +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/LICENSE +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/MANIFEST.in +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/abstracts/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/abstracts/agent.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/abstracts/api.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/abstracts/engine.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/abstracts/exception.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/abstracts/graph.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/abstracts/twitter.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/clients/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/clients/cdp.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/clients/twitter.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/config/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/config/config.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/core/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/core/agent.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/core/api.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/core/client.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/core/credit.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/core/prompt.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/models/agent.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/models/agent_data.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/models/agent_schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/models/app_setting.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/models/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/models/chat.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/models/conversation.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/models/credit.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/models/db.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/models/db_mig.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/models/generator.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/models/llm.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/models/redis.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/models/user.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/acolyt/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/acolyt/acolyt.jpg +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/acolyt/ask.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/acolyt/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/acolyt/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/aixbt/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/aixbt/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/aixbt/aixbt.jpg +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/aixbt/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/aixbt/projects.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/aixbt/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/allora/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/allora/allora.jpeg +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/allora/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/allora/price.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/allora/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/carv/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/carv/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/carv/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/carv/carv.webp +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/carv/fetch_news.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/carv/onchain_query.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/carv/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/carv/token_info_and_price.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cdp/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cdp/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cdp/cdp.png +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cdp/get_balance.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cdp/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/chainlist/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/chainlist/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/chainlist/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/chainlist/chain_lookup.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/chainlist/chainlist.png +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/chainlist/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/common/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/common/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/common/common.jpg +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/common/current_time.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/common/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cookiefun/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cookiefun/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cookiefun/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cookiefun/constants.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cookiefun/cookiefun.png +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cookiefun/get_account_details.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cookiefun/get_account_feed.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cookiefun/get_account_smart_followers.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cookiefun/get_sectors.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cookiefun/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cookiefun/search_accounts.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptocompare/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptocompare/api.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptocompare/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptocompare/cryptocompare.png +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptocompare/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptopanic/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptopanic/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptopanic/cryptopanic.png +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptopanic/fetch_crypto_news.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptopanic/fetch_crypto_sentiment.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptopanic/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dapplooker/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dapplooker/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dapplooker/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dapplooker/dapplooker.jpg +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dapplooker/dapplooker_token_data.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dapplooker/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/api.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/coins/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/coins/fetch_batch_historical_prices.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/coins/fetch_block.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/coins/fetch_current_prices.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/coins/fetch_first_price.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/coins/fetch_historical_prices.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/coins/fetch_price_chart.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/coins/fetch_price_percentage.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/config/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/config/chains.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/defillama.jpeg +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/fees/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/fees/fetch_fees_overview.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/stablecoins/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/stablecoins/fetch_stablecoin_chains.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/stablecoins/fetch_stablecoin_charts.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/stablecoins/fetch_stablecoin_prices.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/stablecoins/fetch_stablecoins.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/tests/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/tests/api_integration.test.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/tests/api_unit.test.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/tvl/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/tvl/fetch_chain_historical_tvl.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/tvl/fetch_chains.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/tvl/fetch_historical_tvl.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/tvl/fetch_protocol.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/tvl/fetch_protocol_current_tvl.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/tvl/fetch_protocols.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/volumes/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/volumes/fetch_dex_overview.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/volumes/fetch_dex_summary.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/volumes/fetch_options_overview.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/yields/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/yields/fetch_pool_chart.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/defillama/yields/fetch_pools.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dexscreener/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dexscreener/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dexscreener/dexscreener.png +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dexscreener/model/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dexscreener/model/search_token_response.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dexscreener/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dexscreener/search_token.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dune_analytics/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dune_analytics/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dune_analytics/dune.png +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dune_analytics/fetch_kol_buys.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dune_analytics/fetch_nation_metrics.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/dune_analytics/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/elfa/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/elfa/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/elfa/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/elfa/elfa.jpg +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/elfa/mention.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/elfa/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/elfa/stats.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/elfa/tokens.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/enso/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/enso/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/enso/abi/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/enso/abi/approval.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/enso/abi/erc20.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/enso/abi/route.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/enso/best_yield.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/enso/enso.jpg +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/enso/prices.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/enso/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/enso/wallet.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/firecrawl/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/firecrawl/firecrawl.png +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/github/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/github/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/github/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/github/github.jpg +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/github/github_search.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/github/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/heurist/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/heurist/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/heurist/heurist.png +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/heurist/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/lifi/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/lifi/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/lifi/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/lifi/lifi.png +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/lifi/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/lifi/token_quote.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/lifi/utils.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/moralis/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/moralis/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/moralis/api.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/moralis/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/moralis/fetch_chain_portfolio.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/moralis/fetch_nft_portfolio.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/moralis/fetch_solana_portfolio.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/moralis/fetch_wallet_portfolio.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/moralis/moralis.png +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/moralis/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/moralis/tests/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/moralis/tests/test_wallet.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/nation/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/nation/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/nation/nation.png +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/nation/nft_check.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/nation/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/openai/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/openai/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/openai/image_to_text.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/openai/openai.png +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/openai/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/portfolio/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/portfolio/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/portfolio/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/portfolio/constants.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/portfolio/moralis.png +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/portfolio/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/portfolio/token_balances.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/portfolio/wallet_approvals.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/portfolio/wallet_defi_positions.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/portfolio/wallet_history.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/portfolio/wallet_net_worth.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/portfolio/wallet_nfts.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/portfolio/wallet_profitability.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/portfolio/wallet_profitability_summary.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/portfolio/wallet_stats.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/portfolio/wallet_swaps.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/skills.toml +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/slack/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/slack/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/slack/get_channel.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/slack/get_message.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/slack/schedule_message.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/slack/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/slack/send_message.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/slack/slack.jpg +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/system/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/system/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/system/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/system/system.svg +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/tavily/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/tavily/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/tavily/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/tavily/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/tavily/tavily.jpg +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/tavily/tavily_extract.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/tavily/tavily_search.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/token/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/token/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/token/constants.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/token/erc20_transfers.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/token/moralis.png +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/token/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/token/token_analytics.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/token/token_price.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/token/token_search.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/twitter/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/twitter/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/twitter/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/twitter/twitter.png +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/unrealspeech/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/unrealspeech/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/unrealspeech/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/unrealspeech/unrealspeech.jpg +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_audio/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_audio/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_audio/input.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_audio/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_audio/venice_audio.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_audio/venice_logo.jpg +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/api.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/config.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_enhance/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_enhance/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_enhance/image_enhance.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_enhance/image_enhance_base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_enhance/image_enhance_input.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_generation/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_generation/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_generation/image_generation_base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_generation/image_generation_fluently_xl.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_generation/image_generation_flux_dev.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_generation/image_generation_input.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_generation/image_generation_pony_realism.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_generation/image_generation_venice_sd35.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_upscale/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_upscale/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_upscale/image_upscale.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_upscale/image_upscale_base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_upscale/image_upscale_input.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_vision/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_vision/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_vision/image_vision.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_vision/image_vision_base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/image_vision/image_vision_input.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/utils.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/venice_image/venice_image.jpg +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/web_scraper/README.md +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/web_scraper/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/web_scraper/base.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/web_scraper/langchain.png +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/web_scraper/schema.json +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/web_scraper/utils.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/utils/__init__.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/utils/chain.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/utils/error.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/utils/logging.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/utils/middleware.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/utils/random.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/utils/s3.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/utils/slack_alert.py +0 -0
- {intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/utils/tx.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: intentkit
|
|
3
|
-
Version: 0.6.0.
|
|
3
|
+
Version: 0.6.0.dev14
|
|
4
4
|
Summary: Intent-based AI Agent Platform - Core Package
|
|
5
5
|
Project-URL: Homepage, https://github.com/crestal-network/intentkit
|
|
6
6
|
Project-URL: Repository, https://github.com/crestal-network/intentkit
|
|
@@ -91,6 +91,18 @@ class SkillStoreABC(ABC):
|
|
|
91
91
|
"""
|
|
92
92
|
pass
|
|
93
93
|
|
|
94
|
+
@staticmethod
|
|
95
|
+
@abstractmethod
|
|
96
|
+
async def delete_agent_skill_data(agent_id: str, skill: str, key: str) -> None:
|
|
97
|
+
"""Delete skill data for an agent.
|
|
98
|
+
|
|
99
|
+
Args:
|
|
100
|
+
agent_id: ID of the agent
|
|
101
|
+
skill: Name of the skill
|
|
102
|
+
key: Data key
|
|
103
|
+
"""
|
|
104
|
+
pass
|
|
105
|
+
|
|
94
106
|
@staticmethod
|
|
95
107
|
@abstractmethod
|
|
96
108
|
async def get_thread_skill_data(
|
|
@@ -546,12 +546,13 @@ async def stream_agent(message: ChatMessageCreate):
|
|
|
546
546
|
thread_id = f"{input.agent_id}-{input.chat_id}"
|
|
547
547
|
stream_config = {
|
|
548
548
|
"configurable": {
|
|
549
|
-
"
|
|
549
|
+
"agent_id": agent.id,
|
|
550
550
|
"thread_id": thread_id,
|
|
551
551
|
"chat_id": input.chat_id,
|
|
552
552
|
"user_id": input.user_id,
|
|
553
553
|
"app_id": input.app_id,
|
|
554
554
|
"entrypoint": input.author_type,
|
|
555
|
+
"is_private": is_private,
|
|
555
556
|
"payer": payer if payment_enabled else None,
|
|
556
557
|
},
|
|
557
558
|
"recursion_limit": recursion_limit,
|
|
@@ -25,6 +25,7 @@ from pydantic import BaseModel
|
|
|
25
25
|
|
|
26
26
|
from intentkit.abstracts.graph import AgentError, AgentState
|
|
27
27
|
from intentkit.core.credit import skill_cost
|
|
28
|
+
from intentkit.models.agent import Agent
|
|
28
29
|
from intentkit.models.credit import CreditAccount, OwnerType
|
|
29
30
|
from intentkit.models.skill import Skill
|
|
30
31
|
|
|
@@ -202,7 +203,8 @@ class PostModelNode(RunnableCallable):
|
|
|
202
203
|
return state_update
|
|
203
204
|
logger.debug(f"last: {messages[-1]}")
|
|
204
205
|
msg = messages[-1]
|
|
205
|
-
|
|
206
|
+
agent_id = cfg.get("agent_id")
|
|
207
|
+
agent = await Agent.get(agent_id)
|
|
206
208
|
account = await CreditAccount.get_or_create(OwnerType.USER, payer)
|
|
207
209
|
if hasattr(msg, "tool_calls") and msg.tool_calls:
|
|
208
210
|
for tool_call in msg.tool_calls:
|
|
@@ -78,6 +78,17 @@ class SkillStore(SkillStoreABC):
|
|
|
78
78
|
)
|
|
79
79
|
await skill_data.save()
|
|
80
80
|
|
|
81
|
+
@staticmethod
|
|
82
|
+
async def delete_agent_skill_data(agent_id: str, skill: str, key: str) -> None:
|
|
83
|
+
"""Delete skill data for an agent.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
agent_id: ID of the agent
|
|
87
|
+
skill: Name of the skill
|
|
88
|
+
key: Data key
|
|
89
|
+
"""
|
|
90
|
+
await AgentSkillData.delete(agent_id, skill, key)
|
|
91
|
+
|
|
81
92
|
@staticmethod
|
|
82
93
|
async def get_thread_skill_data(
|
|
83
94
|
thread_id: str, skill: str, key: str
|
|
@@ -172,6 +172,25 @@ class AgentSkillData(AgentSkillDataCreate):
|
|
|
172
172
|
)
|
|
173
173
|
return result.data if result else None
|
|
174
174
|
|
|
175
|
+
@classmethod
|
|
176
|
+
async def delete(cls, agent_id: str, skill: str, key: str) -> None:
|
|
177
|
+
"""Delete skill data for an agent.
|
|
178
|
+
|
|
179
|
+
Args:
|
|
180
|
+
agent_id: ID of the agent
|
|
181
|
+
skill: Name of the skill
|
|
182
|
+
key: Data key
|
|
183
|
+
"""
|
|
184
|
+
async with get_session() as db:
|
|
185
|
+
await db.execute(
|
|
186
|
+
delete(AgentSkillDataTable).where(
|
|
187
|
+
AgentSkillDataTable.agent_id == agent_id,
|
|
188
|
+
AgentSkillDataTable.skill == skill,
|
|
189
|
+
AgentSkillDataTable.key == key,
|
|
190
|
+
)
|
|
191
|
+
)
|
|
192
|
+
await db.commit()
|
|
193
|
+
|
|
175
194
|
@classmethod
|
|
176
195
|
async def clean_data(cls, agent_id: str):
|
|
177
196
|
"""Clean all skill data for an agent.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import asyncio
|
|
1
2
|
import logging
|
|
2
3
|
from typing import Any, Callable, Dict, Literal, NotRequired, Optional, TypedDict, Union
|
|
3
4
|
|
|
@@ -30,10 +31,33 @@ class SkillConfig(TypedDict):
|
|
|
30
31
|
|
|
31
32
|
|
|
32
33
|
class SkillContext(BaseModel):
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
user_id: Optional[str]
|
|
34
|
+
skill_category: str
|
|
35
|
+
agent_id: str
|
|
36
|
+
user_id: Optional[str] = None
|
|
37
|
+
chat_id: Optional[str] = None
|
|
38
|
+
app_id: Optional[str] = None
|
|
36
39
|
entrypoint: Literal["web", "twitter", "telegram", "trigger", "api"]
|
|
40
|
+
is_private: bool
|
|
41
|
+
payer: Optional[str] = None
|
|
42
|
+
_agent: Optional[Agent] = None
|
|
43
|
+
|
|
44
|
+
@property
|
|
45
|
+
def agent(self) -> Agent:
|
|
46
|
+
if self._agent is None:
|
|
47
|
+
self._agent = asyncio.run(Agent.get(self.agent_id))
|
|
48
|
+
return self._agent
|
|
49
|
+
|
|
50
|
+
@property
|
|
51
|
+
def config(self) -> Dict[str, Any]:
|
|
52
|
+
agent = self.agent
|
|
53
|
+
config = None
|
|
54
|
+
if agent.skills:
|
|
55
|
+
config = agent.skills.get(self.skill_category)
|
|
56
|
+
if not config:
|
|
57
|
+
raise ValueError(
|
|
58
|
+
f"Skill {self.skill_category} not found in agent {self.agent_id}"
|
|
59
|
+
)
|
|
60
|
+
return config
|
|
37
61
|
|
|
38
62
|
|
|
39
63
|
class IntentKitSkill(BaseTool):
|
|
@@ -156,19 +180,15 @@ class IntentKitSkill(BaseTool):
|
|
|
156
180
|
def context_from_config(self, runner_config: RunnableConfig) -> SkillContext:
|
|
157
181
|
if "configurable" not in runner_config:
|
|
158
182
|
raise ValueError("configurable not in runner_config")
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
config = None
|
|
163
|
-
if agent.skills:
|
|
164
|
-
config = agent.skills.get(self.category)
|
|
165
|
-
if not config:
|
|
166
|
-
config = getattr(agent, self.category + "_config", {})
|
|
167
|
-
if not config:
|
|
168
|
-
config = {}
|
|
183
|
+
configurable = runner_config["configurable"]
|
|
184
|
+
if not configurable:
|
|
185
|
+
raise ValueError("configurable in runnable config is empty")
|
|
169
186
|
return SkillContext(
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
user_id=
|
|
173
|
-
|
|
187
|
+
skill_category=self.category,
|
|
188
|
+
agent_id=configurable.get("agent_id"),
|
|
189
|
+
user_id=configurable.get("user_id"),
|
|
190
|
+
app_id=configurable.get("app_id"),
|
|
191
|
+
chat_id=configurable.get("chat_id"),
|
|
192
|
+
entrypoint=configurable.get("entrypoint"),
|
|
193
|
+
is_private=configurable.get("is_private"),
|
|
174
194
|
)
|
|
@@ -57,7 +57,7 @@ class CryptoCompareFetchNews(CryptoCompareBaseTool):
|
|
|
57
57
|
context = self.context_from_config(config)
|
|
58
58
|
|
|
59
59
|
# Check rate limit
|
|
60
|
-
await self.check_rate_limit(context.
|
|
60
|
+
await self.check_rate_limit(context.agent_id, max_requests=5, interval=60)
|
|
61
61
|
|
|
62
62
|
# Get API key from context
|
|
63
63
|
api_key = context.config.get("api_key")
|
|
@@ -93,4 +93,4 @@ class CryptoCompareFetchNews(CryptoCompareBaseTool):
|
|
|
93
93
|
|
|
94
94
|
except Exception as e:
|
|
95
95
|
logger.error("Error fetching news: %s", str(e))
|
|
96
|
-
raise type(e)(f"[agent:{context.
|
|
96
|
+
raise type(e)(f"[agent:{context.agent_id}]: {e}") from e
|
|
@@ -67,7 +67,7 @@ class CryptoCompareFetchPrice(CryptoCompareBaseTool):
|
|
|
67
67
|
context = self.context_from_config(config)
|
|
68
68
|
|
|
69
69
|
# Check rate limit
|
|
70
|
-
await self.check_rate_limit(context.
|
|
70
|
+
await self.check_rate_limit(context.agent_id, max_requests=10, interval=60)
|
|
71
71
|
|
|
72
72
|
# Get API key from context
|
|
73
73
|
api_key = context.config.get("api_key")
|
|
@@ -96,4 +96,4 @@ class CryptoCompareFetchPrice(CryptoCompareBaseTool):
|
|
|
96
96
|
|
|
97
97
|
except Exception as e:
|
|
98
98
|
logger.error("Error fetching price: %s", str(e))
|
|
99
|
-
raise type(e)(f"[agent:{context.
|
|
99
|
+
raise type(e)(f"[agent:{context.agent_id}]: {e}") from e
|
|
@@ -73,7 +73,7 @@ class CryptoCompareFetchTopExchanges(CryptoCompareBaseTool):
|
|
|
73
73
|
context = self.context_from_config(config)
|
|
74
74
|
|
|
75
75
|
# Check rate limit
|
|
76
|
-
await self.check_rate_limit(context.
|
|
76
|
+
await self.check_rate_limit(context.agent_id, max_requests=5, interval=60)
|
|
77
77
|
|
|
78
78
|
# Get API key from context
|
|
79
79
|
api_key = context.config.get("api_key")
|
|
@@ -110,4 +110,4 @@ class CryptoCompareFetchTopExchanges(CryptoCompareBaseTool):
|
|
|
110
110
|
|
|
111
111
|
except Exception as e:
|
|
112
112
|
logger.error("Error fetching top exchanges: %s", str(e))
|
|
113
|
-
raise type(e)(f"[agent:{context.
|
|
113
|
+
raise type(e)(f"[agent:{context.agent_id}]: {e}") from e
|
{intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptocompare/fetch_top_market_cap.py
RENAMED
|
@@ -66,7 +66,7 @@ class CryptoCompareFetchTopMarketCap(CryptoCompareBaseTool):
|
|
|
66
66
|
context = self.context_from_config(config)
|
|
67
67
|
|
|
68
68
|
# Check rate limit
|
|
69
|
-
await self.check_rate_limit(context.
|
|
69
|
+
await self.check_rate_limit(context.agent_id, max_requests=5, interval=60)
|
|
70
70
|
|
|
71
71
|
# Get API key from context
|
|
72
72
|
api_key = context.config.get("api_key")
|
|
@@ -106,4 +106,4 @@ class CryptoCompareFetchTopMarketCap(CryptoCompareBaseTool):
|
|
|
106
106
|
|
|
107
107
|
except Exception as e:
|
|
108
108
|
logger.error("Error fetching top market cap: %s", str(e))
|
|
109
|
-
raise type(e)(f"[agent:{context.
|
|
109
|
+
raise type(e)(f"[agent:{context.agent_id}]: {e}") from e
|
|
@@ -65,7 +65,7 @@ class CryptoCompareFetchTopVolume(CryptoCompareBaseTool):
|
|
|
65
65
|
context = self.context_from_config(config)
|
|
66
66
|
|
|
67
67
|
# Check rate limit
|
|
68
|
-
await self.check_rate_limit(context.
|
|
68
|
+
await self.check_rate_limit(context.agent_id, max_requests=5, interval=60)
|
|
69
69
|
|
|
70
70
|
# Get API key from context
|
|
71
71
|
api_key = context.config.get("api_key")
|
|
@@ -105,4 +105,4 @@ class CryptoCompareFetchTopVolume(CryptoCompareBaseTool):
|
|
|
105
105
|
|
|
106
106
|
except Exception as e:
|
|
107
107
|
logger.error("Error fetching top volume: %s", str(e))
|
|
108
|
-
raise type(e)(f"[agent:{context.
|
|
108
|
+
raise type(e)(f"[agent:{context.agent_id}]: {e}") from e
|
{intentkit-0.6.0.dev12 → intentkit-0.6.0.dev14}/skills/cryptocompare/fetch_trading_signals.py
RENAMED
|
@@ -68,7 +68,7 @@ class CryptoCompareFetchTradingSignals(CryptoCompareBaseTool):
|
|
|
68
68
|
context = self.context_from_config(config)
|
|
69
69
|
|
|
70
70
|
# Check rate limit
|
|
71
|
-
await self.check_rate_limit(context.
|
|
71
|
+
await self.check_rate_limit(context.agent_id, max_requests=5, interval=60)
|
|
72
72
|
|
|
73
73
|
# Get API key from context
|
|
74
74
|
api_key = context.config.get("api_key")
|
|
@@ -104,4 +104,4 @@ class CryptoCompareFetchTradingSignals(CryptoCompareBaseTool):
|
|
|
104
104
|
|
|
105
105
|
except Exception as e:
|
|
106
106
|
logger.error("Error fetching trading signals: %s", str(e))
|
|
107
|
-
raise type(e)(f"[agent:{context.
|
|
107
|
+
raise type(e)(f"[agent:{context.agent_id}]: {e}") from e
|
|
@@ -52,7 +52,7 @@ class DefiLlamaBaseTool(IntentKitSkill):
|
|
|
52
52
|
Rate limit status and error message if limited
|
|
53
53
|
"""
|
|
54
54
|
rate_limit = await self.skill_store.get_agent_skill_data(
|
|
55
|
-
context.
|
|
55
|
+
context.agent_id, self.name, "rate_limit"
|
|
56
56
|
)
|
|
57
57
|
current_time = datetime.now(tz=timezone.utc)
|
|
58
58
|
|
|
@@ -67,7 +67,7 @@ class DefiLlamaBaseTool(IntentKitSkill):
|
|
|
67
67
|
|
|
68
68
|
rate_limit["count"] += 1
|
|
69
69
|
await self.skill_store.save_agent_skill_data(
|
|
70
|
-
context.
|
|
70
|
+
context.agent_id, self.name, "rate_limit", rate_limit
|
|
71
71
|
)
|
|
72
72
|
return False, None
|
|
73
73
|
|
|
@@ -76,7 +76,7 @@ class DefiLlamaBaseTool(IntentKitSkill):
|
|
|
76
76
|
"reset_time": (current_time + timedelta(minutes=interval)).isoformat(),
|
|
77
77
|
}
|
|
78
78
|
await self.skill_store.save_agent_skill_data(
|
|
79
|
-
context.
|
|
79
|
+
context.agent_id, self.name, "rate_limit", new_rate_limit
|
|
80
80
|
)
|
|
81
81
|
return False, None
|
|
82
82
|
|
|
@@ -32,7 +32,7 @@ class EnsoBaseTool(IntentKitSkill):
|
|
|
32
32
|
Returns:
|
|
33
33
|
Optional[EvmServerAccount]: The account object if available.
|
|
34
34
|
"""
|
|
35
|
-
client: CdpClient = await get_cdp_client(context.
|
|
35
|
+
client: CdpClient = await get_cdp_client(context.agent_id, self.skill_store)
|
|
36
36
|
return await client.get_account()
|
|
37
37
|
|
|
38
38
|
async def get_wallet_provider(
|
|
@@ -46,7 +46,7 @@ class EnsoBaseTool(IntentKitSkill):
|
|
|
46
46
|
Returns:
|
|
47
47
|
Optional[CdpEvmServerWalletProvider]: The wallet provider if available.
|
|
48
48
|
"""
|
|
49
|
-
client: CdpClient = await get_cdp_client(context.
|
|
49
|
+
client: CdpClient = await get_cdp_client(context.agent_id, self.skill_store)
|
|
50
50
|
return await client.get_wallet_provider()
|
|
51
51
|
|
|
52
52
|
def get_chain_provider(self, context: SkillContext) -> Optional[ChainProvider]:
|
|
@@ -184,7 +184,7 @@ class EnsoRouteShortcut(EnsoBaseTool):
|
|
|
184
184
|
"""
|
|
185
185
|
|
|
186
186
|
context: SkillContext = self.context_from_config(config)
|
|
187
|
-
agent_id = context.
|
|
187
|
+
agent_id = context.agent_id
|
|
188
188
|
api_token = self.get_api_token(context)
|
|
189
189
|
account = await self.get_account(context)
|
|
190
190
|
|
|
@@ -158,7 +158,7 @@ class EnsoGetTokens(EnsoBaseTool):
|
|
|
158
158
|
url = f"{base_url}/api/v1/tokens"
|
|
159
159
|
|
|
160
160
|
context: SkillContext = self.context_from_config(config)
|
|
161
|
-
agent_id = context.
|
|
161
|
+
agent_id = context.agent_id
|
|
162
162
|
api_token = self.get_api_token(context)
|
|
163
163
|
main_tokens = self.get_main_tokens(context)
|
|
164
164
|
headers = {
|
|
@@ -37,6 +37,14 @@ Queries previously indexed Firecrawl content using semantic search.
|
|
|
37
37
|
- `query` (required): The search query
|
|
38
38
|
- `limit` (optional): Maximum number of results to return (1-10, default: 4)
|
|
39
39
|
|
|
40
|
+
### 4. firecrawl_clear_indexed_content
|
|
41
|
+
Clears all previously indexed Firecrawl content from the vector store.
|
|
42
|
+
|
|
43
|
+
**Parameters:**
|
|
44
|
+
- `confirm` (required): Must be set to true to confirm the deletion (default: false)
|
|
45
|
+
|
|
46
|
+
**Note:** This action is permanent and cannot be undone. Use when you want to start fresh with new content.
|
|
47
|
+
|
|
40
48
|
## API Key Configuration
|
|
41
49
|
Set your Firecrawl API key as an environment variable:
|
|
42
50
|
```bash
|
|
@@ -53,7 +61,8 @@ export FIRECRAWL_API_KEY=fc-your-api-key-here
|
|
|
53
61
|
"skills": [
|
|
54
62
|
"firecrawl_scrape",
|
|
55
63
|
"firecrawl_crawl",
|
|
56
|
-
"firecrawl_query_indexed_content"
|
|
64
|
+
"firecrawl_query_indexed_content",
|
|
65
|
+
"firecrawl_clear_indexed_content"
|
|
57
66
|
]
|
|
58
67
|
}
|
|
59
68
|
```
|
|
@@ -120,6 +129,30 @@ Prompt: "Use firecrawl_query_indexed_content to search for 'democratize finance'
|
|
|
120
129
|
- Results tagged with [Firecrawl Scrape] or [Firecrawl Crawl]
|
|
121
130
|
- Source URLs and metadata included
|
|
122
131
|
|
|
132
|
+
### Step 7: Test Clear Indexed Content
|
|
133
|
+
|
|
134
|
+
**Test clearing all indexed content:**
|
|
135
|
+
```
|
|
136
|
+
Prompt: "Use firecrawl_clear_indexed_content with confirm=true to clear all indexed content"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**Expected Result:**
|
|
140
|
+
- All indexed content removed from vector store
|
|
141
|
+
- Confirmation message displayed
|
|
142
|
+
- Subsequent queries return no results
|
|
143
|
+
|
|
144
|
+
### Step 8: Test Re-indexing After Clear
|
|
145
|
+
|
|
146
|
+
**Test that content can be re-indexed after clearing:**
|
|
147
|
+
```
|
|
148
|
+
Prompt: "Use firecrawl_scrape to scrape https://example.com and index the content"
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Expected Result:**
|
|
152
|
+
- Content successfully scraped and indexed
|
|
153
|
+
- Fresh vector store created
|
|
154
|
+
- Content available for querying again
|
|
155
|
+
|
|
123
156
|
## Common Use Cases
|
|
124
157
|
|
|
125
158
|
### Documentation Indexing
|
|
@@ -175,4 +208,4 @@ Prompt: "Use firecrawl_query_indexed_content to search for 'democratize finance'
|
|
|
175
208
|
- **Metadata Rich**: Includes source URLs, timestamps, and content types
|
|
176
209
|
- **Semantic Search**: Uses OpenAI embeddings for intelligent querying
|
|
177
210
|
- **Batch Processing**: Efficient handling of multiple pages
|
|
178
|
-
- **Content Filtering**: Flexible include/exclude options for targeted scraping
|
|
211
|
+
- **Content Filtering**: Flexible include/exclude options for targeted scraping
|
|
@@ -6,6 +6,7 @@ from typing import TypedDict
|
|
|
6
6
|
from intentkit.abstracts.skill import SkillStoreABC
|
|
7
7
|
from intentkit.skills.base import SkillConfig, SkillState
|
|
8
8
|
from intentkit.skills.firecrawl.base import FirecrawlBaseTool
|
|
9
|
+
from intentkit.skills.firecrawl.clear import FirecrawlClearIndexedContent
|
|
9
10
|
from intentkit.skills.firecrawl.crawl import FirecrawlCrawl
|
|
10
11
|
from intentkit.skills.firecrawl.query import FirecrawlQueryIndexedContent
|
|
11
12
|
from intentkit.skills.firecrawl.scrape import FirecrawlScrape
|
|
@@ -20,6 +21,7 @@ class SkillStates(TypedDict):
|
|
|
20
21
|
firecrawl_scrape: SkillState
|
|
21
22
|
firecrawl_crawl: SkillState
|
|
22
23
|
firecrawl_query_indexed_content: SkillState
|
|
24
|
+
firecrawl_clear_indexed_content: SkillState
|
|
23
25
|
|
|
24
26
|
|
|
25
27
|
class Config(SkillConfig):
|
|
@@ -95,5 +97,11 @@ def get_firecrawl_skill(
|
|
|
95
97
|
skill_store=store,
|
|
96
98
|
)
|
|
97
99
|
return _cache[name]
|
|
100
|
+
elif name == "firecrawl_clear_indexed_content":
|
|
101
|
+
if name not in _cache:
|
|
102
|
+
_cache[name] = FirecrawlClearIndexedContent(
|
|
103
|
+
skill_store=store,
|
|
104
|
+
)
|
|
105
|
+
return _cache[name]
|
|
98
106
|
else:
|
|
99
107
|
raise ValueError(f"Unknown Firecrawl skill: {name}")
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import Type
|
|
3
|
+
|
|
4
|
+
from langchain_core.runnables import RunnableConfig
|
|
5
|
+
from pydantic import BaseModel, Field
|
|
6
|
+
|
|
7
|
+
from intentkit.skills.firecrawl.base import FirecrawlBaseTool
|
|
8
|
+
|
|
9
|
+
logger = logging.getLogger(__name__)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class FirecrawlClearInput(BaseModel):
|
|
13
|
+
"""Input for Firecrawl clear tool."""
|
|
14
|
+
|
|
15
|
+
confirm: bool = Field(
|
|
16
|
+
description="Confirmation to clear all indexed content (must be true)",
|
|
17
|
+
default=False,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class FirecrawlClearIndexedContent(FirecrawlBaseTool):
|
|
22
|
+
"""Tool for clearing all indexed Firecrawl content.
|
|
23
|
+
|
|
24
|
+
This tool removes all previously indexed content from the Firecrawl vector store,
|
|
25
|
+
allowing for a fresh start with new content.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
name: str = "firecrawl_clear_indexed_content"
|
|
29
|
+
description: str = (
|
|
30
|
+
"Clear all previously indexed Firecrawl content from the vector store.\n"
|
|
31
|
+
"This will permanently delete all indexed content and cannot be undone.\n"
|
|
32
|
+
"Use this tool when you want to start fresh with new content."
|
|
33
|
+
)
|
|
34
|
+
args_schema: Type[BaseModel] = FirecrawlClearInput
|
|
35
|
+
|
|
36
|
+
async def _arun(
|
|
37
|
+
self,
|
|
38
|
+
confirm: bool = False,
|
|
39
|
+
config: RunnableConfig = None,
|
|
40
|
+
**kwargs,
|
|
41
|
+
) -> str:
|
|
42
|
+
"""Clear all indexed Firecrawl content for the agent.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
confirm: Must be True to confirm the deletion
|
|
46
|
+
config: The configuration for the tool call
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
str: Confirmation message
|
|
50
|
+
"""
|
|
51
|
+
context = self.context_from_config(config)
|
|
52
|
+
agent_id = context.agent_id
|
|
53
|
+
|
|
54
|
+
if not agent_id:
|
|
55
|
+
return "Error: Agent ID not available for clearing content."
|
|
56
|
+
|
|
57
|
+
if not confirm:
|
|
58
|
+
return "Error: You must set confirm=true to clear all indexed content."
|
|
59
|
+
|
|
60
|
+
logger.info(
|
|
61
|
+
f"firecrawl_clear: Starting clear indexed content operation for agent {agent_id}"
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
try:
|
|
65
|
+
# Delete vector store data (using web_scraper storage format for compatibility)
|
|
66
|
+
vector_store_key = f"vector_store_{agent_id}"
|
|
67
|
+
await self.skill_store.delete_agent_skill_data(
|
|
68
|
+
agent_id, "web_scraper", vector_store_key
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
# Delete metadata
|
|
72
|
+
metadata_key = f"indexed_urls_{agent_id}"
|
|
73
|
+
await self.skill_store.delete_agent_skill_data(
|
|
74
|
+
agent_id, "web_scraper", metadata_key
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
logger.info(
|
|
78
|
+
f"firecrawl_clear: Successfully cleared all indexed content for agent {agent_id}"
|
|
79
|
+
)
|
|
80
|
+
return "Successfully cleared all Firecrawl indexed content. The vector store is now empty and ready for new content."
|
|
81
|
+
|
|
82
|
+
except Exception as e:
|
|
83
|
+
logger.error(
|
|
84
|
+
f"firecrawl_clear: Error clearing indexed content for agent {agent_id}: {e}",
|
|
85
|
+
exc_info=True,
|
|
86
|
+
)
|
|
87
|
+
return f"Error clearing indexed content: {str(e)}"
|
|
@@ -302,21 +302,13 @@ class FirecrawlCrawl(FirecrawlBaseTool):
|
|
|
302
302
|
"language", ""
|
|
303
303
|
),
|
|
304
304
|
"source_type": "firecrawl_crawl",
|
|
305
|
-
"indexed_at": str(
|
|
306
|
-
context.agent.id
|
|
307
|
-
if context and context.agent
|
|
308
|
-
else "unknown"
|
|
309
|
-
),
|
|
305
|
+
"indexed_at": str(context.agent_id),
|
|
310
306
|
},
|
|
311
307
|
)
|
|
312
308
|
documents.append(document)
|
|
313
309
|
|
|
314
310
|
# Get agent ID for indexing
|
|
315
|
-
agent_id =
|
|
316
|
-
context.agent.id
|
|
317
|
-
if context and context.agent
|
|
318
|
-
else None
|
|
319
|
-
)
|
|
311
|
+
agent_id = context.agent_id
|
|
320
312
|
if agent_id and documents:
|
|
321
313
|
# Index all documents
|
|
322
314
|
total_chunks, was_merged = await index_documents(
|
|
@@ -54,10 +54,10 @@ class FirecrawlQueryIndexedContent(FirecrawlBaseTool):
|
|
|
54
54
|
raise ValueError("Configuration is required but not provided")
|
|
55
55
|
|
|
56
56
|
context = self.context_from_config(config)
|
|
57
|
-
if not context or not context.
|
|
57
|
+
if not context or not context.agent_id:
|
|
58
58
|
raise ValueError("Agent ID is required but not found in configuration")
|
|
59
59
|
|
|
60
|
-
agent_id = context.
|
|
60
|
+
agent_id = context.agent_id
|
|
61
61
|
|
|
62
62
|
logger.info(f"[{agent_id}] Starting Firecrawl query operation: '{query}'")
|
|
63
63
|
|
|
@@ -111,8 +111,8 @@ class FirecrawlQueryIndexedContent(FirecrawlBaseTool):
|
|
|
111
111
|
try:
|
|
112
112
|
if config:
|
|
113
113
|
context = self.context_from_config(config)
|
|
114
|
-
if context and context.
|
|
115
|
-
agent_id = context.
|
|
114
|
+
if context and context.agent_id:
|
|
115
|
+
agent_id = context.agent_id
|
|
116
116
|
except Exception:
|
|
117
117
|
pass
|
|
118
118
|
|
|
@@ -68,6 +68,22 @@
|
|
|
68
68
|
],
|
|
69
69
|
"description": "Query previously indexed Firecrawl content to find relevant information and answer questions. Use this to search through content that was scraped and indexed using Firecrawl tools.",
|
|
70
70
|
"default": "private"
|
|
71
|
+
},
|
|
72
|
+
"firecrawl_clear_indexed_content": {
|
|
73
|
+
"type": "string",
|
|
74
|
+
"title": "Clear Indexed Content",
|
|
75
|
+
"enum": [
|
|
76
|
+
"disabled",
|
|
77
|
+
"public",
|
|
78
|
+
"private"
|
|
79
|
+
],
|
|
80
|
+
"x-enum-title": [
|
|
81
|
+
"Disabled",
|
|
82
|
+
"Agent Owner + All Users",
|
|
83
|
+
"Agent Owner Only"
|
|
84
|
+
],
|
|
85
|
+
"description": "Clear all previously indexed Firecrawl content from the vector store. This will permanently delete all indexed content and cannot be undone. Use this tool when you want to start fresh with new content.",
|
|
86
|
+
"default": "private"
|
|
71
87
|
}
|
|
72
88
|
},
|
|
73
89
|
"description": "States for each Firecrawl skill (disabled, public, or private)"
|
|
@@ -255,18 +255,12 @@ class FirecrawlScrape(FirecrawlBaseTool):
|
|
|
255
255
|
"description": metadata.get("description", ""),
|
|
256
256
|
"language": metadata.get("language", ""),
|
|
257
257
|
"source_type": "firecrawl_scrape",
|
|
258
|
-
"indexed_at": str(
|
|
259
|
-
context.agent.id
|
|
260
|
-
if context and context.agent
|
|
261
|
-
else "unknown"
|
|
262
|
-
),
|
|
258
|
+
"indexed_at": str(context.agent_id),
|
|
263
259
|
},
|
|
264
260
|
)
|
|
265
261
|
|
|
266
262
|
# Get agent ID for indexing
|
|
267
|
-
agent_id =
|
|
268
|
-
context.agent.id if context and context.agent else None
|
|
269
|
-
)
|
|
263
|
+
agent_id = context.agent_id
|
|
270
264
|
if agent_id:
|
|
271
265
|
# Index the document
|
|
272
266
|
total_chunks, was_merged = await index_documents(
|