agentic-flow 2.0.1-alpha.5 → 2.0.1-alpha.8
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.
- package/CHANGELOG.md +26 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/agentdb/controllers/EmbeddingService.d.ts +37 -0
- package/dist/agentdb/controllers/EmbeddingService.d.ts.map +1 -0
- package/dist/agentdb/controllers/EmbeddingService.js +1 -0
- package/dist/agentdb/controllers/EmbeddingService.js.map +1 -0
- package/dist/billing/mcp/tools.d.ts.map +1 -1
- package/dist/billing/mcp/tools.js +2 -0
- package/dist/billing/mcp/tools.js.map +1 -1
- package/dist/cli/commands/hooks.d.ts +18 -0
- package/dist/cli/commands/hooks.d.ts.map +1 -0
- package/dist/cli/commands/hooks.js +750 -0
- package/dist/cli/commands/hooks.js.map +1 -0
- package/dist/cli-proxy.js +26 -1
- package/dist/cli-proxy.js.map +1 -1
- package/dist/core/agentdb-fast.js +3 -3
- package/dist/core/agentdb-fast.js.map +1 -1
- package/dist/core/agentdb-wrapper-enhanced.d.ts.map +1 -1
- package/dist/core/agentdb-wrapper-enhanced.js +32 -17
- package/dist/core/agentdb-wrapper-enhanced.js.map +1 -1
- package/dist/core/attention-native.d.ts +1 -0
- package/dist/core/attention-native.d.ts.map +1 -1
- package/dist/core/attention-native.js +6 -1
- package/dist/core/attention-native.js.map +1 -1
- package/dist/federation/integrations/supabase-adapter-debug.js +3 -3
- package/dist/federation/integrations/supabase-adapter-debug.js.map +1 -1
- package/dist/intelligence/RuVectorIntelligence.d.ts +362 -0
- package/dist/intelligence/RuVectorIntelligence.d.ts.map +1 -0
- package/dist/intelligence/RuVectorIntelligence.js +852 -0
- package/dist/intelligence/RuVectorIntelligence.js.map +1 -0
- package/dist/intelligence/index.d.ts +14 -0
- package/dist/intelligence/index.d.ts.map +1 -0
- package/dist/intelligence/index.js +14 -0
- package/dist/intelligence/index.js.map +1 -0
- package/dist/llm/RuvLLMOrchestrator.d.ts +184 -0
- package/dist/llm/RuvLLMOrchestrator.d.ts.map +1 -0
- package/dist/llm/RuvLLMOrchestrator.js +442 -0
- package/dist/llm/RuvLLMOrchestrator.js.map +1 -0
- package/dist/llm/index.d.ts +9 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +8 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -1
- package/dist/mcp/claudeFlowSdkServer.js +86 -21
- package/dist/mcp/claudeFlowSdkServer.js.map +1 -1
- package/dist/mcp/fastmcp/servers/hooks-server.d.ts +15 -0
- package/dist/mcp/fastmcp/servers/hooks-server.d.ts.map +1 -0
- package/dist/mcp/fastmcp/servers/hooks-server.js +63 -0
- package/dist/mcp/fastmcp/servers/hooks-server.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/benchmark.d.ts +20 -0
- package/dist/mcp/fastmcp/tools/hooks/benchmark.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/benchmark.js +110 -0
- package/dist/mcp/fastmcp/tools/hooks/benchmark.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/build-agents.d.ts +7 -0
- package/dist/mcp/fastmcp/tools/hooks/build-agents.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/build-agents.js +276 -0
- package/dist/mcp/fastmcp/tools/hooks/build-agents.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/explain.d.ts +6 -0
- package/dist/mcp/fastmcp/tools/hooks/explain.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/explain.js +164 -0
- package/dist/mcp/fastmcp/tools/hooks/explain.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/index.d.ts +28 -0
- package/dist/mcp/fastmcp/tools/hooks/index.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/index.js +59 -0
- package/dist/mcp/fastmcp/tools/hooks/index.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.d.ts +91 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js +269 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-tools.d.ts +58 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-tools.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-tools.js +416 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-tools.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/metrics.d.ts +6 -0
- package/dist/mcp/fastmcp/tools/hooks/metrics.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/metrics.js +137 -0
- package/dist/mcp/fastmcp/tools/hooks/metrics.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/post-command.d.ts +7 -0
- package/dist/mcp/fastmcp/tools/hooks/post-command.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/post-command.js +91 -0
- package/dist/mcp/fastmcp/tools/hooks/post-command.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/post-edit.d.ts +12 -0
- package/dist/mcp/fastmcp/tools/hooks/post-edit.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/post-edit.js +146 -0
- package/dist/mcp/fastmcp/tools/hooks/post-edit.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-command.d.ts +7 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-command.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-command.js +70 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-command.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-edit.d.ts +14 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-edit.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-edit.js +121 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-edit.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/pretrain.d.ts +7 -0
- package/dist/mcp/fastmcp/tools/hooks/pretrain.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/pretrain.js +171 -0
- package/dist/mcp/fastmcp/tools/hooks/pretrain.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/route.d.ts +12 -0
- package/dist/mcp/fastmcp/tools/hooks/route.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/route.js +267 -0
- package/dist/mcp/fastmcp/tools/hooks/route.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/shared.d.ts +46 -0
- package/dist/mcp/fastmcp/tools/hooks/shared.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/shared.js +159 -0
- package/dist/mcp/fastmcp/tools/hooks/shared.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/transfer.d.ts +7 -0
- package/dist/mcp/fastmcp/tools/hooks/transfer.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/transfer.js +151 -0
- package/dist/mcp/fastmcp/tools/hooks/transfer.js.map +1 -0
- package/dist/mcp/tools/agent-booster-tools.d.ts +10 -1
- package/dist/mcp/tools/agent-booster-tools.d.ts.map +1 -1
- package/dist/mcp/tools/agent-booster-tools.js.map +1 -1
- package/dist/mcp/tools/sona-tools.d.ts.map +1 -1
- package/dist/mcp/tools/sona-tools.js +15 -3
- package/dist/mcp/tools/sona-tools.js.map +1 -1
- package/dist/memory/SharedMemoryPool.d.ts +16 -3
- package/dist/memory/SharedMemoryPool.d.ts.map +1 -1
- package/dist/memory/SharedMemoryPool.js +33 -1
- package/dist/memory/SharedMemoryPool.js.map +1 -1
- package/dist/middleware/auth.middleware.d.ts +114 -0
- package/dist/middleware/auth.middleware.d.ts.map +1 -0
- package/dist/middleware/auth.middleware.js +222 -0
- package/dist/middleware/auth.middleware.js.map +1 -0
- package/dist/optimizations/agent-booster-migration.d.ts.map +1 -1
- package/dist/optimizations/agent-booster-migration.js.map +1 -1
- package/dist/proxy/anthropic-to-gemini.d.ts.map +1 -1
- package/dist/proxy/anthropic-to-gemini.js.map +1 -1
- package/dist/proxy/anthropic-to-openrouter.d.ts.map +1 -1
- package/dist/proxy/anthropic-to-openrouter.js.map +1 -1
- package/dist/proxy/anthropic-to-requesty.d.ts.map +1 -1
- package/dist/proxy/anthropic-to-requesty.js.map +1 -1
- package/dist/proxy/quic-proxy.d.ts +0 -1
- package/dist/proxy/quic-proxy.d.ts.map +1 -1
- package/dist/proxy/quic-proxy.js +2 -1
- package/dist/proxy/quic-proxy.js.map +1 -1
- package/dist/reasoningbank/AdvancedMemory.d.ts.map +1 -1
- package/dist/reasoningbank/AdvancedMemory.js +12 -1
- package/dist/reasoningbank/AdvancedMemory.js.map +1 -1
- package/dist/reasoningbank/HybridBackend.d.ts +9 -0
- package/dist/reasoningbank/HybridBackend.d.ts.map +1 -1
- package/dist/reasoningbank/HybridBackend.js +48 -4
- package/dist/reasoningbank/HybridBackend.js.map +1 -1
- package/dist/reasoningbank/backend-selector.d.ts +1 -1
- package/dist/reasoningbank/backend-selector.d.ts.map +1 -1
- package/dist/reasoningbank/backend-selector.js.map +1 -1
- package/dist/reasoningbank/index-new.d.ts +0 -6
- package/dist/reasoningbank/index-new.d.ts.map +1 -1
- package/dist/reasoningbank/index-new.js +9 -7
- package/dist/reasoningbank/index-new.js.map +1 -1
- package/dist/reasoningbank/index.d.ts +1 -6
- package/dist/reasoningbank/index.d.ts.map +1 -1
- package/dist/reasoningbank/index.js +10 -7
- package/dist/reasoningbank/index.js.map +1 -1
- package/dist/router/providers/onnx-local.d.ts.map +1 -1
- package/dist/router/providers/onnx-local.js +3 -1
- package/dist/router/providers/onnx-local.js.map +1 -1
- package/dist/routing/CircuitBreakerRouter.d.ts +187 -0
- package/dist/routing/CircuitBreakerRouter.d.ts.map +1 -0
- package/dist/routing/CircuitBreakerRouter.js +460 -0
- package/dist/routing/CircuitBreakerRouter.js.map +1 -0
- package/dist/routing/SemanticRouter.d.ts +164 -0
- package/dist/routing/SemanticRouter.d.ts.map +1 -0
- package/dist/routing/SemanticRouter.js +291 -0
- package/dist/routing/SemanticRouter.js.map +1 -0
- package/dist/routing/index.d.ts +12 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +10 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/services/embedding-service.d.ts.map +1 -1
- package/dist/services/embedding-service.js +5 -2
- package/dist/services/embedding-service.js.map +1 -1
- package/dist/services/sona-agent-training.js +1 -1
- package/dist/services/sona-agent-training.js.map +1 -1
- package/dist/services/sona-agentdb-integration.d.ts.map +1 -1
- package/dist/services/sona-agentdb-integration.js +10 -5
- package/dist/services/sona-agentdb-integration.js.map +1 -1
- package/dist/services/sona-service.d.ts +6 -6
- package/dist/services/sona-service.d.ts.map +1 -1
- package/dist/services/sona-service.js +3 -1
- package/dist/services/sona-service.js.map +1 -1
- package/dist/utils/audit-logger.d.ts +115 -0
- package/dist/utils/audit-logger.d.ts.map +1 -0
- package/dist/utils/audit-logger.js +228 -0
- package/dist/utils/audit-logger.js.map +1 -0
- package/dist/utils/cli.d.ts +1 -1
- package/dist/utils/cli.d.ts.map +1 -1
- package/dist/utils/cli.js +5 -0
- package/dist/utils/cli.js.map +1 -1
- package/dist/utils/input-validator.d.ts +116 -0
- package/dist/utils/input-validator.d.ts.map +1 -0
- package/dist/utils/input-validator.js +299 -0
- package/dist/utils/input-validator.js.map +1 -0
- package/dist/utils/rate-limiter.js +2 -2
- package/dist/utils/rate-limiter.js.map +1 -1
- package/package.json +5 -2
- package/wasm/reasoningbank/reasoningbank_wasm_bg.js +2 -2
- package/wasm/reasoningbank/reasoningbank_wasm_bg.wasm +0 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pretrain Hook - Analyze repository and bootstrap intelligence
|
|
3
|
+
* Swarm-distributed when available, falls back to sequential
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import { execSync } from 'child_process';
|
|
9
|
+
import { loadIntelligence, saveIntelligence, getAgentForFile, simpleEmbed } from './shared.js';
|
|
10
|
+
export const hookPretrainTool = {
|
|
11
|
+
name: 'hook_pretrain',
|
|
12
|
+
description: 'Analyze repository with swarm for intelligent patterns',
|
|
13
|
+
parameters: z.object({
|
|
14
|
+
depth: z.number().optional().default(100).describe('Git history depth'),
|
|
15
|
+
incremental: z.boolean().optional().default(false).describe('Only analyze changes since last pretrain'),
|
|
16
|
+
skipGit: z.boolean().optional().default(false).describe('Skip git history analysis'),
|
|
17
|
+
skipFiles: z.boolean().optional().default(false).describe('Skip file structure analysis'),
|
|
18
|
+
verbose: z.boolean().optional().default(false).describe('Show detailed progress')
|
|
19
|
+
}),
|
|
20
|
+
execute: async ({ depth, incremental, skipGit, skipFiles, verbose }, { onProgress }) => {
|
|
21
|
+
const startTime = Date.now();
|
|
22
|
+
const intel = loadIntelligence();
|
|
23
|
+
const stats = { files: 0, patterns: 0, memories: 0, coedits: 0 };
|
|
24
|
+
onProgress?.({ progress: 0, message: 'Starting pretrain analysis...' });
|
|
25
|
+
// Phase 1: Analyze file structure
|
|
26
|
+
if (!skipFiles) {
|
|
27
|
+
onProgress?.({ progress: 0.1, message: 'Analyzing file structure...' });
|
|
28
|
+
try {
|
|
29
|
+
const filesOutput = execSync('git ls-files 2>/dev/null || find . -type f -not -path "./.git/*" -not -path "./node_modules/*" -not -path "./target/*" 2>/dev/null', { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 });
|
|
30
|
+
const files = filesOutput.trim().split('\n').filter(f => f);
|
|
31
|
+
for (const file of files) {
|
|
32
|
+
stats.files++;
|
|
33
|
+
const ext = path.extname(file);
|
|
34
|
+
const agent = getAgentForFile(file);
|
|
35
|
+
// Create Q-learning pattern
|
|
36
|
+
const state = `edit:${ext || 'unknown'}`;
|
|
37
|
+
if (!intel.patterns[state]) {
|
|
38
|
+
intel.patterns[state] = {};
|
|
39
|
+
}
|
|
40
|
+
intel.patterns[state][agent] = (intel.patterns[state][agent] || 0) + 0.3;
|
|
41
|
+
stats.patterns++;
|
|
42
|
+
// Track directory patterns
|
|
43
|
+
const dir = path.dirname(file);
|
|
44
|
+
const dirParts = dir.split('/');
|
|
45
|
+
if (dirParts[0] && !intel.dirPatterns[dirParts[0]]) {
|
|
46
|
+
intel.dirPatterns[dirParts[0]] = agent;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (verbose) {
|
|
50
|
+
console.log(`[Pretrain] Analyzed ${stats.files} files`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
// Continue without file analysis
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Phase 2: Analyze git history for co-edit patterns
|
|
58
|
+
if (!skipGit) {
|
|
59
|
+
onProgress?.({ progress: 0.4, message: 'Analyzing git history...' });
|
|
60
|
+
try {
|
|
61
|
+
const gitLog = execSync(`git log --name-only --pretty=format:"COMMIT:%H" -n ${depth} 2>/dev/null`, { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 });
|
|
62
|
+
const commits = gitLog.split('COMMIT:').filter(c => c.trim());
|
|
63
|
+
const coEditMap = {};
|
|
64
|
+
for (const commit of commits) {
|
|
65
|
+
const lines = commit.trim().split('\n').filter(l => l && !l.match(/^[a-f0-9]{40}$/));
|
|
66
|
+
const files = lines.filter(f => f.trim());
|
|
67
|
+
// Track co-edits
|
|
68
|
+
for (let i = 0; i < files.length; i++) {
|
|
69
|
+
for (let j = i + 1; j < files.length; j++) {
|
|
70
|
+
const key = [files[i], files[j]].sort().join('|');
|
|
71
|
+
coEditMap[key] = (coEditMap[key] || 0) + 1;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Store strong co-edit patterns
|
|
76
|
+
const strongPatterns = Object.entries(coEditMap)
|
|
77
|
+
.filter(([, count]) => count >= 3)
|
|
78
|
+
.sort((a, b) => b[1] - a[1]);
|
|
79
|
+
for (const [key, count] of strongPatterns.slice(0, 100)) {
|
|
80
|
+
const [file1, file2] = key.split('|');
|
|
81
|
+
if (!intel.sequences[file1]) {
|
|
82
|
+
intel.sequences[file1] = [];
|
|
83
|
+
}
|
|
84
|
+
const existing = intel.sequences[file1].find(s => s.file === file2);
|
|
85
|
+
if (existing) {
|
|
86
|
+
existing.score += count;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
intel.sequences[file1].push({ file: file2, score: count });
|
|
90
|
+
}
|
|
91
|
+
stats.coedits++;
|
|
92
|
+
}
|
|
93
|
+
if (verbose) {
|
|
94
|
+
console.log(`[Pretrain] Found ${strongPatterns.length} co-edit patterns`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
// Continue without git analysis
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Phase 3: Create memories from important files
|
|
102
|
+
onProgress?.({ progress: 0.7, message: 'Creating memories from key files...' });
|
|
103
|
+
const importantFiles = [
|
|
104
|
+
'README.md', 'CLAUDE.md', 'package.json', 'Cargo.toml',
|
|
105
|
+
'pyproject.toml', 'go.mod', '.claude/settings.json', 'tsconfig.json'
|
|
106
|
+
];
|
|
107
|
+
for (const filename of importantFiles) {
|
|
108
|
+
const filePath = path.join(process.cwd(), filename);
|
|
109
|
+
if (fs.existsSync(filePath)) {
|
|
110
|
+
try {
|
|
111
|
+
const content = fs.readFileSync(filePath, 'utf-8').slice(0, 2000);
|
|
112
|
+
intel.memories.push({
|
|
113
|
+
content: `[${filename}] ${content.replace(/\n/g, ' ').slice(0, 500)}`,
|
|
114
|
+
type: 'project',
|
|
115
|
+
created: new Date().toISOString(),
|
|
116
|
+
embedding: simpleEmbed(content)
|
|
117
|
+
});
|
|
118
|
+
stats.memories++;
|
|
119
|
+
}
|
|
120
|
+
catch (e) {
|
|
121
|
+
// Skip unreadable files
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Phase 4: Build directory-agent mappings
|
|
126
|
+
onProgress?.({ progress: 0.85, message: 'Building directory mappings...' });
|
|
127
|
+
try {
|
|
128
|
+
const dirs = execSync('find . -type d -maxdepth 2 -not -path "./.git*" -not -path "./node_modules*" 2>/dev/null || echo "."', { encoding: 'utf-8' }).trim().split('\n');
|
|
129
|
+
for (const dir of dirs) {
|
|
130
|
+
const name = path.basename(dir);
|
|
131
|
+
if (['src', 'lib', 'core'].includes(name))
|
|
132
|
+
intel.dirPatterns[dir] = 'coder';
|
|
133
|
+
else if (['test', 'tests', '__tests__', 'spec'].includes(name))
|
|
134
|
+
intel.dirPatterns[dir] = 'test-engineer';
|
|
135
|
+
else if (['docs', 'documentation'].includes(name))
|
|
136
|
+
intel.dirPatterns[dir] = 'documentation-specialist';
|
|
137
|
+
else if (['scripts', 'bin'].includes(name))
|
|
138
|
+
intel.dirPatterns[dir] = 'devops-engineer';
|
|
139
|
+
else if (['components', 'views', 'pages'].includes(name))
|
|
140
|
+
intel.dirPatterns[dir] = 'frontend-developer';
|
|
141
|
+
else if (['api', 'routes', 'handlers'].includes(name))
|
|
142
|
+
intel.dirPatterns[dir] = 'backend-developer';
|
|
143
|
+
else if (['models', 'entities', 'schemas'].includes(name))
|
|
144
|
+
intel.dirPatterns[dir] = 'database-specialist';
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch (e) {
|
|
148
|
+
// Continue without directory analysis
|
|
149
|
+
}
|
|
150
|
+
// Save pretrain metadata
|
|
151
|
+
intel.pretrained = {
|
|
152
|
+
date: new Date().toISOString(),
|
|
153
|
+
stats
|
|
154
|
+
};
|
|
155
|
+
// Save intelligence
|
|
156
|
+
saveIntelligence(intel);
|
|
157
|
+
onProgress?.({ progress: 1.0, message: 'Pretrain complete!' });
|
|
158
|
+
const latency = Date.now() - startTime;
|
|
159
|
+
return {
|
|
160
|
+
success: true,
|
|
161
|
+
filesAnalyzed: stats.files,
|
|
162
|
+
patternsCreated: stats.patterns,
|
|
163
|
+
memoriesStored: stats.memories,
|
|
164
|
+
coEditsFound: stats.coedits,
|
|
165
|
+
directoryMappings: Object.keys(intel.dirPatterns).length,
|
|
166
|
+
latencyMs: latency,
|
|
167
|
+
timestamp: new Date().toISOString()
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=pretrain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pretrain.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/pretrain.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Pretrain Hook - Analyze repository and bootstrap intelligence\n * Swarm-distributed when available, falls back to sequential\n */\n\nimport { z } from 'zod';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { execSync } from 'child_process';\nimport type { ToolDefinition } from '../../types/index.js';\nimport {\n loadIntelligence,\n saveIntelligence,\n getAgentForFile,\n simpleEmbed,\n agentMapping\n} from './shared.js';\n\nexport const hookPretrainTool: ToolDefinition = {\n name: 'hook_pretrain',\n description: 'Analyze repository with swarm for intelligent patterns',\n parameters: z.object({\n depth: z.number().optional().default(100).describe('Git history depth'),\n incremental: z.boolean().optional().default(false).describe('Only analyze changes since last pretrain'),\n skipGit: z.boolean().optional().default(false).describe('Skip git history analysis'),\n skipFiles: z.boolean().optional().default(false).describe('Skip file structure analysis'),\n verbose: z.boolean().optional().default(false).describe('Show detailed progress')\n }),\n execute: async ({ depth, incremental, skipGit, skipFiles, verbose }, { onProgress }) => {\n const startTime = Date.now();\n const intel = loadIntelligence();\n const stats = { files: 0, patterns: 0, memories: 0, coedits: 0 };\n\n onProgress?.({ progress: 0, message: 'Starting pretrain analysis...' });\n\n // Phase 1: Analyze file structure\n if (!skipFiles) {\n onProgress?.({ progress: 0.1, message: 'Analyzing file structure...' });\n\n try {\n const filesOutput = execSync(\n 'git ls-files 2>/dev/null || find . -type f -not -path \"./.git/*\" -not -path \"./node_modules/*\" -not -path \"./target/*\" 2>/dev/null',\n { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 }\n );\n\n const files = filesOutput.trim().split('\\n').filter(f => f);\n\n for (const file of files) {\n stats.files++;\n const ext = path.extname(file);\n const agent = getAgentForFile(file);\n\n // Create Q-learning pattern\n const state = `edit:${ext || 'unknown'}`;\n if (!intel.patterns[state]) {\n intel.patterns[state] = {};\n }\n intel.patterns[state][agent] = (intel.patterns[state][agent] || 0) + 0.3;\n stats.patterns++;\n\n // Track directory patterns\n const dir = path.dirname(file);\n const dirParts = dir.split('/');\n if (dirParts[0] && !intel.dirPatterns[dirParts[0]]) {\n intel.dirPatterns[dirParts[0]] = agent;\n }\n }\n\n if (verbose) {\n console.log(`[Pretrain] Analyzed ${stats.files} files`);\n }\n } catch (e) {\n // Continue without file analysis\n }\n }\n\n // Phase 2: Analyze git history for co-edit patterns\n if (!skipGit) {\n onProgress?.({ progress: 0.4, message: 'Analyzing git history...' });\n\n try {\n const gitLog = execSync(\n `git log --name-only --pretty=format:\"COMMIT:%H\" -n ${depth} 2>/dev/null`,\n { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 }\n );\n\n const commits = gitLog.split('COMMIT:').filter(c => c.trim());\n const coEditMap: Record<string, number> = {};\n\n for (const commit of commits) {\n const lines = commit.trim().split('\\n').filter(l => l && !l.match(/^[a-f0-9]{40}$/));\n const files = lines.filter(f => f.trim());\n\n // Track co-edits\n for (let i = 0; i < files.length; i++) {\n for (let j = i + 1; j < files.length; j++) {\n const key = [files[i], files[j]].sort().join('|');\n coEditMap[key] = (coEditMap[key] || 0) + 1;\n }\n }\n }\n\n // Store strong co-edit patterns\n const strongPatterns = Object.entries(coEditMap)\n .filter(([, count]) => count >= 3)\n .sort((a, b) => b[1] - a[1]);\n\n for (const [key, count] of strongPatterns.slice(0, 100)) {\n const [file1, file2] = key.split('|');\n if (!intel.sequences[file1]) {\n intel.sequences[file1] = [];\n }\n\n const existing = intel.sequences[file1].find(s => s.file === file2);\n if (existing) {\n existing.score += count;\n } else {\n intel.sequences[file1].push({ file: file2, score: count });\n }\n stats.coedits++;\n }\n\n if (verbose) {\n console.log(`[Pretrain] Found ${strongPatterns.length} co-edit patterns`);\n }\n } catch (e) {\n // Continue without git analysis\n }\n }\n\n // Phase 3: Create memories from important files\n onProgress?.({ progress: 0.7, message: 'Creating memories from key files...' });\n\n const importantFiles = [\n 'README.md', 'CLAUDE.md', 'package.json', 'Cargo.toml',\n 'pyproject.toml', 'go.mod', '.claude/settings.json', 'tsconfig.json'\n ];\n\n for (const filename of importantFiles) {\n const filePath = path.join(process.cwd(), filename);\n if (fs.existsSync(filePath)) {\n try {\n const content = fs.readFileSync(filePath, 'utf-8').slice(0, 2000);\n intel.memories.push({\n content: `[${filename}] ${content.replace(/\\n/g, ' ').slice(0, 500)}`,\n type: 'project',\n created: new Date().toISOString(),\n embedding: simpleEmbed(content)\n });\n stats.memories++;\n } catch (e) {\n // Skip unreadable files\n }\n }\n }\n\n // Phase 4: Build directory-agent mappings\n onProgress?.({ progress: 0.85, message: 'Building directory mappings...' });\n\n try {\n const dirs = execSync(\n 'find . -type d -maxdepth 2 -not -path \"./.git*\" -not -path \"./node_modules*\" 2>/dev/null || echo \".\"',\n { encoding: 'utf-8' }\n ).trim().split('\\n');\n\n for (const dir of dirs) {\n const name = path.basename(dir);\n if (['src', 'lib', 'core'].includes(name)) intel.dirPatterns[dir] = 'coder';\n else if (['test', 'tests', '__tests__', 'spec'].includes(name)) intel.dirPatterns[dir] = 'test-engineer';\n else if (['docs', 'documentation'].includes(name)) intel.dirPatterns[dir] = 'documentation-specialist';\n else if (['scripts', 'bin'].includes(name)) intel.dirPatterns[dir] = 'devops-engineer';\n else if (['components', 'views', 'pages'].includes(name)) intel.dirPatterns[dir] = 'frontend-developer';\n else if (['api', 'routes', 'handlers'].includes(name)) intel.dirPatterns[dir] = 'backend-developer';\n else if (['models', 'entities', 'schemas'].includes(name)) intel.dirPatterns[dir] = 'database-specialist';\n }\n } catch (e) {\n // Continue without directory analysis\n }\n\n // Save pretrain metadata\n intel.pretrained = {\n date: new Date().toISOString(),\n stats\n };\n\n // Save intelligence\n saveIntelligence(intel);\n\n onProgress?.({ progress: 1.0, message: 'Pretrain complete!' });\n\n const latency = Date.now() - startTime;\n\n return {\n success: true,\n filesAnalyzed: stats.files,\n patternsCreated: stats.patterns,\n memoriesStored: stats.memories,\n coEditsFound: stats.coedits,\n directoryMappings: Object.keys(intel.dirPatterns).length,\n latencyMs: latency,\n timestamp: new Date().toISOString()\n };\n }\n};\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route Hook - Intelligent agent selection with SONA-style routing
|
|
3
|
+
* Uses learned patterns, context, and exploration/exploitation balance
|
|
4
|
+
*
|
|
5
|
+
* NOW WITH FULL RUVECTOR INTELLIGENCE:
|
|
6
|
+
* - @ruvector/sona: Micro-LoRA (~0.05ms), trajectories
|
|
7
|
+
* - @ruvector/attention: MoE attention-based ranking
|
|
8
|
+
* - ruvector: HNSW indexing (150x faster search)
|
|
9
|
+
*/
|
|
10
|
+
import type { ToolDefinition } from '../../types/index.js';
|
|
11
|
+
export declare const hookRouteTool: ToolDefinition;
|
|
12
|
+
//# sourceMappingURL=route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AA0C3D,eAAO,MAAM,aAAa,EAAE,cA4P3B,CAAC"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route Hook - Intelligent agent selection with SONA-style routing
|
|
3
|
+
* Uses learned patterns, context, and exploration/exploitation balance
|
|
4
|
+
*
|
|
5
|
+
* NOW WITH FULL RUVECTOR INTELLIGENCE:
|
|
6
|
+
* - @ruvector/sona: Micro-LoRA (~0.05ms), trajectories
|
|
7
|
+
* - @ruvector/attention: MoE attention-based ranking
|
|
8
|
+
* - ruvector: HNSW indexing (150x faster search)
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
import { loadIntelligence, getAgentForFile, simpleEmbed, cosineSimilarity } from './shared.js';
|
|
13
|
+
import { routeTaskIntelligent, findSimilarPatterns, getIntelligenceStats } from './intelligence-bridge.js';
|
|
14
|
+
// Exploration rate for epsilon-greedy selection
|
|
15
|
+
const EXPLORATION_RATE = 0.1;
|
|
16
|
+
// Flag to use RuVector intelligence (can be toggled)
|
|
17
|
+
const USE_RUVECTOR_INTELLIGENCE = process.env.RUVECTOR_INTELLIGENCE_ENABLED !== 'false';
|
|
18
|
+
// Available agent types
|
|
19
|
+
const availableAgents = [
|
|
20
|
+
'coder',
|
|
21
|
+
'researcher',
|
|
22
|
+
'analyst',
|
|
23
|
+
'optimizer',
|
|
24
|
+
'coordinator',
|
|
25
|
+
'typescript-developer',
|
|
26
|
+
'rust-developer',
|
|
27
|
+
'python-developer',
|
|
28
|
+
'go-developer',
|
|
29
|
+
'react-developer',
|
|
30
|
+
'test-engineer',
|
|
31
|
+
'documentation-specialist',
|
|
32
|
+
'database-specialist',
|
|
33
|
+
'devops-engineer',
|
|
34
|
+
'cicd-engineer',
|
|
35
|
+
'security-specialist',
|
|
36
|
+
'frontend-developer',
|
|
37
|
+
'backend-developer'
|
|
38
|
+
];
|
|
39
|
+
export const hookRouteTool = {
|
|
40
|
+
name: 'hook_route',
|
|
41
|
+
description: 'Route task to optimal agent using learned patterns and context',
|
|
42
|
+
parameters: z.object({
|
|
43
|
+
task: z.string().describe('Task description'),
|
|
44
|
+
context: z.object({
|
|
45
|
+
file: z.string().optional(),
|
|
46
|
+
recentFiles: z.array(z.string()).optional(),
|
|
47
|
+
errorContext: z.string().optional()
|
|
48
|
+
}).optional().describe('Optional context'),
|
|
49
|
+
explore: z.boolean().optional().default(false).describe('Force exploration')
|
|
50
|
+
}),
|
|
51
|
+
execute: async ({ task, context, explore }, { onProgress }) => {
|
|
52
|
+
const startTime = Date.now();
|
|
53
|
+
// TRY RUVECTOR INTELLIGENCE FIRST (Micro-LoRA + HNSW + MoE)
|
|
54
|
+
if (USE_RUVECTOR_INTELLIGENCE && !explore) {
|
|
55
|
+
try {
|
|
56
|
+
const intelligentResult = await routeTaskIntelligent(task, context);
|
|
57
|
+
// Also check for similar patterns from ReasoningBank
|
|
58
|
+
const similarPatterns = await findSimilarPatterns(task, 3);
|
|
59
|
+
// Get stats for monitoring
|
|
60
|
+
const stats = await getIntelligenceStats();
|
|
61
|
+
return {
|
|
62
|
+
success: true,
|
|
63
|
+
agent: intelligentResult.agent,
|
|
64
|
+
confidence: intelligentResult.confidence,
|
|
65
|
+
score: intelligentResult.routingResults[0]?.confidence || 0,
|
|
66
|
+
factors: [
|
|
67
|
+
{
|
|
68
|
+
name: 'ruvector_intelligence',
|
|
69
|
+
weight: 3.0,
|
|
70
|
+
agent: intelligentResult.agent,
|
|
71
|
+
evidence: `SONA + MoE routing in ${intelligentResult.latencyMs.toFixed(2)}ms`
|
|
72
|
+
},
|
|
73
|
+
...intelligentResult.usedFeatures.map(f => ({
|
|
74
|
+
name: f,
|
|
75
|
+
weight: 1.0,
|
|
76
|
+
agent: intelligentResult.agent,
|
|
77
|
+
evidence: `Used ${f} for routing`
|
|
78
|
+
}))
|
|
79
|
+
],
|
|
80
|
+
alternatives: intelligentResult.routingResults.slice(1, 4).map(r => ({
|
|
81
|
+
agent: r.agentId,
|
|
82
|
+
score: r.confidence,
|
|
83
|
+
whyNot: `Score ${r.confidence.toFixed(2)} < best`
|
|
84
|
+
})),
|
|
85
|
+
similarPatterns: similarPatterns.slice(0, 2),
|
|
86
|
+
explored: false,
|
|
87
|
+
latencyMs: Date.now() - startTime,
|
|
88
|
+
timestamp: new Date().toISOString(),
|
|
89
|
+
intelligenceStats: stats,
|
|
90
|
+
engine: 'ruvector' // Mark that we used RuVector
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
// Fall back to simple routing if intelligence fails
|
|
95
|
+
console.warn('[Route] RuVector intelligence failed, using fallback:', error);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// FALLBACK: Simple Q-learning routing (original implementation)
|
|
99
|
+
const intel = loadIntelligence();
|
|
100
|
+
// Track scoring factors
|
|
101
|
+
const factors = [];
|
|
102
|
+
// Agent scores
|
|
103
|
+
const scores = {};
|
|
104
|
+
for (const agent of availableAgents) {
|
|
105
|
+
scores[agent] = 0;
|
|
106
|
+
}
|
|
107
|
+
// 1. Score based on file context
|
|
108
|
+
if (context?.file) {
|
|
109
|
+
const ext = path.extname(context.file);
|
|
110
|
+
const fileAgent = getAgentForFile(context.file);
|
|
111
|
+
scores[fileAgent] = (scores[fileAgent] || 0) + 2.0;
|
|
112
|
+
factors.push({
|
|
113
|
+
name: 'file_pattern',
|
|
114
|
+
weight: 2.0,
|
|
115
|
+
agent: fileAgent,
|
|
116
|
+
evidence: `File ${context.file} matches ${fileAgent}`
|
|
117
|
+
});
|
|
118
|
+
// Check learned patterns for this extension
|
|
119
|
+
const state = `edit:${ext}`;
|
|
120
|
+
if (intel.patterns[state]) {
|
|
121
|
+
for (const [agent, value] of Object.entries(intel.patterns[state])) {
|
|
122
|
+
if (typeof value === 'number') {
|
|
123
|
+
scores[agent] = (scores[agent] || 0) + value;
|
|
124
|
+
if (value > 0.5) {
|
|
125
|
+
factors.push({
|
|
126
|
+
name: 'learned_pattern',
|
|
127
|
+
weight: value,
|
|
128
|
+
agent,
|
|
129
|
+
evidence: `Q-value ${value.toFixed(2)} for ${ext} edits`
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// 2. Score based on task keywords
|
|
137
|
+
const taskLower = task.toLowerCase();
|
|
138
|
+
const keywordScores = {
|
|
139
|
+
'test-engineer': ['test', 'spec', 'coverage', 'mock', 'assert'],
|
|
140
|
+
'documentation-specialist': ['document', 'readme', 'docs', 'explain', 'comment'],
|
|
141
|
+
'security-specialist': ['security', 'auth', 'encrypt', 'vulnerability', 'owasp'],
|
|
142
|
+
'database-specialist': ['database', 'sql', 'query', 'migration', 'schema'],
|
|
143
|
+
'devops-engineer': ['docker', 'deploy', 'ci', 'cd', 'kubernetes', 'container'],
|
|
144
|
+
'frontend-developer': ['ui', 'component', 'style', 'css', 'layout'],
|
|
145
|
+
'backend-developer': ['api', 'endpoint', 'server', 'route', 'middleware'],
|
|
146
|
+
'optimizer': ['optimize', 'performance', 'speed', 'cache', 'memory'],
|
|
147
|
+
'researcher': ['research', 'find', 'search', 'explore', 'understand'],
|
|
148
|
+
'analyst': ['analyze', 'review', 'audit', 'check', 'evaluate']
|
|
149
|
+
};
|
|
150
|
+
for (const [agent, keywords] of Object.entries(keywordScores)) {
|
|
151
|
+
for (const keyword of keywords) {
|
|
152
|
+
if (taskLower.includes(keyword)) {
|
|
153
|
+
scores[agent] = (scores[agent] || 0) + 1.5;
|
|
154
|
+
factors.push({
|
|
155
|
+
name: 'keyword_match',
|
|
156
|
+
weight: 1.5,
|
|
157
|
+
agent,
|
|
158
|
+
evidence: `Task contains "${keyword}"`
|
|
159
|
+
});
|
|
160
|
+
break; // Only count once per agent
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// 3. Score based on memory similarity
|
|
165
|
+
if (intel.memories.length > 0) {
|
|
166
|
+
const taskEmbed = simpleEmbed(task);
|
|
167
|
+
for (const mem of intel.memories) {
|
|
168
|
+
if (mem.embedding && mem.type === 'success') {
|
|
169
|
+
const similarity = cosineSimilarity(taskEmbed, mem.embedding);
|
|
170
|
+
if (similarity > 0.4) {
|
|
171
|
+
// Extract agent from memory content
|
|
172
|
+
const agentMatch = mem.content.match(/by (\S+)/);
|
|
173
|
+
if (agentMatch && scores[agentMatch[1]] !== undefined) {
|
|
174
|
+
scores[agentMatch[1]] += similarity;
|
|
175
|
+
factors.push({
|
|
176
|
+
name: 'memory_match',
|
|
177
|
+
weight: similarity,
|
|
178
|
+
agent: agentMatch[1],
|
|
179
|
+
evidence: `Similar to: ${mem.content.slice(0, 50)}...`
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// 4. Check for error context
|
|
187
|
+
if (context?.errorContext) {
|
|
188
|
+
for (const ep of intel.errorPatterns) {
|
|
189
|
+
if (context.errorContext.includes(ep.errorType)) {
|
|
190
|
+
// Find agent with best success rate for this error
|
|
191
|
+
let bestAgent = 'coder';
|
|
192
|
+
let bestScore = 0;
|
|
193
|
+
for (const [agent, score] of Object.entries(ep.agentSuccess)) {
|
|
194
|
+
if (score > bestScore) {
|
|
195
|
+
bestScore = score;
|
|
196
|
+
bestAgent = agent;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (bestScore > 0) {
|
|
200
|
+
scores[bestAgent] = (scores[bestAgent] || 0) + 2.0;
|
|
201
|
+
factors.push({
|
|
202
|
+
name: 'error_specialist',
|
|
203
|
+
weight: 2.0,
|
|
204
|
+
agent: bestAgent,
|
|
205
|
+
evidence: `Best at fixing ${ep.errorType}`
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// 5. Select best agent (with exploration)
|
|
212
|
+
let selectedAgent = 'coder';
|
|
213
|
+
let maxScore = 0;
|
|
214
|
+
// Epsilon-greedy: explore with probability EXPLORATION_RATE
|
|
215
|
+
if (explore || Math.random() < EXPLORATION_RATE) {
|
|
216
|
+
// Random selection for exploration
|
|
217
|
+
const agentsWithScores = Object.keys(scores).filter(a => scores[a] > 0);
|
|
218
|
+
if (agentsWithScores.length > 0) {
|
|
219
|
+
selectedAgent = agentsWithScores[Math.floor(Math.random() * agentsWithScores.length)];
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
selectedAgent = availableAgents[Math.floor(Math.random() * availableAgents.length)];
|
|
223
|
+
}
|
|
224
|
+
factors.push({
|
|
225
|
+
name: 'exploration',
|
|
226
|
+
weight: 0,
|
|
227
|
+
agent: selectedAgent,
|
|
228
|
+
evidence: 'Random exploration for learning'
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
// Exploitation: select best
|
|
233
|
+
for (const [agent, score] of Object.entries(scores)) {
|
|
234
|
+
if (score > maxScore) {
|
|
235
|
+
maxScore = score;
|
|
236
|
+
selectedAgent = agent;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// Calculate confidence
|
|
241
|
+
const totalScore = Object.values(scores).reduce((a, b) => a + b, 0);
|
|
242
|
+
const confidence = totalScore > 0 ? maxScore / totalScore : 0.5;
|
|
243
|
+
// Get alternatives
|
|
244
|
+
const alternatives = Object.entries(scores)
|
|
245
|
+
.filter(([agent]) => agent !== selectedAgent)
|
|
246
|
+
.sort((a, b) => b[1] - a[1])
|
|
247
|
+
.slice(0, 3)
|
|
248
|
+
.map(([agent, score]) => ({
|
|
249
|
+
agent,
|
|
250
|
+
score,
|
|
251
|
+
whyNot: score < maxScore ? `Score ${score.toFixed(2)} < ${maxScore.toFixed(2)}` : 'Not selected'
|
|
252
|
+
}));
|
|
253
|
+
const latency = Date.now() - startTime;
|
|
254
|
+
return {
|
|
255
|
+
success: true,
|
|
256
|
+
agent: selectedAgent,
|
|
257
|
+
confidence: Math.min(0.95, confidence),
|
|
258
|
+
score: maxScore,
|
|
259
|
+
factors: factors.slice(0, 5),
|
|
260
|
+
alternatives,
|
|
261
|
+
explored: explore || Math.random() < EXPLORATION_RATE,
|
|
262
|
+
latencyMs: latency,
|
|
263
|
+
timestamp: new Date().toISOString()
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,gBAAgB,EAEjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAElC,gDAAgD;AAChD,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,qDAAqD;AACrD,MAAM,yBAAyB,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,OAAO,CAAC;AAExF,wBAAwB;AACxB,MAAM,eAAe,GAAG;IACtB,OAAO;IACP,YAAY;IACZ,SAAS;IACT,WAAW;IACX,aAAa;IACb,sBAAsB;IACtB,gBAAgB;IAChB,kBAAkB;IAClB,cAAc;IACd,iBAAiB;IACjB,eAAe;IACf,0BAA0B;IAC1B,qBAAqB;IACrB,iBAAiB;IACjB,eAAe;IACf,qBAAqB;IACrB,oBAAoB;IACpB,mBAAmB;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,gEAAgE;IAC7E,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC7C,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;YAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC3B,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;YAC3C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACpC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC1C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KAC7E,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,4DAA4D;QAC5D,IAAI,yBAAyB,IAAI,CAAC,OAAO,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,iBAAiB,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAEpE,qDAAqD;gBACrD,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAE3D,2BAA2B;gBAC3B,MAAM,KAAK,GAAG,MAAM,oBAAoB,EAAE,CAAC;gBAE3C,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,iBAAiB,CAAC,KAAK;oBAC9B,UAAU,EAAE,iBAAiB,CAAC,UAAU;oBACxC,KAAK,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,CAAC;oBAC3D,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,uBAAuB;4BAC7B,MAAM,EAAE,GAAG;4BACX,KAAK,EAAE,iBAAiB,CAAC,KAAK;4BAC9B,QAAQ,EAAE,yBAAyB,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;yBAC9E;wBACD,GAAG,iBAAiB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BAC1C,IAAI,EAAE,CAAC;4BACP,MAAM,EAAE,GAAG;4BACX,KAAK,EAAE,iBAAiB,CAAC,KAAK;4BAC9B,QAAQ,EAAE,QAAQ,CAAC,cAAc;yBAClC,CAAC,CAAC;qBACJ;oBACD,YAAY,EAAE,iBAAiB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACnE,KAAK,EAAE,CAAC,CAAC,OAAO;wBAChB,KAAK,EAAE,CAAC,CAAC,UAAU;wBACnB,MAAM,EAAE,SAAS,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;qBAClD,CAAC,CAAC;oBACH,eAAe,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC5C,QAAQ,EAAE,KAAK;oBACf,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,iBAAiB,EAAE,KAAK;oBACxB,MAAM,EAAE,UAAU,CAAC,6BAA6B;iBACjD,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,oDAAoD;gBACpD,OAAO,CAAC,IAAI,CAAC,uDAAuD,EAAE,KAAK,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;QAED,gEAAgE;QAChE,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;QAEjC,wBAAwB;QACxB,MAAM,OAAO,GAKR,EAAE,CAAC;QAER,eAAe;QACf,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QAED,iCAAiC;QACjC,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;YAEnD,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,cAAc;gBACpB,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,QAAQ,OAAO,CAAC,IAAI,YAAY,SAAS,EAAE;aACtD,CAAC,CAAC;YAEH,4CAA4C;YAC5C,MAAM,KAAK,GAAG,QAAQ,GAAG,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACnE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;wBAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;wBAC7C,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;4BAChB,OAAO,CAAC,IAAI,CAAC;gCACX,IAAI,EAAE,iBAAiB;gCACvB,MAAM,EAAE,KAAK;gCACb,KAAK;gCACL,QAAQ,EAAE,WAAW,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,GAAG,QAAQ;6BACzD,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,kCAAkC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,aAAa,GAA6B;YAC9C,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC;YAC/D,0BAA0B,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;YAChF,qBAAqB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,CAAC;YAChF,qBAAqB,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC;YAC1E,iBAAiB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC;YAC9E,oBAAoB,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC;YACnE,mBAAmB,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC;YACzE,WAAW,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;YACpE,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC;YACrE,SAAS,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC;SAC/D,CAAC;QAEF,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YAC9D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAChC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;oBAC3C,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,eAAe;wBACrB,MAAM,EAAE,GAAG;wBACX,KAAK;wBACL,QAAQ,EAAE,kBAAkB,OAAO,GAAG;qBACvC,CAAC,CAAC;oBACH,MAAM,CAAC,4BAA4B;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YAEpC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACjC,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC5C,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;oBAC9D,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;wBACrB,oCAAoC;wBACpC,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;wBACjD,IAAI,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;4BACtD,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC;4BACpC,OAAO,CAAC,IAAI,CAAC;gCACX,IAAI,EAAE,cAAc;gCACpB,MAAM,EAAE,UAAU;gCAClB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;gCACpB,QAAQ,EAAE,eAAe,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK;6BACvD,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;YAC1B,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;gBACrC,IAAI,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;oBAChD,mDAAmD;oBACnD,IAAI,SAAS,GAAG,OAAO,CAAC;oBACxB,IAAI,SAAS,GAAG,CAAC,CAAC;oBAElB,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;wBAC7D,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;4BACtB,SAAS,GAAG,KAAK,CAAC;4BAClB,SAAS,GAAG,KAAK,CAAC;wBACpB,CAAC;oBACH,CAAC;oBAED,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;wBAClB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;wBACnD,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,kBAAkB;4BACxB,MAAM,EAAE,GAAG;4BACX,KAAK,EAAE,SAAS;4BAChB,QAAQ,EAAE,kBAAkB,EAAE,CAAC,SAAS,EAAE;yBAC3C,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,IAAI,aAAa,GAAG,OAAO,CAAC;QAC5B,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,4DAA4D;QAC5D,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;YAChD,mCAAmC;YACnC,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxE,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YACxF,CAAC;iBAAM,CAAC;gBACN,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;YACtF,CAAC;YACD,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,aAAa;gBACpB,QAAQ,EAAE,iCAAiC;aAC5C,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,4BAA4B;YAC5B,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpD,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;oBACrB,QAAQ,GAAG,KAAK,CAAC;oBACjB,aAAa,GAAG,KAAK,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACpE,MAAM,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;QAEhE,mBAAmB;QACnB,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;aACxC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,aAAa,CAAC;aAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACxB,KAAK;YACL,KAAK;YACL,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc;SACjG,CAAC,CAAC,CAAC;QAEN,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAEvC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,aAAa;YACpB,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC;YACtC,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5B,YAAY;YACZ,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,gBAAgB;YACrD,SAAS,EAAE,OAAO;YAClB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;CACF,CAAC","sourcesContent":["/**\n * Route Hook - Intelligent agent selection with SONA-style routing\n * Uses learned patterns, context, and exploration/exploitation balance\n *\n * NOW WITH FULL RUVECTOR INTELLIGENCE:\n * - @ruvector/sona: Micro-LoRA (~0.05ms), trajectories\n * - @ruvector/attention: MoE attention-based ranking\n * - ruvector: HNSW indexing (150x faster search)\n */\n\nimport { z } from 'zod';\nimport * as path from 'path';\nimport type { ToolDefinition } from '../../types/index.js';\nimport {\n loadIntelligence,\n getAgentForFile,\n simpleEmbed,\n cosineSimilarity,\n agentMapping\n} from './shared.js';\nimport {\n routeTaskIntelligent,\n findSimilarPatterns,\n getIntelligenceStats\n} from './intelligence-bridge.js';\n\n// Exploration rate for epsilon-greedy selection\nconst EXPLORATION_RATE = 0.1;\n\n// Flag to use RuVector intelligence (can be toggled)\nconst USE_RUVECTOR_INTELLIGENCE = process.env.RUVECTOR_INTELLIGENCE_ENABLED !== 'false';\n\n// Available agent types\nconst availableAgents = [\n 'coder',\n 'researcher',\n 'analyst',\n 'optimizer',\n 'coordinator',\n 'typescript-developer',\n 'rust-developer',\n 'python-developer',\n 'go-developer',\n 'react-developer',\n 'test-engineer',\n 'documentation-specialist',\n 'database-specialist',\n 'devops-engineer',\n 'cicd-engineer',\n 'security-specialist',\n 'frontend-developer',\n 'backend-developer'\n];\n\nexport const hookRouteTool: ToolDefinition = {\n name: 'hook_route',\n description: 'Route task to optimal agent using learned patterns and context',\n parameters: z.object({\n task: z.string().describe('Task description'),\n context: z.object({\n file: z.string().optional(),\n recentFiles: z.array(z.string()).optional(),\n errorContext: z.string().optional()\n }).optional().describe('Optional context'),\n explore: z.boolean().optional().default(false).describe('Force exploration')\n }),\n execute: async ({ task, context, explore }, { onProgress }) => {\n const startTime = Date.now();\n\n // TRY RUVECTOR INTELLIGENCE FIRST (Micro-LoRA + HNSW + MoE)\n if (USE_RUVECTOR_INTELLIGENCE && !explore) {\n try {\n const intelligentResult = await routeTaskIntelligent(task, context);\n\n // Also check for similar patterns from ReasoningBank\n const similarPatterns = await findSimilarPatterns(task, 3);\n\n // Get stats for monitoring\n const stats = await getIntelligenceStats();\n\n return {\n success: true,\n agent: intelligentResult.agent,\n confidence: intelligentResult.confidence,\n score: intelligentResult.routingResults[0]?.confidence || 0,\n factors: [\n {\n name: 'ruvector_intelligence',\n weight: 3.0,\n agent: intelligentResult.agent,\n evidence: `SONA + MoE routing in ${intelligentResult.latencyMs.toFixed(2)}ms`\n },\n ...intelligentResult.usedFeatures.map(f => ({\n name: f,\n weight: 1.0,\n agent: intelligentResult.agent,\n evidence: `Used ${f} for routing`\n }))\n ],\n alternatives: intelligentResult.routingResults.slice(1, 4).map(r => ({\n agent: r.agentId,\n score: r.confidence,\n whyNot: `Score ${r.confidence.toFixed(2)} < best`\n })),\n similarPatterns: similarPatterns.slice(0, 2),\n explored: false,\n latencyMs: Date.now() - startTime,\n timestamp: new Date().toISOString(),\n intelligenceStats: stats,\n engine: 'ruvector' // Mark that we used RuVector\n };\n } catch (error) {\n // Fall back to simple routing if intelligence fails\n console.warn('[Route] RuVector intelligence failed, using fallback:', error);\n }\n }\n\n // FALLBACK: Simple Q-learning routing (original implementation)\n const intel = loadIntelligence();\n\n // Track scoring factors\n const factors: Array<{\n name: string;\n weight: number;\n agent: string;\n evidence: string;\n }> = [];\n\n // Agent scores\n const scores: Record<string, number> = {};\n for (const agent of availableAgents) {\n scores[agent] = 0;\n }\n\n // 1. Score based on file context\n if (context?.file) {\n const ext = path.extname(context.file);\n const fileAgent = getAgentForFile(context.file);\n scores[fileAgent] = (scores[fileAgent] || 0) + 2.0;\n\n factors.push({\n name: 'file_pattern',\n weight: 2.0,\n agent: fileAgent,\n evidence: `File ${context.file} matches ${fileAgent}`\n });\n\n // Check learned patterns for this extension\n const state = `edit:${ext}`;\n if (intel.patterns[state]) {\n for (const [agent, value] of Object.entries(intel.patterns[state])) {\n if (typeof value === 'number') {\n scores[agent] = (scores[agent] || 0) + value;\n if (value > 0.5) {\n factors.push({\n name: 'learned_pattern',\n weight: value,\n agent,\n evidence: `Q-value ${value.toFixed(2)} for ${ext} edits`\n });\n }\n }\n }\n }\n }\n\n // 2. Score based on task keywords\n const taskLower = task.toLowerCase();\n const keywordScores: Record<string, string[]> = {\n 'test-engineer': ['test', 'spec', 'coverage', 'mock', 'assert'],\n 'documentation-specialist': ['document', 'readme', 'docs', 'explain', 'comment'],\n 'security-specialist': ['security', 'auth', 'encrypt', 'vulnerability', 'owasp'],\n 'database-specialist': ['database', 'sql', 'query', 'migration', 'schema'],\n 'devops-engineer': ['docker', 'deploy', 'ci', 'cd', 'kubernetes', 'container'],\n 'frontend-developer': ['ui', 'component', 'style', 'css', 'layout'],\n 'backend-developer': ['api', 'endpoint', 'server', 'route', 'middleware'],\n 'optimizer': ['optimize', 'performance', 'speed', 'cache', 'memory'],\n 'researcher': ['research', 'find', 'search', 'explore', 'understand'],\n 'analyst': ['analyze', 'review', 'audit', 'check', 'evaluate']\n };\n\n for (const [agent, keywords] of Object.entries(keywordScores)) {\n for (const keyword of keywords) {\n if (taskLower.includes(keyword)) {\n scores[agent] = (scores[agent] || 0) + 1.5;\n factors.push({\n name: 'keyword_match',\n weight: 1.5,\n agent,\n evidence: `Task contains \"${keyword}\"`\n });\n break; // Only count once per agent\n }\n }\n }\n\n // 3. Score based on memory similarity\n if (intel.memories.length > 0) {\n const taskEmbed = simpleEmbed(task);\n\n for (const mem of intel.memories) {\n if (mem.embedding && mem.type === 'success') {\n const similarity = cosineSimilarity(taskEmbed, mem.embedding);\n if (similarity > 0.4) {\n // Extract agent from memory content\n const agentMatch = mem.content.match(/by (\\S+)/);\n if (agentMatch && scores[agentMatch[1]] !== undefined) {\n scores[agentMatch[1]] += similarity;\n factors.push({\n name: 'memory_match',\n weight: similarity,\n agent: agentMatch[1],\n evidence: `Similar to: ${mem.content.slice(0, 50)}...`\n });\n }\n }\n }\n }\n }\n\n // 4. Check for error context\n if (context?.errorContext) {\n for (const ep of intel.errorPatterns) {\n if (context.errorContext.includes(ep.errorType)) {\n // Find agent with best success rate for this error\n let bestAgent = 'coder';\n let bestScore = 0;\n\n for (const [agent, score] of Object.entries(ep.agentSuccess)) {\n if (score > bestScore) {\n bestScore = score;\n bestAgent = agent;\n }\n }\n\n if (bestScore > 0) {\n scores[bestAgent] = (scores[bestAgent] || 0) + 2.0;\n factors.push({\n name: 'error_specialist',\n weight: 2.0,\n agent: bestAgent,\n evidence: `Best at fixing ${ep.errorType}`\n });\n }\n }\n }\n }\n\n // 5. Select best agent (with exploration)\n let selectedAgent = 'coder';\n let maxScore = 0;\n\n // Epsilon-greedy: explore with probability EXPLORATION_RATE\n if (explore || Math.random() < EXPLORATION_RATE) {\n // Random selection for exploration\n const agentsWithScores = Object.keys(scores).filter(a => scores[a] > 0);\n if (agentsWithScores.length > 0) {\n selectedAgent = agentsWithScores[Math.floor(Math.random() * agentsWithScores.length)];\n } else {\n selectedAgent = availableAgents[Math.floor(Math.random() * availableAgents.length)];\n }\n factors.push({\n name: 'exploration',\n weight: 0,\n agent: selectedAgent,\n evidence: 'Random exploration for learning'\n });\n } else {\n // Exploitation: select best\n for (const [agent, score] of Object.entries(scores)) {\n if (score > maxScore) {\n maxScore = score;\n selectedAgent = agent;\n }\n }\n }\n\n // Calculate confidence\n const totalScore = Object.values(scores).reduce((a, b) => a + b, 0);\n const confidence = totalScore > 0 ? maxScore / totalScore : 0.5;\n\n // Get alternatives\n const alternatives = Object.entries(scores)\n .filter(([agent]) => agent !== selectedAgent)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 3)\n .map(([agent, score]) => ({\n agent,\n score,\n whyNot: score < maxScore ? `Score ${score.toFixed(2)} < ${maxScore.toFixed(2)}` : 'Not selected'\n }));\n\n const latency = Date.now() - startTime;\n\n return {\n success: true,\n agent: selectedAgent,\n confidence: Math.min(0.95, confidence),\n score: maxScore,\n factors: factors.slice(0, 5),\n alternatives,\n explored: explore || Math.random() < EXPLORATION_RATE,\n latencyMs: latency,\n timestamp: new Date().toISOString()\n };\n }\n};\n"]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utilities for hook tools
|
|
3
|
+
*/
|
|
4
|
+
export interface IntelligenceData {
|
|
5
|
+
patterns: Record<string, Record<string, number>>;
|
|
6
|
+
sequences: Record<string, Array<{
|
|
7
|
+
file: string;
|
|
8
|
+
score: number;
|
|
9
|
+
}>>;
|
|
10
|
+
memories: Array<{
|
|
11
|
+
content: string;
|
|
12
|
+
type: string;
|
|
13
|
+
created: string;
|
|
14
|
+
embedding?: number[];
|
|
15
|
+
}>;
|
|
16
|
+
dirPatterns: Record<string, string>;
|
|
17
|
+
errorPatterns: Array<{
|
|
18
|
+
errorType: string;
|
|
19
|
+
context: string;
|
|
20
|
+
resolution: string;
|
|
21
|
+
agentSuccess: Record<string, number>;
|
|
22
|
+
}>;
|
|
23
|
+
metrics: {
|
|
24
|
+
totalRoutes: number;
|
|
25
|
+
successfulRoutes: number;
|
|
26
|
+
routingHistory: Array<{
|
|
27
|
+
timestamp: string;
|
|
28
|
+
task: string;
|
|
29
|
+
agent: string;
|
|
30
|
+
success: boolean;
|
|
31
|
+
}>;
|
|
32
|
+
};
|
|
33
|
+
pretrained?: {
|
|
34
|
+
date: string;
|
|
35
|
+
stats: Record<string, number>;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export declare function loadIntelligence(): IntelligenceData;
|
|
39
|
+
export declare function saveIntelligence(data: IntelligenceData): void;
|
|
40
|
+
export declare const agentMapping: Record<string, string>;
|
|
41
|
+
export declare function getAgentForFile(filePath: string): string;
|
|
42
|
+
export declare function simpleEmbed(text: string): number[];
|
|
43
|
+
export declare function cosineSimilarity(a: number[], b: number[]): number;
|
|
44
|
+
export declare const dangerousPatterns: RegExp[];
|
|
45
|
+
export declare function assessCommandRisk(command: string): number;
|
|
46
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/shared.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAClE,QAAQ,EAAE,KAAK,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC,CAAC;IACH,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,aAAa,EAAE,KAAK,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACtC,CAAC,CAAC;IACH,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,KAAK,CAAC;YACpB,SAAS,EAAE,MAAM,CAAC;YAClB,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,OAAO,EAAE,OAAO,CAAC;SAClB,CAAC,CAAC;KACJ,CAAC;IACF,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC;CACH;AAiBD,wBAAgB,gBAAgB,IAAI,gBAAgB,CAWnD;AAGD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAW7D;AAGD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoB/C,CAAC;AAGF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAyBxD;AAGD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBlD;AAGD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAejE;AAGD,eAAO,MAAM,iBAAiB,UAW7B,CAAC;AAGF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAgBzD"}
|