monty-autonomous-fullstack-dev-multillm 1.0.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/LICENSE +81 -0
- package/README.md +608 -0
- package/bin/cli.js +448 -0
- package/dist/agents/coding.d.ts +15 -0
- package/dist/agents/coding.d.ts.map +1 -0
- package/dist/agents/coding.js +189 -0
- package/dist/agents/coding.js.map +1 -0
- package/dist/agents/initializer.d.ts +15 -0
- package/dist/agents/initializer.d.ts.map +1 -0
- package/dist/agents/initializer.js +87 -0
- package/dist/agents/initializer.js.map +1 -0
- package/dist/agents/prompts/arbitrator.md +143 -0
- package/dist/agents/prompts/coding.md +247 -0
- package/dist/agents/prompts/initializer.md +98 -0
- package/dist/config/agent-config.d.ts +103 -0
- package/dist/config/agent-config.d.ts.map +1 -0
- package/dist/config/agent-config.js +138 -0
- package/dist/config/agent-config.js.map +1 -0
- package/dist/config/auth-config.d.ts +152 -0
- package/dist/config/auth-config.d.ts.map +1 -0
- package/dist/config/auth-config.js +139 -0
- package/dist/config/auth-config.js.map +1 -0
- package/dist/config/mcp-config.d.ts +109 -0
- package/dist/config/mcp-config.d.ts.map +1 -0
- package/dist/config/mcp-config.js +234 -0
- package/dist/config/mcp-config.js.map +1 -0
- package/dist/config/provider-config.d.ts +139 -0
- package/dist/config/provider-config.d.ts.map +1 -0
- package/dist/config/provider-config.js +344 -0
- package/dist/config/provider-config.js.map +1 -0
- package/dist/config/subagents-config.d.ts +85 -0
- package/dist/config/subagents-config.d.ts.map +1 -0
- package/dist/config/subagents-config.js +430 -0
- package/dist/config/subagents-config.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +385 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestrator/arbitrator.d.ts +93 -0
- package/dist/orchestrator/arbitrator.d.ts.map +1 -0
- package/dist/orchestrator/arbitrator.js +330 -0
- package/dist/orchestrator/arbitrator.js.map +1 -0
- package/dist/orchestrator/index.d.ts +113 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +217 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/review-coordinator.d.ts +143 -0
- package/dist/orchestrator/review-coordinator.d.ts.map +1 -0
- package/dist/orchestrator/review-coordinator.js +401 -0
- package/dist/orchestrator/review-coordinator.js.map +1 -0
- package/dist/orchestrator/task-classifier.d.ts +87 -0
- package/dist/orchestrator/task-classifier.d.ts.map +1 -0
- package/dist/orchestrator/task-classifier.js +250 -0
- package/dist/orchestrator/task-classifier.js.map +1 -0
- package/dist/providers/anthropic-provider.d.ts +64 -0
- package/dist/providers/anthropic-provider.d.ts.map +1 -0
- package/dist/providers/anthropic-provider.js +264 -0
- package/dist/providers/anthropic-provider.js.map +1 -0
- package/dist/providers/base-provider.d.ts +219 -0
- package/dist/providers/base-provider.d.ts.map +1 -0
- package/dist/providers/base-provider.js +143 -0
- package/dist/providers/base-provider.js.map +1 -0
- package/dist/providers/cursor-provider.d.ts +82 -0
- package/dist/providers/cursor-provider.d.ts.map +1 -0
- package/dist/providers/cursor-provider.js +321 -0
- package/dist/providers/cursor-provider.js.map +1 -0
- package/dist/providers/google-provider.d.ts +75 -0
- package/dist/providers/google-provider.d.ts.map +1 -0
- package/dist/providers/google-provider.js +274 -0
- package/dist/providers/google-provider.js.map +1 -0
- package/dist/providers/index.d.ts +92 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +233 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai-provider.d.ts +83 -0
- package/dist/providers/openai-provider.d.ts.map +1 -0
- package/dist/providers/openai-provider.js +295 -0
- package/dist/providers/openai-provider.js.map +1 -0
- package/dist/templates/feature_list.template.json +66 -0
- package/dist/templates/progress.template.txt +51 -0
- package/dist/utils/auth-manager.d.ts +121 -0
- package/dist/utils/auth-manager.d.ts.map +1 -0
- package/dist/utils/auth-manager.js +560 -0
- package/dist/utils/auth-manager.js.map +1 -0
- package/dist/utils/budget-enforcer.d.ts +181 -0
- package/dist/utils/budget-enforcer.d.ts.map +1 -0
- package/dist/utils/budget-enforcer.js +386 -0
- package/dist/utils/budget-enforcer.js.map +1 -0
- package/dist/utils/chatgpt-detector.d.ts +51 -0
- package/dist/utils/chatgpt-detector.d.ts.map +1 -0
- package/dist/utils/chatgpt-detector.js +274 -0
- package/dist/utils/chatgpt-detector.js.map +1 -0
- package/dist/utils/claude-code-detector.d.ts +39 -0
- package/dist/utils/claude-code-detector.d.ts.map +1 -0
- package/dist/utils/claude-code-detector.js +153 -0
- package/dist/utils/claude-code-detector.js.map +1 -0
- package/dist/utils/code-quality.d.ts +58 -0
- package/dist/utils/code-quality.d.ts.map +1 -0
- package/dist/utils/code-quality.js +258 -0
- package/dist/utils/code-quality.js.map +1 -0
- package/dist/utils/context-primer.d.ts +50 -0
- package/dist/utils/context-primer.d.ts.map +1 -0
- package/dist/utils/context-primer.js +429 -0
- package/dist/utils/context-primer.js.map +1 -0
- package/dist/utils/dependency-management.d.ts +40 -0
- package/dist/utils/dependency-management.d.ts.map +1 -0
- package/dist/utils/dependency-management.js +123 -0
- package/dist/utils/dependency-management.js.map +1 -0
- package/dist/utils/environment-validation.d.ts +33 -0
- package/dist/utils/environment-validation.d.ts.map +1 -0
- package/dist/utils/environment-validation.js +136 -0
- package/dist/utils/environment-validation.js.map +1 -0
- package/dist/utils/error-recovery.d.ts +60 -0
- package/dist/utils/error-recovery.d.ts.map +1 -0
- package/dist/utils/error-recovery.js +183 -0
- package/dist/utils/error-recovery.js.map +1 -0
- package/dist/utils/feature-list.d.ts +102 -0
- package/dist/utils/feature-list.d.ts.map +1 -0
- package/dist/utils/feature-list.js +191 -0
- package/dist/utils/feature-list.js.map +1 -0
- package/dist/utils/gemini-detector.d.ts +65 -0
- package/dist/utils/gemini-detector.d.ts.map +1 -0
- package/dist/utils/gemini-detector.js +340 -0
- package/dist/utils/gemini-detector.js.map +1 -0
- package/dist/utils/git-utils.d.ts +48 -0
- package/dist/utils/git-utils.d.ts.map +1 -0
- package/dist/utils/git-utils.js +110 -0
- package/dist/utils/git-utils.js.map +1 -0
- package/dist/utils/health-check.d.ts +32 -0
- package/dist/utils/health-check.d.ts.map +1 -0
- package/dist/utils/health-check.js +152 -0
- package/dist/utils/health-check.js.map +1 -0
- package/dist/utils/hooks-manager.d.ts +154 -0
- package/dist/utils/hooks-manager.d.ts.map +1 -0
- package/dist/utils/hooks-manager.js +359 -0
- package/dist/utils/hooks-manager.js.map +1 -0
- package/dist/utils/multi-auth-manager.d.ts +144 -0
- package/dist/utils/multi-auth-manager.d.ts.map +1 -0
- package/dist/utils/multi-auth-manager.js +588 -0
- package/dist/utils/multi-auth-manager.js.map +1 -0
- package/dist/utils/progress.d.ts +49 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +209 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/project-detection.d.ts +40 -0
- package/dist/utils/project-detection.d.ts.map +1 -0
- package/dist/utils/project-detection.js +230 -0
- package/dist/utils/project-detection.js.map +1 -0
- package/dist/utils/session-manager.d.ts +119 -0
- package/dist/utils/session-manager.d.ts.map +1 -0
- package/dist/utils/session-manager.js +389 -0
- package/dist/utils/session-manager.js.map +1 -0
- package/dist/utils/skills-manager.d.ts +113 -0
- package/dist/utils/skills-manager.d.ts.map +1 -0
- package/dist/utils/skills-manager.js +332 -0
- package/dist/utils/skills-manager.js.map +1 -0
- package/dist/utils/structured-output.d.ts +117 -0
- package/dist/utils/structured-output.d.ts.map +1 -0
- package/dist/utils/structured-output.js +191 -0
- package/dist/utils/structured-output.js.map +1 -0
- package/dist/utils/subagent-manager.d.ts +143 -0
- package/dist/utils/subagent-manager.d.ts.map +1 -0
- package/dist/utils/subagent-manager.js +326 -0
- package/dist/utils/subagent-manager.js.map +1 -0
- package/dist/utils/supabase-setup.d.ts +50 -0
- package/dist/utils/supabase-setup.d.ts.map +1 -0
- package/dist/utils/supabase-setup.js +151 -0
- package/dist/utils/supabase-setup.js.map +1 -0
- package/dist/utils/token-refresh.d.ts +21 -0
- package/dist/utils/token-refresh.d.ts.map +1 -0
- package/dist/utils/token-refresh.js +77 -0
- package/dist/utils/token-refresh.js.map +1 -0
- package/dist/utils/tos-warning.d.ts +115 -0
- package/dist/utils/tos-warning.d.ts.map +1 -0
- package/dist/utils/tos-warning.js +304 -0
- package/dist/utils/tos-warning.js.map +1 -0
- package/dist/utils/usage-monitor.d.ts +156 -0
- package/dist/utils/usage-monitor.d.ts.map +1 -0
- package/dist/utils/usage-monitor.js +296 -0
- package/dist/utils/usage-monitor.js.map +1 -0
- package/package.json +105 -0
- package/scripts/init.ps1 +73 -0
- package/scripts/init.sh +86 -0
- package/scripts/test-auth.sh +90 -0
- package/templates/feature_list.template.json +66 -0
- package/templates/progress.template.txt +51 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Review Coordinator
|
|
3
|
+
* Coordinates multi-agent code reviews across multiple AI providers
|
|
4
|
+
* and manages conflict detection for arbitration.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2025 Dobeu Tech Solutions LLC
|
|
7
|
+
* Licensed under CC BY-NC 4.0
|
|
8
|
+
*/
|
|
9
|
+
import { type ProviderName } from '../config/provider-config.js';
|
|
10
|
+
import { type AgentMessage, type QueryOptions } from '../providers/index.js';
|
|
11
|
+
/**
|
|
12
|
+
* Review finding from a provider
|
|
13
|
+
*/
|
|
14
|
+
export interface ReviewFinding {
|
|
15
|
+
id: string;
|
|
16
|
+
file: string;
|
|
17
|
+
line: number;
|
|
18
|
+
type: 'bug' | 'security' | 'performance' | 'style' | 'logic' | 'suggestion';
|
|
19
|
+
severity: 'info' | 'warning' | 'error' | 'critical';
|
|
20
|
+
message: string;
|
|
21
|
+
suggestion?: string;
|
|
22
|
+
code?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Review result from a single provider
|
|
26
|
+
*/
|
|
27
|
+
export interface ProviderReview {
|
|
28
|
+
provider: ProviderName;
|
|
29
|
+
findings: ReviewFinding[];
|
|
30
|
+
suggestions: string[];
|
|
31
|
+
overallSeverity: 'pass' | 'minor' | 'major' | 'critical';
|
|
32
|
+
confidence: number;
|
|
33
|
+
executionTime: number;
|
|
34
|
+
rawMessages: AgentMessage[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Conflict between provider reviews
|
|
38
|
+
*/
|
|
39
|
+
export interface ReviewConflict {
|
|
40
|
+
id: string;
|
|
41
|
+
type: 'contradictory' | 'severity_mismatch' | 'missing_finding';
|
|
42
|
+
file?: string;
|
|
43
|
+
line?: number;
|
|
44
|
+
provider1: ProviderName;
|
|
45
|
+
position1: string;
|
|
46
|
+
provider2: ProviderName;
|
|
47
|
+
position2: string;
|
|
48
|
+
description: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Coordinated review result
|
|
52
|
+
*/
|
|
53
|
+
export interface CoordinatedReviewResult {
|
|
54
|
+
reviews: ProviderReview[];
|
|
55
|
+
conflicts: ReviewConflict[];
|
|
56
|
+
consensusFindings: ReviewFinding[];
|
|
57
|
+
needsArbitration: boolean;
|
|
58
|
+
summary: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Review coordinator configuration
|
|
62
|
+
*/
|
|
63
|
+
export interface ReviewCoordinatorConfig {
|
|
64
|
+
/** Minimum providers for a valid review */
|
|
65
|
+
minProviders: number;
|
|
66
|
+
/** Run reviews in parallel or sequentially */
|
|
67
|
+
parallel: boolean;
|
|
68
|
+
/** Timeout for each provider review (ms) */
|
|
69
|
+
timeout: number;
|
|
70
|
+
/** Severity threshold for conflicts (findings above this require arbitration) */
|
|
71
|
+
arbitrationSeverityThreshold: 'warning' | 'error' | 'critical';
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Review Coordinator
|
|
75
|
+
* Manages multi-agent code reviews
|
|
76
|
+
*/
|
|
77
|
+
export declare class ReviewCoordinator {
|
|
78
|
+
private config;
|
|
79
|
+
private enabledProviders;
|
|
80
|
+
constructor(enabledProviders: ProviderName[], config?: Partial<ReviewCoordinatorConfig>);
|
|
81
|
+
/**
|
|
82
|
+
* Execute a coordinated multi-agent review
|
|
83
|
+
*/
|
|
84
|
+
coordinateReview(task: string, options: QueryOptions): Promise<CoordinatedReviewResult>;
|
|
85
|
+
/**
|
|
86
|
+
* Get reviews from all providers in parallel
|
|
87
|
+
*/
|
|
88
|
+
private getParallelReviews;
|
|
89
|
+
/**
|
|
90
|
+
* Get reviews from all providers sequentially
|
|
91
|
+
*/
|
|
92
|
+
private getSequentialReviews;
|
|
93
|
+
/**
|
|
94
|
+
* Get a review from a single provider
|
|
95
|
+
*/
|
|
96
|
+
private getProviderReview;
|
|
97
|
+
/**
|
|
98
|
+
* Build a review-specific prompt
|
|
99
|
+
*/
|
|
100
|
+
private buildReviewPrompt;
|
|
101
|
+
/**
|
|
102
|
+
* Parse review findings from provider messages
|
|
103
|
+
*/
|
|
104
|
+
private parseReviewMessages;
|
|
105
|
+
/**
|
|
106
|
+
* Parse severity string to enum
|
|
107
|
+
*/
|
|
108
|
+
private parseSeverity;
|
|
109
|
+
/**
|
|
110
|
+
* Infer finding type from message
|
|
111
|
+
*/
|
|
112
|
+
private inferFindingType;
|
|
113
|
+
/**
|
|
114
|
+
* Detect conflicts between reviews
|
|
115
|
+
*/
|
|
116
|
+
detectConflicts(reviews: ProviderReview[]): ReviewConflict[];
|
|
117
|
+
/**
|
|
118
|
+
* Find consensus findings across reviews
|
|
119
|
+
*/
|
|
120
|
+
findConsensus(reviews: ProviderReview[]): ReviewFinding[];
|
|
121
|
+
/**
|
|
122
|
+
* Determine if conflicts require arbitration
|
|
123
|
+
*/
|
|
124
|
+
needsArbitration(conflicts: ReviewConflict[]): boolean;
|
|
125
|
+
/**
|
|
126
|
+
* Generate a summary of the review results
|
|
127
|
+
*/
|
|
128
|
+
generateSummary(reviews: ProviderReview[], conflicts: ReviewConflict[], consensus: ReviewFinding[]): string;
|
|
129
|
+
/**
|
|
130
|
+
* Update enabled providers
|
|
131
|
+
*/
|
|
132
|
+
setEnabledProviders(providers: ProviderName[]): void;
|
|
133
|
+
/**
|
|
134
|
+
* Get current configuration
|
|
135
|
+
*/
|
|
136
|
+
getConfig(): ReviewCoordinatorConfig;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Create a review coordinator instance
|
|
140
|
+
*/
|
|
141
|
+
export declare function createReviewCoordinator(enabledProviders: ProviderName[], config?: Partial<ReviewCoordinatorConfig>): ReviewCoordinator;
|
|
142
|
+
export default ReviewCoordinator;
|
|
143
|
+
//# sourceMappingURL=review-coordinator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-coordinator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/review-coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Review Coordinator
|
|
3
|
+
* Coordinates multi-agent code reviews across multiple AI providers
|
|
4
|
+
* and manages conflict detection for arbitration.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2025 Dobeu Tech Solutions LLC
|
|
7
|
+
* Licensed under CC BY-NC 4.0
|
|
8
|
+
*/
|
|
9
|
+
import { getProviderConfig, } from '../config/provider-config.js';
|
|
10
|
+
import { getProvider, } from '../providers/index.js';
|
|
11
|
+
/**
|
|
12
|
+
* Default review coordinator config
|
|
13
|
+
*/
|
|
14
|
+
const DEFAULT_REVIEW_CONFIG = {
|
|
15
|
+
minProviders: 2,
|
|
16
|
+
parallel: true,
|
|
17
|
+
timeout: 120000,
|
|
18
|
+
arbitrationSeverityThreshold: 'error',
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Review Coordinator
|
|
22
|
+
* Manages multi-agent code reviews
|
|
23
|
+
*/
|
|
24
|
+
export class ReviewCoordinator {
|
|
25
|
+
config;
|
|
26
|
+
enabledProviders;
|
|
27
|
+
constructor(enabledProviders, config) {
|
|
28
|
+
this.enabledProviders = enabledProviders;
|
|
29
|
+
this.config = { ...DEFAULT_REVIEW_CONFIG, ...config };
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Execute a coordinated multi-agent review
|
|
33
|
+
*/
|
|
34
|
+
async coordinateReview(task, options) {
|
|
35
|
+
if (this.enabledProviders.length < this.config.minProviders) {
|
|
36
|
+
throw new Error(`Insufficient providers for multi-agent review. ` +
|
|
37
|
+
`Need ${this.config.minProviders}, have ${this.enabledProviders.length}`);
|
|
38
|
+
}
|
|
39
|
+
console.log(`\n📋 Starting Multi-Agent Code Review`);
|
|
40
|
+
console.log(` Providers: ${this.enabledProviders.map(p => getProviderConfig(p).displayName).join(', ')}`);
|
|
41
|
+
// Get reviews from all providers
|
|
42
|
+
const reviews = this.config.parallel
|
|
43
|
+
? await this.getParallelReviews(task, options)
|
|
44
|
+
: await this.getSequentialReviews(task, options);
|
|
45
|
+
console.log(`\n✓ Received ${reviews.length} reviews`);
|
|
46
|
+
// Detect conflicts
|
|
47
|
+
const conflicts = this.detectConflicts(reviews);
|
|
48
|
+
console.log(` Conflicts detected: ${conflicts.length}`);
|
|
49
|
+
// Find consensus findings
|
|
50
|
+
const consensusFindings = this.findConsensus(reviews);
|
|
51
|
+
console.log(` Consensus findings: ${consensusFindings.length}`);
|
|
52
|
+
// Determine if arbitration is needed
|
|
53
|
+
const needsArbitration = this.needsArbitration(conflicts);
|
|
54
|
+
// Generate summary
|
|
55
|
+
const summary = this.generateSummary(reviews, conflicts, consensusFindings);
|
|
56
|
+
return {
|
|
57
|
+
reviews,
|
|
58
|
+
conflicts,
|
|
59
|
+
consensusFindings,
|
|
60
|
+
needsArbitration,
|
|
61
|
+
summary,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get reviews from all providers in parallel
|
|
66
|
+
*/
|
|
67
|
+
async getParallelReviews(task, options) {
|
|
68
|
+
const reviewPromises = this.enabledProviders.map(provider => this.getProviderReview(provider, task, options));
|
|
69
|
+
const results = await Promise.allSettled(reviewPromises);
|
|
70
|
+
return results
|
|
71
|
+
.filter((r) => r.status === 'fulfilled')
|
|
72
|
+
.map(r => r.value);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get reviews from all providers sequentially
|
|
76
|
+
*/
|
|
77
|
+
async getSequentialReviews(task, options) {
|
|
78
|
+
const reviews = [];
|
|
79
|
+
for (const provider of this.enabledProviders) {
|
|
80
|
+
try {
|
|
81
|
+
const review = await this.getProviderReview(provider, task, options);
|
|
82
|
+
reviews.push(review);
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
console.warn(`Review from ${provider} failed:`, error);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return reviews;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get a review from a single provider
|
|
92
|
+
*/
|
|
93
|
+
async getProviderReview(providerName, task, options) {
|
|
94
|
+
const startTime = Date.now();
|
|
95
|
+
const provider = getProvider(providerName);
|
|
96
|
+
console.log(`\n 🔍 Getting review from ${getProviderConfig(providerName).displayName}...`);
|
|
97
|
+
// Build review-specific prompt
|
|
98
|
+
const reviewPrompt = this.buildReviewPrompt(task);
|
|
99
|
+
// Collect messages
|
|
100
|
+
const messages = [];
|
|
101
|
+
for await (const message of provider.query(reviewPrompt, {
|
|
102
|
+
...options,
|
|
103
|
+
timeout_ms: this.config.timeout,
|
|
104
|
+
})) {
|
|
105
|
+
messages.push(message);
|
|
106
|
+
}
|
|
107
|
+
const executionTime = Date.now() - startTime;
|
|
108
|
+
// Parse findings from messages
|
|
109
|
+
const { findings, suggestions, overallSeverity, confidence } = this.parseReviewMessages(messages, providerName);
|
|
110
|
+
console.log(` Findings: ${findings.length}, Severity: ${overallSeverity}`);
|
|
111
|
+
return {
|
|
112
|
+
provider: providerName,
|
|
113
|
+
findings,
|
|
114
|
+
suggestions,
|
|
115
|
+
overallSeverity,
|
|
116
|
+
confidence,
|
|
117
|
+
executionTime,
|
|
118
|
+
rawMessages: messages,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Build a review-specific prompt
|
|
123
|
+
*/
|
|
124
|
+
buildReviewPrompt(task) {
|
|
125
|
+
return `You are performing a code review. ${task}
|
|
126
|
+
|
|
127
|
+
IMPORTANT: Structure your response with clear sections:
|
|
128
|
+
|
|
129
|
+
## FINDINGS
|
|
130
|
+
For each issue found, format as:
|
|
131
|
+
- [SEVERITY] FILE:LINE - Description
|
|
132
|
+
Suggestion: How to fix
|
|
133
|
+
|
|
134
|
+
Severity levels: INFO, WARNING, ERROR, CRITICAL
|
|
135
|
+
|
|
136
|
+
## SUGGESTIONS
|
|
137
|
+
General improvement suggestions for the code.
|
|
138
|
+
|
|
139
|
+
## OVERALL ASSESSMENT
|
|
140
|
+
Rate the code: PASS (no issues), MINOR (small issues), MAJOR (significant issues), CRITICAL (blocking issues)
|
|
141
|
+
|
|
142
|
+
Be thorough but concise. Focus on:
|
|
143
|
+
1. Security vulnerabilities (OWASP Top 10)
|
|
144
|
+
2. Logic errors and bugs
|
|
145
|
+
3. Performance issues
|
|
146
|
+
4. Code quality and maintainability
|
|
147
|
+
5. Best practices`;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Parse review findings from provider messages
|
|
151
|
+
*/
|
|
152
|
+
parseReviewMessages(messages, provider) {
|
|
153
|
+
const findings = [];
|
|
154
|
+
const suggestions = [];
|
|
155
|
+
let overallSeverity = 'pass';
|
|
156
|
+
let confidence = 0.8;
|
|
157
|
+
// Extract text content
|
|
158
|
+
const textContent = messages
|
|
159
|
+
.flatMap(m => m.content)
|
|
160
|
+
.filter(c => c.type === 'text')
|
|
161
|
+
.map(c => c.text)
|
|
162
|
+
.join('\n');
|
|
163
|
+
// Parse findings using regex patterns
|
|
164
|
+
const findingPattern = /\[(\w+)\]\s+([^:]+):(\d+)\s*-\s*(.+?)(?=\n\[|\n##|$)/gs;
|
|
165
|
+
let match;
|
|
166
|
+
while ((match = findingPattern.exec(textContent)) !== null) {
|
|
167
|
+
const [, severityStr, file, lineStr, message] = match;
|
|
168
|
+
if (severityStr && file && lineStr && message) {
|
|
169
|
+
const severity = this.parseSeverity(severityStr);
|
|
170
|
+
findings.push({
|
|
171
|
+
id: `${provider}_${findings.length + 1}`,
|
|
172
|
+
file: file.trim(),
|
|
173
|
+
line: parseInt(lineStr, 10),
|
|
174
|
+
type: this.inferFindingType(message),
|
|
175
|
+
severity,
|
|
176
|
+
message: message.trim(),
|
|
177
|
+
});
|
|
178
|
+
// Update overall severity
|
|
179
|
+
if (severity === 'critical')
|
|
180
|
+
overallSeverity = 'critical';
|
|
181
|
+
else if (severity === 'error' && overallSeverity !== 'critical')
|
|
182
|
+
overallSeverity = 'major';
|
|
183
|
+
else if (severity === 'warning' && overallSeverity === 'pass')
|
|
184
|
+
overallSeverity = 'minor';
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// Parse overall assessment
|
|
188
|
+
if (textContent.includes('CRITICAL') || textContent.includes('blocking')) {
|
|
189
|
+
overallSeverity = 'critical';
|
|
190
|
+
}
|
|
191
|
+
else if (textContent.includes('MAJOR') || textContent.includes('significant')) {
|
|
192
|
+
if (overallSeverity !== 'critical')
|
|
193
|
+
overallSeverity = 'major';
|
|
194
|
+
}
|
|
195
|
+
else if (textContent.includes('MINOR') || textContent.includes('small issues')) {
|
|
196
|
+
if (overallSeverity === 'pass')
|
|
197
|
+
overallSeverity = 'minor';
|
|
198
|
+
}
|
|
199
|
+
// Parse suggestions
|
|
200
|
+
const suggestionsMatch = textContent.match(/##\s*SUGGESTIONS\s*([\s\S]*?)(?=##|$)/i);
|
|
201
|
+
if (suggestionsMatch?.[1]) {
|
|
202
|
+
const suggestionLines = suggestionsMatch[1].split('\n')
|
|
203
|
+
.filter(line => line.trim().startsWith('-') || line.trim().startsWith('*'))
|
|
204
|
+
.map(line => line.replace(/^[-*]\s*/, '').trim())
|
|
205
|
+
.filter(line => line.length > 0);
|
|
206
|
+
suggestions.push(...suggestionLines);
|
|
207
|
+
}
|
|
208
|
+
return { findings, suggestions, overallSeverity, confidence };
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Parse severity string to enum
|
|
212
|
+
*/
|
|
213
|
+
parseSeverity(severity) {
|
|
214
|
+
const upper = severity.toUpperCase();
|
|
215
|
+
if (upper === 'CRITICAL')
|
|
216
|
+
return 'critical';
|
|
217
|
+
if (upper === 'ERROR')
|
|
218
|
+
return 'error';
|
|
219
|
+
if (upper === 'WARNING')
|
|
220
|
+
return 'warning';
|
|
221
|
+
return 'info';
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Infer finding type from message
|
|
225
|
+
*/
|
|
226
|
+
inferFindingType(message) {
|
|
227
|
+
const lower = message.toLowerCase();
|
|
228
|
+
if (lower.includes('security') || lower.includes('vulnerability') || lower.includes('xss') || lower.includes('injection')) {
|
|
229
|
+
return 'security';
|
|
230
|
+
}
|
|
231
|
+
if (lower.includes('performance') || lower.includes('slow') || lower.includes('memory')) {
|
|
232
|
+
return 'performance';
|
|
233
|
+
}
|
|
234
|
+
if (lower.includes('style') || lower.includes('formatting') || lower.includes('naming')) {
|
|
235
|
+
return 'style';
|
|
236
|
+
}
|
|
237
|
+
if (lower.includes('logic') || lower.includes('condition') || lower.includes('branch')) {
|
|
238
|
+
return 'logic';
|
|
239
|
+
}
|
|
240
|
+
if (lower.includes('suggest') || lower.includes('consider') || lower.includes('could')) {
|
|
241
|
+
return 'suggestion';
|
|
242
|
+
}
|
|
243
|
+
return 'bug';
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Detect conflicts between reviews
|
|
247
|
+
*/
|
|
248
|
+
detectConflicts(reviews) {
|
|
249
|
+
const conflicts = [];
|
|
250
|
+
if (reviews.length < 2)
|
|
251
|
+
return conflicts;
|
|
252
|
+
// Compare findings across providers
|
|
253
|
+
for (let i = 0; i < reviews.length; i++) {
|
|
254
|
+
for (let j = i + 1; j < reviews.length; j++) {
|
|
255
|
+
const review1 = reviews[i];
|
|
256
|
+
const review2 = reviews[j];
|
|
257
|
+
// Check for severity mismatches on same location
|
|
258
|
+
for (const finding1 of review1.findings) {
|
|
259
|
+
const matchingFinding = review2.findings.find(f => f.file === finding1.file && Math.abs(f.line - finding1.line) <= 3);
|
|
260
|
+
if (matchingFinding) {
|
|
261
|
+
// Check severity difference
|
|
262
|
+
const severityOrder = ['info', 'warning', 'error', 'critical'];
|
|
263
|
+
const sev1 = severityOrder.indexOf(finding1.severity);
|
|
264
|
+
const sev2 = severityOrder.indexOf(matchingFinding.severity);
|
|
265
|
+
if (Math.abs(sev1 - sev2) >= 2) {
|
|
266
|
+
conflicts.push({
|
|
267
|
+
id: `conflict_${conflicts.length + 1}`,
|
|
268
|
+
type: 'severity_mismatch',
|
|
269
|
+
file: finding1.file,
|
|
270
|
+
line: finding1.line,
|
|
271
|
+
provider1: review1.provider,
|
|
272
|
+
position1: `${finding1.severity}: ${finding1.message}`,
|
|
273
|
+
provider2: review2.provider,
|
|
274
|
+
position2: `${matchingFinding.severity}: ${matchingFinding.message}`,
|
|
275
|
+
description: `Severity mismatch at ${finding1.file}:${finding1.line}`,
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// Check for overall assessment conflicts
|
|
281
|
+
const assessments = ['pass', 'minor', 'major', 'critical'];
|
|
282
|
+
const assess1 = assessments.indexOf(review1.overallSeverity);
|
|
283
|
+
const assess2 = assessments.indexOf(review2.overallSeverity);
|
|
284
|
+
if (Math.abs(assess1 - assess2) >= 2) {
|
|
285
|
+
conflicts.push({
|
|
286
|
+
id: `conflict_${conflicts.length + 1}`,
|
|
287
|
+
type: 'contradictory',
|
|
288
|
+
provider1: review1.provider,
|
|
289
|
+
position1: `Overall: ${review1.overallSeverity}`,
|
|
290
|
+
provider2: review2.provider,
|
|
291
|
+
position2: `Overall: ${review2.overallSeverity}`,
|
|
292
|
+
description: 'Overall assessment differs significantly',
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return conflicts;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Find consensus findings across reviews
|
|
301
|
+
*/
|
|
302
|
+
findConsensus(reviews) {
|
|
303
|
+
if (reviews.length < 2) {
|
|
304
|
+
return reviews[0]?.findings ?? [];
|
|
305
|
+
}
|
|
306
|
+
const consensus = [];
|
|
307
|
+
// Find findings that appear in multiple reviews
|
|
308
|
+
for (const finding of reviews[0].findings) {
|
|
309
|
+
const matches = reviews.slice(1).filter(review => review.findings.some(f => f.file === finding.file &&
|
|
310
|
+
Math.abs(f.line - finding.line) <= 3 &&
|
|
311
|
+
f.type === finding.type));
|
|
312
|
+
// If finding appears in majority of reviews, it's consensus
|
|
313
|
+
if (matches.length >= Math.floor(reviews.length / 2)) {
|
|
314
|
+
consensus.push({
|
|
315
|
+
...finding,
|
|
316
|
+
id: `consensus_${consensus.length + 1}`,
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return consensus;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Determine if conflicts require arbitration
|
|
324
|
+
*/
|
|
325
|
+
needsArbitration(conflicts) {
|
|
326
|
+
if (conflicts.length === 0)
|
|
327
|
+
return false;
|
|
328
|
+
// Any contradictory conflicts require arbitration
|
|
329
|
+
if (conflicts.some(c => c.type === 'contradictory')) {
|
|
330
|
+
return true;
|
|
331
|
+
}
|
|
332
|
+
// Severity mismatches on critical/error items require arbitration
|
|
333
|
+
const severityThreshold = this.config.arbitrationSeverityThreshold;
|
|
334
|
+
const thresholdOrder = ['warning', 'error', 'critical'];
|
|
335
|
+
const thresholdIdx = thresholdOrder.indexOf(severityThreshold);
|
|
336
|
+
return conflicts.some(c => {
|
|
337
|
+
if (c.type !== 'severity_mismatch')
|
|
338
|
+
return false;
|
|
339
|
+
const pos1Severity = c.position1.split(':')[0]?.toLowerCase() ?? '';
|
|
340
|
+
const pos2Severity = c.position2.split(':')[0]?.toLowerCase() ?? '';
|
|
341
|
+
return (thresholdOrder.indexOf(pos1Severity) >= thresholdIdx ||
|
|
342
|
+
thresholdOrder.indexOf(pos2Severity) >= thresholdIdx);
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Generate a summary of the review results
|
|
347
|
+
*/
|
|
348
|
+
generateSummary(reviews, conflicts, consensus) {
|
|
349
|
+
const lines = [];
|
|
350
|
+
lines.push('═══════════════════════════════════════════════════════════════');
|
|
351
|
+
lines.push(' Multi-Agent Code Review Summary ');
|
|
352
|
+
lines.push('═══════════════════════════════════════════════════════════════\n');
|
|
353
|
+
// Per-provider summary
|
|
354
|
+
lines.push('Provider Reviews:');
|
|
355
|
+
for (const review of reviews) {
|
|
356
|
+
const config = getProviderConfig(review.provider);
|
|
357
|
+
lines.push(` ${config.displayName}:`);
|
|
358
|
+
lines.push(` Findings: ${review.findings.length}`);
|
|
359
|
+
lines.push(` Overall: ${review.overallSeverity.toUpperCase()}`);
|
|
360
|
+
lines.push(` Time: ${Math.round(review.executionTime / 1000)}s`);
|
|
361
|
+
}
|
|
362
|
+
// Consensus findings
|
|
363
|
+
lines.push(`\nConsensus Findings: ${consensus.length}`);
|
|
364
|
+
for (const finding of consensus.slice(0, 5)) {
|
|
365
|
+
lines.push(` [${finding.severity.toUpperCase()}] ${finding.file}:${finding.line}`);
|
|
366
|
+
lines.push(` ${finding.message}`);
|
|
367
|
+
}
|
|
368
|
+
if (consensus.length > 5) {
|
|
369
|
+
lines.push(` ... and ${consensus.length - 5} more`);
|
|
370
|
+
}
|
|
371
|
+
// Conflicts
|
|
372
|
+
if (conflicts.length > 0) {
|
|
373
|
+
lines.push(`\n⚠️ Conflicts Detected: ${conflicts.length}`);
|
|
374
|
+
for (const conflict of conflicts) {
|
|
375
|
+
lines.push(` ${conflict.description}`);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
lines.push('\n═══════════════════════════════════════════════════════════════');
|
|
379
|
+
return lines.join('\n');
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Update enabled providers
|
|
383
|
+
*/
|
|
384
|
+
setEnabledProviders(providers) {
|
|
385
|
+
this.enabledProviders = providers;
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Get current configuration
|
|
389
|
+
*/
|
|
390
|
+
getConfig() {
|
|
391
|
+
return { ...this.config };
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Create a review coordinator instance
|
|
396
|
+
*/
|
|
397
|
+
export function createReviewCoordinator(enabledProviders, config) {
|
|
398
|
+
return new ReviewCoordinator(enabledProviders, config);
|
|
399
|
+
}
|
|
400
|
+
export default ReviewCoordinator;
|
|
401
|
+
//# sourceMappingURL=review-coordinator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-coordinator.js","sourceRoot":"","sources":["../../src/orchestrator/review-coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task Classifier
|
|
3
|
+
* Routes tasks to the most appropriate AI provider based on task type,
|
|
4
|
+
* provider capabilities, and availability.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2025 Dobeu Tech Solutions LLC
|
|
7
|
+
* Licensed under CC BY-NC 4.0
|
|
8
|
+
*/
|
|
9
|
+
import { type ProviderName, type TaskType } from '../config/provider-config.js';
|
|
10
|
+
/**
|
|
11
|
+
* Task classification result
|
|
12
|
+
*/
|
|
13
|
+
export interface TaskClassification {
|
|
14
|
+
taskType: TaskType;
|
|
15
|
+
recommendedProvider: ProviderName;
|
|
16
|
+
fallbackProviders: ProviderName[];
|
|
17
|
+
confidence: number;
|
|
18
|
+
reasoning: string;
|
|
19
|
+
requiredCapabilities: string[];
|
|
20
|
+
keywords: string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Task context for classification
|
|
24
|
+
*/
|
|
25
|
+
export interface TaskContext {
|
|
26
|
+
/** Current feature being worked on */
|
|
27
|
+
currentFeature?: string;
|
|
28
|
+
/** Project type (react, nextjs, etc.) */
|
|
29
|
+
projectType?: string;
|
|
30
|
+
/** Available providers (authenticated) */
|
|
31
|
+
availableProviders?: ProviderName[];
|
|
32
|
+
/** Previous task types in session */
|
|
33
|
+
sessionHistory?: TaskType[];
|
|
34
|
+
/** User preference override */
|
|
35
|
+
preferredProvider?: ProviderName;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Task Classifier
|
|
39
|
+
* Analyzes task descriptions and routes to appropriate providers
|
|
40
|
+
*/
|
|
41
|
+
export declare class TaskClassifier {
|
|
42
|
+
private availableProviders;
|
|
43
|
+
private defaultProvider;
|
|
44
|
+
constructor(availableProviders?: ProviderName[]);
|
|
45
|
+
/**
|
|
46
|
+
* Update available providers
|
|
47
|
+
*/
|
|
48
|
+
setAvailableProviders(providers: ProviderName[]): void;
|
|
49
|
+
/**
|
|
50
|
+
* Set default provider
|
|
51
|
+
*/
|
|
52
|
+
setDefaultProvider(provider: ProviderName): void;
|
|
53
|
+
/**
|
|
54
|
+
* Classify a task and recommend a provider
|
|
55
|
+
*/
|
|
56
|
+
classify(task: string, context?: TaskContext): TaskClassification;
|
|
57
|
+
/**
|
|
58
|
+
* Calculate classification confidence (0-1)
|
|
59
|
+
*/
|
|
60
|
+
private calculateConfidence;
|
|
61
|
+
/**
|
|
62
|
+
* Get required capabilities for a task type
|
|
63
|
+
*/
|
|
64
|
+
private getRequiredCapabilities;
|
|
65
|
+
/**
|
|
66
|
+
* Generate human-readable reasoning for the classification
|
|
67
|
+
*/
|
|
68
|
+
private generateReasoning;
|
|
69
|
+
/**
|
|
70
|
+
* Check if a task should trigger multi-agent review
|
|
71
|
+
*/
|
|
72
|
+
isMultiAgentTask(taskType: TaskType): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Get providers suitable for a task type (ordered by preference)
|
|
75
|
+
*/
|
|
76
|
+
getProvidersForTask(taskType: TaskType): ProviderName[];
|
|
77
|
+
/**
|
|
78
|
+
* Suggest alternative providers if primary is unavailable
|
|
79
|
+
*/
|
|
80
|
+
suggestAlternatives(taskType: TaskType, unavailableProvider: ProviderName): ProviderName[];
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Create a task classifier with available providers
|
|
84
|
+
*/
|
|
85
|
+
export declare function createTaskClassifier(availableProviders?: ProviderName[]): TaskClassifier;
|
|
86
|
+
export default TaskClassifier;
|
|
87
|
+
//# sourceMappingURL=task-classifier.d.ts.map
|