diff --git a/cli/aitbc_cli/commands/agent_sdk.py b/cli/aitbc_cli/commands/agent_sdk.py index 1874688c..292dea5c 100644 --- a/cli/aitbc_cli/commands/agent_sdk.py +++ b/cli/aitbc_cli/commands/agent_sdk.py @@ -65,7 +65,7 @@ def create_agent(name: str, agent_type: str, capabilities: dict, coordinator_url "address": agent.identity.address, "agent_type": agent_type, "capabilities": capabilities, - "coordinator_url": coordinator_url or "http://localhost:8001" + "coordinator_url": coordinator_url or config.coordinator_url } with open(config_file, 'w') as f: @@ -84,8 +84,11 @@ def create_agent(name: str, agent_type: str, capabilities: dict, coordinator_url return {"error": str(e)} -async def register_agent(agent_id: str, coordinator_url: str = "http://localhost:8001") -> dict: +async def register_agent(agent_id: str, coordinator_url: str = None) -> dict: """Register an agent with the coordinator""" + if coordinator_url is None: + config = get_config() + coordinator_url = config.coordinator_url if Agent is None: return {"error": "Agent SDK not available"} diff --git a/cli/aitbc_cli/commands/cross_chain.py b/cli/aitbc_cli/commands/cross_chain.py index f1e3edee..6b2dedb4 100755 --- a/cli/aitbc_cli/commands/cross_chain.py +++ b/cli/aitbc_cli/commands/cross_chain.py @@ -35,7 +35,7 @@ def rates(ctx, from_chain: Optional[str], to_chain: Optional[str], with AITBCHTTPClient() as client: # Get rates from cross-chain exchange response = client.get( - f"http://localhost:8001/api/v1/cross-chain/rates", + f"{config.exchange_service_url}/cross-chain/rates", timeout=10 ) @@ -103,7 +103,7 @@ def swap(ctx, from_chain: str, to_chain: str, from_token: str, to_token: str, try: with AITBCHTTPClient() as client: response = client.get( - f"http://localhost:8001/api/v1/cross-chain/rates", + f"{config.exchange_service_url}/cross-chain/rates", timeout=10 ) if response.status_code == 200: @@ -128,7 +128,7 @@ def swap(ctx, from_chain: str, to_chain: str, from_token: str, to_token: str, } try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1/cross-chain", timeout=30) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=30) swap_result = http_client.post("/swap", json=swap_data) success("Cross-chain swap created successfully!") output({ @@ -158,7 +158,7 @@ def swap(ctx, from_chain: str, to_chain: str, from_token: str, to_token: str, def status(ctx, swap_id: str): """Check cross-chain swap status""" try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) swap_data = http_client.get(f"/cross-chain/swap/{swap_id}") success(f"Swap Status: {swap_data.get('status', 'unknown')}") @@ -231,7 +231,7 @@ def swaps(ctx, user_address: Optional[str], status: Optional[str], limit: int): params['status'] = status try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) swaps_data = http_client.get("/cross-chain/swaps", params=params) swaps = swaps_data.get('swaps', []) @@ -296,7 +296,7 @@ def bridge(ctx, source_chain: str, target_chain: str, token: str, } try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=30) + http_client = AITBCHTTPClient(base_url="{config.exchange_service_url}", timeout=30) bridge_result = http_client.post("/cross-chain/bridge", json=bridge_data) success("Cross-chain bridge created successfully!") output({ @@ -325,7 +325,7 @@ def bridge(ctx, source_chain: str, target_chain: str, token: str, def bridge_status(ctx, bridge_id: str): """Check cross-chain bridge status""" try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) bridge_data = http_client.get(f"/cross-chain/bridge/{bridge_id}") success(f"Bridge Status: {bridge_data.get('status', 'unknown')}") @@ -371,40 +371,40 @@ def bridge_status(ctx, bridge_id: str): def pools(ctx): """Show cross-chain liquidity pools""" try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) - response = client.get( - f"http://localhost:8001/api/v1/cross-chain/pools", - timeout=10 - ) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) + response = http_client.get( + f"/cross-chain/pools", + timeout=10 + ) + + if response.status_code == 200: + pools_data = response.json() + pools = pools_data.get('pools', []) - if response.status_code == 200: - pools_data = response.json() - pools = pools_data.get('pools', []) + if pools: + success(f"Found {len(pools)} cross-chain liquidity pools:") - if pools: - success(f"Found {len(pools)} cross-chain liquidity pools:") - - # Create table - pool_table = [] - for pool in pools: - pool_table.append([ - pool.get('pool_id', ''), - pool.get('token_a', ''), - pool.get('token_b', ''), - pool.get('chain_a', ''), - pool.get('chain_b', ''), - f"{pool.get('reserve_a', 0):.2f}", - f"{pool.get('reserve_b', 0):.2f}", - f"{pool.get('total_liquidity', 0):.2f}", - f"{pool.get('apr', 0):.2%}" - ]) - - table(["Pool ID", "Token A", "Token B", "Chain A", "Chain B", - "Reserve A", "Reserve B", "Liquidity", "APR"], pool_table) - else: - success("No cross-chain liquidity pools found") + # Create table + pool_table = [] + for pool in pools: + pool_table.append([ + pool.get('pool_id', ''), + pool.get('token_a', ''), + pool.get('token_b', ''), + pool.get('chain_a', ''), + pool.get('chain_b', ''), + f"{pool.get('reserve_a', 0):.2f}", + f"{pool.get('reserve_b', 0):.2f}", + f"{pool.get('total_liquidity', 0):.2f}", + f"{pool.get('apr', 0):.2%}" + ]) + + table(["Pool ID", "Token A", "Token B", "Chain A", "Chain B", + "Reserve A", "Reserve B", "Liquidity", "APR"], pool_table) else: - error(f"Failed to get pools: {response.status_code}") + success("No cross-chain liquidity pools found") + else: + error(f"Failed to get pools: {response.status_code}") except Exception as e: error(f"Network error: {e}") @@ -414,51 +414,51 @@ def pools(ctx): def stats(ctx): """Show cross-chain trading statistics""" try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) - response = client.get( - f"http://localhost:8001/api/v1/cross-chain/stats", - timeout=10 - ) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) + response = http_client.get( + f"/cross-chain/stats", + timeout=10 + ) + + if response.status_code == 200: + stats_data = response.json() - if response.status_code == 200: - stats_data = response.json() - - success("Cross-Chain Trading Statistics:") - - # Show swap stats - swap_stats = stats_data.get('swap_stats', []) - if swap_stats: - success("Swap Statistics:") - swap_table = [] - for stat in swap_stats: - swap_table.append([ - stat.get('status', ''), - stat.get('count', 0), - f"{stat.get('volume', 0):.2f}" - ]) - table(["Status", "Count", "Volume"], swap_table) - - # Show bridge stats - bridge_stats = stats_data.get('bridge_stats', []) - if bridge_stats: - success("Bridge Statistics:") - bridge_table = [] - for stat in bridge_stats: - bridge_table.append([ - stat.get('status', ''), - stat.get('count', 0), - f"{stat.get('volume', 0):.2f}" - ]) - table(["Status", "Count", "Volume"], bridge_table) - - # Show overall stats - success("Overall Statistics:") - output({ - "Total Volume": f"{stats_data.get('total_volume', 0):.2f}", - "Supported Chains": ", ".join(stats_data.get('supported_chains', [])), - "Last Updated": stats_data.get('timestamp', '') - }, ctx.obj['output_format']) - else: - error(f"Failed to get stats: {response.status_code}") + success("Cross-Chain Trading Statistics:") + + # Show swap stats + swap_stats = stats_data.get('swap_stats', []) + if swap_stats: + success("Swap Statistics:") + swap_table = [] + for stat in swap_stats: + swap_table.append([ + stat.get('status', ''), + stat.get('count', 0), + f"{stat.get('volume', 0):.2f}" + ]) + table(["Status", "Count", "Volume"], swap_table) + + # Show bridge stats + bridge_stats = stats_data.get('bridge_stats', []) + if bridge_stats: + success("Bridge Statistics:") + bridge_table = [] + for stat in bridge_stats: + bridge_table.append([ + stat.get('status', ''), + stat.get('count', 0), + f"{stat.get('volume', 0):.2f}" + ]) + table(["Status", "Count", "Volume"], bridge_table) + + # Show overall stats + success("Overall Statistics:") + output({ + "Total Volume": f"{stats_data.get('total_volume', 0):.2f}", + "Supported Chains": ", ".join(stats_data.get('supported_chains', [])), + "Last Updated": stats_data.get('timestamp', '') + }, ctx.obj['output_format']) + else: + error(f"Failed to get stats: {response.status_code}") except Exception as e: error(f"Network error: {e}") diff --git a/cli/aitbc_cli/commands/exchange.py b/cli/aitbc_cli/commands/exchange.py index 06aa758c..c131284e 100755 --- a/cli/aitbc_cli/commands/exchange.py +++ b/cli/aitbc_cli/commands/exchange.py @@ -373,7 +373,7 @@ def status(ctx, exchange_name: str): config = ctx.obj['config'] try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) rates_data = http_client.get(f"/exchange/rates") success("Current exchange rates:") output(rates_data, ctx.obj['output_format']) @@ -409,7 +409,7 @@ def create_payment(ctx, aitbc_amount: Optional[float], btc_amount: Optional[floa # Get exchange rates to calculate missing amount try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) rates = http_client.get("/exchange/rates") btc_to_aitbc = rates.get('btc_to_aitbc', 100000) @@ -449,7 +449,7 @@ def payment_status(ctx, payment_id: str): config = ctx.obj['config'] try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) status_data = http_client.get(f"/exchange/payment-status/{payment_id}") status = status_data.get('status', 'unknown') @@ -477,7 +477,7 @@ def market_stats(ctx): config = ctx.obj['config'] try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) stats = http_client.get("/exchange/market-stats") success("Exchange market statistics:") output(stats, ctx.obj['output_format']) @@ -500,7 +500,7 @@ def balance(ctx): config = ctx.obj['config'] try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) balance_data = http_client.get("/exchange/wallet/balance") success("Bitcoin wallet balance:") output(balance_data, ctx.obj['output_format']) @@ -517,7 +517,7 @@ def info(ctx): config = ctx.obj['config'] try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) wallet_info = http_client.get("/exchange/wallet/info") success("Bitcoin wallet information:") output(wallet_info, ctx.obj['output_format']) @@ -547,7 +547,7 @@ def register(ctx, name: str, api_key: str, api_secret: Optional[str], sandbox: b exchange_data["api_secret"] = api_secret try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) result = http_client.post("/exchange/register", json=exchange_data) success(f"Exchange '{name}' registered successfully!") success(f"Exchange ID: {result.get('exchange_id')}") @@ -587,7 +587,7 @@ def create_pair(ctx, pair: str, base_asset: str, quote_asset: str, pair_data["max_order_size"] = max_order_size try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) result = http_client.post("/exchange/create-pair", json=pair_data) success(f"Trading pair '{pair}' created successfully!") success(f"Pair ID: {result.get('pair_id')}") @@ -617,7 +617,7 @@ def start_trading(ctx, pair: str, exchange: Optional[str], order_type: tuple): trading_data["exchange"] = exchange try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) result = http_client.post("/exchange/start-trading", json=trading_data) success(f"Trading started for pair '{pair}'!") success(f"Order types: {', '.join(order_type)}") @@ -646,7 +646,7 @@ def list_pairs(ctx, pair: Optional[str], exchange: Optional[str], status: Option params["status"] = status try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) pairs = http_client.get("/exchange/pairs", params=params) success("Trading pairs:") output(pairs, ctx.obj['output_format']) diff --git a/cli/aitbc_cli/commands/monitor.py b/cli/aitbc_cli/commands/monitor.py index 41f5cb19..454bc291 100755 --- a/cli/aitbc_cli/commands/monitor.py +++ b/cli/aitbc_cli/commands/monitor.py @@ -110,7 +110,7 @@ def metrics(ctx, period: str, export_path: Optional[str]): } try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) # Coordinator metrics try: resp = http_client.get( @@ -235,7 +235,7 @@ def alerts(ctx, action: str, name: Optional[str], alert_type: Optional[str], return if alert.get("webhook"): try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) resp = client.post(alert["webhook"], json={ "alert": name, "type": alert["type"], @@ -270,7 +270,7 @@ def history(ctx, period: str): } try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) try: resp = http_client.get( f"{config.coordinator_url}/jobs", @@ -355,7 +355,7 @@ def webhooks(ctx, action: str, name: Optional[str], url: Optional[str], events: error(f"Webhook '{name}' not found") return try: - http_client = AITBCHTTPClient(base_url="http://localhost:8001/api/v1", timeout=10) + http_client = AITBCHTTPClient(base_url=config.exchange_service_url, timeout=10) resp = client.post(wh["url"], json={ "event": "test", "source": "aitbc-cli", diff --git a/cli/aitbc_cli/config.py b/cli/aitbc_cli/config.py index 45c2ffdf..c0a41367 100644 --- a/cli/aitbc_cli/config.py +++ b/cli/aitbc_cli/config.py @@ -25,6 +25,7 @@ class CLIConfig(BaseAITBCConfig): app_version: str = Field(default="2.1.0", description="CLI version") # Service URLs + exchange_service_url: str = Field(default="http://localhost:8001/api/v1", description="Exchange Service URL") gpu_service_url: str = Field(default="http://localhost:8101", description="GPU Service URL") marketplace_service_url: str = Field(default="http://localhost:8102", description="Marketplace Service URL") trading_service_url: str = Field(default="http://localhost:8104", description="Trading Service URL")