Files
hive/mcp-server/dist/hive-client.js
anthonyrawlins ca18476efc Implement comprehensive API documentation system
 Features:
- Comprehensive Pydantic response models with examples
- Enhanced FastAPI configuration with rich OpenAPI metadata
- Centralized error handling with standardized error codes
- Professional Swagger UI styling and branding
- Health check endpoints with detailed component status
- Type-safe request/response models for all endpoints

📊 Coverage:
- Agent Management API fully documented
- Standardized error responses across all endpoints
- Interactive API documentation with try-it-now functionality
- Custom OpenAPI schema with authentication schemes

🛠️ Technical Improvements:
- Created app/models/responses.py with comprehensive models
- Added app/core/error_handlers.py for centralized error handling
- Enhanced app/api/agents.py with detailed documentation
- Custom documentation configuration in app/docs_config.py
- Global exception handlers for consistent error responses

🌐 Access Points:
- Swagger UI: /docs
- ReDoc: /redoc
- OpenAPI JSON: /openapi.json

This establishes professional-grade API documentation that matches
Hive's technical excellence and provides developers with comprehensive,
interactive documentation for efficient integration.

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-12 10:21:08 +10:00

148 lines
5.0 KiB
JavaScript

/**
* Hive Client
*
* Handles communication with the Hive backend API
*/
import axios from 'axios';
import WebSocket from 'ws';
export class HiveClient {
api;
config;
wsConnection;
constructor(config) {
this.config = {
baseUrl: process.env.HIVE_API_URL || 'https://hive.home.deepblack.cloud/api',
wsUrl: process.env.HIVE_WS_URL || 'wss://hive.home.deepblack.cloud/socket.io',
timeout: parseInt(process.env.HIVE_TIMEOUT || '30000'),
...config,
};
this.api = axios.create({
baseURL: this.config.baseUrl,
timeout: this.config.timeout,
headers: {
'Content-Type': 'application/json',
},
});
}
async testConnection() {
try {
const response = await this.api.get('/health');
return response.data.status === 'healthy' || response.status === 200;
}
catch (error) {
throw new Error(`Failed to connect to Hive: ${error}`);
}
}
// Agent Management
async getAgents() {
const response = await this.api.get('/agents');
return response.data.agents || [];
}
async registerAgent(agentData) {
const response = await this.api.post('/agents', agentData);
return response.data;
}
// CLI Agent Management
async getCliAgents() {
const response = await this.api.get('/cli-agents/');
return response.data || [];
}
async registerCliAgent(agentData) {
const response = await this.api.post('/cli-agents/register', agentData);
return response.data;
}
async registerPredefinedCliAgents() {
const response = await this.api.post('/cli-agents/register-predefined');
return response.data;
}
async healthCheckCliAgent(agentId) {
const response = await this.api.post(`/cli-agents/${agentId}/health-check`);
return response.data;
}
async getCliAgentStatistics() {
const response = await this.api.get('/cli-agents/statistics/all');
return response.data;
}
async unregisterCliAgent(agentId) {
const response = await this.api.delete(`/cli-agents/${agentId}`);
return response.data;
}
// Task Management
async createTask(taskData) {
const response = await this.api.post('/tasks', taskData);
return response.data;
}
async getTask(taskId) {
const response = await this.api.get(`/tasks/${taskId}`);
return response.data;
}
async getTasks(filters) {
const params = new URLSearchParams();
if (filters?.status)
params.append('status', filters.status);
if (filters?.agent)
params.append('agent', filters.agent);
if (filters?.limit)
params.append('limit', filters.limit.toString());
const response = await this.api.get(`/tasks?${params}`);
return response.data.tasks || [];
}
// Workflow Management
async getWorkflows() {
const response = await this.api.get('/workflows');
return response.data.workflows || [];
}
async createWorkflow(workflowData) {
const response = await this.api.post('/workflows', workflowData);
return response.data;
}
async executeWorkflow(workflowId, inputs) {
const response = await this.api.post(`/workflows/${workflowId}/execute`, { inputs });
return response.data;
}
// Monitoring and Status
async getClusterStatus() {
const response = await this.api.get('/status');
return response.data;
}
async getMetrics() {
const response = await this.api.get('/metrics');
return response.data;
}
async getExecutions(workflowId) {
const url = workflowId ? `/executions?workflow_id=${workflowId}` : '/executions';
const response = await this.api.get(url);
return response.data.executions || [];
}
// Real-time Updates via WebSocket
async connectWebSocket(topic = 'general') {
return new Promise((resolve, reject) => {
const ws = new WebSocket(`${this.config.wsUrl}/ws/${topic}`);
ws.on('open', () => {
console.log(`🔗 Connected to Hive WebSocket (${topic})`);
this.wsConnection = ws;
resolve(ws);
});
ws.on('error', (error) => {
console.error('WebSocket error:', error);
reject(error);
});
ws.on('message', (data) => {
try {
const message = JSON.parse(data.toString());
console.log('📨 Hive update:', message);
}
catch (error) {
console.error('Failed to parse WebSocket message:', error);
}
});
});
}
async disconnect() {
if (this.wsConnection) {
this.wsConnection.close();
this.wsConnection = undefined;
}
}
}
//# sourceMappingURL=hive-client.js.map