@weavelogic/knowledge-graph-agent 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/README.md +290 -3
  2. package/dist/_virtual/index10.js +2 -2
  3. package/dist/_virtual/index6.js +2 -2
  4. package/dist/_virtual/index7.js +2 -2
  5. package/dist/_virtual/index8.js +2 -2
  6. package/dist/_virtual/index9.js +2 -2
  7. package/dist/audit/config.d.ts +150 -0
  8. package/dist/audit/config.d.ts.map +1 -0
  9. package/dist/audit/config.js +111 -0
  10. package/dist/audit/config.js.map +1 -0
  11. package/dist/audit/index.d.ts +38 -0
  12. package/dist/audit/index.d.ts.map +1 -0
  13. package/dist/audit/services/audit-chain.d.ts +276 -0
  14. package/dist/audit/services/audit-chain.d.ts.map +1 -0
  15. package/dist/audit/services/audit-chain.js +502 -0
  16. package/dist/audit/services/audit-chain.js.map +1 -0
  17. package/dist/audit/services/index.d.ts +11 -0
  18. package/dist/audit/services/index.d.ts.map +1 -0
  19. package/dist/audit/services/syndication.d.ts +334 -0
  20. package/dist/audit/services/syndication.d.ts.map +1 -0
  21. package/dist/audit/services/syndication.js +589 -0
  22. package/dist/audit/services/syndication.js.map +1 -0
  23. package/dist/audit/types.d.ts +453 -0
  24. package/dist/audit/types.d.ts.map +1 -0
  25. package/dist/cli/commands/audit.d.ts +21 -0
  26. package/dist/cli/commands/audit.d.ts.map +1 -0
  27. package/dist/cli/commands/audit.js +621 -0
  28. package/dist/cli/commands/audit.js.map +1 -0
  29. package/dist/cli/commands/vector.d.ts +14 -0
  30. package/dist/cli/commands/vector.d.ts.map +1 -0
  31. package/dist/cli/commands/vector.js +429 -0
  32. package/dist/cli/commands/vector.js.map +1 -0
  33. package/dist/cli/commands/workflow.d.ts +12 -0
  34. package/dist/cli/commands/workflow.d.ts.map +1 -0
  35. package/dist/cli/commands/workflow.js +471 -0
  36. package/dist/cli/commands/workflow.js.map +1 -0
  37. package/dist/cli/index.d.ts.map +1 -1
  38. package/dist/cli/index.js +26 -0
  39. package/dist/cli/index.js.map +1 -1
  40. package/dist/database/schemas/index.d.ts +85 -0
  41. package/dist/database/schemas/index.d.ts.map +1 -0
  42. package/dist/index.d.ts +2 -0
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +9 -0
  45. package/dist/index.js.map +1 -1
  46. package/dist/mcp-server/tools/audit/checkpoint.d.ts +58 -0
  47. package/dist/mcp-server/tools/audit/checkpoint.d.ts.map +1 -0
  48. package/dist/mcp-server/tools/audit/checkpoint.js +73 -0
  49. package/dist/mcp-server/tools/audit/checkpoint.js.map +1 -0
  50. package/dist/mcp-server/tools/audit/index.d.ts +53 -0
  51. package/dist/mcp-server/tools/audit/index.d.ts.map +1 -0
  52. package/dist/mcp-server/tools/audit/index.js +12 -0
  53. package/dist/mcp-server/tools/audit/index.js.map +1 -0
  54. package/dist/mcp-server/tools/audit/query.d.ts +58 -0
  55. package/dist/mcp-server/tools/audit/query.d.ts.map +1 -0
  56. package/dist/mcp-server/tools/audit/query.js +125 -0
  57. package/dist/mcp-server/tools/audit/query.js.map +1 -0
  58. package/dist/mcp-server/tools/audit/sync.d.ts +58 -0
  59. package/dist/mcp-server/tools/audit/sync.d.ts.map +1 -0
  60. package/dist/mcp-server/tools/audit/sync.js +126 -0
  61. package/dist/mcp-server/tools/audit/sync.js.map +1 -0
  62. package/dist/mcp-server/tools/index.d.ts +3 -0
  63. package/dist/mcp-server/tools/index.d.ts.map +1 -1
  64. package/dist/mcp-server/tools/registry.js +90 -0
  65. package/dist/mcp-server/tools/registry.js.map +1 -1
  66. package/dist/mcp-server/tools/vector/index.d.ts +12 -0
  67. package/dist/mcp-server/tools/vector/index.d.ts.map +1 -0
  68. package/dist/mcp-server/tools/vector/index.js +12 -0
  69. package/dist/mcp-server/tools/vector/index.js.map +1 -0
  70. package/dist/mcp-server/tools/vector/search.d.ts +41 -0
  71. package/dist/mcp-server/tools/vector/search.d.ts.map +1 -0
  72. package/dist/mcp-server/tools/vector/search.js +224 -0
  73. package/dist/mcp-server/tools/vector/search.js.map +1 -0
  74. package/dist/mcp-server/tools/vector/trajectory.d.ts +39 -0
  75. package/dist/mcp-server/tools/vector/trajectory.d.ts.map +1 -0
  76. package/dist/mcp-server/tools/vector/trajectory.js +170 -0
  77. package/dist/mcp-server/tools/vector/trajectory.js.map +1 -0
  78. package/dist/mcp-server/tools/vector/upsert.d.ts +44 -0
  79. package/dist/mcp-server/tools/vector/upsert.d.ts.map +1 -0
  80. package/dist/mcp-server/tools/vector/upsert.js +175 -0
  81. package/dist/mcp-server/tools/vector/upsert.js.map +1 -0
  82. package/dist/mcp-server/tools/workflow/index.d.ts +29 -0
  83. package/dist/mcp-server/tools/workflow/index.d.ts.map +1 -0
  84. package/dist/mcp-server/tools/workflow/index.js +12 -0
  85. package/dist/mcp-server/tools/workflow/index.js.map +1 -0
  86. package/dist/mcp-server/tools/workflow/list.d.ts +41 -0
  87. package/dist/mcp-server/tools/workflow/list.d.ts.map +1 -0
  88. package/dist/mcp-server/tools/workflow/list.js +195 -0
  89. package/dist/mcp-server/tools/workflow/list.js.map +1 -0
  90. package/dist/mcp-server/tools/workflow/start.d.ts +40 -0
  91. package/dist/mcp-server/tools/workflow/start.d.ts.map +1 -0
  92. package/dist/mcp-server/tools/workflow/start.js +165 -0
  93. package/dist/mcp-server/tools/workflow/start.js.map +1 -0
  94. package/dist/mcp-server/tools/workflow/status.d.ts +38 -0
  95. package/dist/mcp-server/tools/workflow/status.d.ts.map +1 -0
  96. package/dist/mcp-server/tools/workflow/status.js +97 -0
  97. package/dist/mcp-server/tools/workflow/status.js.map +1 -0
  98. package/dist/node_modules/ajv/dist/compile/index.js +1 -1
  99. package/dist/node_modules/ajv/dist/vocabularies/applicator/index.js +1 -1
  100. package/dist/node_modules/ajv/dist/vocabularies/core/index.js +1 -1
  101. package/dist/node_modules/ajv/dist/vocabularies/format/index.js +1 -1
  102. package/dist/node_modules/ajv/dist/vocabularies/validation/index.js +1 -1
  103. package/dist/vector/config.d.ts +300 -0
  104. package/dist/vector/config.d.ts.map +1 -0
  105. package/dist/vector/config.js +124 -0
  106. package/dist/vector/config.js.map +1 -0
  107. package/dist/vector/index.d.ts +50 -0
  108. package/dist/vector/index.d.ts.map +1 -0
  109. package/dist/vector/services/index.d.ts +13 -0
  110. package/dist/vector/services/index.d.ts.map +1 -0
  111. package/dist/vector/services/trajectory-tracker.d.ts +405 -0
  112. package/dist/vector/services/trajectory-tracker.d.ts.map +1 -0
  113. package/dist/vector/services/trajectory-tracker.js +445 -0
  114. package/dist/vector/services/trajectory-tracker.js.map +1 -0
  115. package/dist/vector/services/vector-store.d.ts +339 -0
  116. package/dist/vector/services/vector-store.d.ts.map +1 -0
  117. package/dist/vector/services/vector-store.js +748 -0
  118. package/dist/vector/services/vector-store.js.map +1 -0
  119. package/dist/vector/types.d.ts +677 -0
  120. package/dist/vector/types.d.ts.map +1 -0
  121. package/dist/workflow/adapters/goap-adapter.d.ts +196 -0
  122. package/dist/workflow/adapters/goap-adapter.d.ts.map +1 -0
  123. package/dist/workflow/adapters/goap-adapter.js +706 -0
  124. package/dist/workflow/adapters/goap-adapter.js.map +1 -0
  125. package/dist/workflow/adapters/index.d.ts +10 -0
  126. package/dist/workflow/adapters/index.d.ts.map +1 -0
  127. package/dist/workflow/config.d.ts +135 -0
  128. package/dist/workflow/config.d.ts.map +1 -0
  129. package/dist/workflow/config.js +92 -0
  130. package/dist/workflow/config.js.map +1 -0
  131. package/dist/workflow/handlers/index.d.ts +9 -0
  132. package/dist/workflow/handlers/index.d.ts.map +1 -0
  133. package/dist/workflow/handlers/webhook-handlers.d.ts +397 -0
  134. package/dist/workflow/handlers/webhook-handlers.d.ts.map +1 -0
  135. package/dist/workflow/handlers/webhook-handlers.js +454 -0
  136. package/dist/workflow/handlers/webhook-handlers.js.map +1 -0
  137. package/dist/workflow/index.d.ts +42 -0
  138. package/dist/workflow/index.d.ts.map +1 -0
  139. package/dist/workflow/services/index.d.ts +9 -0
  140. package/dist/workflow/services/index.d.ts.map +1 -0
  141. package/dist/workflow/services/workflow-service.d.ts +318 -0
  142. package/dist/workflow/services/workflow-service.d.ts.map +1 -0
  143. package/dist/workflow/services/workflow-service.js +577 -0
  144. package/dist/workflow/services/workflow-service.js.map +1 -0
  145. package/dist/workflow/types.d.ts +470 -0
  146. package/dist/workflow/types.d.ts.map +1 -0
  147. package/dist/workflow/workflows/realtime-collab.d.ts +245 -0
  148. package/dist/workflow/workflows/realtime-collab.d.ts.map +1 -0
  149. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sources":["../../../src/mcp-server/tools/registry.ts"],"sourcesContent":["/**\n * Tool Registry\n *\n * Central registry for all MCP tools. Manages tool definitions and handlers.\n *\n * @module mcp-server/tools/registry\n */\n\nimport type { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport type { ToolHandler, ToolHandlerEntry, ToolCategory } from '../types/index.js';\nimport { createLogger } from '../../utils/index.js';\nimport type { KnowledgeGraphDatabase } from '../../core/database.js';\nimport type { ShadowCache } from '../../core/cache.js';\n\nconst logger = createLogger('tool-registry');\n\n/**\n * Registry of all registered tools\n */\nconst toolRegistry: Map<string, ToolHandlerEntry> = new Map();\n\n/**\n * Tool categories for organization\n */\nconst toolCategories: Map<string, ToolCategory> = new Map();\n\n/**\n * Shared context for tool handlers\n */\nlet sharedDatabase: KnowledgeGraphDatabase | undefined;\nlet sharedCache: ShadowCache | undefined;\nlet sharedProjectRoot: string | undefined;\n\n/**\n * Initialize tools with dependencies\n *\n * @param database - Knowledge graph database instance\n * @param cache - Shadow cache instance\n * @param projectRoot - Project root path\n */\nexport async function initializeTools(\n database?: KnowledgeGraphDatabase,\n cache?: ShadowCache,\n projectRoot?: string\n): Promise<void> {\n sharedDatabase = database;\n sharedCache = cache;\n sharedProjectRoot = projectRoot;\n\n logger.info('Initializing tool registry', {\n hasDatabase: !!database,\n hasCache: !!cache,\n projectRoot,\n });\n\n // Register core tools\n await registerCoreTools();\n\n logger.info(`Tool registry initialized with ${toolRegistry.size} tools`);\n}\n\n/**\n * Get shared database instance\n */\nexport function getDatabase(): KnowledgeGraphDatabase | undefined {\n return sharedDatabase;\n}\n\n/**\n * Get shared cache instance\n */\nexport function getCache(): ShadowCache | undefined {\n return sharedCache;\n}\n\n/**\n * Get shared project root\n */\nexport function getProjectRoot(): string | undefined {\n return sharedProjectRoot;\n}\n\n/**\n * Register a tool with its handler\n *\n * @param name - Tool name\n * @param definition - Tool definition\n * @param handler - Tool handler function\n * @param category - Optional category name\n */\nexport function registerTool(\n name: string,\n definition: Tool,\n handler: ToolHandler,\n category?: string\n): void {\n if (toolRegistry.has(name)) {\n logger.warn(`Tool ${name} already registered, overwriting`);\n }\n\n toolRegistry.set(name, { definition, handler });\n\n // Add to category if specified\n if (category) {\n let cat = toolCategories.get(category);\n if (!cat) {\n cat = { name: category, description: '', tools: [] };\n toolCategories.set(category, cat);\n }\n cat.tools.push(definition);\n }\n\n logger.debug(`Registered tool: ${name}`, { category });\n}\n\n/**\n * Get tool handler by name\n *\n * @param name - Tool name\n * @returns Tool handler or undefined\n */\nexport function getToolHandler(name: string): ToolHandler | undefined {\n const entry = toolRegistry.get(name);\n return entry?.handler;\n}\n\n/**\n * Get tool definition by name\n *\n * @param name - Tool name\n * @returns Tool definition or undefined\n */\nexport function getToolDefinition(name: string): Tool | undefined {\n const entry = toolRegistry.get(name);\n return entry?.definition;\n}\n\n/**\n * Get all tool definitions\n *\n * @returns Array of all tool definitions\n */\nexport function getToolDefinitions(): Tool[] {\n return Array.from(toolRegistry.values()).map(entry => entry.definition);\n}\n\n/**\n * Get all tool categories\n *\n * @returns Array of tool categories\n */\nexport function getToolCategories(): ToolCategory[] {\n return Array.from(toolCategories.values());\n}\n\n/**\n * Check if a tool is registered\n *\n * @param name - Tool name\n * @returns true if tool is registered\n */\nexport function hasToolRegistered(name: string): boolean {\n return toolRegistry.has(name);\n}\n\n/**\n * Get count of registered tools\n *\n * @returns Number of registered tools\n */\nexport function getToolCount(): number {\n return toolRegistry.size;\n}\n\n/**\n * Clear all registered tools (for testing)\n */\nexport function clearRegistry(): void {\n toolRegistry.clear();\n toolCategories.clear();\n logger.debug('Tool registry cleared');\n}\n\n/**\n * Get the tool registry Map\n *\n * @returns The tool registry Map\n */\nexport function getToolRegistry(): Map<string, ToolHandlerEntry> {\n return toolRegistry;\n}\n\n/**\n * Register core knowledge graph tools\n */\nasync function registerCoreTools(): Promise<void> {\n // Graph Query Tool\n registerTool(\n 'kg_query',\n {\n name: 'kg_query',\n description: 'Query the knowledge graph for nodes matching criteria',\n inputSchema: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'Search query string',\n },\n type: {\n type: 'string',\n description: 'Filter by node type',\n enum: ['concept', 'technical', 'feature', 'primitive', 'service', 'guide', 'standard', 'integration'],\n },\n status: {\n type: 'string',\n description: 'Filter by node status',\n enum: ['draft', 'active', 'deprecated', 'archived'],\n },\n tag: {\n type: 'string',\n description: 'Filter by tag',\n },\n limit: {\n type: 'number',\n description: 'Maximum results to return',\n default: 50,\n },\n includeContent: {\n type: 'boolean',\n description: 'Include full content in results',\n default: false,\n },\n },\n },\n },\n async (params) => {\n const db = getDatabase();\n if (!db) {\n return { success: false, error: 'Database not initialized' };\n }\n\n try {\n let nodes;\n const limit = (params.limit as number) || 50;\n const includeContent = params.includeContent as boolean;\n\n if (params.query) {\n nodes = db.searchNodes(params.query as string, limit);\n } else if (params.type) {\n nodes = db.getNodesByType(params.type as any).slice(0, limit);\n } else if (params.status) {\n nodes = db.getNodesByStatus(params.status as any).slice(0, limit);\n } else if (params.tag) {\n nodes = db.getNodesByTag(params.tag as string).slice(0, limit);\n } else {\n nodes = db.getAllNodes().slice(0, limit);\n }\n\n const results = nodes.map(node => ({\n id: node.id,\n path: node.path,\n title: node.title,\n type: node.type,\n status: node.status,\n tags: node.tags,\n wordCount: node.wordCount,\n outgoingLinkCount: node.outgoingLinks.length,\n incomingLinkCount: node.incomingLinks.length,\n ...(includeContent ? { content: node.content } : {}),\n }));\n\n return {\n success: true,\n data: results,\n metadata: { itemCount: results.length },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n 'graph'\n );\n\n // Graph Stats Tool\n registerTool(\n 'kg_stats',\n {\n name: 'kg_stats',\n description: 'Get statistics about the knowledge graph',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n async () => {\n const db = getDatabase();\n if (!db) {\n return { success: false, error: 'Database not initialized' };\n }\n\n try {\n const stats = db.getStats();\n return { success: true, data: stats };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n 'graph'\n );\n\n // Get Node Tool\n registerTool(\n 'kg_get_node',\n {\n name: 'kg_get_node',\n description: 'Get a specific node by ID or path',\n inputSchema: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Node ID',\n },\n path: {\n type: 'string',\n description: 'Node path (alternative to ID)',\n },\n },\n },\n },\n async (params) => {\n const db = getDatabase();\n if (!db) {\n return { success: false, error: 'Database not initialized' };\n }\n\n try {\n let node;\n if (params.id) {\n node = db.getNode(params.id as string);\n } else if (params.path) {\n node = db.getNodeByPath(params.path as string);\n } else {\n return { success: false, error: 'Either id or path required' };\n }\n\n if (!node) {\n return { success: false, error: 'Node not found' };\n }\n\n return { success: true, data: node };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n 'graph'\n );\n\n // Cache Stats Tool\n registerTool(\n 'kg_cache_stats',\n {\n name: 'kg_cache_stats',\n description: 'Get cache statistics',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n async () => {\n const cache = getCache();\n if (!cache) {\n return { success: false, error: 'Cache not initialized' };\n }\n\n try {\n const stats = cache.getStats();\n return { success: true, data: stats };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n 'cache'\n );\n\n // Health Check Tool\n registerTool(\n 'kg_health',\n {\n name: 'kg_health',\n description: 'Check health status of knowledge graph components',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n async () => {\n const db = getDatabase();\n const cache = getCache();\n\n return {\n success: true,\n data: {\n database: !!db,\n cache: !!cache,\n projectRoot: getProjectRoot() || null,\n toolCount: getToolCount(),\n },\n };\n },\n 'system'\n );\n\n // List Tags Tool\n registerTool(\n 'kg_list_tags',\n {\n name: 'kg_list_tags',\n description: 'List all tags with their usage counts',\n inputSchema: {\n type: 'object',\n properties: {\n limit: {\n type: 'number',\n description: 'Maximum tags to return',\n default: 100,\n },\n },\n },\n },\n async (params) => {\n const db = getDatabase();\n if (!db) {\n return { success: false, error: 'Database not initialized' };\n }\n\n try {\n const limit = (params.limit as number) || 100;\n const tags = db.getAllTags().slice(0, limit);\n return {\n success: true,\n data: tags,\n metadata: { itemCount: tags.length },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n 'graph'\n );\n\n // Register agent tools\n await registerAgentTools();\n\n logger.debug('Core tools registered');\n}\n\n/**\n * Register agent management tools\n */\nasync function registerAgentTools(): Promise<void> {\n const { getRegistry: getAgentRegistry, AgentType, TaskPriority, createTaskId } = await import('../../agents/index.js');\n\n // Agent Spawn Tool\n registerTool(\n 'kg_agent_spawn',\n {\n name: 'kg_agent_spawn',\n description: 'Spawn a specialized agent to perform a task',\n inputSchema: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'Agent type (researcher, coder, tester, analyst, architect)',\n enum: ['researcher', 'coder', 'tester', 'analyst', 'architect'],\n },\n name: { type: 'string', description: 'Custom agent name (optional)' },\n task: { type: 'string', description: 'Task for the agent to perform' },\n options: {\n type: 'object',\n description: 'Agent-specific options',\n properties: {\n timeout: { type: 'number', description: 'Task timeout in ms' },\n maxRetries: { type: 'number', description: 'Maximum retries' },\n priority: {\n type: 'string',\n description: 'Task priority (low, medium, high, critical)',\n enum: ['low', 'medium', 'high', 'critical'],\n },\n },\n },\n },\n required: ['type', 'task'],\n },\n },\n async (params) => {\n const startTime = Date.now();\n const { type, name, task, options = {} } = params || {};\n\n if (!type || typeof type !== 'string') {\n return {\n success: false,\n error: 'Agent type is required',\n metadata: { executionTime: Date.now() - startTime },\n };\n }\n\n if (!task || typeof task !== 'string') {\n return {\n success: false,\n error: 'Task description is required',\n metadata: { executionTime: Date.now() - startTime },\n };\n }\n\n try {\n const registry = getAgentRegistry();\n\n // Map string type to AgentType enum\n const typeMap: Record<string, typeof AgentType[keyof typeof AgentType]> = {\n researcher: AgentType.RESEARCHER,\n coder: AgentType.CODER,\n tester: AgentType.TESTER,\n analyst: AgentType.ANALYST,\n architect: AgentType.ARCHITECT,\n };\n const agentType = typeMap[type.toLowerCase()] || AgentType.CUSTOM;\n\n // Check if agent type is registered\n if (!registry.isRegistered(agentType)) {\n return {\n success: false,\n error: `Agent type '${type}' is not registered`,\n metadata: { executionTime: Date.now() - startTime },\n };\n }\n\n const typedOptions = options as { timeout?: number; maxRetries?: number; priority?: string };\n\n // Spawn agent\n const agent = await registry.spawn(agentType, {\n name: typeof name === 'string' ? name : `${type}-agent`,\n taskTimeout: typedOptions.timeout,\n retry: typedOptions.maxRetries\n ? { maxRetries: typedOptions.maxRetries, backoffMs: 1000 }\n : undefined,\n });\n\n // Create and execute task\n const priorityMap: Record<string, typeof TaskPriority[keyof typeof TaskPriority]> = {\n low: TaskPriority.LOW,\n medium: TaskPriority.MEDIUM,\n high: TaskPriority.HIGH,\n critical: TaskPriority.CRITICAL,\n };\n\n const agentTask = {\n id: createTaskId(),\n description: task,\n priority: priorityMap[typedOptions.priority?.toLowerCase() || 'medium'] || TaskPriority.MEDIUM,\n input: { data: { task }, context: {} },\n createdAt: new Date(),\n };\n\n const result = await agent.execute(agentTask);\n\n return {\n success: result.success,\n data: {\n agentId: agent.config.id,\n agentType: type,\n agentName: agent.config.name,\n taskId: agentTask.id,\n taskResult: result.data,\n metrics: result.metrics,\n },\n error: result.error?.message,\n metadata: {\n executionTime: Date.now() - startTime,\n status: agent.getStatus(),\n },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n metadata: { executionTime: Date.now() - startTime },\n };\n }\n },\n 'agents'\n );\n\n // Agent List Tool\n registerTool(\n 'kg_agent_list',\n {\n name: 'kg_agent_list',\n description: 'List all active agents and their status',\n inputSchema: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'Filter by agent type',\n enum: ['researcher', 'coder', 'tester', 'analyst', 'architect', 'reviewer', 'coordinator', 'optimizer', 'documenter'],\n },\n status: {\n type: 'string',\n description: 'Filter by status',\n enum: ['idle', 'running', 'completed', 'failed', 'paused', 'terminated'],\n },\n },\n },\n },\n async (params) => {\n const startTime = Date.now();\n const { type, status } = params || {};\n\n try {\n const { getRegistry: getAgentRegistry, AgentType, AgentStatus } = await import('../../agents/index.js');\n const registry = getAgentRegistry();\n\n let agents = registry.listInstances();\n\n // Filter by type\n if (type && typeof type === 'string') {\n const typeMap: Record<string, typeof AgentType[keyof typeof AgentType]> = {\n researcher: AgentType.RESEARCHER,\n coder: AgentType.CODER,\n tester: AgentType.TESTER,\n analyst: AgentType.ANALYST,\n architect: AgentType.ARCHITECT,\n reviewer: AgentType.REVIEWER,\n coordinator: AgentType.COORDINATOR,\n optimizer: AgentType.OPTIMIZER,\n documenter: AgentType.DOCUMENTER,\n };\n const agentType = typeMap[type.toLowerCase()];\n if (agentType) {\n agents = agents.filter(a => a.type === agentType);\n }\n }\n\n // Filter by status\n if (status && typeof status === 'string') {\n const statusMap: Record<string, typeof AgentStatus[keyof typeof AgentStatus]> = {\n idle: AgentStatus.IDLE,\n running: AgentStatus.RUNNING,\n completed: AgentStatus.COMPLETED,\n failed: AgentStatus.FAILED,\n paused: AgentStatus.PAUSED,\n terminated: AgentStatus.TERMINATED,\n };\n const agentStatus = statusMap[status.toLowerCase()];\n if (agentStatus) {\n agents = agents.filter(a => a.status === agentStatus);\n }\n }\n\n const agentDetails = agents.map(agent => {\n const instance = registry.get(agent.id);\n return {\n id: agent.id,\n type: agent.type,\n name: agent.name,\n status: agent.status,\n currentTask: instance?.state.currentTask?.id,\n queuedTasks: instance?.state.taskQueue.length || 0,\n completedTasks: instance?.state.completedTasks.length || 0,\n };\n });\n\n const stats = registry.getStats();\n\n return {\n success: true,\n data: {\n agents: agentDetails,\n count: agents.length,\n stats: {\n totalInstances: stats.totalInstances,\n registeredTypes: stats.registeredTypes,\n },\n },\n metadata: {\n executionTime: Date.now() - startTime,\n },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n metadata: { executionTime: Date.now() - startTime },\n };\n }\n },\n 'agents'\n );\n\n // Health Check Tool (enhanced)\n registerTool(\n 'kg_health_check',\n {\n name: 'kg_health_check',\n description: 'Check the health status of the knowledge graph server',\n inputSchema: {\n type: 'object',\n properties: {\n detailed: {\n type: 'boolean',\n description: 'Include detailed diagnostics',\n default: false,\n },\n components: {\n type: 'array',\n description: 'Specific components to check (database, cache, agents, memory)',\n items: {\n type: 'string',\n enum: ['database', 'cache', 'agents', 'memory'],\n },\n },\n },\n },\n },\n async (params) => {\n const startTime = Date.now();\n const { detailed = false, components: requestedComponents } = params || {};\n\n try {\n const db = getDatabase();\n const cache = getCache();\n const { getRegistry: getAgentRegistry } = await import('../../agents/index.js');\n\n const checkComponents = (requestedComponents as string[]) || ['database', 'cache', 'agents', 'memory'];\n const componentResults: Record<string, { status: string; message?: string; details?: Record<string, unknown> }> = {};\n\n // Check database\n if (checkComponents.includes('database')) {\n if (!db) {\n componentResults.database = { status: 'unhealthy', message: 'Database not configured' };\n } else {\n try {\n const stats = db.getStats();\n componentResults.database = {\n status: 'healthy',\n message: 'Database operational',\n details: detailed ? { totalNodes: stats.totalNodes, totalEdges: stats.totalEdges } : undefined,\n };\n } catch (error) {\n componentResults.database = { status: 'unhealthy', message: error instanceof Error ? error.message : 'Check failed' };\n }\n }\n }\n\n // Check cache\n if (checkComponents.includes('cache')) {\n if (!cache) {\n componentResults.cache = { status: 'degraded', message: 'Cache not configured' };\n } else {\n try {\n const stats = cache.getStats();\n componentResults.cache = {\n status: 'healthy',\n message: 'Cache operational',\n details: detailed ? { entries: stats.totalEntries, hitRate: stats.hitRate } : undefined,\n };\n } catch (error) {\n componentResults.cache = { status: 'unhealthy', message: error instanceof Error ? error.message : 'Check failed' };\n }\n }\n }\n\n // Check agents\n if (checkComponents.includes('agents')) {\n try {\n const agentRegistry = getAgentRegistry();\n const stats = agentRegistry.getStats();\n const failedCount = stats.instancesByStatus['failed'] || 0;\n\n componentResults.agents = {\n status: failedCount > 0 ? 'degraded' : 'healthy',\n message: failedCount > 0 ? `${failedCount} agent(s) failed` : 'Agent system operational',\n details: detailed ? { instances: stats.totalInstances, types: stats.registeredTypes } : undefined,\n };\n } catch (error) {\n componentResults.agents = { status: 'unhealthy', message: error instanceof Error ? error.message : 'Check failed' };\n }\n }\n\n // Check memory\n if (checkComponents.includes('memory')) {\n const memUsage = process.memoryUsage();\n const heapUsageRatio = memUsage.heapUsed / memUsage.heapTotal;\n\n componentResults.memory = {\n status: heapUsageRatio > 0.9 ? 'unhealthy' : heapUsageRatio > 0.75 ? 'degraded' : 'healthy',\n message: `Heap usage: ${Math.round(heapUsageRatio * 100)}%`,\n details: detailed ? {\n heapUsedMB: Math.round(memUsage.heapUsed / 1024 / 1024 * 100) / 100,\n heapTotalMB: Math.round(memUsage.heapTotal / 1024 / 1024 * 100) / 100,\n } : undefined,\n };\n }\n\n // Determine overall status\n const statuses = Object.values(componentResults).map(c => c.status);\n const overallStatus = statuses.some(s => s === 'unhealthy') ? 'unhealthy'\n : statuses.some(s => s === 'degraded') ? 'degraded' : 'healthy';\n\n const health: Record<string, unknown> = {\n status: overallStatus,\n components: Object.fromEntries(\n Object.entries(componentResults).map(([name, result]) => [\n name,\n detailed ? result : result.status,\n ])\n ),\n timestamp: new Date().toISOString(),\n };\n\n if (detailed) {\n Object.assign(health, {\n uptime: process.uptime(),\n nodeVersion: process.version,\n platform: process.platform,\n });\n }\n\n return {\n success: true,\n data: health,\n metadata: { executionTime: Date.now() - startTime },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n data: { status: 'unhealthy' },\n metadata: { executionTime: Date.now() - startTime },\n };\n }\n },\n 'system'\n );\n\n logger.debug('Agent tools registered');\n}\n"],"names":["getAgentRegistry","AgentType"],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sources":["../../../src/mcp-server/tools/registry.ts"],"sourcesContent":["/**\n * Tool Registry\n *\n * Central registry for all MCP tools. Manages tool definitions and handlers.\n *\n * @module mcp-server/tools/registry\n */\n\nimport type { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport type { ToolHandler, ToolHandlerEntry, ToolCategory } from '../types/index.js';\nimport { createLogger } from '../../utils/index.js';\nimport type { KnowledgeGraphDatabase } from '../../core/database.js';\nimport type { ShadowCache } from '../../core/cache.js';\n\nconst logger = createLogger('tool-registry');\n\n/**\n * Registry of all registered tools\n */\nconst toolRegistry: Map<string, ToolHandlerEntry> = new Map();\n\n/**\n * Tool categories for organization\n */\nconst toolCategories: Map<string, ToolCategory> = new Map();\n\n/**\n * Shared context for tool handlers\n */\nlet sharedDatabase: KnowledgeGraphDatabase | undefined;\nlet sharedCache: ShadowCache | undefined;\nlet sharedProjectRoot: string | undefined;\n\n/**\n * Initialize tools with dependencies\n *\n * @param database - Knowledge graph database instance\n * @param cache - Shadow cache instance\n * @param projectRoot - Project root path\n */\nexport async function initializeTools(\n database?: KnowledgeGraphDatabase,\n cache?: ShadowCache,\n projectRoot?: string\n): Promise<void> {\n sharedDatabase = database;\n sharedCache = cache;\n sharedProjectRoot = projectRoot;\n\n logger.info('Initializing tool registry', {\n hasDatabase: !!database,\n hasCache: !!cache,\n projectRoot,\n });\n\n // Register core tools\n await registerCoreTools();\n\n logger.info(`Tool registry initialized with ${toolRegistry.size} tools`);\n}\n\n/**\n * Get shared database instance\n */\nexport function getDatabase(): KnowledgeGraphDatabase | undefined {\n return sharedDatabase;\n}\n\n/**\n * Get shared cache instance\n */\nexport function getCache(): ShadowCache | undefined {\n return sharedCache;\n}\n\n/**\n * Get shared project root\n */\nexport function getProjectRoot(): string | undefined {\n return sharedProjectRoot;\n}\n\n/**\n * Register a tool with its handler\n *\n * @param name - Tool name\n * @param definition - Tool definition\n * @param handler - Tool handler function\n * @param category - Optional category name\n */\nexport function registerTool(\n name: string,\n definition: Tool,\n handler: ToolHandler,\n category?: string\n): void {\n if (toolRegistry.has(name)) {\n logger.warn(`Tool ${name} already registered, overwriting`);\n }\n\n toolRegistry.set(name, { definition, handler });\n\n // Add to category if specified\n if (category) {\n let cat = toolCategories.get(category);\n if (!cat) {\n cat = { name: category, description: '', tools: [] };\n toolCategories.set(category, cat);\n }\n cat.tools.push(definition);\n }\n\n logger.debug(`Registered tool: ${name}`, { category });\n}\n\n/**\n * Get tool handler by name\n *\n * @param name - Tool name\n * @returns Tool handler or undefined\n */\nexport function getToolHandler(name: string): ToolHandler | undefined {\n const entry = toolRegistry.get(name);\n return entry?.handler;\n}\n\n/**\n * Get tool definition by name\n *\n * @param name - Tool name\n * @returns Tool definition or undefined\n */\nexport function getToolDefinition(name: string): Tool | undefined {\n const entry = toolRegistry.get(name);\n return entry?.definition;\n}\n\n/**\n * Get all tool definitions\n *\n * @returns Array of all tool definitions\n */\nexport function getToolDefinitions(): Tool[] {\n return Array.from(toolRegistry.values()).map(entry => entry.definition);\n}\n\n/**\n * Get all tool categories\n *\n * @returns Array of tool categories\n */\nexport function getToolCategories(): ToolCategory[] {\n return Array.from(toolCategories.values());\n}\n\n/**\n * Check if a tool is registered\n *\n * @param name - Tool name\n * @returns true if tool is registered\n */\nexport function hasToolRegistered(name: string): boolean {\n return toolRegistry.has(name);\n}\n\n/**\n * Get count of registered tools\n *\n * @returns Number of registered tools\n */\nexport function getToolCount(): number {\n return toolRegistry.size;\n}\n\n/**\n * Clear all registered tools (for testing)\n */\nexport function clearRegistry(): void {\n toolRegistry.clear();\n toolCategories.clear();\n logger.debug('Tool registry cleared');\n}\n\n/**\n * Get the tool registry Map\n *\n * @returns The tool registry Map\n */\nexport function getToolRegistry(): Map<string, ToolHandlerEntry> {\n return toolRegistry;\n}\n\n/**\n * Register core knowledge graph tools\n */\nasync function registerCoreTools(): Promise<void> {\n // Graph Query Tool\n registerTool(\n 'kg_query',\n {\n name: 'kg_query',\n description: 'Query the knowledge graph for nodes matching criteria',\n inputSchema: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'Search query string',\n },\n type: {\n type: 'string',\n description: 'Filter by node type',\n enum: ['concept', 'technical', 'feature', 'primitive', 'service', 'guide', 'standard', 'integration'],\n },\n status: {\n type: 'string',\n description: 'Filter by node status',\n enum: ['draft', 'active', 'deprecated', 'archived'],\n },\n tag: {\n type: 'string',\n description: 'Filter by tag',\n },\n limit: {\n type: 'number',\n description: 'Maximum results to return',\n default: 50,\n },\n includeContent: {\n type: 'boolean',\n description: 'Include full content in results',\n default: false,\n },\n },\n },\n },\n async (params) => {\n const db = getDatabase();\n if (!db) {\n return { success: false, error: 'Database not initialized' };\n }\n\n try {\n let nodes;\n const limit = (params.limit as number) || 50;\n const includeContent = params.includeContent as boolean;\n\n if (params.query) {\n nodes = db.searchNodes(params.query as string, limit);\n } else if (params.type) {\n nodes = db.getNodesByType(params.type as any).slice(0, limit);\n } else if (params.status) {\n nodes = db.getNodesByStatus(params.status as any).slice(0, limit);\n } else if (params.tag) {\n nodes = db.getNodesByTag(params.tag as string).slice(0, limit);\n } else {\n nodes = db.getAllNodes().slice(0, limit);\n }\n\n const results = nodes.map(node => ({\n id: node.id,\n path: node.path,\n title: node.title,\n type: node.type,\n status: node.status,\n tags: node.tags,\n wordCount: node.wordCount,\n outgoingLinkCount: node.outgoingLinks.length,\n incomingLinkCount: node.incomingLinks.length,\n ...(includeContent ? { content: node.content } : {}),\n }));\n\n return {\n success: true,\n data: results,\n metadata: { itemCount: results.length },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n 'graph'\n );\n\n // Graph Stats Tool\n registerTool(\n 'kg_stats',\n {\n name: 'kg_stats',\n description: 'Get statistics about the knowledge graph',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n async () => {\n const db = getDatabase();\n if (!db) {\n return { success: false, error: 'Database not initialized' };\n }\n\n try {\n const stats = db.getStats();\n return { success: true, data: stats };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n 'graph'\n );\n\n // Get Node Tool\n registerTool(\n 'kg_get_node',\n {\n name: 'kg_get_node',\n description: 'Get a specific node by ID or path',\n inputSchema: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Node ID',\n },\n path: {\n type: 'string',\n description: 'Node path (alternative to ID)',\n },\n },\n },\n },\n async (params) => {\n const db = getDatabase();\n if (!db) {\n return { success: false, error: 'Database not initialized' };\n }\n\n try {\n let node;\n if (params.id) {\n node = db.getNode(params.id as string);\n } else if (params.path) {\n node = db.getNodeByPath(params.path as string);\n } else {\n return { success: false, error: 'Either id or path required' };\n }\n\n if (!node) {\n return { success: false, error: 'Node not found' };\n }\n\n return { success: true, data: node };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n 'graph'\n );\n\n // Cache Stats Tool\n registerTool(\n 'kg_cache_stats',\n {\n name: 'kg_cache_stats',\n description: 'Get cache statistics',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n async () => {\n const cache = getCache();\n if (!cache) {\n return { success: false, error: 'Cache not initialized' };\n }\n\n try {\n const stats = cache.getStats();\n return { success: true, data: stats };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n 'cache'\n );\n\n // Health Check Tool\n registerTool(\n 'kg_health',\n {\n name: 'kg_health',\n description: 'Check health status of knowledge graph components',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n async () => {\n const db = getDatabase();\n const cache = getCache();\n\n return {\n success: true,\n data: {\n database: !!db,\n cache: !!cache,\n projectRoot: getProjectRoot() || null,\n toolCount: getToolCount(),\n },\n };\n },\n 'system'\n );\n\n // List Tags Tool\n registerTool(\n 'kg_list_tags',\n {\n name: 'kg_list_tags',\n description: 'List all tags with their usage counts',\n inputSchema: {\n type: 'object',\n properties: {\n limit: {\n type: 'number',\n description: 'Maximum tags to return',\n default: 100,\n },\n },\n },\n },\n async (params) => {\n const db = getDatabase();\n if (!db) {\n return { success: false, error: 'Database not initialized' };\n }\n\n try {\n const limit = (params.limit as number) || 100;\n const tags = db.getAllTags().slice(0, limit);\n return {\n success: true,\n data: tags,\n metadata: { itemCount: tags.length },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n 'graph'\n );\n\n // Register agent tools\n await registerAgentTools();\n\n // Register workflow tools\n await registerWorkflowTools();\n\n // Register vector tools\n await registerVectorTools();\n\n // Register audit tools\n await registerAuditTools();\n\n logger.debug('Core tools registered');\n}\n\n/**\n * Register agent management tools\n */\nasync function registerAgentTools(): Promise<void> {\n const { getRegistry: getAgentRegistry, AgentType, TaskPriority, createTaskId } = await import('../../agents/index.js');\n\n // Agent Spawn Tool\n registerTool(\n 'kg_agent_spawn',\n {\n name: 'kg_agent_spawn',\n description: 'Spawn a specialized agent to perform a task',\n inputSchema: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'Agent type (researcher, coder, tester, analyst, architect)',\n enum: ['researcher', 'coder', 'tester', 'analyst', 'architect'],\n },\n name: { type: 'string', description: 'Custom agent name (optional)' },\n task: { type: 'string', description: 'Task for the agent to perform' },\n options: {\n type: 'object',\n description: 'Agent-specific options',\n properties: {\n timeout: { type: 'number', description: 'Task timeout in ms' },\n maxRetries: { type: 'number', description: 'Maximum retries' },\n priority: {\n type: 'string',\n description: 'Task priority (low, medium, high, critical)',\n enum: ['low', 'medium', 'high', 'critical'],\n },\n },\n },\n },\n required: ['type', 'task'],\n },\n },\n async (params) => {\n const startTime = Date.now();\n const { type, name, task, options = {} } = params || {};\n\n if (!type || typeof type !== 'string') {\n return {\n success: false,\n error: 'Agent type is required',\n metadata: { executionTime: Date.now() - startTime },\n };\n }\n\n if (!task || typeof task !== 'string') {\n return {\n success: false,\n error: 'Task description is required',\n metadata: { executionTime: Date.now() - startTime },\n };\n }\n\n try {\n const registry = getAgentRegistry();\n\n // Map string type to AgentType enum\n const typeMap: Record<string, typeof AgentType[keyof typeof AgentType]> = {\n researcher: AgentType.RESEARCHER,\n coder: AgentType.CODER,\n tester: AgentType.TESTER,\n analyst: AgentType.ANALYST,\n architect: AgentType.ARCHITECT,\n };\n const agentType = typeMap[type.toLowerCase()] || AgentType.CUSTOM;\n\n // Check if agent type is registered\n if (!registry.isRegistered(agentType)) {\n return {\n success: false,\n error: `Agent type '${type}' is not registered`,\n metadata: { executionTime: Date.now() - startTime },\n };\n }\n\n const typedOptions = options as { timeout?: number; maxRetries?: number; priority?: string };\n\n // Spawn agent\n const agent = await registry.spawn(agentType, {\n name: typeof name === 'string' ? name : `${type}-agent`,\n taskTimeout: typedOptions.timeout,\n retry: typedOptions.maxRetries\n ? { maxRetries: typedOptions.maxRetries, backoffMs: 1000 }\n : undefined,\n });\n\n // Create and execute task\n const priorityMap: Record<string, typeof TaskPriority[keyof typeof TaskPriority]> = {\n low: TaskPriority.LOW,\n medium: TaskPriority.MEDIUM,\n high: TaskPriority.HIGH,\n critical: TaskPriority.CRITICAL,\n };\n\n const agentTask = {\n id: createTaskId(),\n description: task,\n priority: priorityMap[typedOptions.priority?.toLowerCase() || 'medium'] || TaskPriority.MEDIUM,\n input: { data: { task }, context: {} },\n createdAt: new Date(),\n };\n\n const result = await agent.execute(agentTask);\n\n return {\n success: result.success,\n data: {\n agentId: agent.config.id,\n agentType: type,\n agentName: agent.config.name,\n taskId: agentTask.id,\n taskResult: result.data,\n metrics: result.metrics,\n },\n error: result.error?.message,\n metadata: {\n executionTime: Date.now() - startTime,\n status: agent.getStatus(),\n },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n metadata: { executionTime: Date.now() - startTime },\n };\n }\n },\n 'agents'\n );\n\n // Agent List Tool\n registerTool(\n 'kg_agent_list',\n {\n name: 'kg_agent_list',\n description: 'List all active agents and their status',\n inputSchema: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'Filter by agent type',\n enum: ['researcher', 'coder', 'tester', 'analyst', 'architect', 'reviewer', 'coordinator', 'optimizer', 'documenter'],\n },\n status: {\n type: 'string',\n description: 'Filter by status',\n enum: ['idle', 'running', 'completed', 'failed', 'paused', 'terminated'],\n },\n },\n },\n },\n async (params) => {\n const startTime = Date.now();\n const { type, status } = params || {};\n\n try {\n const { getRegistry: getAgentRegistry, AgentType, AgentStatus } = await import('../../agents/index.js');\n const registry = getAgentRegistry();\n\n let agents = registry.listInstances();\n\n // Filter by type\n if (type && typeof type === 'string') {\n const typeMap: Record<string, typeof AgentType[keyof typeof AgentType]> = {\n researcher: AgentType.RESEARCHER,\n coder: AgentType.CODER,\n tester: AgentType.TESTER,\n analyst: AgentType.ANALYST,\n architect: AgentType.ARCHITECT,\n reviewer: AgentType.REVIEWER,\n coordinator: AgentType.COORDINATOR,\n optimizer: AgentType.OPTIMIZER,\n documenter: AgentType.DOCUMENTER,\n };\n const agentType = typeMap[type.toLowerCase()];\n if (agentType) {\n agents = agents.filter(a => a.type === agentType);\n }\n }\n\n // Filter by status\n if (status && typeof status === 'string') {\n const statusMap: Record<string, typeof AgentStatus[keyof typeof AgentStatus]> = {\n idle: AgentStatus.IDLE,\n running: AgentStatus.RUNNING,\n completed: AgentStatus.COMPLETED,\n failed: AgentStatus.FAILED,\n paused: AgentStatus.PAUSED,\n terminated: AgentStatus.TERMINATED,\n };\n const agentStatus = statusMap[status.toLowerCase()];\n if (agentStatus) {\n agents = agents.filter(a => a.status === agentStatus);\n }\n }\n\n const agentDetails = agents.map(agent => {\n const instance = registry.get(agent.id);\n return {\n id: agent.id,\n type: agent.type,\n name: agent.name,\n status: agent.status,\n currentTask: instance?.state.currentTask?.id,\n queuedTasks: instance?.state.taskQueue.length || 0,\n completedTasks: instance?.state.completedTasks.length || 0,\n };\n });\n\n const stats = registry.getStats();\n\n return {\n success: true,\n data: {\n agents: agentDetails,\n count: agents.length,\n stats: {\n totalInstances: stats.totalInstances,\n registeredTypes: stats.registeredTypes,\n },\n },\n metadata: {\n executionTime: Date.now() - startTime,\n },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n metadata: { executionTime: Date.now() - startTime },\n };\n }\n },\n 'agents'\n );\n\n // Health Check Tool (enhanced)\n registerTool(\n 'kg_health_check',\n {\n name: 'kg_health_check',\n description: 'Check the health status of the knowledge graph server',\n inputSchema: {\n type: 'object',\n properties: {\n detailed: {\n type: 'boolean',\n description: 'Include detailed diagnostics',\n default: false,\n },\n components: {\n type: 'array',\n description: 'Specific components to check (database, cache, agents, memory)',\n items: {\n type: 'string',\n enum: ['database', 'cache', 'agents', 'memory'],\n },\n },\n },\n },\n },\n async (params) => {\n const startTime = Date.now();\n const { detailed = false, components: requestedComponents } = params || {};\n\n try {\n const db = getDatabase();\n const cache = getCache();\n const { getRegistry: getAgentRegistry } = await import('../../agents/index.js');\n\n const checkComponents = (requestedComponents as string[]) || ['database', 'cache', 'agents', 'memory'];\n const componentResults: Record<string, { status: string; message?: string; details?: Record<string, unknown> }> = {};\n\n // Check database\n if (checkComponents.includes('database')) {\n if (!db) {\n componentResults.database = { status: 'unhealthy', message: 'Database not configured' };\n } else {\n try {\n const stats = db.getStats();\n componentResults.database = {\n status: 'healthy',\n message: 'Database operational',\n details: detailed ? { totalNodes: stats.totalNodes, totalEdges: stats.totalEdges } : undefined,\n };\n } catch (error) {\n componentResults.database = { status: 'unhealthy', message: error instanceof Error ? error.message : 'Check failed' };\n }\n }\n }\n\n // Check cache\n if (checkComponents.includes('cache')) {\n if (!cache) {\n componentResults.cache = { status: 'degraded', message: 'Cache not configured' };\n } else {\n try {\n const stats = cache.getStats();\n componentResults.cache = {\n status: 'healthy',\n message: 'Cache operational',\n details: detailed ? { entries: stats.totalEntries, hitRate: stats.hitRate } : undefined,\n };\n } catch (error) {\n componentResults.cache = { status: 'unhealthy', message: error instanceof Error ? error.message : 'Check failed' };\n }\n }\n }\n\n // Check agents\n if (checkComponents.includes('agents')) {\n try {\n const agentRegistry = getAgentRegistry();\n const stats = agentRegistry.getStats();\n const failedCount = stats.instancesByStatus['failed'] || 0;\n\n componentResults.agents = {\n status: failedCount > 0 ? 'degraded' : 'healthy',\n message: failedCount > 0 ? `${failedCount} agent(s) failed` : 'Agent system operational',\n details: detailed ? { instances: stats.totalInstances, types: stats.registeredTypes } : undefined,\n };\n } catch (error) {\n componentResults.agents = { status: 'unhealthy', message: error instanceof Error ? error.message : 'Check failed' };\n }\n }\n\n // Check memory\n if (checkComponents.includes('memory')) {\n const memUsage = process.memoryUsage();\n const heapUsageRatio = memUsage.heapUsed / memUsage.heapTotal;\n\n componentResults.memory = {\n status: heapUsageRatio > 0.9 ? 'unhealthy' : heapUsageRatio > 0.75 ? 'degraded' : 'healthy',\n message: `Heap usage: ${Math.round(heapUsageRatio * 100)}%`,\n details: detailed ? {\n heapUsedMB: Math.round(memUsage.heapUsed / 1024 / 1024 * 100) / 100,\n heapTotalMB: Math.round(memUsage.heapTotal / 1024 / 1024 * 100) / 100,\n } : undefined,\n };\n }\n\n // Determine overall status\n const statuses = Object.values(componentResults).map(c => c.status);\n const overallStatus = statuses.some(s => s === 'unhealthy') ? 'unhealthy'\n : statuses.some(s => s === 'degraded') ? 'degraded' : 'healthy';\n\n const health: Record<string, unknown> = {\n status: overallStatus,\n components: Object.fromEntries(\n Object.entries(componentResults).map(([name, result]) => [\n name,\n detailed ? result : result.status,\n ])\n ),\n timestamp: new Date().toISOString(),\n };\n\n if (detailed) {\n Object.assign(health, {\n uptime: process.uptime(),\n nodeVersion: process.version,\n platform: process.platform,\n });\n }\n\n return {\n success: true,\n data: health,\n metadata: { executionTime: Date.now() - startTime },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n data: { status: 'unhealthy' },\n metadata: { executionTime: Date.now() - startTime },\n };\n }\n },\n 'system'\n );\n\n logger.debug('Agent tools registered');\n}\n\n/**\n * Register workflow management tools\n */\nasync function registerWorkflowTools(): Promise<void> {\n const {\n workflowStartTool,\n createWorkflowStartHandler,\n workflowStatusTool,\n createWorkflowStatusHandler,\n workflowListTool,\n createWorkflowListHandler,\n } = await import('./workflow/index.js');\n\n registerTool(\n workflowStartTool.name,\n workflowStartTool,\n createWorkflowStartHandler(),\n 'workflow'\n );\n\n registerTool(\n workflowStatusTool.name,\n workflowStatusTool,\n createWorkflowStatusHandler(),\n 'workflow'\n );\n\n registerTool(\n workflowListTool.name,\n workflowListTool,\n createWorkflowListHandler(),\n 'workflow'\n );\n\n logger.debug('Workflow tools registered');\n}\n\n/**\n * Register vector search and trajectory tools\n */\nasync function registerVectorTools(): Promise<void> {\n const {\n vectorSearchTool,\n createVectorSearchHandler,\n vectorUpsertTool,\n createVectorUpsertHandler,\n trajectoryListTool,\n createTrajectoryListHandler,\n } = await import('./vector/index.js');\n\n registerTool(\n vectorSearchTool.name,\n vectorSearchTool,\n createVectorSearchHandler(),\n 'vector'\n );\n\n registerTool(\n vectorUpsertTool.name,\n vectorUpsertTool,\n createVectorUpsertHandler(),\n 'vector'\n );\n\n registerTool(\n trajectoryListTool.name,\n trajectoryListTool,\n createTrajectoryListHandler(),\n 'vector'\n );\n\n logger.debug('Vector tools registered');\n}\n\n/**\n * Register audit and syndication tools\n */\nasync function registerAuditTools(): Promise<void> {\n const {\n auditQueryTool,\n createAuditQueryHandler,\n auditCheckpointTool,\n createAuditCheckpointHandler,\n syncStatusTool,\n createSyncStatusHandler,\n } = await import('./audit/index.js');\n\n registerTool(\n auditQueryTool.name,\n auditQueryTool,\n createAuditQueryHandler(),\n 'audit'\n );\n\n registerTool(\n auditCheckpointTool.name,\n auditCheckpointTool,\n createAuditCheckpointHandler(),\n 'audit'\n );\n\n registerTool(\n syncStatusTool.name,\n syncStatusTool,\n createSyncStatusHandler(),\n 'audit'\n );\n\n logger.debug('Audit tools registered');\n}\n"],"names":["getAgentRegistry","AgentType"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Vector Tools
3
+ *
4
+ * MCP tools for vector operations including semantic search,
5
+ * vector upsert, and trajectory tracking.
6
+ *
7
+ * @module mcp-server/tools/vector
8
+ */
9
+ export { vectorSearchTool, createVectorSearchHandler, } from './search.js';
10
+ export { vectorUpsertTool, createVectorUpsertHandler, } from './upsert.js';
11
+ export { trajectoryListTool, createTrajectoryListHandler, } from './trajectory.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/vector/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { createVectorSearchHandler, vectorSearchTool } from "./search.js";
2
+ import { createVectorUpsertHandler, vectorUpsertTool } from "./upsert.js";
3
+ import { createTrajectoryListHandler, trajectoryListTool } from "./trajectory.js";
4
+ export {
5
+ createTrajectoryListHandler,
6
+ createVectorSearchHandler,
7
+ createVectorUpsertHandler,
8
+ trajectoryListTool,
9
+ vectorSearchTool,
10
+ vectorUpsertTool
11
+ };
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Vector Search Tool
3
+ *
4
+ * MCP tool for semantic vector search in the knowledge graph.
5
+ * Supports both pure vector similarity search and hybrid search
6
+ * combining vector similarity with keyword matching.
7
+ *
8
+ * @module mcp-server/tools/vector/search
9
+ */
10
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
11
+ import type { ToolHandler } from '../../types/index.js';
12
+ import type { EnhancedVectorStore } from '../../../vector/services/vector-store.js';
13
+ /**
14
+ * Vector search tool definition
15
+ *
16
+ * Provides semantic vector search capabilities with optional hybrid search
17
+ * combining vector similarity with keyword matching.
18
+ */
19
+ export declare const vectorSearchTool: Tool;
20
+ /**
21
+ * Create vector search handler
22
+ *
23
+ * Creates a handler function that performs semantic vector search
24
+ * on the knowledge graph. Supports both pure vector search and
25
+ * hybrid search combining vector similarity with keyword matching.
26
+ *
27
+ * @param vectorStore - Vector store instance for search operations
28
+ * @returns Tool handler function
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const handler = createVectorSearchHandler(vectorStore);
33
+ * const result = await handler({
34
+ * query: 'neural network architecture',
35
+ * k: 10,
36
+ * hybrid: true,
37
+ * });
38
+ * ```
39
+ */
40
+ export declare function createVectorSearchHandler(vectorStore?: EnhancedVectorStore): ToolHandler;
41
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/vector/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAGpF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,IA0D9B,CAAC;AAoGF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,CAAC,EAAE,mBAAmB,GAChC,WAAW,CAqJb"}
@@ -0,0 +1,224 @@
1
+ const vectorSearchTool = {
2
+ name: "kg_vector_search",
3
+ description: "Perform semantic vector search on the knowledge graph. Supports pure vector similarity search and hybrid search combining vector similarity with keyword matching for more precise results.",
4
+ inputSchema: {
5
+ type: "object",
6
+ properties: {
7
+ query: {
8
+ type: "string",
9
+ description: "Search query string. Will be converted to an embedding vector for similarity search."
10
+ },
11
+ k: {
12
+ type: "number",
13
+ description: "Number of results to return (default: 10, max: 100)",
14
+ default: 10,
15
+ minimum: 1,
16
+ maximum: 100
17
+ },
18
+ type: {
19
+ type: "string",
20
+ description: "Filter results by node type",
21
+ enum: [
22
+ "concept",
23
+ "technical",
24
+ "feature",
25
+ "primitive",
26
+ "service",
27
+ "guide",
28
+ "standard",
29
+ "integration"
30
+ ]
31
+ },
32
+ hybrid: {
33
+ type: "boolean",
34
+ description: "Enable hybrid search combining vector similarity with keyword matching (default: false)",
35
+ default: false
36
+ },
37
+ minScore: {
38
+ type: "number",
39
+ description: "Minimum similarity score threshold (0-1, default: 0)",
40
+ default: 0,
41
+ minimum: 0,
42
+ maximum: 1
43
+ },
44
+ includeVectors: {
45
+ type: "boolean",
46
+ description: "Include raw vector data in results (default: false)",
47
+ default: false
48
+ },
49
+ namespace: {
50
+ type: "string",
51
+ description: "Filter by vector namespace"
52
+ }
53
+ },
54
+ required: ["query"]
55
+ }
56
+ };
57
+ function textToVector(text, dimensions = 1536) {
58
+ const vector = new Array(dimensions).fill(0);
59
+ const normalized = text.toLowerCase().trim();
60
+ for (let i = 0; i < normalized.length; i++) {
61
+ const charCode = normalized.charCodeAt(i);
62
+ const idx = charCode * (i + 1) % dimensions;
63
+ vector[idx] += Math.sin(charCode * (i + 1)) * 0.1;
64
+ }
65
+ const magnitude = Math.sqrt(vector.reduce((sum, v) => sum + v * v, 0));
66
+ if (magnitude > 0) {
67
+ for (let i = 0; i < vector.length; i++) {
68
+ vector[i] /= magnitude;
69
+ }
70
+ }
71
+ return vector;
72
+ }
73
+ function calculateKeywordScore(query, metadata) {
74
+ const queryTerms = query.toLowerCase().split(/\s+/).filter((t) => t.length > 2);
75
+ if (queryTerms.length === 0) return 0;
76
+ let matchCount = 0;
77
+ const searchableFields = ["title", "content", "description", "tags"];
78
+ for (const field of searchableFields) {
79
+ const value = metadata[field];
80
+ if (typeof value === "string") {
81
+ const fieldLower = value.toLowerCase();
82
+ for (const term of queryTerms) {
83
+ if (fieldLower.includes(term)) {
84
+ matchCount++;
85
+ }
86
+ }
87
+ } else if (Array.isArray(value)) {
88
+ const fieldValues = value.join(" ").toLowerCase();
89
+ for (const term of queryTerms) {
90
+ if (fieldValues.includes(term)) {
91
+ matchCount++;
92
+ }
93
+ }
94
+ }
95
+ }
96
+ return Math.min(1, matchCount / (queryTerms.length * searchableFields.length));
97
+ }
98
+ function createVectorSearchHandler(vectorStore) {
99
+ return async (params) => {
100
+ const startTime = Date.now();
101
+ const typedParams = params;
102
+ const {
103
+ query,
104
+ k = 10,
105
+ type,
106
+ hybrid = false,
107
+ minScore = 0,
108
+ includeVectors = false,
109
+ namespace
110
+ } = typedParams;
111
+ try {
112
+ if (!query || typeof query !== "string") {
113
+ return {
114
+ success: false,
115
+ error: "Query parameter is required and must be a string",
116
+ metadata: { executionTime: Date.now() - startTime }
117
+ };
118
+ }
119
+ if (!vectorStore) {
120
+ return {
121
+ success: false,
122
+ error: "Vector store not initialized. Configure vector storage first.",
123
+ metadata: { executionTime: Date.now() - startTime }
124
+ };
125
+ }
126
+ if (!vectorStore.isReady()) {
127
+ await vectorStore.initialize();
128
+ }
129
+ const safeK = Math.min(Math.max(1, Number(k) || 10), 100);
130
+ const queryVector = textToVector(query, vectorStore.getConfig().index.dimensions);
131
+ const filter = {};
132
+ if (type && typeof type === "string") {
133
+ filter.type = type;
134
+ }
135
+ if (namespace && typeof namespace === "string") {
136
+ filter.namespace = namespace;
137
+ }
138
+ let results;
139
+ if (hybrid) {
140
+ const hybridResults = await vectorStore.hybridSearch({
141
+ embedding: queryVector,
142
+ limit: safeK * 2,
143
+ // Get extra for re-ranking
144
+ filters: Object.keys(filter).length > 0 ? filter : void 0,
145
+ minScore: minScore > 0 ? minScore : void 0,
146
+ includeVectors,
147
+ namespace
148
+ });
149
+ const reranked = hybridResults.map((result) => {
150
+ const keywordScore = calculateKeywordScore(query, result.metadata);
151
+ const combinedScore = result.score * 0.7 + keywordScore * 0.3;
152
+ return {
153
+ ...result,
154
+ keywordScore,
155
+ combinedScore,
156
+ source: "merged"
157
+ };
158
+ });
159
+ reranked.sort((a, b) => b.combinedScore - a.combinedScore);
160
+ results = reranked.slice(0, safeK);
161
+ } else {
162
+ results = await vectorStore.search({
163
+ vector: queryVector,
164
+ k: safeK,
165
+ filter: Object.keys(filter).length > 0 ? filter : void 0,
166
+ minScore: minScore > 0 ? minScore : void 0
167
+ });
168
+ }
169
+ const formattedResults = results.map((result) => {
170
+ const formatted = {
171
+ id: result.id,
172
+ score: Math.round(result.score * 1e4) / 1e4,
173
+ metadata: result.metadata
174
+ };
175
+ if (includeVectors && result.vector) {
176
+ formatted.vector = result.vector;
177
+ }
178
+ const resultWithScores = result;
179
+ if ("combinedScore" in resultWithScores && typeof resultWithScores.combinedScore === "number") {
180
+ formatted.combinedScore = Math.round(resultWithScores.combinedScore * 1e4) / 1e4;
181
+ }
182
+ if ("keywordScore" in resultWithScores && typeof resultWithScores.keywordScore === "number") {
183
+ formatted.keywordScore = Math.round(resultWithScores.keywordScore * 1e4) / 1e4;
184
+ }
185
+ if ("source" in result) {
186
+ formatted.source = result.source;
187
+ }
188
+ return formatted;
189
+ });
190
+ const stats = vectorStore.getStats();
191
+ return {
192
+ success: true,
193
+ data: {
194
+ results: formattedResults,
195
+ count: formattedResults.length,
196
+ query,
197
+ searchMode: hybrid ? "hybrid" : "vector",
198
+ filters: {
199
+ type: type || null,
200
+ minScore: minScore || null,
201
+ namespace: namespace || null
202
+ }
203
+ },
204
+ metadata: {
205
+ executionTime: Date.now() - startTime,
206
+ totalVectors: stats.totalVectors,
207
+ indexType: stats.indexType,
208
+ cached: false
209
+ }
210
+ };
211
+ } catch (error) {
212
+ return {
213
+ success: false,
214
+ error: error instanceof Error ? error.message : String(error),
215
+ metadata: { executionTime: Date.now() - startTime }
216
+ };
217
+ }
218
+ };
219
+ }
220
+ export {
221
+ createVectorSearchHandler,
222
+ vectorSearchTool
223
+ };
224
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sources":["../../../../src/mcp-server/tools/vector/search.ts"],"sourcesContent":["/**\n * Vector Search Tool\n *\n * MCP tool for semantic vector search in the knowledge graph.\n * Supports both pure vector similarity search and hybrid search\n * combining vector similarity with keyword matching.\n *\n * @module mcp-server/tools/vector/search\n */\n\nimport type { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport type { ToolHandler, ToolResult } from '../../types/index.js';\nimport type { EnhancedVectorStore } from '../../../vector/services/vector-store.js';\nimport type { SearchResult, HybridSearchResult } from '../../../vector/types.js';\n\n/**\n * Vector search tool definition\n *\n * Provides semantic vector search capabilities with optional hybrid search\n * combining vector similarity with keyword matching.\n */\nexport const vectorSearchTool: Tool = {\n name: 'kg_vector_search',\n description:\n 'Perform semantic vector search on the knowledge graph. Supports pure vector similarity search and hybrid search combining vector similarity with keyword matching for more precise results.',\n inputSchema: {\n type: 'object' as const,\n properties: {\n query: {\n type: 'string',\n description:\n 'Search query string. Will be converted to an embedding vector for similarity search.',\n },\n k: {\n type: 'number',\n description: 'Number of results to return (default: 10, max: 100)',\n default: 10,\n minimum: 1,\n maximum: 100,\n },\n type: {\n type: 'string',\n description: 'Filter results by node type',\n enum: [\n 'concept',\n 'technical',\n 'feature',\n 'primitive',\n 'service',\n 'guide',\n 'standard',\n 'integration',\n ],\n },\n hybrid: {\n type: 'boolean',\n description:\n 'Enable hybrid search combining vector similarity with keyword matching (default: false)',\n default: false,\n },\n minScore: {\n type: 'number',\n description: 'Minimum similarity score threshold (0-1, default: 0)',\n default: 0,\n minimum: 0,\n maximum: 1,\n },\n includeVectors: {\n type: 'boolean',\n description: 'Include raw vector data in results (default: false)',\n default: false,\n },\n namespace: {\n type: 'string',\n description: 'Filter by vector namespace',\n },\n },\n required: ['query'],\n },\n};\n\n/**\n * Parameters for vector search\n */\ninterface VectorSearchParams {\n /** Search query string */\n query: string;\n /** Number of results to return */\n k?: number;\n /** Filter by node type */\n type?: string;\n /** Enable hybrid search */\n hybrid?: boolean;\n /** Minimum similarity score */\n minScore?: number;\n /** Include vectors in results */\n includeVectors?: boolean;\n /** Namespace filter */\n namespace?: string;\n}\n\n/**\n * Simple text-to-vector conversion for demonstration\n *\n * In production, this would call an embedding service (OpenAI, Anthropic, etc.)\n * For now, generates a deterministic pseudo-embedding from text.\n *\n * @param text - Text to convert\n * @param dimensions - Vector dimensions (default: 1536 for OpenAI compatibility)\n * @returns Pseudo-embedding vector\n * @internal\n */\nfunction textToVector(text: string, dimensions: number = 1536): number[] {\n const vector: number[] = new Array(dimensions).fill(0);\n const normalized = text.toLowerCase().trim();\n\n // Generate deterministic values based on character codes\n for (let i = 0; i < normalized.length; i++) {\n const charCode = normalized.charCodeAt(i);\n const idx = (charCode * (i + 1)) % dimensions;\n vector[idx] += Math.sin(charCode * (i + 1)) * 0.1;\n }\n\n // Normalize to unit vector\n const magnitude = Math.sqrt(vector.reduce((sum, v) => sum + v * v, 0));\n if (magnitude > 0) {\n for (let i = 0; i < vector.length; i++) {\n vector[i] /= magnitude;\n }\n }\n\n return vector;\n}\n\n/**\n * Perform keyword matching for hybrid search\n *\n * Scores results based on keyword overlap with the query.\n *\n * @param query - Search query\n * @param metadata - Result metadata to search\n * @returns Keyword match score (0-1)\n * @internal\n */\nfunction calculateKeywordScore(\n query: string,\n metadata: Record<string, unknown>\n): number {\n const queryTerms = query\n .toLowerCase()\n .split(/\\s+/)\n .filter((t) => t.length > 2);\n if (queryTerms.length === 0) return 0;\n\n let matchCount = 0;\n const searchableFields = ['title', 'content', 'description', 'tags'];\n\n for (const field of searchableFields) {\n const value = metadata[field];\n if (typeof value === 'string') {\n const fieldLower = value.toLowerCase();\n for (const term of queryTerms) {\n if (fieldLower.includes(term)) {\n matchCount++;\n }\n }\n } else if (Array.isArray(value)) {\n const fieldValues = value.join(' ').toLowerCase();\n for (const term of queryTerms) {\n if (fieldValues.includes(term)) {\n matchCount++;\n }\n }\n }\n }\n\n return Math.min(1, matchCount / (queryTerms.length * searchableFields.length));\n}\n\n/**\n * Create vector search handler\n *\n * Creates a handler function that performs semantic vector search\n * on the knowledge graph. Supports both pure vector search and\n * hybrid search combining vector similarity with keyword matching.\n *\n * @param vectorStore - Vector store instance for search operations\n * @returns Tool handler function\n *\n * @example\n * ```typescript\n * const handler = createVectorSearchHandler(vectorStore);\n * const result = await handler({\n * query: 'neural network architecture',\n * k: 10,\n * hybrid: true,\n * });\n * ```\n */\nexport function createVectorSearchHandler(\n vectorStore?: EnhancedVectorStore\n): ToolHandler {\n return async (params: Record<string, unknown>): Promise<ToolResult> => {\n const startTime = Date.now();\n const typedParams = params as unknown as VectorSearchParams;\n const {\n query,\n k = 10,\n type,\n hybrid = false,\n minScore = 0,\n includeVectors = false,\n namespace,\n } = typedParams;\n\n try {\n // Validate required parameters\n if (!query || typeof query !== 'string') {\n return {\n success: false,\n error: 'Query parameter is required and must be a string',\n metadata: { executionTime: Date.now() - startTime },\n };\n }\n\n // Check vector store availability\n if (!vectorStore) {\n return {\n success: false,\n error: 'Vector store not initialized. Configure vector storage first.',\n metadata: { executionTime: Date.now() - startTime },\n };\n }\n\n // Ensure vector store is ready\n if (!vectorStore.isReady()) {\n await vectorStore.initialize();\n }\n\n // Enforce limits\n const safeK = Math.min(Math.max(1, Number(k) || 10), 100);\n\n // Convert query to vector\n const queryVector = textToVector(query, vectorStore.getConfig().index.dimensions);\n\n // Build filter\n const filter: Record<string, unknown> = {};\n if (type && typeof type === 'string') {\n filter.type = type;\n }\n if (namespace && typeof namespace === 'string') {\n filter.namespace = namespace;\n }\n\n let results: SearchResult[] | HybridSearchResult[];\n\n if (hybrid) {\n // Hybrid search: combine vector + keyword\n const hybridResults = await vectorStore.hybridSearch({\n embedding: queryVector,\n limit: safeK * 2, // Get extra for re-ranking\n filters: Object.keys(filter).length > 0 ? filter : undefined,\n minScore: minScore > 0 ? minScore : undefined,\n includeVectors,\n namespace,\n });\n\n // Re-rank with keyword scores\n const reranked = hybridResults.map((result) => {\n const keywordScore = calculateKeywordScore(query, result.metadata);\n const combinedScore = result.score * 0.7 + keywordScore * 0.3;\n return {\n ...result,\n keywordScore,\n combinedScore,\n source: 'merged' as const,\n };\n });\n\n // Sort by combined score and take top k\n reranked.sort((a, b) => b.combinedScore - a.combinedScore);\n results = reranked.slice(0, safeK);\n } else {\n // Pure vector search\n results = await vectorStore.search({\n vector: queryVector,\n k: safeK,\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n minScore: minScore > 0 ? minScore : undefined,\n });\n }\n\n // Format results\n const formattedResults = results.map((result) => {\n const formatted: Record<string, unknown> = {\n id: result.id,\n score: Math.round(result.score * 10000) / 10000,\n metadata: result.metadata,\n };\n\n if (includeVectors && result.vector) {\n formatted.vector = result.vector;\n }\n\n // Handle hybrid search results with combined/keyword scores\n const resultWithScores = result as unknown as Record<string, unknown>;\n if ('combinedScore' in resultWithScores && typeof resultWithScores.combinedScore === 'number') {\n formatted.combinedScore = Math.round(resultWithScores.combinedScore * 10000) / 10000;\n }\n if ('keywordScore' in resultWithScores && typeof resultWithScores.keywordScore === 'number') {\n formatted.keywordScore = Math.round(resultWithScores.keywordScore * 10000) / 10000;\n }\n if ('source' in result) {\n formatted.source = (result as HybridSearchResult).source;\n }\n\n return formatted;\n });\n\n // Get stats for metadata\n const stats = vectorStore.getStats();\n\n return {\n success: true,\n data: {\n results: formattedResults,\n count: formattedResults.length,\n query,\n searchMode: hybrid ? 'hybrid' : 'vector',\n filters: {\n type: type || null,\n minScore: minScore || null,\n namespace: namespace || null,\n },\n },\n metadata: {\n executionTime: Date.now() - startTime,\n totalVectors: stats.totalVectors,\n indexType: stats.indexType,\n cached: false,\n },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n metadata: { executionTime: Date.now() - startTime },\n };\n }\n };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Trajectory List Tool
3
+ *
4
+ * MCP tool for listing agent trajectories from the trajectory tracker.
5
+ * Provides access to agent operation history for analysis and learning.
6
+ *
7
+ * @module mcp-server/tools/vector/trajectory
8
+ */
9
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
10
+ import type { ToolHandler } from '../../types/index.js';
11
+ import type { TrajectoryTracker } from '../../../vector/services/trajectory-tracker.js';
12
+ /**
13
+ * Trajectory list tool definition
14
+ *
15
+ * Lists agent trajectories with optional filtering by agent ID
16
+ * and control over included detail level.
17
+ */
18
+ export declare const trajectoryListTool: Tool;
19
+ /**
20
+ * Create trajectory list handler
21
+ *
22
+ * Creates a handler function that lists agent trajectories from the
23
+ * trajectory tracker. Supports filtering and pagination.
24
+ *
25
+ * @param trajectoryTracker - Trajectory tracker instance
26
+ * @returns Tool handler function
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const handler = createTrajectoryListHandler(tracker);
31
+ * const result = await handler({
32
+ * agentId: 'researcher-1',
33
+ * limit: 10,
34
+ * includeSteps: true,
35
+ * });
36
+ * ```
37
+ */
38
+ export declare function createTrajectoryListHandler(trajectoryTracker?: TrajectoryTracker): ToolHandler;
39
+ //# sourceMappingURL=trajectory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trajectory.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/vector/trajectory.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAGxF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,IAuChC,CAAC;AA0GF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,2BAA2B,CACzC,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,WAAW,CAkGb"}