wiggum-cli 0.3.1 → 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.
- 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 +158 -53
- 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 +121 -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/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 +9 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/utils/json-repair.d.ts.map +1 -1
- package/dist/utils/json-repair.js +43 -0
- package/dist/utils/json-repair.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 +205 -77
- 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 +153 -0
- package/src/ai/index.ts +26 -5
- package/src/commands/init.ts +10 -2
- package/src/utils/json-repair.ts +50 -0
- 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,17 +1,40 @@
|
|
|
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
40
|
const { tavilyApiKey, context7ApiKey, verbose = false } = options;
|
|
@@ -21,65 +44,147 @@ export async function runMultiAgentAnalysis(model, modelId, scanResult, options
|
|
|
21
44
|
hasContext7: !!context7ApiKey,
|
|
22
45
|
};
|
|
23
46
|
if (verbose) {
|
|
24
|
-
logger.info('Starting multi-agent analysis...');
|
|
47
|
+
logger.info('Starting multi-agent analysis (4-phase architecture)...');
|
|
25
48
|
logger.info(`Capabilities: Tavily=${capabilities.hasTavily}, Context7=${capabilities.hasContext7}`);
|
|
26
49
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const codebaseAnalysis = await runCodebaseAnalyst(model, modelId, {
|
|
32
|
-
scanResult,
|
|
33
|
-
projectRoot: scanResult.projectRoot,
|
|
34
|
-
}, verbose);
|
|
35
|
-
if (!codebaseAnalysis) {
|
|
50
|
+
try {
|
|
51
|
+
// ═══════════════════════════════════════════════════════════════
|
|
52
|
+
// PHASE 1: Planning Orchestrator
|
|
53
|
+
// ═══════════════════════════════════════════════════════════════
|
|
36
54
|
if (verbose) {
|
|
37
|
-
logger.
|
|
55
|
+
logger.info('Phase 1: Creating analysis plan...');
|
|
38
56
|
}
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
// Run Stack Researcher
|
|
42
|
-
if (verbose) {
|
|
43
|
-
logger.info('Running Stack Researcher...');
|
|
44
|
-
}
|
|
45
|
-
const stackResearch = await runStackResearcher(model, modelId, {
|
|
46
|
-
stack: scanResult.stack,
|
|
47
|
-
projectType: codebaseAnalysis.projectContext.projectType,
|
|
48
|
-
capabilities,
|
|
49
|
-
}, { tavilyApiKey, context7ApiKey }, verbose);
|
|
50
|
-
if (!stackResearch) {
|
|
57
|
+
const plan = await runPlanningOrchestrator(model, modelId, scanResult, verbose);
|
|
51
58
|
if (verbose) {
|
|
52
|
-
logger.
|
|
59
|
+
logger.info(`Plan: ${plan.areasToExplore.length} areas, ${plan.technologiesToResearch.length} techs, complexity=${plan.estimatedComplexity}`);
|
|
53
60
|
}
|
|
54
|
-
//
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
61
|
+
// ═══════════════════════════════════════════════════════════════
|
|
62
|
+
// PHASE 2: Parallel Workers
|
|
63
|
+
// ═══════════════════════════════════════════════════════════════
|
|
64
|
+
if (verbose) {
|
|
65
|
+
logger.info('Phase 2: Running parallel workers...');
|
|
66
|
+
}
|
|
67
|
+
// Run context enricher and tech researchers in parallel with error recovery
|
|
68
|
+
const [contextResult, researchResult] = await Promise.allSettled([
|
|
69
|
+
runContextEnricher(model, modelId, {
|
|
70
|
+
scanResult,
|
|
71
|
+
areasToExplore: plan.areasToExplore,
|
|
72
|
+
questionsToAnswer: plan.questionsToAnswer,
|
|
73
|
+
}, verbose),
|
|
74
|
+
runTechResearchPool(model, modelId, plan.technologiesToResearch, { tavilyApiKey, context7ApiKey }, verbose),
|
|
75
|
+
]);
|
|
76
|
+
// Extract results with fallbacks for failed workers
|
|
77
|
+
const enrichedContext = contextResult.status === 'fulfilled'
|
|
78
|
+
? contextResult.value
|
|
79
|
+
: getDefaultEnrichedContext(scanResult);
|
|
80
|
+
const techResearch = researchResult.status === 'fulfilled'
|
|
81
|
+
? researchResult.value
|
|
82
|
+
: [];
|
|
83
|
+
// Log any worker failures
|
|
84
|
+
if (contextResult.status === 'rejected') {
|
|
85
|
+
logger.warn(`Context Enricher failed: ${contextResult.reason instanceof Error ? contextResult.reason.message : String(contextResult.reason)}`);
|
|
86
|
+
}
|
|
87
|
+
if (researchResult.status === 'rejected') {
|
|
88
|
+
logger.warn(`Tech Research Pool failed: ${researchResult.reason instanceof Error ? researchResult.reason.message : String(researchResult.reason)}`);
|
|
89
|
+
}
|
|
90
|
+
if (verbose) {
|
|
91
|
+
logger.info(`Context: ${enrichedContext.entryPoints.length} entry points, type=${enrichedContext.projectType}`);
|
|
92
|
+
logger.info(`Research: ${techResearch.length} technologies researched`);
|
|
93
|
+
}
|
|
94
|
+
// ═══════════════════════════════════════════════════════════════
|
|
95
|
+
// PHASE 3: Synthesis + MCP Detection
|
|
96
|
+
// ═══════════════════════════════════════════════════════════════
|
|
97
|
+
if (verbose) {
|
|
98
|
+
logger.info('Phase 3: Synthesizing results...');
|
|
99
|
+
}
|
|
100
|
+
// Detect MCPs (pure function, no LLM)
|
|
101
|
+
const mcpServers = detectRalphMcpServers(scanResult.stack);
|
|
102
|
+
if (verbose) {
|
|
103
|
+
logger.info(`MCPs: e2e=${mcpServers.e2eTesting}, db=${mcpServers.database || 'none'}, additional=${mcpServers.additional.length}`);
|
|
104
|
+
}
|
|
105
|
+
// Run synthesis agent
|
|
106
|
+
const synthesizedResult = await runSynthesisAgent(model, modelId, {
|
|
107
|
+
enrichedContext,
|
|
108
|
+
techResearch,
|
|
109
|
+
mcpServers,
|
|
110
|
+
plan,
|
|
111
|
+
stack: scanResult.stack,
|
|
112
|
+
}, verbose);
|
|
113
|
+
// ═══════════════════════════════════════════════════════════════
|
|
114
|
+
// PHASE 4: Evaluator-Optimizer QA Loop
|
|
115
|
+
// ═══════════════════════════════════════════════════════════════
|
|
116
|
+
if (verbose) {
|
|
117
|
+
logger.info('Phase 4: Running QA evaluation...');
|
|
118
|
+
}
|
|
119
|
+
const finalResult = await runEvaluatorOptimizer(model, modelId, synthesizedResult, scanResult, 2, // Max 2 iterations
|
|
120
|
+
verbose);
|
|
121
|
+
if (verbose) {
|
|
122
|
+
logger.info('Multi-agent analysis complete (4-phase architecture)');
|
|
123
|
+
}
|
|
124
|
+
return finalResult;
|
|
59
125
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}, verbose);
|
|
65
|
-
// Merge all results
|
|
66
|
-
const finalResult = mergeAgentResults(codebaseAnalysis, stackResearch || getDefaultStackResearch(), mcpServers);
|
|
67
|
-
if (verbose) {
|
|
68
|
-
logger.info('Multi-agent analysis complete');
|
|
126
|
+
catch (error) {
|
|
127
|
+
logger.error(`Multi-agent analysis failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
128
|
+
// Fall back to default result
|
|
129
|
+
return getDefaultMultiAgentAnalysis(scanResult);
|
|
69
130
|
}
|
|
70
|
-
return finalResult;
|
|
71
131
|
}
|
|
72
132
|
/**
|
|
73
|
-
* Get default
|
|
133
|
+
* Get default analysis result when pipeline fails
|
|
134
|
+
*/
|
|
135
|
+
function getDefaultMultiAgentAnalysis(scanResult) {
|
|
136
|
+
const projectType = detectProjectType(scanResult.stack);
|
|
137
|
+
return {
|
|
138
|
+
codebaseAnalysis: {
|
|
139
|
+
projectContext: {
|
|
140
|
+
entryPoints: ['src/index.ts'],
|
|
141
|
+
keyDirectories: { src: 'Source code' },
|
|
142
|
+
namingConventions: 'camelCase',
|
|
143
|
+
projectType,
|
|
144
|
+
},
|
|
145
|
+
commands: {
|
|
146
|
+
test: 'npm test',
|
|
147
|
+
lint: 'npm run lint',
|
|
148
|
+
build: 'npm run build',
|
|
149
|
+
dev: 'npm run dev',
|
|
150
|
+
},
|
|
151
|
+
implementationGuidelines: [
|
|
152
|
+
'Follow existing patterns',
|
|
153
|
+
'Run tests after changes',
|
|
154
|
+
'Use TypeScript strict mode',
|
|
155
|
+
],
|
|
156
|
+
possibleMissedTechnologies: [],
|
|
157
|
+
},
|
|
158
|
+
stackResearch: {
|
|
159
|
+
bestPractices: ['Follow project conventions'],
|
|
160
|
+
antiPatterns: ['Avoid skipping tests'],
|
|
161
|
+
testingTools: ['npm test'],
|
|
162
|
+
debuggingTools: ['console.log'],
|
|
163
|
+
documentationHints: ['Check official docs'],
|
|
164
|
+
researchMode: 'knowledge-only',
|
|
165
|
+
},
|
|
166
|
+
mcpServers: {
|
|
167
|
+
essential: ['filesystem', 'git', 'playwright'],
|
|
168
|
+
recommended: [],
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get default enriched context when Context Enricher fails
|
|
74
174
|
*/
|
|
75
|
-
function
|
|
175
|
+
function getDefaultEnrichedContext(scanResult) {
|
|
176
|
+
const projectType = detectProjectType(scanResult.stack);
|
|
76
177
|
return {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
178
|
+
entryPoints: ['src/index.ts'],
|
|
179
|
+
keyDirectories: { src: 'Source code' },
|
|
180
|
+
namingConventions: 'camelCase',
|
|
181
|
+
commands: {
|
|
182
|
+
test: 'npm test',
|
|
183
|
+
build: 'npm run build',
|
|
184
|
+
dev: 'npm run dev',
|
|
185
|
+
},
|
|
186
|
+
answeredQuestions: {},
|
|
187
|
+
projectType,
|
|
83
188
|
};
|
|
84
189
|
}
|
|
85
190
|
//# 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"}
|