intentkit 0.5.0__py3-none-any.whl → 0.5.2__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 +17 -0
- intentkit/abstracts/__init__.py +0 -0
- intentkit/abstracts/agent.py +60 -0
- intentkit/abstracts/api.py +4 -0
- intentkit/abstracts/engine.py +38 -0
- intentkit/abstracts/exception.py +9 -0
- intentkit/abstracts/graph.py +25 -0
- intentkit/abstracts/skill.py +129 -0
- intentkit/abstracts/twitter.py +54 -0
- intentkit/clients/__init__.py +14 -0
- intentkit/clients/cdp.py +53 -0
- intentkit/clients/twitter.py +445 -0
- intentkit/config/__init__.py +0 -0
- intentkit/config/config.py +164 -0
- intentkit/core/__init__.py +0 -0
- intentkit/core/agent.py +191 -0
- intentkit/core/api.py +40 -0
- intentkit/core/client.py +45 -0
- intentkit/core/credit.py +1767 -0
- intentkit/core/engine.py +1018 -0
- intentkit/core/node.py +223 -0
- intentkit/core/prompt.py +58 -0
- intentkit/core/skill.py +124 -0
- intentkit/models/agent.py +1689 -0
- intentkit/models/agent_data.py +810 -0
- intentkit/models/agent_schema.json +733 -0
- intentkit/models/app_setting.py +156 -0
- intentkit/models/base.py +9 -0
- intentkit/models/chat.py +581 -0
- intentkit/models/conversation.py +286 -0
- intentkit/models/credit.py +1406 -0
- intentkit/models/db.py +120 -0
- intentkit/models/db_mig.py +102 -0
- intentkit/models/generator.py +347 -0
- intentkit/models/llm.py +746 -0
- intentkit/models/redis.py +132 -0
- intentkit/models/skill.py +466 -0
- intentkit/models/user.py +243 -0
- intentkit/skills/__init__.py +12 -0
- intentkit/skills/acolyt/__init__.py +83 -0
- intentkit/skills/acolyt/acolyt.jpg +0 -0
- intentkit/skills/acolyt/ask.py +128 -0
- intentkit/skills/acolyt/base.py +28 -0
- intentkit/skills/acolyt/schema.json +89 -0
- intentkit/skills/aixbt/README.md +71 -0
- intentkit/skills/aixbt/__init__.py +73 -0
- intentkit/skills/aixbt/aixbt.jpg +0 -0
- intentkit/skills/aixbt/base.py +21 -0
- intentkit/skills/aixbt/projects.py +153 -0
- intentkit/skills/aixbt/schema.json +99 -0
- intentkit/skills/allora/__init__.py +83 -0
- intentkit/skills/allora/allora.jpeg +0 -0
- intentkit/skills/allora/base.py +28 -0
- intentkit/skills/allora/price.py +130 -0
- intentkit/skills/allora/schema.json +89 -0
- intentkit/skills/base.py +174 -0
- intentkit/skills/carv/README.md +95 -0
- intentkit/skills/carv/__init__.py +121 -0
- intentkit/skills/carv/base.py +183 -0
- intentkit/skills/carv/carv.webp +0 -0
- intentkit/skills/carv/fetch_news.py +92 -0
- intentkit/skills/carv/onchain_query.py +164 -0
- intentkit/skills/carv/schema.json +137 -0
- intentkit/skills/carv/token_info_and_price.py +110 -0
- intentkit/skills/cdp/__init__.py +137 -0
- intentkit/skills/cdp/base.py +21 -0
- intentkit/skills/cdp/cdp.png +0 -0
- intentkit/skills/cdp/get_balance.py +81 -0
- intentkit/skills/cdp/schema.json +473 -0
- intentkit/skills/chainlist/README.md +38 -0
- intentkit/skills/chainlist/__init__.py +54 -0
- intentkit/skills/chainlist/base.py +21 -0
- intentkit/skills/chainlist/chain_lookup.py +208 -0
- intentkit/skills/chainlist/chainlist.png +0 -0
- intentkit/skills/chainlist/schema.json +47 -0
- intentkit/skills/common/__init__.py +82 -0
- intentkit/skills/common/base.py +21 -0
- intentkit/skills/common/common.jpg +0 -0
- intentkit/skills/common/current_time.py +84 -0
- intentkit/skills/common/schema.json +57 -0
- intentkit/skills/cookiefun/README.md +121 -0
- intentkit/skills/cookiefun/__init__.py +78 -0
- intentkit/skills/cookiefun/base.py +41 -0
- intentkit/skills/cookiefun/constants.py +18 -0
- intentkit/skills/cookiefun/cookiefun.png +0 -0
- intentkit/skills/cookiefun/get_account_details.py +171 -0
- intentkit/skills/cookiefun/get_account_feed.py +282 -0
- intentkit/skills/cookiefun/get_account_smart_followers.py +181 -0
- intentkit/skills/cookiefun/get_sectors.py +128 -0
- intentkit/skills/cookiefun/schema.json +155 -0
- intentkit/skills/cookiefun/search_accounts.py +225 -0
- intentkit/skills/cryptocompare/__init__.py +130 -0
- intentkit/skills/cryptocompare/api.py +159 -0
- intentkit/skills/cryptocompare/base.py +303 -0
- intentkit/skills/cryptocompare/cryptocompare.png +0 -0
- intentkit/skills/cryptocompare/fetch_news.py +96 -0
- intentkit/skills/cryptocompare/fetch_price.py +99 -0
- intentkit/skills/cryptocompare/fetch_top_exchanges.py +113 -0
- intentkit/skills/cryptocompare/fetch_top_market_cap.py +109 -0
- intentkit/skills/cryptocompare/fetch_top_volume.py +108 -0
- intentkit/skills/cryptocompare/fetch_trading_signals.py +107 -0
- intentkit/skills/cryptocompare/schema.json +168 -0
- intentkit/skills/cryptopanic/__init__.py +108 -0
- intentkit/skills/cryptopanic/base.py +51 -0
- intentkit/skills/cryptopanic/cryptopanic.png +0 -0
- intentkit/skills/cryptopanic/fetch_crypto_news.py +153 -0
- intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +136 -0
- intentkit/skills/cryptopanic/schema.json +103 -0
- intentkit/skills/dapplooker/README.md +92 -0
- intentkit/skills/dapplooker/__init__.py +83 -0
- intentkit/skills/dapplooker/base.py +26 -0
- intentkit/skills/dapplooker/dapplooker.jpg +0 -0
- intentkit/skills/dapplooker/dapplooker_token_data.py +476 -0
- intentkit/skills/dapplooker/schema.json +91 -0
- intentkit/skills/defillama/__init__.py +323 -0
- intentkit/skills/defillama/api.py +315 -0
- intentkit/skills/defillama/base.py +135 -0
- intentkit/skills/defillama/coins/__init__.py +0 -0
- intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +116 -0
- intentkit/skills/defillama/coins/fetch_block.py +98 -0
- intentkit/skills/defillama/coins/fetch_current_prices.py +105 -0
- intentkit/skills/defillama/coins/fetch_first_price.py +100 -0
- intentkit/skills/defillama/coins/fetch_historical_prices.py +110 -0
- intentkit/skills/defillama/coins/fetch_price_chart.py +109 -0
- intentkit/skills/defillama/coins/fetch_price_percentage.py +93 -0
- intentkit/skills/defillama/config/__init__.py +0 -0
- intentkit/skills/defillama/config/chains.py +433 -0
- intentkit/skills/defillama/defillama.jpeg +0 -0
- intentkit/skills/defillama/fees/__init__.py +0 -0
- intentkit/skills/defillama/fees/fetch_fees_overview.py +130 -0
- intentkit/skills/defillama/schema.json +383 -0
- intentkit/skills/defillama/stablecoins/__init__.py +0 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +100 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +129 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +83 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +126 -0
- intentkit/skills/defillama/tests/__init__.py +0 -0
- intentkit/skills/defillama/tests/api_integration.test.py +192 -0
- intentkit/skills/defillama/tests/api_unit.test.py +583 -0
- intentkit/skills/defillama/tvl/__init__.py +0 -0
- intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +106 -0
- intentkit/skills/defillama/tvl/fetch_chains.py +107 -0
- intentkit/skills/defillama/tvl/fetch_historical_tvl.py +91 -0
- intentkit/skills/defillama/tvl/fetch_protocol.py +207 -0
- intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +93 -0
- intentkit/skills/defillama/tvl/fetch_protocols.py +196 -0
- intentkit/skills/defillama/volumes/__init__.py +0 -0
- intentkit/skills/defillama/volumes/fetch_dex_overview.py +157 -0
- intentkit/skills/defillama/volumes/fetch_dex_summary.py +123 -0
- intentkit/skills/defillama/volumes/fetch_options_overview.py +131 -0
- intentkit/skills/defillama/yields/__init__.py +0 -0
- intentkit/skills/defillama/yields/fetch_pool_chart.py +100 -0
- intentkit/skills/defillama/yields/fetch_pools.py +126 -0
- intentkit/skills/dexscreener/__init__.py +93 -0
- intentkit/skills/dexscreener/base.py +133 -0
- intentkit/skills/dexscreener/dexscreener.png +0 -0
- intentkit/skills/dexscreener/model/__init__.py +0 -0
- intentkit/skills/dexscreener/model/search_token_response.py +82 -0
- intentkit/skills/dexscreener/schema.json +48 -0
- intentkit/skills/dexscreener/search_token.py +321 -0
- intentkit/skills/dune_analytics/__init__.py +103 -0
- intentkit/skills/dune_analytics/base.py +46 -0
- intentkit/skills/dune_analytics/dune.png +0 -0
- intentkit/skills/dune_analytics/fetch_kol_buys.py +128 -0
- intentkit/skills/dune_analytics/fetch_nation_metrics.py +237 -0
- intentkit/skills/dune_analytics/schema.json +99 -0
- intentkit/skills/elfa/README.md +100 -0
- intentkit/skills/elfa/__init__.py +123 -0
- intentkit/skills/elfa/base.py +28 -0
- intentkit/skills/elfa/elfa.jpg +0 -0
- intentkit/skills/elfa/mention.py +504 -0
- intentkit/skills/elfa/schema.json +153 -0
- intentkit/skills/elfa/stats.py +118 -0
- intentkit/skills/elfa/tokens.py +126 -0
- intentkit/skills/enso/README.md +75 -0
- intentkit/skills/enso/__init__.py +114 -0
- intentkit/skills/enso/abi/__init__.py +0 -0
- intentkit/skills/enso/abi/approval.py +279 -0
- intentkit/skills/enso/abi/erc20.py +14 -0
- intentkit/skills/enso/abi/route.py +129 -0
- intentkit/skills/enso/base.py +44 -0
- intentkit/skills/enso/best_yield.py +286 -0
- intentkit/skills/enso/enso.jpg +0 -0
- intentkit/skills/enso/networks.py +105 -0
- intentkit/skills/enso/prices.py +93 -0
- intentkit/skills/enso/route.py +300 -0
- intentkit/skills/enso/schema.json +212 -0
- intentkit/skills/enso/tokens.py +223 -0
- intentkit/skills/enso/wallet.py +381 -0
- intentkit/skills/github/README.md +63 -0
- intentkit/skills/github/__init__.py +54 -0
- intentkit/skills/github/base.py +21 -0
- intentkit/skills/github/github.jpg +0 -0
- intentkit/skills/github/github_search.py +183 -0
- intentkit/skills/github/schema.json +59 -0
- intentkit/skills/heurist/__init__.py +143 -0
- intentkit/skills/heurist/base.py +26 -0
- intentkit/skills/heurist/heurist.png +0 -0
- intentkit/skills/heurist/image_generation_animagine_xl.py +162 -0
- intentkit/skills/heurist/image_generation_arthemy_comics.py +162 -0
- intentkit/skills/heurist/image_generation_arthemy_real.py +162 -0
- intentkit/skills/heurist/image_generation_braindance.py +162 -0
- intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +162 -0
- intentkit/skills/heurist/image_generation_flux_1_dev.py +162 -0
- intentkit/skills/heurist/image_generation_sdxl.py +161 -0
- intentkit/skills/heurist/schema.json +196 -0
- intentkit/skills/lifi/README.md +294 -0
- intentkit/skills/lifi/__init__.py +141 -0
- intentkit/skills/lifi/base.py +21 -0
- intentkit/skills/lifi/lifi.png +0 -0
- intentkit/skills/lifi/schema.json +89 -0
- intentkit/skills/lifi/token_execute.py +472 -0
- intentkit/skills/lifi/token_quote.py +190 -0
- intentkit/skills/lifi/utils.py +656 -0
- intentkit/skills/moralis/README.md +490 -0
- intentkit/skills/moralis/__init__.py +110 -0
- intentkit/skills/moralis/api.py +281 -0
- intentkit/skills/moralis/base.py +55 -0
- intentkit/skills/moralis/fetch_chain_portfolio.py +191 -0
- intentkit/skills/moralis/fetch_nft_portfolio.py +284 -0
- intentkit/skills/moralis/fetch_solana_portfolio.py +331 -0
- intentkit/skills/moralis/fetch_wallet_portfolio.py +301 -0
- intentkit/skills/moralis/moralis.png +0 -0
- intentkit/skills/moralis/schema.json +156 -0
- intentkit/skills/moralis/tests/__init__.py +0 -0
- intentkit/skills/moralis/tests/test_wallet.py +511 -0
- intentkit/skills/nation/__init__.py +62 -0
- intentkit/skills/nation/base.py +31 -0
- intentkit/skills/nation/nation.png +0 -0
- intentkit/skills/nation/nft_check.py +106 -0
- intentkit/skills/nation/schema.json +58 -0
- intentkit/skills/openai/__init__.py +107 -0
- intentkit/skills/openai/base.py +32 -0
- intentkit/skills/openai/dalle_image_generation.py +128 -0
- intentkit/skills/openai/gpt_image_generation.py +152 -0
- intentkit/skills/openai/gpt_image_to_image.py +186 -0
- intentkit/skills/openai/image_to_text.py +126 -0
- intentkit/skills/openai/openai.png +0 -0
- intentkit/skills/openai/schema.json +139 -0
- intentkit/skills/portfolio/README.md +55 -0
- intentkit/skills/portfolio/__init__.py +151 -0
- intentkit/skills/portfolio/base.py +107 -0
- intentkit/skills/portfolio/constants.py +9 -0
- intentkit/skills/portfolio/moralis.png +0 -0
- intentkit/skills/portfolio/schema.json +237 -0
- intentkit/skills/portfolio/token_balances.py +155 -0
- intentkit/skills/portfolio/wallet_approvals.py +102 -0
- intentkit/skills/portfolio/wallet_defi_positions.py +80 -0
- intentkit/skills/portfolio/wallet_history.py +155 -0
- intentkit/skills/portfolio/wallet_net_worth.py +112 -0
- intentkit/skills/portfolio/wallet_nfts.py +139 -0
- intentkit/skills/portfolio/wallet_profitability.py +101 -0
- intentkit/skills/portfolio/wallet_profitability_summary.py +91 -0
- intentkit/skills/portfolio/wallet_stats.py +79 -0
- intentkit/skills/portfolio/wallet_swaps.py +147 -0
- intentkit/skills/skills.toml +103 -0
- intentkit/skills/slack/__init__.py +98 -0
- intentkit/skills/slack/base.py +55 -0
- intentkit/skills/slack/get_channel.py +109 -0
- intentkit/skills/slack/get_message.py +136 -0
- intentkit/skills/slack/schedule_message.py +92 -0
- intentkit/skills/slack/schema.json +135 -0
- intentkit/skills/slack/send_message.py +81 -0
- intentkit/skills/slack/slack.jpg +0 -0
- intentkit/skills/system/__init__.py +90 -0
- intentkit/skills/system/base.py +22 -0
- intentkit/skills/system/read_agent_api_key.py +87 -0
- intentkit/skills/system/regenerate_agent_api_key.py +77 -0
- intentkit/skills/system/schema.json +53 -0
- intentkit/skills/system/system.svg +76 -0
- intentkit/skills/tavily/README.md +86 -0
- intentkit/skills/tavily/__init__.py +91 -0
- intentkit/skills/tavily/base.py +27 -0
- intentkit/skills/tavily/schema.json +119 -0
- intentkit/skills/tavily/tavily.jpg +0 -0
- intentkit/skills/tavily/tavily_extract.py +147 -0
- intentkit/skills/tavily/tavily_search.py +139 -0
- intentkit/skills/token/README.md +89 -0
- intentkit/skills/token/__init__.py +107 -0
- intentkit/skills/token/base.py +154 -0
- intentkit/skills/token/constants.py +9 -0
- intentkit/skills/token/erc20_transfers.py +145 -0
- intentkit/skills/token/moralis.png +0 -0
- intentkit/skills/token/schema.json +141 -0
- intentkit/skills/token/token_analytics.py +81 -0
- intentkit/skills/token/token_price.py +132 -0
- intentkit/skills/token/token_search.py +121 -0
- intentkit/skills/twitter/__init__.py +146 -0
- intentkit/skills/twitter/base.py +68 -0
- intentkit/skills/twitter/follow_user.py +69 -0
- intentkit/skills/twitter/get_mentions.py +124 -0
- intentkit/skills/twitter/get_timeline.py +111 -0
- intentkit/skills/twitter/get_user_by_username.py +84 -0
- intentkit/skills/twitter/get_user_tweets.py +123 -0
- intentkit/skills/twitter/like_tweet.py +65 -0
- intentkit/skills/twitter/post_tweet.py +90 -0
- intentkit/skills/twitter/reply_tweet.py +98 -0
- intentkit/skills/twitter/retweet.py +76 -0
- intentkit/skills/twitter/schema.json +258 -0
- intentkit/skills/twitter/search_tweets.py +115 -0
- intentkit/skills/twitter/twitter.png +0 -0
- intentkit/skills/unrealspeech/__init__.py +55 -0
- intentkit/skills/unrealspeech/base.py +21 -0
- intentkit/skills/unrealspeech/schema.json +100 -0
- intentkit/skills/unrealspeech/text_to_speech.py +177 -0
- intentkit/skills/unrealspeech/unrealspeech.jpg +0 -0
- intentkit/skills/venice_audio/__init__.py +106 -0
- intentkit/skills/venice_audio/base.py +119 -0
- intentkit/skills/venice_audio/input.py +41 -0
- intentkit/skills/venice_audio/schema.json +152 -0
- intentkit/skills/venice_audio/venice_audio.py +240 -0
- intentkit/skills/venice_audio/venice_logo.jpg +0 -0
- intentkit/skills/venice_image/README.md +119 -0
- intentkit/skills/venice_image/__init__.py +154 -0
- intentkit/skills/venice_image/api.py +138 -0
- intentkit/skills/venice_image/base.py +188 -0
- intentkit/skills/venice_image/config.py +35 -0
- intentkit/skills/venice_image/image_enhance/README.md +119 -0
- intentkit/skills/venice_image/image_enhance/__init__.py +0 -0
- intentkit/skills/venice_image/image_enhance/image_enhance.py +80 -0
- intentkit/skills/venice_image/image_enhance/image_enhance_base.py +23 -0
- intentkit/skills/venice_image/image_enhance/image_enhance_input.py +40 -0
- intentkit/skills/venice_image/image_generation/README.md +144 -0
- intentkit/skills/venice_image/image_generation/__init__.py +0 -0
- intentkit/skills/venice_image/image_generation/image_generation_base.py +117 -0
- intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -0
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -0
- intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -0
- intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -0
- intentkit/skills/venice_image/image_upscale/README.md +111 -0
- intentkit/skills/venice_image/image_upscale/__init__.py +0 -0
- intentkit/skills/venice_image/image_upscale/image_upscale.py +90 -0
- intentkit/skills/venice_image/image_upscale/image_upscale_base.py +23 -0
- intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -0
- intentkit/skills/venice_image/image_vision/README.md +112 -0
- intentkit/skills/venice_image/image_vision/__init__.py +0 -0
- intentkit/skills/venice_image/image_vision/image_vision.py +100 -0
- intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -0
- intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -0
- intentkit/skills/venice_image/schema.json +267 -0
- intentkit/skills/venice_image/utils.py +78 -0
- intentkit/skills/venice_image/venice_image.jpg +0 -0
- intentkit/skills/web_scraper/README.md +82 -0
- intentkit/skills/web_scraper/__init__.py +92 -0
- intentkit/skills/web_scraper/base.py +21 -0
- intentkit/skills/web_scraper/langchain.png +0 -0
- intentkit/skills/web_scraper/schema.json +115 -0
- intentkit/skills/web_scraper/scrape_and_index.py +327 -0
- intentkit/utils/__init__.py +1 -0
- intentkit/utils/chain.py +436 -0
- intentkit/utils/error.py +134 -0
- intentkit/utils/logging.py +70 -0
- intentkit/utils/middleware.py +61 -0
- intentkit/utils/random.py +16 -0
- intentkit/utils/s3.py +267 -0
- intentkit/utils/slack_alert.py +79 -0
- intentkit/utils/tx.py +37 -0
- {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/METADATA +1 -1
- intentkit-0.5.2.dist-info/RECORD +365 -0
- intentkit-0.5.0.dist-info/RECORD +0 -4
- {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/WHEEL +0 -0
- {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import Any, Dict, List, Optional, Type
|
|
3
|
+
|
|
4
|
+
import httpx
|
|
5
|
+
from langchain_core.runnables import RunnableConfig
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
8
|
+
from intentkit.skills.chainlist.base import ChainlistBaseTool
|
|
9
|
+
|
|
10
|
+
logger = logging.getLogger(__name__)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ChainLookupInput(BaseModel):
|
|
14
|
+
"""Input for ChainLookup tool."""
|
|
15
|
+
|
|
16
|
+
search_term: Optional[str] = Field(
|
|
17
|
+
description="Term to search for (chain name, symbol, or chain ID)",
|
|
18
|
+
default=None,
|
|
19
|
+
)
|
|
20
|
+
chain_id: Optional[int] = Field(
|
|
21
|
+
description="Specific chain ID to look up",
|
|
22
|
+
default=None,
|
|
23
|
+
)
|
|
24
|
+
no_tracking: Optional[bool] = Field(
|
|
25
|
+
description="Whether to return only RPC endpoints with no tracking",
|
|
26
|
+
default=False,
|
|
27
|
+
)
|
|
28
|
+
limit: Optional[int] = Field(
|
|
29
|
+
description="Limit the number of results returned",
|
|
30
|
+
default=5,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class ChainLookup(ChainlistBaseTool):
|
|
35
|
+
"""Tool for looking up blockchain RPC endpoints from Chainlist."""
|
|
36
|
+
|
|
37
|
+
name: str = "chain_lookup"
|
|
38
|
+
description: str = (
|
|
39
|
+
"Look up blockchain RPC endpoints and details by chain name, symbol, or chain ID.\n"
|
|
40
|
+
"Returns information about blockchains including RPC endpoints, native currency, and explorers."
|
|
41
|
+
)
|
|
42
|
+
args_schema: Type[BaseModel] = ChainLookupInput
|
|
43
|
+
|
|
44
|
+
def _normalize_text(self, text: str) -> str:
|
|
45
|
+
"""Normalize text for searching (lowercase, remove spaces)."""
|
|
46
|
+
if not text:
|
|
47
|
+
return ""
|
|
48
|
+
return text.lower().strip()
|
|
49
|
+
|
|
50
|
+
async def _fetch_chains_data(self) -> List[Dict[str, Any]]:
|
|
51
|
+
"""Fetch chains data from Chainlist API."""
|
|
52
|
+
chainlist_api_url = "https://chainlist.org/rpcs.json"
|
|
53
|
+
|
|
54
|
+
async with httpx.AsyncClient(timeout=10.0) as client:
|
|
55
|
+
response = await client.get(chainlist_api_url)
|
|
56
|
+
response.raise_for_status()
|
|
57
|
+
return response.json()
|
|
58
|
+
|
|
59
|
+
def _filter_chains(
|
|
60
|
+
self,
|
|
61
|
+
chains: List[Dict[str, Any]],
|
|
62
|
+
search_term: Optional[str] = None,
|
|
63
|
+
chain_id: Optional[int] = None,
|
|
64
|
+
no_tracking: bool = False,
|
|
65
|
+
limit: int = 5,
|
|
66
|
+
) -> List[Dict[str, Any]]:
|
|
67
|
+
"""Filter chains based on search criteria."""
|
|
68
|
+
filtered_chains = chains
|
|
69
|
+
|
|
70
|
+
# Filter by chain_id if provided
|
|
71
|
+
if chain_id is not None:
|
|
72
|
+
filtered_chains = [
|
|
73
|
+
chain for chain in filtered_chains if chain.get("chainId") == chain_id
|
|
74
|
+
]
|
|
75
|
+
|
|
76
|
+
# Filter by search term if provided
|
|
77
|
+
if search_term and chain_id is None:
|
|
78
|
+
normalized_term = self._normalize_text(search_term)
|
|
79
|
+
result = []
|
|
80
|
+
|
|
81
|
+
for chain in filtered_chains:
|
|
82
|
+
name = self._normalize_text(chain.get("name", ""))
|
|
83
|
+
symbol = self._normalize_text(chain.get("chain", ""))
|
|
84
|
+
short_name = self._normalize_text(chain.get("shortName", ""))
|
|
85
|
+
|
|
86
|
+
if (
|
|
87
|
+
normalized_term in name
|
|
88
|
+
or normalized_term in symbol
|
|
89
|
+
or normalized_term in short_name
|
|
90
|
+
):
|
|
91
|
+
result.append(chain)
|
|
92
|
+
|
|
93
|
+
filtered_chains = result
|
|
94
|
+
|
|
95
|
+
# Filter RPC endpoints for each chain if no_tracking is True
|
|
96
|
+
if no_tracking:
|
|
97
|
+
filtered_result = []
|
|
98
|
+
for chain in filtered_chains:
|
|
99
|
+
if "rpc" not in chain:
|
|
100
|
+
continue
|
|
101
|
+
|
|
102
|
+
chain_copy = dict(chain)
|
|
103
|
+
chain_copy["rpc"] = [
|
|
104
|
+
rpc
|
|
105
|
+
for rpc in chain["rpc"]
|
|
106
|
+
if isinstance(rpc, dict) and rpc.get("tracking") == "none"
|
|
107
|
+
]
|
|
108
|
+
|
|
109
|
+
if chain_copy[
|
|
110
|
+
"rpc"
|
|
111
|
+
]: # Only include if it has RPC endpoints after filtering
|
|
112
|
+
filtered_result.append(chain_copy)
|
|
113
|
+
|
|
114
|
+
filtered_chains = filtered_result
|
|
115
|
+
|
|
116
|
+
# Apply limit
|
|
117
|
+
if limit > 0:
|
|
118
|
+
filtered_chains = filtered_chains[:limit]
|
|
119
|
+
|
|
120
|
+
return filtered_chains
|
|
121
|
+
|
|
122
|
+
def _format_chain(self, chain: Dict[str, Any]) -> Dict[str, Any]:
|
|
123
|
+
"""Format a chain entry for response."""
|
|
124
|
+
# Format RPC endpoints
|
|
125
|
+
formatted_rpcs = []
|
|
126
|
+
if "rpc" in chain:
|
|
127
|
+
for rpc in chain["rpc"]:
|
|
128
|
+
if isinstance(rpc, dict):
|
|
129
|
+
url = rpc.get("url")
|
|
130
|
+
tracking = rpc.get("tracking", "unspecified")
|
|
131
|
+
formatted_rpcs.append({"url": url, "tracking": tracking})
|
|
132
|
+
elif isinstance(rpc, str):
|
|
133
|
+
formatted_rpcs.append({"url": rpc, "tracking": "unspecified"})
|
|
134
|
+
|
|
135
|
+
# Format chain data
|
|
136
|
+
formatted_chain = {
|
|
137
|
+
"name": chain.get("name"),
|
|
138
|
+
"chain": chain.get("chain"),
|
|
139
|
+
"chainId": chain.get("chainId"),
|
|
140
|
+
"networkId": chain.get("networkId"),
|
|
141
|
+
"shortName": chain.get("shortName"),
|
|
142
|
+
"infoURL": chain.get("infoURL", ""),
|
|
143
|
+
"nativeCurrency": chain.get("nativeCurrency", {}),
|
|
144
|
+
"rpc": formatted_rpcs[:3], # Limit to 3 RPC endpoints per chain
|
|
145
|
+
"total_rpc_count": len(chain.get("rpc", [])),
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
# Add explorers if available
|
|
149
|
+
if "explorers" in chain and chain["explorers"]:
|
|
150
|
+
formatted_chain["explorers"] = [
|
|
151
|
+
{"name": explorer.get("name", ""), "url": explorer.get("url", "")}
|
|
152
|
+
for explorer in chain["explorers"][:2] # Limit to 2 explorers
|
|
153
|
+
]
|
|
154
|
+
|
|
155
|
+
return formatted_chain
|
|
156
|
+
|
|
157
|
+
async def _arun(
|
|
158
|
+
self,
|
|
159
|
+
search_term: Optional[str] = None,
|
|
160
|
+
chain_id: Optional[int] = None,
|
|
161
|
+
no_tracking: Optional[bool] = False,
|
|
162
|
+
limit: Optional[int] = 5,
|
|
163
|
+
config: Optional[RunnableConfig] = None,
|
|
164
|
+
**kwargs,
|
|
165
|
+
) -> Dict:
|
|
166
|
+
"""Lookup blockchain RPC endpoints from Chainlist."""
|
|
167
|
+
if not search_term and not chain_id:
|
|
168
|
+
return {
|
|
169
|
+
"error": "Please provide either a search term or a chain ID to lookup."
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
try:
|
|
173
|
+
# Fetch data
|
|
174
|
+
chains_data = await self._fetch_chains_data()
|
|
175
|
+
|
|
176
|
+
# Filter chains based on criteria
|
|
177
|
+
filtered_chains = self._filter_chains(
|
|
178
|
+
chains_data,
|
|
179
|
+
search_term=search_term,
|
|
180
|
+
chain_id=chain_id,
|
|
181
|
+
no_tracking=no_tracking,
|
|
182
|
+
limit=limit,
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
# Handle no results
|
|
186
|
+
if not filtered_chains:
|
|
187
|
+
return {
|
|
188
|
+
"found": False,
|
|
189
|
+
"message": "No chains found matching the search criteria.",
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
# Format results
|
|
193
|
+
formatted_chains = [self._format_chain(chain) for chain in filtered_chains]
|
|
194
|
+
|
|
195
|
+
return {
|
|
196
|
+
"found": True,
|
|
197
|
+
"count": len(formatted_chains),
|
|
198
|
+
"chains": formatted_chains,
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
except httpx.HTTPStatusError as e:
|
|
202
|
+
logger.error(f"HTTP error fetching chain data: {e}")
|
|
203
|
+
return {
|
|
204
|
+
"error": f"Error fetching chain data: HTTP status code {e.response.status_code}"
|
|
205
|
+
}
|
|
206
|
+
except Exception as e:
|
|
207
|
+
logger.error(f"Error fetching chain data: {str(e)}")
|
|
208
|
+
return {"error": f"An error occurred while fetching chain data: {str(e)}"}
|
|
Binary file
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"title": "Chainlist Skills",
|
|
5
|
+
"description": "Access blockchain RPC endpoints and network information from chainlist.org. Enable this skill to look up EVM-compatible networks by name, symbol, or chain ID and get their RPC endpoints, native currencies, and explorer links.",
|
|
6
|
+
"x-icon": "https://ai.service.crestal.dev/skills/chainlist/chainlist.png",
|
|
7
|
+
"x-tags": [
|
|
8
|
+
"Blockchain",
|
|
9
|
+
"RPC",
|
|
10
|
+
"EVM",
|
|
11
|
+
"Network"
|
|
12
|
+
],
|
|
13
|
+
"properties": {
|
|
14
|
+
"enabled": {
|
|
15
|
+
"type": "boolean",
|
|
16
|
+
"title": "Enabled",
|
|
17
|
+
"default": false
|
|
18
|
+
},
|
|
19
|
+
"states": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"properties": {
|
|
22
|
+
"chain_lookup": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"title": "Chain Lookup",
|
|
25
|
+
"enum": [
|
|
26
|
+
"disabled",
|
|
27
|
+
"public",
|
|
28
|
+
"private"
|
|
29
|
+
],
|
|
30
|
+
"x-enum-title": [
|
|
31
|
+
"Disabled",
|
|
32
|
+
"Agent Owner + All Users",
|
|
33
|
+
"Agent Owner Only"
|
|
34
|
+
],
|
|
35
|
+
"description": "Enables looking up blockchain RPC endpoints and network information. When public, available to all users; when private, only to authenticated users.",
|
|
36
|
+
"default": "disabled"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"description": "Configure visibility for chainlist skills (disabled: unavailable, public: available to all, private: available only to authenticated users)"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"required": [
|
|
43
|
+
"enabled",
|
|
44
|
+
"states"
|
|
45
|
+
],
|
|
46
|
+
"additionalProperties": true
|
|
47
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"""Common utility skills."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from typing import TypedDict
|
|
5
|
+
|
|
6
|
+
from intentkit.abstracts.skill import SkillStoreABC
|
|
7
|
+
from intentkit.skills.base import SkillConfig, SkillState
|
|
8
|
+
from intentkit.skills.common.base import CommonBaseTool
|
|
9
|
+
from intentkit.skills.common.current_time import CurrentTime
|
|
10
|
+
|
|
11
|
+
# Cache skills at the system level, because they are stateless
|
|
12
|
+
_cache: dict[str, CommonBaseTool] = {}
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class SkillStates(TypedDict):
|
|
18
|
+
current_time: SkillState
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class Config(SkillConfig):
|
|
22
|
+
"""Configuration for common utility skills."""
|
|
23
|
+
|
|
24
|
+
states: SkillStates
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
async def get_skills(
|
|
28
|
+
config: "Config",
|
|
29
|
+
is_private: bool,
|
|
30
|
+
store: SkillStoreABC,
|
|
31
|
+
**_,
|
|
32
|
+
) -> list[CommonBaseTool]:
|
|
33
|
+
"""Get all common utility skills.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
config: The configuration for common utility skills.
|
|
37
|
+
is_private: Whether to include private skills.
|
|
38
|
+
store: The skill store for persisting data.
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
A list of common utility skills.
|
|
42
|
+
"""
|
|
43
|
+
available_skills = []
|
|
44
|
+
|
|
45
|
+
# Include skills based on their state
|
|
46
|
+
for skill_name, state in config["states"].items():
|
|
47
|
+
if state == "disabled":
|
|
48
|
+
continue
|
|
49
|
+
elif state == "public" or (state == "private" and is_private):
|
|
50
|
+
available_skills.append(skill_name)
|
|
51
|
+
|
|
52
|
+
# Get each skill using the cached getter
|
|
53
|
+
result = []
|
|
54
|
+
for name in available_skills:
|
|
55
|
+
skill = get_common_skill(name, store)
|
|
56
|
+
if skill:
|
|
57
|
+
result.append(skill)
|
|
58
|
+
return result
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def get_common_skill(
|
|
62
|
+
name: str,
|
|
63
|
+
store: SkillStoreABC,
|
|
64
|
+
) -> CommonBaseTool:
|
|
65
|
+
"""Get a common utility skill by name.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
name: The name of the skill to get
|
|
69
|
+
store: The skill store for persisting data
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
The requested common utility skill
|
|
73
|
+
"""
|
|
74
|
+
if name == "current_time":
|
|
75
|
+
if name not in _cache:
|
|
76
|
+
_cache[name] = CurrentTime(
|
|
77
|
+
skill_store=store,
|
|
78
|
+
)
|
|
79
|
+
return _cache[name]
|
|
80
|
+
else:
|
|
81
|
+
logger.warning(f"Unknown common skill: {name}")
|
|
82
|
+
return None
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from typing import Type
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
|
+
|
|
5
|
+
from intentkit.abstracts.skill import SkillStoreABC
|
|
6
|
+
from intentkit.skills.base import IntentKitSkill
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class CommonBaseTool(IntentKitSkill):
|
|
10
|
+
"""Base class for common utility tools."""
|
|
11
|
+
|
|
12
|
+
name: str = Field(description="The name of the tool")
|
|
13
|
+
description: str = Field(description="A description of what the tool does")
|
|
14
|
+
args_schema: Type[BaseModel]
|
|
15
|
+
skill_store: SkillStoreABC = Field(
|
|
16
|
+
description="The skill store for persisting data"
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
@property
|
|
20
|
+
def category(self) -> str:
|
|
21
|
+
return "common"
|
|
Binary file
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from datetime import datetime
|
|
3
|
+
from typing import Type
|
|
4
|
+
|
|
5
|
+
import pytz
|
|
6
|
+
from langchain_core.runnables import RunnableConfig
|
|
7
|
+
from pydantic import BaseModel, Field
|
|
8
|
+
|
|
9
|
+
from intentkit.skills.common.base import CommonBaseTool
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class CurrentTimeInput(BaseModel):
|
|
15
|
+
"""Input for CurrentTime tool."""
|
|
16
|
+
|
|
17
|
+
timezone: str = Field(
|
|
18
|
+
description="Timezone to format the time in (e.g., 'UTC', 'US/Pacific', 'Europe/London', 'Asia/Tokyo'). Default is UTC.",
|
|
19
|
+
default="UTC",
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class CurrentTime(CommonBaseTool):
|
|
24
|
+
"""Tool for getting the current time.
|
|
25
|
+
|
|
26
|
+
This tool returns the current time and converts it to the specified timezone.
|
|
27
|
+
By default, it returns the time in UTC.
|
|
28
|
+
|
|
29
|
+
Attributes:
|
|
30
|
+
name: The name of the tool.
|
|
31
|
+
description: A description of what the tool does.
|
|
32
|
+
args_schema: The schema for the tool's input arguments.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
name: str = "common_current_time"
|
|
36
|
+
description: str = (
|
|
37
|
+
"Get the current time, converted to a specified timezone.\n"
|
|
38
|
+
"You must call this tool whenever the user asks for the time."
|
|
39
|
+
)
|
|
40
|
+
args_schema: Type[BaseModel] = CurrentTimeInput
|
|
41
|
+
|
|
42
|
+
async def _arun(self, timezone: str, config: RunnableConfig, **kwargs) -> str:
|
|
43
|
+
"""Implementation of the tool to get the current time.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
timezone (str): The timezone to format the time in. Defaults to "UTC".
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
str: A formatted string with the current time in the specified timezone.
|
|
50
|
+
"""
|
|
51
|
+
# Get current UTC time
|
|
52
|
+
utc_now = datetime.now(pytz.UTC)
|
|
53
|
+
|
|
54
|
+
# Convert to the requested timezone
|
|
55
|
+
if timezone.upper() != "UTC":
|
|
56
|
+
try:
|
|
57
|
+
tz = pytz.timezone(timezone)
|
|
58
|
+
converted_time = utc_now.astimezone(tz)
|
|
59
|
+
except pytz.exceptions.UnknownTimeZoneError:
|
|
60
|
+
# Provide some suggestions for common timezones
|
|
61
|
+
common_timezones = [
|
|
62
|
+
"US/Eastern",
|
|
63
|
+
"US/Central",
|
|
64
|
+
"US/Pacific",
|
|
65
|
+
"Europe/London",
|
|
66
|
+
"Europe/Paris",
|
|
67
|
+
"Europe/Berlin",
|
|
68
|
+
"Asia/Shanghai",
|
|
69
|
+
"Asia/Tokyo",
|
|
70
|
+
"Asia/Singapore",
|
|
71
|
+
"Australia/Sydney",
|
|
72
|
+
]
|
|
73
|
+
suggestion_str = ", ".join([f"'{tz}'" for tz in common_timezones])
|
|
74
|
+
return (
|
|
75
|
+
f"Error: Unknown timezone '{timezone}'. Using UTC instead.\n"
|
|
76
|
+
f"Some common timezone options: {suggestion_str}"
|
|
77
|
+
)
|
|
78
|
+
else:
|
|
79
|
+
converted_time = utc_now
|
|
80
|
+
|
|
81
|
+
# Format the time
|
|
82
|
+
formatted_time = converted_time.strftime("%Y-%m-%d %H:%M:%S %Z")
|
|
83
|
+
|
|
84
|
+
return f"Current time: {formatted_time}"
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"title": "Common Utilities",
|
|
5
|
+
"description": "Utility skills",
|
|
6
|
+
"x-icon": "https://ai.service.crestal.dev/skills/common/common.jpg",
|
|
7
|
+
"x-tags": [
|
|
8
|
+
"Utility"
|
|
9
|
+
],
|
|
10
|
+
"properties": {
|
|
11
|
+
"enabled": {
|
|
12
|
+
"type": "boolean",
|
|
13
|
+
"title": "Enabled",
|
|
14
|
+
"description": "Whether this skill is enabled",
|
|
15
|
+
"default": true
|
|
16
|
+
},
|
|
17
|
+
"states": {
|
|
18
|
+
"type": "object",
|
|
19
|
+
"properties": {
|
|
20
|
+
"current_time": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"title": "Current Time",
|
|
23
|
+
"enum": [
|
|
24
|
+
"disabled",
|
|
25
|
+
"public",
|
|
26
|
+
"private"
|
|
27
|
+
],
|
|
28
|
+
"x-enum-title": [
|
|
29
|
+
"Disabled",
|
|
30
|
+
"Agent Owner + All Users",
|
|
31
|
+
"Agent Owner Only"
|
|
32
|
+
],
|
|
33
|
+
"description": "Provides localized timekeeping with automatic timezone detection using IP geolocation",
|
|
34
|
+
"default": "private"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"description": "States for each common utility skill (disabled, public, or private)"
|
|
38
|
+
},
|
|
39
|
+
"api_key_provider": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"title": "API Key Provider",
|
|
42
|
+
"description": "Who provides the API key",
|
|
43
|
+
"enum": [
|
|
44
|
+
"platform"
|
|
45
|
+
],
|
|
46
|
+
"x-enum-title": [
|
|
47
|
+
"Nation Hosted"
|
|
48
|
+
],
|
|
49
|
+
"default": "platform"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"required": [
|
|
53
|
+
"states",
|
|
54
|
+
"enabled"
|
|
55
|
+
],
|
|
56
|
+
"additionalProperties": true
|
|
57
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# CookieFun Skills
|
|
2
|
+
|
|
3
|
+
This skill category provides access to CookieFun API for Twitter/X analytics and account insights.
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
The CookieFun skills allow you to:
|
|
8
|
+
|
|
9
|
+
- Get a list of all available sectors
|
|
10
|
+
- Get detailed information about Twitter accounts
|
|
11
|
+
- Get the feed of tweets from specific accounts
|
|
12
|
+
- Find smart followers for Twitter accounts
|
|
13
|
+
- Search for Twitter accounts matching specific criteria
|
|
14
|
+
|
|
15
|
+
### API Key
|
|
16
|
+
|
|
17
|
+
You need a CookieFun API key to use these skills. You can get one by signing up at [CookieFun](https://cookie.fun/).
|
|
18
|
+
|
|
19
|
+
### Skills
|
|
20
|
+
|
|
21
|
+
#### Get Sectors
|
|
22
|
+
|
|
23
|
+
Returns a list of all available sectors in the CookieFun system.
|
|
24
|
+
|
|
25
|
+
Example usage:
|
|
26
|
+
```
|
|
27
|
+
Call the get_sectors skill to fetch all sectors available in the CookieFun system.
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Example prompts:
|
|
31
|
+
- "What sectors are available in CookieFun?"
|
|
32
|
+
- "Show me all the sectors in CookieFun"
|
|
33
|
+
- "Get a list of all sectors from CookieFun"
|
|
34
|
+
|
|
35
|
+
#### Get Account Details
|
|
36
|
+
|
|
37
|
+
Retrieves detailed information about a Twitter account including followers, following, posts, metrics, and engagement data.
|
|
38
|
+
|
|
39
|
+
Example usage:
|
|
40
|
+
```
|
|
41
|
+
Call the get_account_details skill with parameters:
|
|
42
|
+
- username: "elonmusk"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
or
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
Call the get_account_details skill with parameters:
|
|
49
|
+
- userId: "1234567890"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Example prompts:
|
|
53
|
+
- "Get details about the Twitter account @elonmusk"
|
|
54
|
+
- "Fetch information about Elon Musk's Twitter profile"
|
|
55
|
+
- "Show me stats for the Twitter user elonmusk"
|
|
56
|
+
- "What's the engagement rate for @elonmusk?"
|
|
57
|
+
|
|
58
|
+
#### Get Account Smart Followers
|
|
59
|
+
|
|
60
|
+
Returns a list of top smart followers for a specific Twitter account, with detailed metrics about these followers.
|
|
61
|
+
|
|
62
|
+
Example usage:
|
|
63
|
+
```
|
|
64
|
+
Call the get_account_smart_followers skill with parameters:
|
|
65
|
+
- username: "elonmusk"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
or
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
Call the get_account_smart_followers skill with parameters:
|
|
72
|
+
- userId: "1234567890"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Example prompts:
|
|
76
|
+
- "Who are the top smart followers of @elonmusk?"
|
|
77
|
+
- "Get me a list of the most influential followers of Elon Musk"
|
|
78
|
+
- "Show me the smart followers for Twitter user elonmusk"
|
|
79
|
+
- "Find the most engaged followers of @elonmusk"
|
|
80
|
+
|
|
81
|
+
#### Search Accounts
|
|
82
|
+
|
|
83
|
+
Searches for Twitter accounts that authored tweets matching specified search criteria.
|
|
84
|
+
|
|
85
|
+
Example usage:
|
|
86
|
+
```
|
|
87
|
+
Call the search_accounts skill with parameters:
|
|
88
|
+
- searchQuery: "bitcoin"
|
|
89
|
+
- type: 0 # Optional: 0 for Original, 1 for Reply, 2 for Quote
|
|
90
|
+
- sortBy: 0 # Optional: 0 for SmartEngagementPoints, 1 for Impressions, 2 for MatchingTweetsCount
|
|
91
|
+
- sortOrder: 1 # Optional: 0 for Ascending, 1 for Descending
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Example prompts:
|
|
95
|
+
- "Find Twitter accounts talking about bitcoin"
|
|
96
|
+
- "Search for accounts that tweet about AI sorted by engagement"
|
|
97
|
+
- "Who are the top accounts posting original tweets about NFTs?"
|
|
98
|
+
- "Find Twitter users discussing climate change with the most impressions"
|
|
99
|
+
|
|
100
|
+
#### Get Account Feed
|
|
101
|
+
|
|
102
|
+
Retrieves a list of tweets for a specific Twitter account with various filtering options.
|
|
103
|
+
|
|
104
|
+
Example usage:
|
|
105
|
+
```
|
|
106
|
+
Call the get_account_feed skill with parameters:
|
|
107
|
+
- username: "elonmusk"
|
|
108
|
+
- startDate: "01/05/2023" # Optional: Filter tweets after this date
|
|
109
|
+
- endDate: "31/05/2023" # Optional: Filter tweets before this date
|
|
110
|
+
- type: 0 # Optional: 0 for Original, 1 for Reply, 2 for Quote
|
|
111
|
+
- hasMedia: true # Optional: Filter to only tweets with media
|
|
112
|
+
- sortBy: 0 # Optional: 0 for CreatedDate, 1 for Impressions
|
|
113
|
+
- sortOrder: 1 # Optional: 0 for Ascending, 1 for Descending
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Example prompts:
|
|
117
|
+
- "Show me Elon Musk's tweets from May 2023"
|
|
118
|
+
- "Get the most popular tweets from @elonmusk"
|
|
119
|
+
- "Fetch only original tweets (not replies) from elonmusk"
|
|
120
|
+
- "Show me tweets with media from @elonmusk posted in the last month"
|
|
121
|
+
- "What are the latest tweets from Elon Musk sorted by impressions?"
|