wiggum-cli 0.3.2 → 0.4.1
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/README.md +6 -4
- package/dist/ai/agents/codebase-analyst.d.ts +3 -0
- package/dist/ai/agents/codebase-analyst.d.ts.map +1 -1
- package/dist/ai/agents/codebase-analyst.js +3 -0
- package/dist/ai/agents/codebase-analyst.js.map +1 -1
- package/dist/ai/agents/context-enricher.d.ts +11 -0
- package/dist/ai/agents/context-enricher.d.ts.map +1 -0
- package/dist/ai/agents/context-enricher.js +163 -0
- package/dist/ai/agents/context-enricher.js.map +1 -0
- package/dist/ai/agents/evaluator-optimizer.d.ts +13 -0
- package/dist/ai/agents/evaluator-optimizer.d.ts.map +1 -0
- package/dist/ai/agents/evaluator-optimizer.js +231 -0
- package/dist/ai/agents/evaluator-optimizer.js.map +1 -0
- package/dist/ai/agents/index.d.ts +21 -3
- package/dist/ai/agents/index.d.ts.map +1 -1
- package/dist/ai/agents/index.js +148 -86
- package/dist/ai/agents/index.js.map +1 -1
- package/dist/ai/agents/mcp-detector.d.ts +26 -0
- package/dist/ai/agents/mcp-detector.d.ts.map +1 -0
- package/dist/ai/agents/mcp-detector.js +186 -0
- package/dist/ai/agents/mcp-detector.js.map +1 -0
- package/dist/ai/agents/orchestrator.d.ts +3 -0
- package/dist/ai/agents/orchestrator.d.ts.map +1 -1
- package/dist/ai/agents/orchestrator.js +3 -0
- package/dist/ai/agents/orchestrator.js.map +1 -1
- package/dist/ai/agents/planning-orchestrator.d.ts +12 -0
- package/dist/ai/agents/planning-orchestrator.d.ts.map +1 -0
- package/dist/ai/agents/planning-orchestrator.js +133 -0
- package/dist/ai/agents/planning-orchestrator.js.map +1 -0
- package/dist/ai/agents/stack-researcher.d.ts +3 -0
- package/dist/ai/agents/stack-researcher.d.ts.map +1 -1
- package/dist/ai/agents/stack-researcher.js +3 -0
- package/dist/ai/agents/stack-researcher.js.map +1 -1
- package/dist/ai/agents/stack-utils.d.ts +11 -0
- package/dist/ai/agents/stack-utils.d.ts.map +1 -0
- package/dist/ai/agents/stack-utils.js +27 -0
- package/dist/ai/agents/stack-utils.js.map +1 -0
- package/dist/ai/agents/synthesis-agent.d.ts +11 -0
- package/dist/ai/agents/synthesis-agent.d.ts.map +1 -0
- package/dist/ai/agents/synthesis-agent.js +202 -0
- package/dist/ai/agents/synthesis-agent.js.map +1 -0
- package/dist/ai/agents/tech-researcher.d.ts +16 -0
- package/dist/ai/agents/tech-researcher.d.ts.map +1 -0
- package/dist/ai/agents/tech-researcher.js +208 -0
- package/dist/ai/agents/tech-researcher.js.map +1 -0
- package/dist/ai/agents/types.d.ts +127 -0
- package/dist/ai/agents/types.d.ts.map +1 -1
- package/dist/ai/agents/types.js +6 -0
- package/dist/ai/agents/types.js.map +1 -1
- package/dist/ai/enhancer.d.ts +4 -0
- package/dist/ai/enhancer.d.ts.map +1 -1
- package/dist/ai/enhancer.js +3 -0
- package/dist/ai/enhancer.js.map +1 -1
- package/dist/ai/index.d.ts +1 -1
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +14 -2
- package/dist/ai/index.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +20 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/utils/tracing.d.ts +5 -0
- package/dist/utils/tracing.d.ts.map +1 -1
- package/dist/utils/tracing.js +40 -1
- package/dist/utils/tracing.js.map +1 -1
- package/package.json +5 -2
- package/src/ai/agents/codebase-analyst.ts +3 -0
- package/src/ai/agents/context-enricher.ts +189 -0
- package/src/ai/agents/evaluator-optimizer.ts +277 -0
- package/src/ai/agents/index.ts +198 -111
- package/src/ai/agents/mcp-detector.test.ts +290 -0
- package/src/ai/agents/mcp-detector.ts +210 -0
- package/src/ai/agents/orchestrator.ts +3 -0
- package/src/ai/agents/planning-orchestrator.ts +140 -0
- package/src/ai/agents/stack-researcher.ts +3 -0
- package/src/ai/agents/stack-utils.ts +34 -0
- package/src/ai/agents/synthesis-agent.ts +240 -0
- package/src/ai/agents/tech-researcher.ts +262 -0
- package/src/ai/agents/types.ts +160 -0
- package/src/ai/enhancer.ts +6 -1
- package/src/ai/index.ts +26 -5
- package/src/commands/init.ts +20 -4
- package/src/utils/tracing.ts +44 -1
- package/tsconfig.json +1 -1
- package/vitest.config.ts +7 -0
package/dist/ai/agents/index.js
CHANGED
|
@@ -1,121 +1,183 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Agents Index
|
|
3
|
-
*
|
|
3
|
+
* Multi-agent analysis with Orchestrator-Worker + Evaluator-Optimizer pattern
|
|
4
|
+
*
|
|
5
|
+
* Architecture:
|
|
6
|
+
* Phase 1: Planning Orchestrator (creates analysis plan)
|
|
7
|
+
* Phase 2: Parallel Workers (context enricher + tech researchers)
|
|
8
|
+
* Phase 3: Synthesis (merge results + MCP detection)
|
|
9
|
+
* Phase 4: Evaluator-Optimizer (QA loop)
|
|
4
10
|
*/
|
|
5
|
-
//
|
|
11
|
+
// New architecture exports
|
|
12
|
+
export { runPlanningOrchestrator } from './planning-orchestrator.js';
|
|
13
|
+
export { runContextEnricher } from './context-enricher.js';
|
|
14
|
+
export { runTechResearcher, runTechResearchPool } from './tech-researcher.js';
|
|
15
|
+
export { detectRalphMcpServers, convertToLegacyMcpRecommendations } from './mcp-detector.js';
|
|
16
|
+
export { runSynthesisAgent } from './synthesis-agent.js';
|
|
17
|
+
export { runEvaluatorOptimizer } from './evaluator-optimizer.js';
|
|
18
|
+
export { detectProjectType } from './stack-utils.js';
|
|
19
|
+
// Legacy exports (for backward compatibility during migration)
|
|
6
20
|
export { runCodebaseAnalyst } from './codebase-analyst.js';
|
|
7
21
|
export { runStackResearcher } from './stack-researcher.js';
|
|
8
22
|
export { runOrchestrator, mergeAgentResults } from './orchestrator.js';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
23
|
+
import { runPlanningOrchestrator } from './planning-orchestrator.js';
|
|
24
|
+
import { runContextEnricher } from './context-enricher.js';
|
|
25
|
+
import { runTechResearchPool } from './tech-researcher.js';
|
|
26
|
+
import { detectRalphMcpServers } from './mcp-detector.js';
|
|
27
|
+
import { runSynthesisAgent } from './synthesis-agent.js';
|
|
28
|
+
import { runEvaluatorOptimizer } from './evaluator-optimizer.js';
|
|
29
|
+
import { detectProjectType } from './stack-utils.js';
|
|
12
30
|
import { logger } from '../../utils/logger.js';
|
|
13
31
|
/**
|
|
14
|
-
* Run the full multi-agent analysis pipeline
|
|
32
|
+
* Run the full multi-agent analysis pipeline (new architecture)
|
|
33
|
+
*
|
|
34
|
+
* Phase 1: Planning Orchestrator - Creates focused analysis plan
|
|
35
|
+
* Phase 2: Parallel Workers - Context enricher + tech researchers run concurrently
|
|
36
|
+
* Phase 3: Synthesis - Merges results + detects MCPs
|
|
37
|
+
* Phase 4: Evaluator-Optimizer - QA loop (max 2 iterations)
|
|
15
38
|
*/
|
|
16
39
|
export async function runMultiAgentAnalysis(model, modelId, scanResult, options = {}) {
|
|
17
|
-
const { tavilyApiKey, context7ApiKey, verbose = false } = options;
|
|
40
|
+
const { tavilyApiKey, context7ApiKey, verbose = false, onProgress } = options;
|
|
41
|
+
// Helper to report progress (uses callback or falls back to logger)
|
|
42
|
+
const report = (phase, detail) => {
|
|
43
|
+
if (onProgress) {
|
|
44
|
+
onProgress(phase, detail);
|
|
45
|
+
}
|
|
46
|
+
else if (verbose) {
|
|
47
|
+
logger.info(detail ? `${phase}: ${detail}` : phase);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
18
50
|
// Determine capabilities
|
|
19
51
|
const capabilities = {
|
|
20
52
|
hasTavily: !!tavilyApiKey,
|
|
21
53
|
hasContext7: !!context7ApiKey,
|
|
22
54
|
};
|
|
23
|
-
if (verbose) {
|
|
24
|
-
logger.info('Starting multi-agent analysis...');
|
|
55
|
+
if (verbose && !onProgress) {
|
|
56
|
+
logger.info('Starting multi-agent analysis (4-phase architecture)...');
|
|
25
57
|
logger.info(`Capabilities: Tavily=${capabilities.hasTavily}, Context7=${capabilities.hasContext7}`);
|
|
26
58
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
scanResult,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
59
|
+
try {
|
|
60
|
+
// ═══════════════════════════════════════════════════════════════
|
|
61
|
+
// PHASE 1: Planning Orchestrator
|
|
62
|
+
// ═══════════════════════════════════════════════════════════════
|
|
63
|
+
report('Phase 1/4: Planning');
|
|
64
|
+
const plan = await runPlanningOrchestrator(model, modelId, scanResult, verbose && !onProgress);
|
|
65
|
+
report('Phase 1/4: Planning', `${plan.areasToExplore.length} areas, ${plan.technologiesToResearch.length} technologies`);
|
|
66
|
+
// ═══════════════════════════════════════════════════════════════
|
|
67
|
+
// PHASE 2: Parallel Workers
|
|
68
|
+
// ═══════════════════════════════════════════════════════════════
|
|
69
|
+
const workerCount = plan.technologiesToResearch.length + 1; // tech researchers + context enricher
|
|
70
|
+
report('Phase 2/4: Analyzing', `${workerCount} parallel workers`);
|
|
71
|
+
// Run context enricher and tech researchers in parallel with error recovery
|
|
72
|
+
const [contextResult, researchResult] = await Promise.allSettled([
|
|
73
|
+
runContextEnricher(model, modelId, {
|
|
74
|
+
scanResult,
|
|
75
|
+
areasToExplore: plan.areasToExplore,
|
|
76
|
+
questionsToAnswer: plan.questionsToAnswer,
|
|
77
|
+
}, verbose && !onProgress),
|
|
78
|
+
runTechResearchPool(model, modelId, plan.technologiesToResearch, { tavilyApiKey, context7ApiKey }, verbose && !onProgress),
|
|
79
|
+
]);
|
|
80
|
+
// Extract results with fallbacks for failed workers
|
|
81
|
+
const enrichedContext = contextResult.status === 'fulfilled'
|
|
82
|
+
? contextResult.value
|
|
83
|
+
: getDefaultEnrichedContext(scanResult);
|
|
84
|
+
const techResearch = researchResult.status === 'fulfilled'
|
|
85
|
+
? researchResult.value
|
|
86
|
+
: [];
|
|
87
|
+
// Log any worker failures
|
|
88
|
+
if (contextResult.status === 'rejected') {
|
|
89
|
+
logger.warn(`Context Enricher failed: ${contextResult.reason instanceof Error ? contextResult.reason.message : String(contextResult.reason)}`);
|
|
38
90
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
// Run Stack Researcher
|
|
43
|
-
if (verbose) {
|
|
44
|
-
logger.info('Running Stack Researcher...');
|
|
45
|
-
}
|
|
46
|
-
const stackResearch = await runStackResearcher(model, modelId, {
|
|
47
|
-
stack: scanResult.stack,
|
|
48
|
-
projectType: codebaseAnalysis.projectContext.projectType,
|
|
49
|
-
capabilities,
|
|
50
|
-
}, { tavilyApiKey, context7ApiKey }, verbose);
|
|
51
|
-
if (!stackResearch) {
|
|
52
|
-
if (verbose) {
|
|
53
|
-
logger.warn('Stack Researcher failed, using defaults');
|
|
91
|
+
if (researchResult.status === 'rejected') {
|
|
92
|
+
logger.warn(`Tech Research Pool failed: ${researchResult.reason instanceof Error ? researchResult.reason.message : String(researchResult.reason)}`);
|
|
54
93
|
}
|
|
55
|
-
|
|
94
|
+
report('Phase 2/4: Analyzing', 'complete');
|
|
95
|
+
// ═══════════════════════════════════════════════════════════════
|
|
96
|
+
// PHASE 3: Synthesis + MCP Detection
|
|
97
|
+
// ═══════════════════════════════════════════════════════════════
|
|
98
|
+
report('Phase 3/4: Synthesizing');
|
|
99
|
+
// Detect MCPs (pure function, no LLM)
|
|
100
|
+
const mcpServers = detectRalphMcpServers(scanResult.stack);
|
|
101
|
+
// Run synthesis agent
|
|
102
|
+
const synthesizedResult = await runSynthesisAgent(model, modelId, {
|
|
103
|
+
enrichedContext,
|
|
104
|
+
techResearch,
|
|
105
|
+
mcpServers,
|
|
106
|
+
plan,
|
|
107
|
+
stack: scanResult.stack,
|
|
108
|
+
}, verbose && !onProgress);
|
|
109
|
+
report('Phase 3/4: Synthesizing', 'complete');
|
|
110
|
+
// ═══════════════════════════════════════════════════════════════
|
|
111
|
+
// PHASE 4: Evaluator-Optimizer QA Loop
|
|
112
|
+
// ═══════════════════════════════════════════════════════════════
|
|
113
|
+
report('Phase 4/4: Quality check');
|
|
114
|
+
const finalResult = await runEvaluatorOptimizer(model, modelId, synthesizedResult, scanResult, 2, // Max 2 iterations
|
|
115
|
+
verbose && !onProgress);
|
|
116
|
+
report('Phase 4/4: Quality check', 'complete');
|
|
117
|
+
return finalResult;
|
|
56
118
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
119
|
+
catch (error) {
|
|
120
|
+
logger.error(`Multi-agent analysis failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
121
|
+
// Fall back to default result
|
|
122
|
+
return getDefaultMultiAgentAnalysis(scanResult);
|
|
60
123
|
}
|
|
61
|
-
const mcpServers = await runOrchestrator(model, modelId, {
|
|
62
|
-
codebaseAnalysis,
|
|
63
|
-
stackResearch: stackResearch || getDefaultStackResearch(),
|
|
64
|
-
stack: scanResult.stack,
|
|
65
|
-
}, verbose);
|
|
66
|
-
// Merge all results
|
|
67
|
-
const finalResult = mergeAgentResults(codebaseAnalysis, stackResearch || getDefaultStackResearch(), mcpServers);
|
|
68
|
-
if (verbose) {
|
|
69
|
-
logger.info('Multi-agent analysis complete');
|
|
70
|
-
}
|
|
71
|
-
return finalResult;
|
|
72
124
|
}
|
|
73
125
|
/**
|
|
74
|
-
* Get default
|
|
126
|
+
* Get default analysis result when pipeline fails
|
|
75
127
|
*/
|
|
76
|
-
function
|
|
77
|
-
|
|
78
|
-
let projectType = 'Unknown';
|
|
79
|
-
if (scanResult.stack.mcp?.isProject) {
|
|
80
|
-
projectType = 'MCP Server';
|
|
81
|
-
}
|
|
82
|
-
else if (scanResult.stack.framework?.name.includes('Next')) {
|
|
83
|
-
projectType = 'Next.js App';
|
|
84
|
-
}
|
|
85
|
-
else if (scanResult.stack.framework?.name.includes('React')) {
|
|
86
|
-
projectType = 'React SPA';
|
|
87
|
-
}
|
|
88
|
-
else if (scanResult.stack.framework?.name) {
|
|
89
|
-
projectType = `${scanResult.stack.framework.name} Project`;
|
|
90
|
-
}
|
|
128
|
+
function getDefaultMultiAgentAnalysis(scanResult) {
|
|
129
|
+
const projectType = detectProjectType(scanResult.stack);
|
|
91
130
|
return {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
131
|
+
codebaseAnalysis: {
|
|
132
|
+
projectContext: {
|
|
133
|
+
entryPoints: ['src/index.ts'],
|
|
134
|
+
keyDirectories: { src: 'Source code' },
|
|
135
|
+
namingConventions: 'camelCase',
|
|
136
|
+
projectType,
|
|
137
|
+
},
|
|
138
|
+
commands: {
|
|
139
|
+
test: 'npm test',
|
|
140
|
+
lint: 'npm run lint',
|
|
141
|
+
build: 'npm run build',
|
|
142
|
+
dev: 'npm run dev',
|
|
143
|
+
},
|
|
144
|
+
implementationGuidelines: [
|
|
145
|
+
'Follow existing patterns',
|
|
146
|
+
'Run tests after changes',
|
|
147
|
+
'Use TypeScript strict mode',
|
|
148
|
+
],
|
|
149
|
+
possibleMissedTechnologies: [],
|
|
97
150
|
},
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
151
|
+
stackResearch: {
|
|
152
|
+
bestPractices: ['Follow project conventions'],
|
|
153
|
+
antiPatterns: ['Avoid skipping tests'],
|
|
154
|
+
testingTools: ['npm test'],
|
|
155
|
+
debuggingTools: ['console.log'],
|
|
156
|
+
documentationHints: ['Check official docs'],
|
|
157
|
+
researchMode: 'knowledge-only',
|
|
158
|
+
},
|
|
159
|
+
mcpServers: {
|
|
160
|
+
essential: ['filesystem', 'git', 'playwright'],
|
|
161
|
+
recommended: [],
|
|
103
162
|
},
|
|
104
|
-
implementationGuidelines: ['Follow existing patterns', 'Run tests after changes'],
|
|
105
|
-
possibleMissedTechnologies: [],
|
|
106
163
|
};
|
|
107
164
|
}
|
|
108
165
|
/**
|
|
109
|
-
* Get default
|
|
166
|
+
* Get default enriched context when Context Enricher fails
|
|
110
167
|
*/
|
|
111
|
-
function
|
|
168
|
+
function getDefaultEnrichedContext(scanResult) {
|
|
169
|
+
const projectType = detectProjectType(scanResult.stack);
|
|
112
170
|
return {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
171
|
+
entryPoints: ['src/index.ts'],
|
|
172
|
+
keyDirectories: { src: 'Source code' },
|
|
173
|
+
namingConventions: 'camelCase',
|
|
174
|
+
commands: {
|
|
175
|
+
test: 'npm test',
|
|
176
|
+
build: 'npm run build',
|
|
177
|
+
dev: 'npm run dev',
|
|
178
|
+
},
|
|
179
|
+
answeredQuestions: {},
|
|
180
|
+
projectType,
|
|
119
181
|
};
|
|
120
182
|
}
|
|
121
183
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ai/agents/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ai/agents/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Detector (Phase 3 helper)
|
|
3
|
+
* Detects ralph-essential MCP servers based on the detected stack
|
|
4
|
+
*
|
|
5
|
+
* This is a pure function (no LLM) - uses rule-based detection for efficiency
|
|
6
|
+
*/
|
|
7
|
+
import type { DetectedStack } from '../../scanner/types.js';
|
|
8
|
+
import type { RalphMcpServers } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Detect ralph-essential MCP servers from the stack
|
|
11
|
+
*
|
|
12
|
+
* Ralph loop essentials:
|
|
13
|
+
* - Playwright: Always recommended for E2E testing
|
|
14
|
+
* - Database MCP: If database is detected
|
|
15
|
+
* - Additional MCPs based on services and deployment
|
|
16
|
+
*/
|
|
17
|
+
export declare function detectRalphMcpServers(stack: DetectedStack): RalphMcpServers;
|
|
18
|
+
/**
|
|
19
|
+
* Convert RalphMcpServers to the legacy McpRecommendations format
|
|
20
|
+
* for backward compatibility with existing code
|
|
21
|
+
*/
|
|
22
|
+
export declare function convertToLegacyMcpRecommendations(ralphMcp: RalphMcpServers): {
|
|
23
|
+
essential: string[];
|
|
24
|
+
recommended: string[];
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=mcp-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-detector.d.ts","sourceRoot":"","sources":["../../../src/ai/agents/mcp-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAwDlD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,eAAe,CAsG3E;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,eAAe,GAAG;IAC5E,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAiBA"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Detector (Phase 3 helper)
|
|
3
|
+
* Detects ralph-essential MCP servers based on the detected stack
|
|
4
|
+
*
|
|
5
|
+
* This is a pure function (no LLM) - uses rule-based detection for efficiency
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Database name to MCP server mapping
|
|
9
|
+
*/
|
|
10
|
+
const DATABASE_MCP_MAP = {
|
|
11
|
+
supabase: 'supabase',
|
|
12
|
+
convex: 'convex',
|
|
13
|
+
postgres: 'postgres',
|
|
14
|
+
postgresql: 'postgres',
|
|
15
|
+
sqlite: 'sqlite',
|
|
16
|
+
firebase: 'firebase',
|
|
17
|
+
firestore: 'firebase',
|
|
18
|
+
mongodb: 'mongodb',
|
|
19
|
+
mysql: 'mysql',
|
|
20
|
+
redis: 'redis',
|
|
21
|
+
planetscale: 'planetscale',
|
|
22
|
+
neon: 'postgres', // Neon is PostgreSQL-compatible
|
|
23
|
+
turso: 'sqlite', // Turso is SQLite-compatible
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Framework-specific MCP recommendations
|
|
27
|
+
*/
|
|
28
|
+
const FRAMEWORK_MCP_MAP = {
|
|
29
|
+
'next.js': ['vercel'],
|
|
30
|
+
'nextjs': ['vercel'],
|
|
31
|
+
'vercel': ['vercel'],
|
|
32
|
+
'remix': [],
|
|
33
|
+
'astro': [],
|
|
34
|
+
'nuxt': [],
|
|
35
|
+
'sveltekit': [],
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Service-specific MCP recommendations
|
|
39
|
+
*/
|
|
40
|
+
const SERVICE_MCP_MAP = {
|
|
41
|
+
stripe: 'stripe',
|
|
42
|
+
clerk: 'clerk',
|
|
43
|
+
auth0: 'auth0',
|
|
44
|
+
github: 'github',
|
|
45
|
+
gitlab: 'gitlab',
|
|
46
|
+
aws: 'aws',
|
|
47
|
+
gcp: 'gcp',
|
|
48
|
+
azure: 'azure',
|
|
49
|
+
docker: 'docker',
|
|
50
|
+
kubernetes: 'kubernetes',
|
|
51
|
+
k8s: 'kubernetes',
|
|
52
|
+
posthog: 'posthog',
|
|
53
|
+
sentry: 'sentry',
|
|
54
|
+
resend: 'resend',
|
|
55
|
+
sendgrid: 'sendgrid',
|
|
56
|
+
twilio: 'twilio',
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Detect ralph-essential MCP servers from the stack
|
|
60
|
+
*
|
|
61
|
+
* Ralph loop essentials:
|
|
62
|
+
* - Playwright: Always recommended for E2E testing
|
|
63
|
+
* - Database MCP: If database is detected
|
|
64
|
+
* - Additional MCPs based on services and deployment
|
|
65
|
+
*/
|
|
66
|
+
export function detectRalphMcpServers(stack) {
|
|
67
|
+
const result = {
|
|
68
|
+
e2eTesting: 'playwright', // Always recommend Playwright for ralph loop
|
|
69
|
+
additional: [],
|
|
70
|
+
};
|
|
71
|
+
// Detect database MCP
|
|
72
|
+
if (stack.database) {
|
|
73
|
+
const dbName = stack.database.name.toLowerCase();
|
|
74
|
+
// Check direct mapping
|
|
75
|
+
for (const [key, mcp] of Object.entries(DATABASE_MCP_MAP)) {
|
|
76
|
+
if (dbName.includes(key)) {
|
|
77
|
+
result.database = mcp;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Check ORM for database hints
|
|
83
|
+
if (!result.database && stack.orm) {
|
|
84
|
+
const ormName = stack.orm.name.toLowerCase();
|
|
85
|
+
if (ormName.includes('prisma') || ormName.includes('drizzle')) {
|
|
86
|
+
// These ORMs often use PostgreSQL by default
|
|
87
|
+
// But we don't set a default - let it be detected from actual DB config
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Detect framework-specific MCPs
|
|
91
|
+
if (stack.framework) {
|
|
92
|
+
const frameworkName = stack.framework.name.toLowerCase();
|
|
93
|
+
for (const [key, mcps] of Object.entries(FRAMEWORK_MCP_MAP)) {
|
|
94
|
+
if (frameworkName.includes(key)) {
|
|
95
|
+
result.additional.push(...mcps);
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Detect deployment MCPs
|
|
101
|
+
if (stack.deployment) {
|
|
102
|
+
for (const deploy of stack.deployment) {
|
|
103
|
+
const deployName = deploy.name.toLowerCase();
|
|
104
|
+
if (deployName.includes('docker')) {
|
|
105
|
+
addIfNotExists(result.additional, 'docker');
|
|
106
|
+
}
|
|
107
|
+
if (deployName.includes('vercel')) {
|
|
108
|
+
addIfNotExists(result.additional, 'vercel');
|
|
109
|
+
}
|
|
110
|
+
if (deployName.includes('railway')) {
|
|
111
|
+
addIfNotExists(result.additional, 'railway');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Detect auth provider MCPs
|
|
116
|
+
if (stack.auth) {
|
|
117
|
+
const authName = stack.auth.name.toLowerCase();
|
|
118
|
+
for (const [key, mcp] of Object.entries(SERVICE_MCP_MAP)) {
|
|
119
|
+
if (authName.includes(key)) {
|
|
120
|
+
addIfNotExists(result.additional, mcp);
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Detect analytics MCPs
|
|
126
|
+
if (stack.analytics) {
|
|
127
|
+
for (const analytics of stack.analytics) {
|
|
128
|
+
const analyticsName = analytics.name.toLowerCase();
|
|
129
|
+
for (const [key, mcp] of Object.entries(SERVICE_MCP_MAP)) {
|
|
130
|
+
if (analyticsName.includes(key)) {
|
|
131
|
+
addIfNotExists(result.additional, mcp);
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Detect payment MCPs
|
|
138
|
+
if (stack.payments) {
|
|
139
|
+
const paymentName = stack.payments.name.toLowerCase();
|
|
140
|
+
for (const [key, mcp] of Object.entries(SERVICE_MCP_MAP)) {
|
|
141
|
+
if (paymentName.includes(key)) {
|
|
142
|
+
addIfNotExists(result.additional, mcp);
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Add any MCP recommendations from scanner
|
|
148
|
+
if (stack.mcp?.recommended) {
|
|
149
|
+
for (const rec of stack.mcp.recommended) {
|
|
150
|
+
const normalizedRec = rec.toLowerCase();
|
|
151
|
+
// Skip if it's the database or playwright (already handled)
|
|
152
|
+
if (normalizedRec !== result.database && normalizedRec !== 'playwright') {
|
|
153
|
+
addIfNotExists(result.additional, rec);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Convert RalphMcpServers to the legacy McpRecommendations format
|
|
161
|
+
* for backward compatibility with existing code
|
|
162
|
+
*/
|
|
163
|
+
export function convertToLegacyMcpRecommendations(ralphMcp) {
|
|
164
|
+
const essential = ['filesystem', 'git'];
|
|
165
|
+
// Add E2E testing as essential for ralph
|
|
166
|
+
if (ralphMcp.e2eTesting) {
|
|
167
|
+
essential.push(ralphMcp.e2eTesting);
|
|
168
|
+
}
|
|
169
|
+
// Add database as essential if detected
|
|
170
|
+
if (ralphMcp.database) {
|
|
171
|
+
essential.push(ralphMcp.database);
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
essential,
|
|
175
|
+
recommended: ralphMcp.additional,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Helper to add item to array if not already present
|
|
180
|
+
*/
|
|
181
|
+
function addIfNotExists(arr, item) {
|
|
182
|
+
if (!arr.includes(item)) {
|
|
183
|
+
arr.push(item);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=mcp-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-detector.js","sourceRoot":"","sources":["../../../src/ai/agents/mcp-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Orchestrator Agent
|
|
3
3
|
* Coordinates the multi-agent analysis and merges results
|
|
4
|
+
*
|
|
5
|
+
* @deprecated Use runPlanningOrchestrator + runSynthesisAgent instead.
|
|
6
|
+
* This agent is kept for backward compatibility.
|
|
4
7
|
*/
|
|
5
8
|
import type { LanguageModel } from 'ai';
|
|
6
9
|
import type { CodebaseAnalysis, StackResearch, MultiAgentAnalysis, McpRecommendations, OrchestratorInput } from './types.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/ai/agents/orchestrator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/ai/agents/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AA+CpB;;GAEG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,iBAAiB,EACxB,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,kBAAkB,CAAC,CA2B7B;AA8GD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,kBAAkB,GAC7B,kBAAkB,CAMpB"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Orchestrator Agent
|
|
3
3
|
* Coordinates the multi-agent analysis and merges results
|
|
4
|
+
*
|
|
5
|
+
* @deprecated Use runPlanningOrchestrator + runSynthesisAgent instead.
|
|
6
|
+
* This agent is kept for backward compatibility.
|
|
4
7
|
*/
|
|
5
8
|
import { isReasoningModel } from '../providers.js';
|
|
6
9
|
import { logger } from '../../utils/logger.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/ai/agents/orchestrator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/ai/agents/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Planning Orchestrator Agent (Phase 1)
|
|
3
|
+
* Creates an analysis plan that guides the parallel workers
|
|
4
|
+
*/
|
|
5
|
+
import { type LanguageModel } from 'ai';
|
|
6
|
+
import type { ScanResult } from '../../scanner/types.js';
|
|
7
|
+
import type { AnalysisPlan } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Run the Planning Orchestrator to create an analysis plan
|
|
10
|
+
*/
|
|
11
|
+
export declare function runPlanningOrchestrator(model: LanguageModel, modelId: string, scanResult: ScanResult, verbose?: boolean): Promise<AnalysisPlan>;
|
|
12
|
+
//# sourceMappingURL=planning-orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planning-orchestrator.d.ts","sourceRoot":"","sources":["../../../src/ai/agents/planning-orchestrator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAwC/C;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,YAAY,CAAC,CA2DvB"}
|