Files
aitbc/cli/parsers/market.py
aitbc c4a2afee37
Some checks failed
Cross-Node Transaction Testing / transaction-test (push) Has been cancelled
Deploy to Testnet / deploy-testnet (push) Has been cancelled
Integration Tests / test-service-integration (push) Has been cancelled
Multi-Node Stress Testing / stress-test (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
CLI Tests / test-cli (push) Has been cancelled
Add missing plugin CLI commands and REST API endpoint
CLI:
- Added 'aitbc plugin create' - Create new plugin skeleton
- Added 'aitbc plugin package' - Package plugin for distribution
- Added 'aitbc market list-plugin' - List marketplace plugins

Marketplace service:
- Added GET /v1/marketplace/plugins endpoint
- Returns mock plugin data (cli_enhancer, web_dashboard, security_scanner)

Fixes scenario doc references to non-existent plugin commands
2026-05-15 00:24:29 +02:00

112 lines
7.5 KiB
Python

"""Marketplace command registration for the unified CLI."""
import argparse
from parser_context import ParserContext
def register(subparsers: argparse._SubParsersAction, ctx: ParserContext) -> None:
market_parser = subparsers.add_parser("market", help="Marketplace listings and offers")
market_parser.set_defaults(handler=lambda parsed, parser=market_parser: parser.print_help())
market_subparsers = market_parser.add_subparsers(dest="market_action")
# GPU marketplace subcommands
market_gpu_parser = market_subparsers.add_parser("gpu", help="GPU marketplace operations")
market_gpu_parser.set_defaults(handler=lambda parsed, parser=market_gpu_parser: parser.print_help())
market_gpu_subparsers = market_gpu_parser.add_subparsers(dest="gpu_action")
market_gpu_register_parser = market_gpu_subparsers.add_parser("register", help="Register GPU on marketplace")
market_gpu_register_parser.add_argument("--name", help="GPU name/model")
market_gpu_register_parser.add_argument("--memory", type=int, help="GPU memory in GB")
market_gpu_register_parser.add_argument("--cuda-cores", type=int, help="Number of CUDA cores")
market_gpu_register_parser.add_argument("--compute-capability", help="Compute capability (e.g., 8.9)")
market_gpu_register_parser.add_argument("--price-per-hour", type=float, required=True, help="Price per hour in AIT")
market_gpu_register_parser.add_argument("--description", help="GPU description")
market_gpu_register_parser.add_argument("--miner-id", help="Miner ID")
market_gpu_register_parser.add_argument("--force", action="store_true", help="Force registration without hardware validation")
market_gpu_register_parser.add_argument("--coordinator-url", default=ctx.default_coordinator_url)
market_gpu_register_parser.set_defaults(handler=ctx.handle_market_gpu_register)
market_gpu_list_parser = market_gpu_subparsers.add_parser("list", help="List available GPUs")
market_gpu_list_parser.add_argument("--available", action="store_true", help="Show only available GPUs")
market_gpu_list_parser.add_argument("--price-max", type=float, help="Maximum price per hour")
market_gpu_list_parser.add_argument("--region", help="Filter by region")
market_gpu_list_parser.add_argument("--model", help="Filter by GPU model")
market_gpu_list_parser.add_argument("--limit", type=int, default=100, help="Maximum number of results")
market_gpu_list_parser.add_argument("--coordinator-url", default=ctx.default_coordinator_url)
market_gpu_list_parser.set_defaults(handler=ctx.handle_market_gpu_list)
market_list_parser = market_subparsers.add_parser("list", help="List marketplace items")
market_list_parser.add_argument("--chain-id", help="Chain ID")
market_list_parser.add_argument("--coordinator-url", default=ctx.default_coordinator_url)
market_list_parser.add_argument("--marketplace-url")
market_list_parser.set_defaults(handler=ctx.handle_market_listings)
market_create_parser = market_subparsers.add_parser("create", help="Create a marketplace listing")
market_create_parser.add_argument("--wallet", required=True)
market_create_parser.add_argument("--type", dest="item_type", required=True)
market_create_parser.add_argument("--price", type=float, required=True)
market_create_parser.add_argument("--description")
market_create_parser.add_argument("--password")
market_create_parser.add_argument("--password-file")
market_create_parser.add_argument("--chain-id", help="Chain ID")
market_create_parser.add_argument("--coordinator-url", default=ctx.default_coordinator_url)
market_create_parser.add_argument("--marketplace-url")
market_create_parser.set_defaults(handler=ctx.handle_market_create)
market_search_parser = market_subparsers.add_parser("search", help="Search marketplace items")
market_search_parser.add_argument("--rpc-url", default=ctx.default_rpc_url)
market_search_parser.set_defaults(handler=ctx.handle_market_listings) # Reuse listings for now
market_mine_parser = market_subparsers.add_parser("my-listings", help="Show your marketplace listings")
market_mine_parser.add_argument("--wallet")
market_mine_parser.add_argument("--rpc-url", default=ctx.default_rpc_url)
market_mine_parser.set_defaults(handler=ctx.handle_market_listings) # Reuse listings for now
market_get_parser = market_subparsers.add_parser("get", help="Get listing by ID")
market_get_parser.add_argument("--listing-id", required=True)
market_get_parser.add_argument("--chain-id", help="Chain ID")
market_get_parser.add_argument("--rpc-url", default=ctx.default_rpc_url)
market_get_parser.add_argument("--marketplace-url")
market_get_parser.set_defaults(handler=ctx.handle_market_get)
market_delete_parser = market_subparsers.add_parser("delete", help="Delete listing")
market_delete_parser.add_argument("--listing-id")
market_delete_parser.add_argument("--order")
market_delete_parser.add_argument("--wallet")
market_delete_parser.add_argument("--password")
market_delete_parser.add_argument("--password-file")
market_delete_parser.add_argument("--chain-id", help="Chain ID")
market_delete_parser.add_argument("--coordinator-url", default=ctx.default_coordinator_url)
market_delete_parser.add_argument("--marketplace-url")
market_delete_parser.set_defaults(handler=ctx.handle_market_delete)
market_buy_parser = market_subparsers.add_parser("buy", help="Buy from marketplace")
market_buy_parser.add_argument("--item", required=True)
market_buy_parser.add_argument("--price", type=float)
market_buy_parser.add_argument("--wallet", required=True)
market_buy_parser.add_argument("--password")
market_buy_parser.add_argument("--rpc-url", default=ctx.default_rpc_url)
market_buy_parser.add_argument("--marketplace-url")
market_buy_parser.set_defaults(handler=ctx.handle_market_buy)
market_sell_parser = market_subparsers.add_parser("sell", help="Sell on marketplace")
market_sell_parser.add_argument("--item", required=True)
market_sell_parser.add_argument("--price", type=float, required=True)
market_sell_parser.add_argument("--wallet", required=True)
market_sell_parser.add_argument("--password")
market_sell_parser.add_argument("--rpc-url", default=ctx.default_rpc_url)
market_sell_parser.add_argument("--marketplace-url")
market_sell_parser.set_defaults(handler=ctx.handle_market_sell)
market_orders_parser = market_subparsers.add_parser("orders", help="Show marketplace orders")
market_orders_parser.add_argument("--wallet")
market_orders_parser.add_argument("--rpc-url", default=ctx.default_rpc_url)
market_orders_parser.add_argument("--marketplace-url")
market_orders_parser.set_defaults(handler=ctx.handle_market_orders)
market_plugins_parser = market_subparsers.add_parser("list-plugin", help="List marketplace plugins")
market_plugins_parser.add_argument("--coordinator-url", default=ctx.default_coordinator_url)
market_plugins_parser.add_argument("--marketplace-url")
market_plugins_parser.set_defaults(handler=ctx.handle_market_list_plugins)