Add environment configuration and local development documentation
- Parameterize CORS_ORIGINS in docker-compose.swarm.yml - Add .env.example with configuration options - Create comprehensive LOCAL_DEVELOPMENT.md guide - Update README.md with environment variable documentation - Provide alternatives for local development without production domain 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
35
mcp-server/dist/hive-client.d.ts
vendored
35
mcp-server/dist/hive-client.d.ts
vendored
@@ -17,6 +17,17 @@ export interface Agent {
|
||||
status: 'available' | 'busy' | 'offline';
|
||||
current_tasks: number;
|
||||
max_concurrent: number;
|
||||
agent_type?: 'ollama' | 'cli';
|
||||
cli_config?: {
|
||||
host?: string;
|
||||
node_version?: string;
|
||||
model?: string;
|
||||
specialization?: string;
|
||||
max_concurrent?: number;
|
||||
command_timeout?: number;
|
||||
ssh_timeout?: number;
|
||||
agent_type?: string;
|
||||
};
|
||||
}
|
||||
export interface Task {
|
||||
id: string;
|
||||
@@ -58,6 +69,30 @@ export declare class HiveClient {
|
||||
registerAgent(agentData: Partial<Agent>): Promise<{
|
||||
agent_id: string;
|
||||
}>;
|
||||
getCliAgents(): Promise<Agent[]>;
|
||||
registerCliAgent(agentData: {
|
||||
id: string;
|
||||
host: string;
|
||||
node_version: string;
|
||||
model?: string;
|
||||
specialization?: string;
|
||||
max_concurrent?: number;
|
||||
agent_type?: string;
|
||||
command_timeout?: number;
|
||||
ssh_timeout?: number;
|
||||
}): Promise<{
|
||||
agent_id: string;
|
||||
endpoint: string;
|
||||
health_check?: any;
|
||||
}>;
|
||||
registerPredefinedCliAgents(): Promise<{
|
||||
results: any[];
|
||||
}>;
|
||||
healthCheckCliAgent(agentId: string): Promise<any>;
|
||||
getCliAgentStatistics(): Promise<any>;
|
||||
unregisterCliAgent(agentId: string): Promise<{
|
||||
success: boolean;
|
||||
}>;
|
||||
createTask(taskData: {
|
||||
type: string;
|
||||
priority: number;
|
||||
|
||||
2
mcp-server/dist/hive-client.d.ts.map
vendored
2
mcp-server/dist/hive-client.d.ts.map
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"hive-client.d.ts","sourceRoot":"","sources":["../src/hive-client.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"hive-client.d.ts","sourceRoot":"","sources":["../src/hive-client.ts"],"names":[],"mappings":"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"}
|
||||
25
mcp-server/dist/hive-client.js
vendored
25
mcp-server/dist/hive-client.js
vendored
@@ -42,6 +42,31 @@ export class HiveClient {
|
||||
const response = await this.api.post('/api/agents', agentData);
|
||||
return response.data;
|
||||
}
|
||||
// CLI Agent Management
|
||||
async getCliAgents() {
|
||||
const response = await this.api.get('/api/cli-agents/');
|
||||
return response.data || [];
|
||||
}
|
||||
async registerCliAgent(agentData) {
|
||||
const response = await this.api.post('/api/cli-agents/register', agentData);
|
||||
return response.data;
|
||||
}
|
||||
async registerPredefinedCliAgents() {
|
||||
const response = await this.api.post('/api/cli-agents/register-predefined');
|
||||
return response.data;
|
||||
}
|
||||
async healthCheckCliAgent(agentId) {
|
||||
const response = await this.api.post(`/api/cli-agents/${agentId}/health-check`);
|
||||
return response.data;
|
||||
}
|
||||
async getCliAgentStatistics() {
|
||||
const response = await this.api.get('/api/cli-agents/statistics/all');
|
||||
return response.data;
|
||||
}
|
||||
async unregisterCliAgent(agentId) {
|
||||
const response = await this.api.delete(`/api/cli-agents/${agentId}`);
|
||||
return response.data;
|
||||
}
|
||||
// Task Management
|
||||
async createTask(taskData) {
|
||||
const response = await this.api.post('/api/tasks', taskData);
|
||||
|
||||
2
mcp-server/dist/hive-client.js.map
vendored
2
mcp-server/dist/hive-client.js.map
vendored
File diff suppressed because one or more lines are too long
3
mcp-server/dist/hive-tools.d.ts
vendored
3
mcp-server/dist/hive-tools.d.ts
vendored
@@ -23,5 +23,8 @@ export declare class HiveTools {
|
||||
private getExecutions;
|
||||
private coordinateDevelopment;
|
||||
private bringHiveOnline;
|
||||
private registerCliAgent;
|
||||
private getCliAgents;
|
||||
private registerPredefinedCliAgents;
|
||||
}
|
||||
//# sourceMappingURL=hive-tools.d.ts.map
|
||||
2
mcp-server/dist/hive-tools.d.ts.map
vendored
2
mcp-server/dist/hive-tools.d.ts.map
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"hive-tools.d.ts","sourceRoot":"","sources":["../src/hive-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAe,MAAM,kBAAkB,CAAC;AAM3D,qBAAa,SAAS;IACpB,OAAO,CAAC,UAAU,CAAa;gBAEnB,UAAU,EAAE,UAAU;IAIlC,WAAW,IAAI,IAAI,EAAE;IAmOf,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;YAkE1D,SAAS;YAqBT,aAAa;YAkBb,UAAU;YA6BV,OAAO;YAoBP,QAAQ;YAsBR,YAAY;YAqBZ,cAAc;YAiBd,eAAe;YAiBf,gBAAgB;YAuBhB,UAAU;YAaV,aAAa;YAsBb,qBAAqB;YAuCrB,eAAe;CAyF9B"}
|
||||
{"version":3,"file":"hive-tools.d.ts","sourceRoot":"","sources":["../src/hive-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAe,MAAM,kBAAkB,CAAC;AAM3D,qBAAa,SAAS;IACpB,OAAO,CAAC,UAAU,CAAa;gBAEnB,UAAU,EAAE,UAAU;IAIlC,WAAW,IAAI,IAAI,EAAE;IA2Qf,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;YA2E1D,SAAS;YAiDT,aAAa;YAkBb,UAAU;YA6BV,OAAO;YAoBP,QAAQ;YAsBR,YAAY;YAqBZ,cAAc;YAiBd,eAAe;YAiBf,gBAAgB;YAuBhB,UAAU;YAaV,aAAa;YAsBb,qBAAqB;YAuCrB,eAAe;YA0Ff,gBAAgB;YA4ChB,YAAY;YAyCZ,2BAA2B;CAuD1C"}
|
||||
220
mcp-server/dist/hive-tools.js
vendored
220
mcp-server/dist/hive-tools.js
vendored
@@ -33,7 +33,7 @@ export class HiveTools {
|
||||
model: { type: 'string', description: 'Model name (e.g., codellama:34b)' },
|
||||
specialty: {
|
||||
type: 'string',
|
||||
enum: ['kernel_dev', 'pytorch_dev', 'profiler', 'docs_writer', 'tester'],
|
||||
enum: ['kernel_dev', 'pytorch_dev', 'profiler', 'docs_writer', 'tester', 'cli_gemini', 'general_ai', 'reasoning'],
|
||||
description: 'Agent specialization area'
|
||||
},
|
||||
max_concurrent: { type: 'number', description: 'Maximum concurrent tasks', default: 2 },
|
||||
@@ -41,6 +41,46 @@ export class HiveTools {
|
||||
required: ['id', 'endpoint', 'model', 'specialty'],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'hive_register_cli_agent',
|
||||
description: 'Register a new CLI-based AI agent (e.g., Gemini CLI) in the Hive cluster',
|
||||
inputSchema: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
id: { type: 'string', description: 'Unique CLI agent identifier' },
|
||||
host: { type: 'string', description: 'SSH hostname (e.g., walnut, ironwood)' },
|
||||
node_version: { type: 'string', description: 'Node.js version (e.g., v22.14.0)' },
|
||||
model: { type: 'string', description: 'Model name (e.g., gemini-2.5-pro)', default: 'gemini-2.5-pro' },
|
||||
specialization: {
|
||||
type: 'string',
|
||||
enum: ['general_ai', 'reasoning', 'code_analysis', 'documentation', 'testing'],
|
||||
description: 'CLI agent specialization',
|
||||
default: 'general_ai'
|
||||
},
|
||||
max_concurrent: { type: 'number', description: 'Maximum concurrent tasks', default: 2 },
|
||||
agent_type: { type: 'string', description: 'CLI agent type', default: 'gemini' },
|
||||
command_timeout: { type: 'number', description: 'Command timeout in seconds', default: 60 },
|
||||
ssh_timeout: { type: 'number', description: 'SSH timeout in seconds', default: 5 },
|
||||
},
|
||||
required: ['id', 'host', 'node_version'],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'hive_get_cli_agents',
|
||||
description: 'Get all registered CLI agents in the Hive cluster',
|
||||
inputSchema: {
|
||||
type: 'object',
|
||||
properties: {},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'hive_register_predefined_cli_agents',
|
||||
description: 'Register predefined CLI agents (walnut-gemini, ironwood-gemini) with verified configurations',
|
||||
inputSchema: {
|
||||
type: 'object',
|
||||
properties: {},
|
||||
},
|
||||
},
|
||||
// Task Management Tools
|
||||
{
|
||||
name: 'hive_create_task',
|
||||
@@ -50,7 +90,7 @@ export class HiveTools {
|
||||
properties: {
|
||||
type: {
|
||||
type: 'string',
|
||||
enum: ['kernel_dev', 'pytorch_dev', 'profiler', 'docs_writer', 'tester'],
|
||||
enum: ['kernel_dev', 'pytorch_dev', 'profiler', 'docs_writer', 'tester', 'cli_gemini', 'general_ai', 'reasoning'],
|
||||
description: 'Type of development task'
|
||||
},
|
||||
priority: {
|
||||
@@ -193,7 +233,7 @@ export class HiveTools {
|
||||
items: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
specialization: { type: 'string', enum: ['kernel_dev', 'pytorch_dev', 'profiler', 'docs_writer', 'tester'] },
|
||||
specialization: { type: 'string', enum: ['kernel_dev', 'pytorch_dev', 'profiler', 'docs_writer', 'tester', 'cli_gemini', 'general_ai', 'reasoning'] },
|
||||
task_description: { type: 'string' },
|
||||
dependencies: { type: 'array', items: { type: 'string' } },
|
||||
priority: { type: 'number', minimum: 1, maximum: 5 }
|
||||
@@ -240,6 +280,12 @@ export class HiveTools {
|
||||
return await this.getAgents();
|
||||
case 'hive_register_agent':
|
||||
return await this.registerAgent(args);
|
||||
case 'hive_register_cli_agent':
|
||||
return await this.registerCliAgent(args);
|
||||
case 'hive_get_cli_agents':
|
||||
return await this.getCliAgents();
|
||||
case 'hive_register_predefined_cli_agents':
|
||||
return await this.registerPredefinedCliAgents();
|
||||
// Task Management
|
||||
case 'hive_create_task':
|
||||
return await this.createTask(args);
|
||||
@@ -286,17 +332,40 @@ export class HiveTools {
|
||||
// Tool Implementation Methods
|
||||
async getAgents() {
|
||||
const agents = await this.hiveClient.getAgents();
|
||||
// Group agents by type
|
||||
const ollamaAgents = agents.filter(agent => !agent.agent_type || agent.agent_type === 'ollama');
|
||||
const cliAgents = agents.filter(agent => agent.agent_type === 'cli');
|
||||
const formatAgent = (agent) => {
|
||||
const typeIcon = agent.agent_type === 'cli' ? '⚡' : '🤖';
|
||||
const typeLabel = agent.agent_type === 'cli' ? 'CLI' : 'API';
|
||||
return `${typeIcon} **${agent.id}** (${agent.specialty}) [${typeLabel}]\n` +
|
||||
` • Model: ${agent.model}\n` +
|
||||
` • Endpoint: ${agent.endpoint}\n` +
|
||||
` • Status: ${agent.status}\n` +
|
||||
` • Tasks: ${agent.current_tasks}/${agent.max_concurrent}\n`;
|
||||
};
|
||||
let text = `📋 **Hive Cluster Agents** (${agents.length} total)\n\n`;
|
||||
if (ollamaAgents.length > 0) {
|
||||
text += `🤖 **Ollama Agents** (${ollamaAgents.length}):\n`;
|
||||
text += ollamaAgents.map(formatAgent).join('\n') + '\n';
|
||||
}
|
||||
if (cliAgents.length > 0) {
|
||||
text += `⚡ **CLI Agents** (${cliAgents.length}):\n`;
|
||||
text += cliAgents.map(formatAgent).join('\n') + '\n';
|
||||
}
|
||||
if (agents.length === 0) {
|
||||
text += 'No agents registered yet.\n\n';
|
||||
text += '**Getting Started:**\n';
|
||||
text += '• Use `hive_register_agent` for Ollama agents\n';
|
||||
text += '• Use `hive_register_cli_agent` for CLI agents\n';
|
||||
text += '• Use `hive_register_predefined_cli_agents` for quick CLI setup\n';
|
||||
text += '• Use `hive_bring_online` for auto-discovery';
|
||||
}
|
||||
return {
|
||||
content: [
|
||||
{
|
||||
type: 'text',
|
||||
text: `📋 Hive Cluster Agents (${agents.length} total):\n\n${agents.length > 0
|
||||
? agents.map(agent => `🤖 **${agent.id}** (${agent.specialty})\n` +
|
||||
` • Model: ${agent.model}\n` +
|
||||
` • Endpoint: ${agent.endpoint}\n` +
|
||||
` • Status: ${agent.status}\n` +
|
||||
` • Tasks: ${agent.current_tasks}/${agent.max_concurrent}\n`).join('\n')
|
||||
: 'No agents registered yet. Use hive_register_agent to add agents to the cluster.'}`,
|
||||
text,
|
||||
},
|
||||
],
|
||||
};
|
||||
@@ -586,5 +655,136 @@ export class HiveTools {
|
||||
};
|
||||
}
|
||||
}
|
||||
async registerCliAgent(args) {
|
||||
try {
|
||||
const result = await this.hiveClient.registerCliAgent(args);
|
||||
return {
|
||||
content: [
|
||||
{
|
||||
type: 'text',
|
||||
text: `✅ **CLI Agent Registered Successfully!**\n\n` +
|
||||
`⚡ **Agent Details:**\n` +
|
||||
`• ID: **${args.id}**\n` +
|
||||
`• Host: ${args.host}\n` +
|
||||
`• Specialization: ${args.specialization}\n` +
|
||||
`• Model: ${args.model}\n` +
|
||||
`• Node Version: ${args.node_version}\n` +
|
||||
`• Max Concurrent: ${args.max_concurrent || 2}\n` +
|
||||
`• Endpoint: ${result.endpoint}\n\n` +
|
||||
`🔍 **Health Check:**\n` +
|
||||
`• SSH: ${result.health_check?.ssh_healthy ? '✅ Connected' : '❌ Failed'}\n` +
|
||||
`• CLI: ${result.health_check?.cli_healthy ? '✅ Working' : '❌ Failed'}\n` +
|
||||
`${result.health_check?.response_time ? `• Response Time: ${result.health_check.response_time.toFixed(2)}s\n` : ''}` +
|
||||
`\n🎯 **Ready for Tasks!** The CLI agent is now available for distributed AI coordination.`,
|
||||
},
|
||||
],
|
||||
};
|
||||
}
|
||||
catch (error) {
|
||||
return {
|
||||
content: [
|
||||
{
|
||||
type: 'text',
|
||||
text: `❌ **Failed to register CLI agent**\n\n` +
|
||||
`Error: ${error instanceof Error ? error.message : String(error)}\n\n` +
|
||||
`**Troubleshooting:**\n` +
|
||||
`• Verify SSH connectivity to ${args.host}\n` +
|
||||
`• Ensure Gemini CLI is installed and accessible\n` +
|
||||
`• Check Node.js version ${args.node_version} is available\n` +
|
||||
`• Confirm Hive backend is running and accessible`,
|
||||
},
|
||||
],
|
||||
isError: true,
|
||||
};
|
||||
}
|
||||
}
|
||||
async getCliAgents() {
|
||||
try {
|
||||
const cliAgents = await this.hiveClient.getCliAgents();
|
||||
return {
|
||||
content: [
|
||||
{
|
||||
type: 'text',
|
||||
text: `⚡ **CLI Agents** (${cliAgents.length} total)\n\n${cliAgents.length > 0
|
||||
? cliAgents.map((agent) => `⚡ **${agent.id}** (${agent.specialization})\n` +
|
||||
` • Model: ${agent.model}\n` +
|
||||
` • Host: ${agent.cli_config?.host || 'Unknown'}\n` +
|
||||
` • Node Version: ${agent.cli_config?.node_version || 'Unknown'}\n` +
|
||||
` • Status: ${agent.status}\n` +
|
||||
` • Tasks: ${agent.current_tasks}/${agent.max_concurrent}\n` +
|
||||
` • Endpoint: ${agent.endpoint}\n`).join('\n')
|
||||
: 'No CLI agents registered yet.\n\n' +
|
||||
'**Getting Started:**\n' +
|
||||
'• Use `hive_register_cli_agent` to register individual CLI agents\n' +
|
||||
'• Use `hive_register_predefined_cli_agents` to register walnut-gemini and ironwood-gemini automatically'}`,
|
||||
},
|
||||
],
|
||||
};
|
||||
}
|
||||
catch (error) {
|
||||
return {
|
||||
content: [
|
||||
{
|
||||
type: 'text',
|
||||
text: `❌ **Failed to get CLI agents**\n\n` +
|
||||
`Error: ${error instanceof Error ? error.message : String(error)}\n\n` +
|
||||
`Please ensure the Hive backend is running and accessible.`,
|
||||
},
|
||||
],
|
||||
isError: true,
|
||||
};
|
||||
}
|
||||
}
|
||||
async registerPredefinedCliAgents() {
|
||||
try {
|
||||
const result = await this.hiveClient.registerPredefinedCliAgents();
|
||||
const successCount = result.results.filter((r) => r.status === 'success').length;
|
||||
const existingCount = result.results.filter((r) => r.status === 'already_exists').length;
|
||||
const failedCount = result.results.filter((r) => r.status === 'failed').length;
|
||||
let text = `⚡ **Predefined CLI Agents Registration Complete**\n\n`;
|
||||
text += `📊 **Summary:**\n`;
|
||||
text += `• Successfully registered: ${successCount}\n`;
|
||||
text += `• Already existed: ${existingCount}\n`;
|
||||
text += `• Failed: ${failedCount}\n\n`;
|
||||
text += `📋 **Results:**\n`;
|
||||
for (const res of result.results) {
|
||||
const statusIcon = res.status === 'success' ? '✅' :
|
||||
res.status === 'already_exists' ? '📋' : '❌';
|
||||
text += `${statusIcon} **${res.agent_id}**: ${res.message || res.error || res.status}\n`;
|
||||
}
|
||||
if (successCount > 0) {
|
||||
text += `\n🎯 **Ready for Action!** The CLI agents are now available for:\n`;
|
||||
text += `• General AI tasks (walnut-gemini)\n`;
|
||||
text += `• Advanced reasoning (ironwood-gemini)\n`;
|
||||
text += `• Mixed agent coordination\n`;
|
||||
text += `• Hybrid local/cloud AI orchestration`;
|
||||
}
|
||||
return {
|
||||
content: [
|
||||
{
|
||||
type: 'text',
|
||||
text,
|
||||
},
|
||||
],
|
||||
};
|
||||
}
|
||||
catch (error) {
|
||||
return {
|
||||
content: [
|
||||
{
|
||||
type: 'text',
|
||||
text: `❌ **Failed to register predefined CLI agents**\n\n` +
|
||||
`Error: ${error instanceof Error ? error.message : String(error)}\n\n` +
|
||||
`**Troubleshooting:**\n` +
|
||||
`• Ensure WALNUT and IRONWOOD are accessible via SSH\n` +
|
||||
`• Verify Gemini CLI is installed on both machines\n` +
|
||||
`• Check that Node.js v22.14.0 (WALNUT) and v22.17.0 (IRONWOOD) are available\n` +
|
||||
`• Confirm Hive backend is running with CLI agent support`,
|
||||
},
|
||||
],
|
||||
isError: true,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=hive-tools.js.map
|
||||
2
mcp-server/dist/hive-tools.js.map
vendored
2
mcp-server/dist/hive-tools.js.map
vendored
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user