- Add get_miner_id() dependency to extract miner ID from X-Miner-ID header
- Update miner register and heartbeat endpoints to require both X-Miner-ID and X-Api-Key headers
- Remove miner_id from query parameters in favor of header-based extraction
- Fix miner heartbeat CLI to send proper JSON payload with inflight, status, and metadata fields
- Fix typo in MinerService: extra_metadata → extra_meta_data
- Add POST /api/v1/miners/{miner_id}/jobs endpoint for listing miner-assigned jobs with filtering
- Add POST /api/v1/miners/{miner_id}/earnings endpoint for miner earnings tracking (mock implementation)
- Add PUT /api/v1/miners/{miner_id}/capabilities endpoint for updating miner capabilities
- Add DELETE /api/v1/miners/{miner_id} endpoint for miner deregistration (sets OFFLINE status)
- Add JobService.fail_job()
- Add GPU fields (model, memory, count, CUDA version, price, region) to MarketplaceOffer model
- Create new marketplace_gpu router for GPU-specific operations
- Update offer sync to populate GPU fields from miner capabilities
- Move GPU attributes from generic attributes dict to dedicated fields
- Update MarketplaceOfferView schema with GPU fields
- Expand CLI README with comprehensive documentation and