File size: 1,927 Bytes
529090e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/**
 * Tool Registry - The Nervous System
 *
 * Central registry that connects all system tools to the brain.
 * This keeps index.ts clean and makes it easy to add new capabilities.
 *
 * Each tool represents a capability the system can invoke.
 */

import {
  harvestFetchHandler,
  harvestListHandler,
  harvestReadHandler,
  harvestToolDefinitions
} from '../mcp/tools/harvestTool.js';

export interface ToolDefinition {
  name: string;
  description: string;
  inputSchema: {
    type: string;
    properties: Record<string, any>;
    required?: string[];
  };
  handler: (payload: any, ctx: any) => Promise<any>;
}

/**
 * All system tools - the capabilities available to agents
 */
const systemTools: ToolDefinition[] = [
  // The Harvester - Knowledge Acquisition
  {
    ...harvestToolDefinitions[0], // harvest.fetch
    handler: harvestFetchHandler
  },
  {
    ...harvestToolDefinitions[1], // harvest.list
    handler: harvestListHandler
  },
  {
    ...harvestToolDefinitions[2], // harvest.read
    handler: harvestReadHandler
  }
];

/**
 * Get all system tools for agent registration
 */
export function getSystemTools(): ToolDefinition[] {
  return systemTools;
}

/**
 * Get a specific tool by name
 */
export function getTool(name: string): ToolDefinition | undefined {
  return systemTools.find(t => t.name === name);
}

/**
 * Register tools with MCP registry
 */
export async function registerSystemTools(mcpRegistry: any): Promise<void> {
  for (const tool of systemTools) {
    mcpRegistry.registerTool(tool.name, tool.handler);
  }
  console.log(`🔧 System Tools registered: ${systemTools.map(t => t.name).join(', ')}`);
}

/**
 * Get tool definitions for agent context (without handlers)
 */
export function getToolDefinitionsForAgent(): Array<Omit<ToolDefinition, 'handler'>> {
  return systemTools.map(({ name, description, inputSchema }) => ({
    name,
    description,
    inputSchema
  }));
}