mirror of
https://github.com/Starchild-ai-agent/official-skills.git
synced 2026-09-18 10:19:40 +08:00
218 lines
6.7 KiB
Python
218 lines
6.7 KiB
Python
"""
|
|
CoinGecko Extension - Crypto Market Data Tools
|
|
|
|
Provides comprehensive crypto market data including:
|
|
- Price data, charts, OHLC candles
|
|
- Market discovery (trending, top gainers/losers, new coins)
|
|
- Coin information and tickers
|
|
- Exchange data
|
|
- NFT collections
|
|
- Global market stats
|
|
|
|
Environment Variables Required:
|
|
- COINGECKO_API_KEY: CoinGecko Pro API key
|
|
|
|
Usage:
|
|
This extension is auto-loaded by the ExtensionLoader.
|
|
Tools are available to agents configured with these tools in agents.yaml.
|
|
"""
|
|
import os
|
|
import sys
|
|
import logging
|
|
from typing import List
|
|
|
|
try:
|
|
from core.tool import ToolRegistry
|
|
except Exception:
|
|
ToolRegistry = None # Standalone script usage
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
# Add local tools directory to path for imports
|
|
TOOLS_DIR = os.path.join(os.path.dirname(__file__), 'tools')
|
|
if TOOLS_DIR not in sys.path:
|
|
sys.path.insert(0, TOOLS_DIR)
|
|
|
|
|
|
def register(api) -> List[str]:
|
|
"""
|
|
Extension entry point - register all CoinGecko tools.
|
|
|
|
Args:
|
|
api: ExtensionApi instance with registry and config
|
|
|
|
Returns:
|
|
List of registered tool names
|
|
"""
|
|
registered = []
|
|
|
|
try:
|
|
from .coingecko import (
|
|
# Original tools (11)
|
|
CoinPriceTool,
|
|
CoinOHLCTool,
|
|
CoinChartTool,
|
|
CoinGeckoTrendingTool,
|
|
CoinGeckoTopGainersLosersTool,
|
|
CoinGeckoNewCoinsTool,
|
|
CoinGeckoGlobalTool,
|
|
CoinGeckoGlobalDefiTool,
|
|
CoinGeckoDerivativesTool,
|
|
CoinGeckoDerivativesExchangesTool,
|
|
CoinGeckoCategoriesjTool,
|
|
# New coin data tools (4)
|
|
CoinGeckoCoinsListTool,
|
|
CoinGeckoCoinsMarketsTool,
|
|
CoinGeckoCoinDataTool,
|
|
CoinGeckoCoinTickersTool,
|
|
# New exchange tools (4)
|
|
CoinGeckoExchangesTool,
|
|
CoinGeckoExchangeTool,
|
|
CoinGeckoExchangeTickersTool,
|
|
CoinGeckoExchangeVolumeChartTool,
|
|
# New NFT tools (3)
|
|
CoinGeckoNFTsListTool,
|
|
CoinGeckoNFTTool,
|
|
CoinGeckoNFTByContractTool,
|
|
# New infrastructure tools (4)
|
|
CoinGeckoAssetPlatformsTool,
|
|
CoinGeckoExchangeRatesTool,
|
|
CoinGeckoVsCurrenciesTool,
|
|
CoinGeckoCategoriesListTool,
|
|
# New search tool (1)
|
|
CoinGeckoSearchTool,
|
|
# New contract tools (2)
|
|
CoinGeckoTokenPriceTool,
|
|
CoinGeckoCoinByContractTool,
|
|
)
|
|
# Register original tools
|
|
api.register_tool(CoinPriceTool())
|
|
api.register_tool(CoinOHLCTool())
|
|
api.register_tool(CoinChartTool())
|
|
api.register_tool(CoinGeckoTrendingTool())
|
|
api.register_tool(CoinGeckoTopGainersLosersTool())
|
|
api.register_tool(CoinGeckoNewCoinsTool())
|
|
api.register_tool(CoinGeckoGlobalTool())
|
|
api.register_tool(CoinGeckoGlobalDefiTool())
|
|
api.register_tool(CoinGeckoDerivativesTool())
|
|
api.register_tool(CoinGeckoDerivativesExchangesTool())
|
|
api.register_tool(CoinGeckoCategoriesjTool())
|
|
# Register new coin data tools
|
|
api.register_tool(CoinGeckoCoinsListTool())
|
|
api.register_tool(CoinGeckoCoinsMarketsTool())
|
|
api.register_tool(CoinGeckoCoinDataTool())
|
|
api.register_tool(CoinGeckoCoinTickersTool())
|
|
# Register new exchange tools
|
|
api.register_tool(CoinGeckoExchangesTool())
|
|
api.register_tool(CoinGeckoExchangeTool())
|
|
api.register_tool(CoinGeckoExchangeTickersTool())
|
|
api.register_tool(CoinGeckoExchangeVolumeChartTool())
|
|
# Register new NFT tools
|
|
api.register_tool(CoinGeckoNFTsListTool())
|
|
api.register_tool(CoinGeckoNFTTool())
|
|
api.register_tool(CoinGeckoNFTByContractTool())
|
|
# Register new infrastructure tools
|
|
api.register_tool(CoinGeckoAssetPlatformsTool())
|
|
api.register_tool(CoinGeckoExchangeRatesTool())
|
|
api.register_tool(CoinGeckoVsCurrenciesTool())
|
|
api.register_tool(CoinGeckoCategoriesListTool())
|
|
# Register new search tool
|
|
api.register_tool(CoinGeckoSearchTool())
|
|
# Register new contract tools
|
|
api.register_tool(CoinGeckoTokenPriceTool())
|
|
api.register_tool(CoinGeckoCoinByContractTool())
|
|
registered.extend([
|
|
# Original (11)
|
|
"coin_price",
|
|
"coin_ohlc",
|
|
"coin_chart",
|
|
"cg_trending",
|
|
"cg_top_gainers_losers",
|
|
"cg_new_coins",
|
|
"cg_global",
|
|
"cg_global_defi",
|
|
"cg_derivatives",
|
|
"cg_derivatives_exchanges",
|
|
"cg_categories",
|
|
# New coin data (4)
|
|
"cg_coins_list",
|
|
"cg_coins_markets",
|
|
"cg_coin_data",
|
|
"cg_coin_tickers",
|
|
# New exchanges (4)
|
|
"cg_exchanges",
|
|
"cg_exchange",
|
|
"cg_exchange_tickers",
|
|
"cg_exchange_volume_chart",
|
|
# New NFTs (3)
|
|
"cg_nfts_list",
|
|
"cg_nft",
|
|
"cg_nft_by_contract",
|
|
# New infrastructure (4)
|
|
"cg_asset_platforms",
|
|
"cg_exchange_rates",
|
|
"cg_vs_currencies",
|
|
"cg_categories_list",
|
|
# New search (1)
|
|
"cg_search",
|
|
# New contracts (2)
|
|
"cg_token_price",
|
|
"cg_coin_by_contract",
|
|
])
|
|
logger.info("Registered CoinGecko tools (29 tools)")
|
|
except Exception as e:
|
|
logger.warning(f"Failed to load CoinGecko tools: {e}")
|
|
|
|
return registered
|
|
|
|
|
|
# Extension metadata
|
|
EXTENSION_INFO = {
|
|
"name": "coingecko",
|
|
"version": "1.0.0",
|
|
"description": "CoinGecko crypto market data tools",
|
|
"tools": [
|
|
# Price & Chart (3)
|
|
"coin_price",
|
|
"coin_ohlc",
|
|
"coin_chart",
|
|
# Market Discovery (3)
|
|
"cg_trending",
|
|
"cg_top_gainers_losers",
|
|
"cg_new_coins",
|
|
# Global & Categories (3)
|
|
"cg_global",
|
|
"cg_global_defi",
|
|
"cg_categories",
|
|
# Derivatives (2)
|
|
"cg_derivatives",
|
|
"cg_derivatives_exchanges",
|
|
# Coin Data (4)
|
|
"cg_coins_list",
|
|
"cg_coins_markets",
|
|
"cg_coin_data",
|
|
"cg_coin_tickers",
|
|
# Exchanges (4)
|
|
"cg_exchanges",
|
|
"cg_exchange",
|
|
"cg_exchange_tickers",
|
|
"cg_exchange_volume_chart",
|
|
# NFTs (3)
|
|
"cg_nfts_list",
|
|
"cg_nft",
|
|
"cg_nft_by_contract",
|
|
# Infrastructure (5)
|
|
"cg_asset_platforms",
|
|
"cg_exchange_rates",
|
|
"cg_vs_currencies",
|
|
"cg_categories_list",
|
|
"cg_search",
|
|
# Contracts (2)
|
|
"cg_token_price",
|
|
"cg_coin_by_contract",
|
|
],
|
|
"env_vars": [
|
|
"COINGECKO_API_KEY",
|
|
],
|
|
}
|