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.
Files changed (186) hide show
  1. package/LICENSE +81 -0
  2. package/README.md +608 -0
  3. package/bin/cli.js +448 -0
  4. package/dist/agents/coding.d.ts +15 -0
  5. package/dist/agents/coding.d.ts.map +1 -0
  6. package/dist/agents/coding.js +189 -0
  7. package/dist/agents/coding.js.map +1 -0
  8. package/dist/agents/initializer.d.ts +15 -0
  9. package/dist/agents/initializer.d.ts.map +1 -0
  10. package/dist/agents/initializer.js +87 -0
  11. package/dist/agents/initializer.js.map +1 -0
  12. package/dist/agents/prompts/arbitrator.md +143 -0
  13. package/dist/agents/prompts/coding.md +247 -0
  14. package/dist/agents/prompts/initializer.md +98 -0
  15. package/dist/config/agent-config.d.ts +103 -0
  16. package/dist/config/agent-config.d.ts.map +1 -0
  17. package/dist/config/agent-config.js +138 -0
  18. package/dist/config/agent-config.js.map +1 -0
  19. package/dist/config/auth-config.d.ts +152 -0
  20. package/dist/config/auth-config.d.ts.map +1 -0
  21. package/dist/config/auth-config.js +139 -0
  22. package/dist/config/auth-config.js.map +1 -0
  23. package/dist/config/mcp-config.d.ts +109 -0
  24. package/dist/config/mcp-config.d.ts.map +1 -0
  25. package/dist/config/mcp-config.js +234 -0
  26. package/dist/config/mcp-config.js.map +1 -0
  27. package/dist/config/provider-config.d.ts +139 -0
  28. package/dist/config/provider-config.d.ts.map +1 -0
  29. package/dist/config/provider-config.js +344 -0
  30. package/dist/config/provider-config.js.map +1 -0
  31. package/dist/config/subagents-config.d.ts +85 -0
  32. package/dist/config/subagents-config.d.ts.map +1 -0
  33. package/dist/config/subagents-config.js +430 -0
  34. package/dist/config/subagents-config.js.map +1 -0
  35. package/dist/index.d.ts +14 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +385 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/orchestrator/arbitrator.d.ts +93 -0
  40. package/dist/orchestrator/arbitrator.d.ts.map +1 -0
  41. package/dist/orchestrator/arbitrator.js +330 -0
  42. package/dist/orchestrator/arbitrator.js.map +1 -0
  43. package/dist/orchestrator/index.d.ts +113 -0
  44. package/dist/orchestrator/index.d.ts.map +1 -0
  45. package/dist/orchestrator/index.js +217 -0
  46. package/dist/orchestrator/index.js.map +1 -0
  47. package/dist/orchestrator/review-coordinator.d.ts +143 -0
  48. package/dist/orchestrator/review-coordinator.d.ts.map +1 -0
  49. package/dist/orchestrator/review-coordinator.js +401 -0
  50. package/dist/orchestrator/review-coordinator.js.map +1 -0
  51. package/dist/orchestrator/task-classifier.d.ts +87 -0
  52. package/dist/orchestrator/task-classifier.d.ts.map +1 -0
  53. package/dist/orchestrator/task-classifier.js +250 -0
  54. package/dist/orchestrator/task-classifier.js.map +1 -0
  55. package/dist/providers/anthropic-provider.d.ts +64 -0
  56. package/dist/providers/anthropic-provider.d.ts.map +1 -0
  57. package/dist/providers/anthropic-provider.js +264 -0
  58. package/dist/providers/anthropic-provider.js.map +1 -0
  59. package/dist/providers/base-provider.d.ts +219 -0
  60. package/dist/providers/base-provider.d.ts.map +1 -0
  61. package/dist/providers/base-provider.js +143 -0
  62. package/dist/providers/base-provider.js.map +1 -0
  63. package/dist/providers/cursor-provider.d.ts +82 -0
  64. package/dist/providers/cursor-provider.d.ts.map +1 -0
  65. package/dist/providers/cursor-provider.js +321 -0
  66. package/dist/providers/cursor-provider.js.map +1 -0
  67. package/dist/providers/google-provider.d.ts +75 -0
  68. package/dist/providers/google-provider.d.ts.map +1 -0
  69. package/dist/providers/google-provider.js +274 -0
  70. package/dist/providers/google-provider.js.map +1 -0
  71. package/dist/providers/index.d.ts +92 -0
  72. package/dist/providers/index.d.ts.map +1 -0
  73. package/dist/providers/index.js +233 -0
  74. package/dist/providers/index.js.map +1 -0
  75. package/dist/providers/openai-provider.d.ts +83 -0
  76. package/dist/providers/openai-provider.d.ts.map +1 -0
  77. package/dist/providers/openai-provider.js +295 -0
  78. package/dist/providers/openai-provider.js.map +1 -0
  79. package/dist/templates/feature_list.template.json +66 -0
  80. package/dist/templates/progress.template.txt +51 -0
  81. package/dist/utils/auth-manager.d.ts +121 -0
  82. package/dist/utils/auth-manager.d.ts.map +1 -0
  83. package/dist/utils/auth-manager.js +560 -0
  84. package/dist/utils/auth-manager.js.map +1 -0
  85. package/dist/utils/budget-enforcer.d.ts +181 -0
  86. package/dist/utils/budget-enforcer.d.ts.map +1 -0
  87. package/dist/utils/budget-enforcer.js +386 -0
  88. package/dist/utils/budget-enforcer.js.map +1 -0
  89. package/dist/utils/chatgpt-detector.d.ts +51 -0
  90. package/dist/utils/chatgpt-detector.d.ts.map +1 -0
  91. package/dist/utils/chatgpt-detector.js +274 -0
  92. package/dist/utils/chatgpt-detector.js.map +1 -0
  93. package/dist/utils/claude-code-detector.d.ts +39 -0
  94. package/dist/utils/claude-code-detector.d.ts.map +1 -0
  95. package/dist/utils/claude-code-detector.js +153 -0
  96. package/dist/utils/claude-code-detector.js.map +1 -0
  97. package/dist/utils/code-quality.d.ts +58 -0
  98. package/dist/utils/code-quality.d.ts.map +1 -0
  99. package/dist/utils/code-quality.js +258 -0
  100. package/dist/utils/code-quality.js.map +1 -0
  101. package/dist/utils/context-primer.d.ts +50 -0
  102. package/dist/utils/context-primer.d.ts.map +1 -0
  103. package/dist/utils/context-primer.js +429 -0
  104. package/dist/utils/context-primer.js.map +1 -0
  105. package/dist/utils/dependency-management.d.ts +40 -0
  106. package/dist/utils/dependency-management.d.ts.map +1 -0
  107. package/dist/utils/dependency-management.js +123 -0
  108. package/dist/utils/dependency-management.js.map +1 -0
  109. package/dist/utils/environment-validation.d.ts +33 -0
  110. package/dist/utils/environment-validation.d.ts.map +1 -0
  111. package/dist/utils/environment-validation.js +136 -0
  112. package/dist/utils/environment-validation.js.map +1 -0
  113. package/dist/utils/error-recovery.d.ts +60 -0
  114. package/dist/utils/error-recovery.d.ts.map +1 -0
  115. package/dist/utils/error-recovery.js +183 -0
  116. package/dist/utils/error-recovery.js.map +1 -0
  117. package/dist/utils/feature-list.d.ts +102 -0
  118. package/dist/utils/feature-list.d.ts.map +1 -0
  119. package/dist/utils/feature-list.js +191 -0
  120. package/dist/utils/feature-list.js.map +1 -0
  121. package/dist/utils/gemini-detector.d.ts +65 -0
  122. package/dist/utils/gemini-detector.d.ts.map +1 -0
  123. package/dist/utils/gemini-detector.js +340 -0
  124. package/dist/utils/gemini-detector.js.map +1 -0
  125. package/dist/utils/git-utils.d.ts +48 -0
  126. package/dist/utils/git-utils.d.ts.map +1 -0
  127. package/dist/utils/git-utils.js +110 -0
  128. package/dist/utils/git-utils.js.map +1 -0
  129. package/dist/utils/health-check.d.ts +32 -0
  130. package/dist/utils/health-check.d.ts.map +1 -0
  131. package/dist/utils/health-check.js +152 -0
  132. package/dist/utils/health-check.js.map +1 -0
  133. package/dist/utils/hooks-manager.d.ts +154 -0
  134. package/dist/utils/hooks-manager.d.ts.map +1 -0
  135. package/dist/utils/hooks-manager.js +359 -0
  136. package/dist/utils/hooks-manager.js.map +1 -0
  137. package/dist/utils/multi-auth-manager.d.ts +144 -0
  138. package/dist/utils/multi-auth-manager.d.ts.map +1 -0
  139. package/dist/utils/multi-auth-manager.js +588 -0
  140. package/dist/utils/multi-auth-manager.js.map +1 -0
  141. package/dist/utils/progress.d.ts +49 -0
  142. package/dist/utils/progress.d.ts.map +1 -0
  143. package/dist/utils/progress.js +209 -0
  144. package/dist/utils/progress.js.map +1 -0
  145. package/dist/utils/project-detection.d.ts +40 -0
  146. package/dist/utils/project-detection.d.ts.map +1 -0
  147. package/dist/utils/project-detection.js +230 -0
  148. package/dist/utils/project-detection.js.map +1 -0
  149. package/dist/utils/session-manager.d.ts +119 -0
  150. package/dist/utils/session-manager.d.ts.map +1 -0
  151. package/dist/utils/session-manager.js +389 -0
  152. package/dist/utils/session-manager.js.map +1 -0
  153. package/dist/utils/skills-manager.d.ts +113 -0
  154. package/dist/utils/skills-manager.d.ts.map +1 -0
  155. package/dist/utils/skills-manager.js +332 -0
  156. package/dist/utils/skills-manager.js.map +1 -0
  157. package/dist/utils/structured-output.d.ts +117 -0
  158. package/dist/utils/structured-output.d.ts.map +1 -0
  159. package/dist/utils/structured-output.js +191 -0
  160. package/dist/utils/structured-output.js.map +1 -0
  161. package/dist/utils/subagent-manager.d.ts +143 -0
  162. package/dist/utils/subagent-manager.d.ts.map +1 -0
  163. package/dist/utils/subagent-manager.js +326 -0
  164. package/dist/utils/subagent-manager.js.map +1 -0
  165. package/dist/utils/supabase-setup.d.ts +50 -0
  166. package/dist/utils/supabase-setup.d.ts.map +1 -0
  167. package/dist/utils/supabase-setup.js +151 -0
  168. package/dist/utils/supabase-setup.js.map +1 -0
  169. package/dist/utils/token-refresh.d.ts +21 -0
  170. package/dist/utils/token-refresh.d.ts.map +1 -0
  171. package/dist/utils/token-refresh.js +77 -0
  172. package/dist/utils/token-refresh.js.map +1 -0
  173. package/dist/utils/tos-warning.d.ts +115 -0
  174. package/dist/utils/tos-warning.d.ts.map +1 -0
  175. package/dist/utils/tos-warning.js +304 -0
  176. package/dist/utils/tos-warning.js.map +1 -0
  177. package/dist/utils/usage-monitor.d.ts +156 -0
  178. package/dist/utils/usage-monitor.d.ts.map +1 -0
  179. package/dist/utils/usage-monitor.js +296 -0
  180. package/dist/utils/usage-monitor.js.map +1 -0
  181. package/package.json +105 -0
  182. package/scripts/init.ps1 +73 -0
  183. package/scripts/init.sh +86 -0
  184. package/scripts/test-auth.sh +90 -0
  185. package/templates/feature_list.template.json +66 -0
  186. package/templates/progress.template.txt +51 -0
@@ -0,0 +1,330 @@
1
+ /**
2
+ * Arbitrator Sub-Agent
3
+ * Resolves conflicts between multiple AI provider reviews
4
+ * using a designated arbitrator provider (default: Claude).
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 arbitrator config
13
+ */
14
+ const DEFAULT_ARBITRATOR_CONFIG = {
15
+ provider: 'anthropic',
16
+ timeout: 180000,
17
+ allowedTools: ['Read', 'Glob', 'Grep'],
18
+ investigateCode: true,
19
+ };
20
+ /**
21
+ * Arbitrator Sub-Agent
22
+ * Resolves conflicts between AI provider reviews
23
+ */
24
+ export class Arbitrator {
25
+ config;
26
+ constructor(config) {
27
+ this.config = { ...DEFAULT_ARBITRATOR_CONFIG, ...config };
28
+ }
29
+ /**
30
+ * Resolve conflicts from a coordinated review
31
+ */
32
+ async resolve(reviewResult, context) {
33
+ const startTime = Date.now();
34
+ if (reviewResult.conflicts.length === 0) {
35
+ // No conflicts to resolve
36
+ return this.createNoConflictResult(reviewResult);
37
+ }
38
+ console.log(`\n⚖️ Starting Arbitration`);
39
+ console.log(` Arbitrator: ${getProviderConfig(this.config.provider).displayName}`);
40
+ console.log(` Conflicts to resolve: ${reviewResult.conflicts.length}`);
41
+ const provider = getProvider(this.config.provider);
42
+ // Build arbitration prompt
43
+ const prompt = this.buildArbitrationPrompt(reviewResult.reviews, reviewResult.conflicts, context);
44
+ // Execute arbitration query
45
+ const messages = [];
46
+ for await (const message of provider.query(prompt, {
47
+ tools: this.config.allowedTools,
48
+ timeout_ms: this.config.timeout,
49
+ })) {
50
+ messages.push(message);
51
+ }
52
+ // Parse arbitration decisions
53
+ const decisions = this.parseArbitrationDecisions(messages, reviewResult.conflicts);
54
+ // Build final merged review
55
+ const finalReview = this.buildFinalReview(reviewResult.reviews, reviewResult.consensusFindings, decisions);
56
+ // Generate summary
57
+ const summary = this.generateSummary(decisions, finalReview);
58
+ const executionTime = Date.now() - startTime;
59
+ console.log(`\n✓ Arbitration complete (${Math.round(executionTime / 1000)}s)`);
60
+ console.log(` Decisions made: ${decisions.length}`);
61
+ return {
62
+ decisions,
63
+ finalReview,
64
+ summary,
65
+ arbitratorProvider: this.config.provider,
66
+ executionTime,
67
+ };
68
+ }
69
+ /**
70
+ * Build the arbitration prompt
71
+ */
72
+ buildArbitrationPrompt(reviews, conflicts, context) {
73
+ return `# Code Review Arbitration
74
+
75
+ You are the arbitrator sub-agent responsible for resolving conflicts between
76
+ multiple AI code reviewers. Your decision is final and must be well-reasoned.
77
+
78
+ ${context ? `## Context\n${context}\n` : ''}
79
+
80
+ ## Reviews Received
81
+
82
+ ${reviews.map(r => `
83
+ ### ${getProviderConfig(r.provider).displayName} Review
84
+ Overall Severity: ${r.overallSeverity.toUpperCase()}
85
+ Confidence: ${Math.round(r.confidence * 100)}%
86
+ Findings: ${r.findings.length}
87
+
88
+ ${r.findings.slice(0, 10).map(f => `- [${f.severity.toUpperCase()}] ${f.file}:${f.line} - ${f.message}`).join('\n')}
89
+ ${r.findings.length > 10 ? `\n... and ${r.findings.length - 10} more findings` : ''}
90
+
91
+ Suggestions:
92
+ ${r.suggestions.slice(0, 5).map(s => `- ${s}`).join('\n')}
93
+ `).join('\n')}
94
+
95
+ ## Conflicts to Resolve
96
+
97
+ ${conflicts.map((c, i) => `
98
+ ### Conflict ${i + 1}: ${c.description}
99
+ Type: ${c.type}
100
+ ${c.file ? `Location: ${c.file}:${c.line}` : ''}
101
+
102
+ **${getProviderConfig(c.provider1).displayName}** says:
103
+ ${c.position1}
104
+
105
+ **${getProviderConfig(c.provider2).displayName}** says:
106
+ ${c.position2}
107
+ `).join('\n')}
108
+
109
+ ## Your Task
110
+
111
+ 1. For each conflict, analyze both positions carefully
112
+ 2. ${this.config.investigateCode ? 'Use the Read tool to investigate the actual code if needed' : 'Consider the provided context'}
113
+ 3. Make a final decision for each conflict
114
+ 4. Explain your reasoning clearly
115
+ 5. Provide a merged, conflict-free final review
116
+
117
+ ## Decision Framework
118
+
119
+ When resolving conflicts, consider:
120
+ 1. **Correctness**: Which assessment is factually accurate?
121
+ 2. **Severity**: Which correctly identifies the risk level?
122
+ 3. **Best Practices**: Which aligns with industry standards?
123
+ 4. **Security**: When in doubt about security, err on caution
124
+
125
+ ## Required Output Format
126
+
127
+ Provide your decisions in this exact format:
128
+
129
+ <arbitration>
130
+ CONFLICT 1:
131
+ Winner: [provider_name]
132
+ Reasoning: [Your detailed reasoning]
133
+ Resolved Severity: [info|warning|error|critical]
134
+
135
+ CONFLICT 2:
136
+ Winner: [provider_name]
137
+ Reasoning: [Your detailed reasoning]
138
+ Resolved Severity: [info|warning|error|critical]
139
+
140
+ FINAL ASSESSMENT:
141
+ Overall: [pass|minor|major|critical]
142
+ Key Findings:
143
+ - [List the most important findings after conflict resolution]
144
+ </arbitration>
145
+
146
+ Begin your analysis now.`;
147
+ }
148
+ /**
149
+ * Parse arbitration decisions from response
150
+ */
151
+ parseArbitrationDecisions(messages, conflicts) {
152
+ const decisions = [];
153
+ // Extract text content
154
+ const textContent = messages
155
+ .flatMap(m => m.content)
156
+ .filter(c => c.type === 'text')
157
+ .map(c => c.text)
158
+ .join('\n');
159
+ // Parse arbitration block
160
+ const arbitrationMatch = textContent.match(/<arbitration>([\s\S]*?)<\/arbitration>/i);
161
+ const arbitrationText = arbitrationMatch?.[1] ?? textContent;
162
+ // Parse each conflict decision
163
+ for (let i = 0; i < conflicts.length; i++) {
164
+ const conflict = conflicts[i];
165
+ const conflictPattern = new RegExp(`CONFLICT\\s*${i + 1}[:\\s]*([\\s\\S]*?)(?=CONFLICT|FINAL|$)`, 'i');
166
+ const conflictMatch = arbitrationText.match(conflictPattern);
167
+ if (conflictMatch?.[1]) {
168
+ const decisionText = conflictMatch[1];
169
+ // Extract winner
170
+ const winnerMatch = decisionText.match(/Winner:\s*(\w+)/i);
171
+ let winner = conflict.provider1;
172
+ if (winnerMatch?.[1]) {
173
+ const winnerStr = winnerMatch[1].toLowerCase();
174
+ if (winnerStr.includes('openai') || winnerStr.includes('codex'))
175
+ winner = 'openai';
176
+ else if (winnerStr.includes('google') || winnerStr.includes('gemini'))
177
+ winner = 'google';
178
+ else if (winnerStr.includes('cursor'))
179
+ winner = 'cursor';
180
+ else if (winnerStr.includes('anthropic') || winnerStr.includes('claude'))
181
+ winner = 'anthropic';
182
+ else if (winnerStr === conflict.provider2)
183
+ winner = conflict.provider2;
184
+ }
185
+ // Extract reasoning
186
+ const reasoningMatch = decisionText.match(/Reasoning:\s*([^\n]+(?:\n(?!Winner|Resolved)[^\n]+)*)/i);
187
+ const reasoning = reasoningMatch?.[1]?.trim() ?? 'No reasoning provided';
188
+ decisions.push({
189
+ conflictId: conflict.id,
190
+ winner,
191
+ reasoning,
192
+ confidence: 0.85, // Default confidence
193
+ });
194
+ }
195
+ else {
196
+ // Default decision if parsing fails
197
+ decisions.push({
198
+ conflictId: conflict.id,
199
+ winner: conflict.provider1,
200
+ reasoning: 'Unable to parse decision, defaulting to first provider',
201
+ confidence: 0.5,
202
+ });
203
+ }
204
+ }
205
+ return decisions;
206
+ }
207
+ /**
208
+ * Build the final merged review
209
+ */
210
+ buildFinalReview(reviews, consensusFindings, decisions) {
211
+ // Start with consensus findings
212
+ const findings = [...consensusFindings];
213
+ const suggestions = [];
214
+ // Collect suggestions from all reviews
215
+ for (const review of reviews) {
216
+ suggestions.push(...review.suggestions);
217
+ }
218
+ // Deduplicate suggestions
219
+ const uniqueSuggestions = [...new Set(suggestions)];
220
+ // Determine overall severity
221
+ let overallSeverity = 'pass';
222
+ // Use the winning assessment from arbitration if available
223
+ const severityVotes = {};
224
+ for (const decision of decisions) {
225
+ const winningReview = reviews.find(r => r.provider === decision.winner);
226
+ if (winningReview) {
227
+ severityVotes[winningReview.overallSeverity] =
228
+ (severityVotes[winningReview.overallSeverity] ?? 0) + 1;
229
+ }
230
+ }
231
+ // Find most voted severity
232
+ let maxVotes = 0;
233
+ for (const [severity, votes] of Object.entries(severityVotes)) {
234
+ if (votes > maxVotes) {
235
+ maxVotes = votes;
236
+ overallSeverity = severity;
237
+ }
238
+ }
239
+ // If no arbitration decisions affected severity, use consensus
240
+ if (maxVotes === 0 && findings.length > 0) {
241
+ if (findings.some(f => f.severity === 'critical'))
242
+ overallSeverity = 'critical';
243
+ else if (findings.some(f => f.severity === 'error'))
244
+ overallSeverity = 'major';
245
+ else if (findings.some(f => f.severity === 'warning'))
246
+ overallSeverity = 'minor';
247
+ }
248
+ return {
249
+ findings,
250
+ suggestions: uniqueSuggestions.slice(0, 10),
251
+ overallSeverity,
252
+ };
253
+ }
254
+ /**
255
+ * Generate arbitration summary
256
+ */
257
+ generateSummary(decisions, finalReview) {
258
+ const lines = [];
259
+ lines.push('═══════════════════════════════════════════════════════════════');
260
+ lines.push(' Arbitration Summary ');
261
+ lines.push('═══════════════════════════════════════════════════════════════\n');
262
+ lines.push(`Conflicts Resolved: ${decisions.length}`);
263
+ lines.push(`Final Assessment: ${finalReview.overallSeverity.toUpperCase()}`);
264
+ lines.push(`Final Findings: ${finalReview.findings.length}\n`);
265
+ lines.push('Decisions:');
266
+ for (const decision of decisions) {
267
+ lines.push(` ${decision.conflictId}: Winner = ${getProviderConfig(decision.winner).displayName}`);
268
+ lines.push(` Reasoning: ${decision.reasoning.slice(0, 100)}${decision.reasoning.length > 100 ? '...' : ''}`);
269
+ }
270
+ if (finalReview.findings.length > 0) {
271
+ lines.push('\nKey Findings After Arbitration:');
272
+ for (const finding of finalReview.findings.slice(0, 5)) {
273
+ lines.push(` [${finding.severity.toUpperCase()}] ${finding.file}:${finding.line} - ${finding.message}`);
274
+ }
275
+ }
276
+ lines.push('\n═══════════════════════════════════════════════════════════════');
277
+ return lines.join('\n');
278
+ }
279
+ /**
280
+ * Create result when there are no conflicts
281
+ */
282
+ createNoConflictResult(reviewResult) {
283
+ // Merge all findings
284
+ const allFindings = reviewResult.consensusFindings;
285
+ // Determine overall severity
286
+ let overallSeverity = 'pass';
287
+ if (allFindings.some(f => f.severity === 'critical'))
288
+ overallSeverity = 'critical';
289
+ else if (allFindings.some(f => f.severity === 'error'))
290
+ overallSeverity = 'major';
291
+ else if (allFindings.some(f => f.severity === 'warning'))
292
+ overallSeverity = 'minor';
293
+ // Collect all suggestions
294
+ const suggestions = reviewResult.reviews
295
+ .flatMap(r => r.suggestions)
296
+ .filter((s, i, arr) => arr.indexOf(s) === i)
297
+ .slice(0, 10);
298
+ return {
299
+ decisions: [],
300
+ finalReview: {
301
+ findings: allFindings,
302
+ suggestions,
303
+ overallSeverity,
304
+ },
305
+ summary: 'No conflicts to resolve. All providers agree on the review.',
306
+ arbitratorProvider: this.config.provider,
307
+ executionTime: 0,
308
+ };
309
+ }
310
+ /**
311
+ * Update configuration
312
+ */
313
+ updateConfig(config) {
314
+ this.config = { ...this.config, ...config };
315
+ }
316
+ /**
317
+ * Get current configuration
318
+ */
319
+ getConfig() {
320
+ return { ...this.config };
321
+ }
322
+ }
323
+ /**
324
+ * Create an arbitrator instance
325
+ */
326
+ export function createArbitrator(config) {
327
+ return new Arbitrator(config);
328
+ }
329
+ export default Arbitrator;
330
+ //# sourceMappingURL=arbitrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arbitrator.js","sourceRoot":"","sources":["../../src/orchestrator/arbitrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Task Orchestrator
3
+ * Coordinates task execution across multiple AI providers with
4
+ * automatic routing, fallback, and multi-agent review capabilities.
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
+ import { type AgentMessage, type QueryOptions } from '../providers/index.js';
11
+ import { TaskClassifier, createTaskClassifier, type TaskClassification, type TaskContext } from './task-classifier.js';
12
+ /**
13
+ * Orchestrator configuration
14
+ */
15
+ export interface OrchestratorConfig {
16
+ /** Enable task-based routing */
17
+ routingEnabled: boolean;
18
+ /** Enable multi-agent review for code_review tasks */
19
+ multiAgentReviewEnabled: boolean;
20
+ /** Enable automatic fallback to alternative providers */
21
+ fallbackEnabled: boolean;
22
+ /** Maximum retry attempts per provider */
23
+ maxRetries: number;
24
+ /** Default provider when routing is disabled */
25
+ defaultProvider: ProviderName;
26
+ /** Minimum providers for multi-agent review */
27
+ minReviewProviders: number;
28
+ /** Provider to use for arbitration */
29
+ arbitratorProvider: ProviderName;
30
+ }
31
+ /**
32
+ * Default orchestrator configuration
33
+ */
34
+ export declare const DEFAULT_ORCHESTRATOR_CONFIG: OrchestratorConfig;
35
+ /**
36
+ * Orchestrator execution result
37
+ */
38
+ export interface OrchestratorResult {
39
+ success: boolean;
40
+ provider: ProviderName;
41
+ taskType: TaskType;
42
+ classification: TaskClassification;
43
+ messages: AgentMessage[];
44
+ fallbacksUsed: ProviderName[];
45
+ error?: string;
46
+ }
47
+ /**
48
+ * Task Orchestrator
49
+ * Main coordinator for multi-provider task execution
50
+ */
51
+ export declare class TaskOrchestrator {
52
+ private config;
53
+ private classifier;
54
+ private availableProviders;
55
+ constructor(config?: Partial<OrchestratorConfig>);
56
+ /**
57
+ * Initialize the orchestrator - detect available providers
58
+ */
59
+ initialize(): Promise<void>;
60
+ /**
61
+ * Execute a task with automatic routing and fallback
62
+ */
63
+ execute(task: string, options: QueryOptions & {
64
+ context?: TaskContext;
65
+ }): AsyncGenerator<AgentMessage, OrchestratorResult, unknown>;
66
+ /**
67
+ * Create a default classification when routing is disabled
68
+ */
69
+ private createDefaultClassification;
70
+ /**
71
+ * Get current configuration
72
+ */
73
+ getConfig(): OrchestratorConfig;
74
+ /**
75
+ * Update configuration
76
+ */
77
+ updateConfig(config: Partial<OrchestratorConfig>): void;
78
+ /**
79
+ * Get available providers
80
+ */
81
+ getAvailableProviders(): ProviderName[];
82
+ /**
83
+ * Check if multi-agent review is available
84
+ */
85
+ canDoMultiAgentReview(): boolean;
86
+ /**
87
+ * Get the task classifier for direct access
88
+ */
89
+ getClassifier(): TaskClassifier;
90
+ /**
91
+ * Manually classify a task without executing
92
+ */
93
+ classifyTask(task: string, context?: TaskContext): TaskClassification;
94
+ /**
95
+ * Get provider recommendation for a task type
96
+ */
97
+ getRecommendedProvider(taskType: TaskType): ProviderName | null;
98
+ }
99
+ /**
100
+ * Create a task orchestrator instance
101
+ */
102
+ export declare function createOrchestrator(config?: Partial<OrchestratorConfig>): TaskOrchestrator;
103
+ /**
104
+ * Get or create the orchestrator singleton
105
+ */
106
+ export declare function getOrchestrator(config?: Partial<OrchestratorConfig>): Promise<TaskOrchestrator>;
107
+ /**
108
+ * Reset the orchestrator singleton (for testing)
109
+ */
110
+ export declare function resetOrchestrator(): void;
111
+ export { TaskClassifier, createTaskClassifier, type TaskClassification, type TaskContext, };
112
+ export default TaskOrchestrator;
113
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,QAAQ,EAGd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gCAAgC;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,sDAAsD;IACtD,uBAAuB,EAAE,OAAO,CAAC;IACjC,yDAAyD;IACzD,eAAe,EAAE,OAAO,CAAC;IACzB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,eAAe,EAAE,YAAY,CAAC;IAC9B,+CAA+C;IAC/C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sCAAsC;IACtC,kBAAkB,EAAE,YAAY,CAAC;CAClC;AAED;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,kBAQzC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,kBAAkB,CAAC;IACnC,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,kBAAkB,CAAsB;gBAEpC,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC;IAKhD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjC;;OAEG;IACI,OAAO,CACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,GAAG;QAAE,OAAO,CAAC,EAAE,WAAW,CAAA;KAAE,GAChD,cAAc,CAAC,YAAY,EAAE,kBAAkB,EAAE,OAAO,CAAC;IA2F5D;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAcnC;;OAEG;IACH,SAAS,IAAI,kBAAkB;IAI/B;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAOvD;;OAEG;IACH,qBAAqB,IAAI,YAAY,EAAE;IAIvC;;OAEG;IACH,qBAAqB,IAAI,OAAO;IAOhC;;OAEG;IACH,aAAa,IAAI,cAAc;IAI/B;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,kBAAkB;IAIrE;;OAEG;IACH,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,GAAG,IAAI;CAIhE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GACnC,gBAAgB,CAElB;AAOD;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GACnC,OAAO,CAAC,gBAAgB,CAAC,CAM3B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAGD,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,KAAK,kBAAkB,EACvB,KAAK,WAAW,GACjB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Task Orchestrator
3
+ * Coordinates task execution across multiple AI providers with
4
+ * automatic routing, fallback, and multi-agent review capabilities.
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, getAvailableProviders, } from '../providers/index.js';
11
+ import { TaskClassifier, createTaskClassifier, } from './task-classifier.js';
12
+ /**
13
+ * Default orchestrator configuration
14
+ */
15
+ export const DEFAULT_ORCHESTRATOR_CONFIG = {
16
+ routingEnabled: true,
17
+ multiAgentReviewEnabled: true,
18
+ fallbackEnabled: true,
19
+ maxRetries: 3,
20
+ defaultProvider: 'anthropic',
21
+ minReviewProviders: 2,
22
+ arbitratorProvider: 'anthropic',
23
+ };
24
+ /**
25
+ * Task Orchestrator
26
+ * Main coordinator for multi-provider task execution
27
+ */
28
+ export class TaskOrchestrator {
29
+ config;
30
+ classifier;
31
+ availableProviders = [];
32
+ constructor(config) {
33
+ this.config = { ...DEFAULT_ORCHESTRATOR_CONFIG, ...config };
34
+ this.classifier = createTaskClassifier();
35
+ }
36
+ /**
37
+ * Initialize the orchestrator - detect available providers
38
+ */
39
+ async initialize() {
40
+ const available = await getAvailableProviders();
41
+ this.availableProviders = available.map(p => p.name);
42
+ this.classifier.setAvailableProviders(this.availableProviders);
43
+ this.classifier.setDefaultProvider(this.config.defaultProvider);
44
+ console.log(`Orchestrator initialized with ${this.availableProviders.length} providers:`);
45
+ for (const provider of this.availableProviders) {
46
+ console.log(` ✓ ${getProviderConfig(provider).displayName}`);
47
+ }
48
+ }
49
+ /**
50
+ * Execute a task with automatic routing and fallback
51
+ */
52
+ async *execute(task, options) {
53
+ const context = options.context ?? {};
54
+ // Classify the task
55
+ const classification = this.config.routingEnabled
56
+ ? this.classifier.classify(task, context)
57
+ : this.createDefaultClassification(task);
58
+ console.log(`\n📋 Task Classification:`);
59
+ console.log(` Type: ${classification.taskType}`);
60
+ console.log(` Provider: ${getProviderConfig(classification.recommendedProvider).displayName}`);
61
+ console.log(` Confidence: ${Math.round(classification.confidence * 100)}%`);
62
+ if (classification.keywords.length > 0) {
63
+ console.log(` Keywords: ${classification.keywords.join(', ')}`);
64
+ }
65
+ // Check if multi-agent review is needed
66
+ if (this.config.multiAgentReviewEnabled &&
67
+ this.classifier.isMultiAgentTask(classification.taskType)) {
68
+ console.log(`\n⚖️ Multi-agent review enabled for this task type`);
69
+ // TODO: Implement multi-agent review coordinator
70
+ // For now, fall through to single-provider execution
71
+ }
72
+ // Build provider order
73
+ const providerOrder = [
74
+ classification.recommendedProvider,
75
+ ...classification.fallbackProviders,
76
+ ];
77
+ const messages = [];
78
+ const fallbacksUsed = [];
79
+ let lastError;
80
+ let successProvider;
81
+ // Try providers in order
82
+ for (const providerName of providerOrder) {
83
+ if (!this.availableProviders.includes(providerName)) {
84
+ continue;
85
+ }
86
+ try {
87
+ console.log(`\n🔄 Executing with ${getProviderConfig(providerName).displayName}...`);
88
+ const provider = getProvider(providerName);
89
+ // Execute query
90
+ for await (const message of provider.query(task, options)) {
91
+ messages.push(message);
92
+ yield message;
93
+ // Check for success
94
+ if (message.type === 'result' && message.subtype === 'success') {
95
+ successProvider = providerName;
96
+ break;
97
+ }
98
+ }
99
+ if (successProvider) {
100
+ break;
101
+ }
102
+ }
103
+ catch (error) {
104
+ lastError = error instanceof Error ? error.message : String(error);
105
+ console.warn(`Provider ${providerName} failed: ${lastError}`);
106
+ if (providerName !== classification.recommendedProvider) {
107
+ fallbacksUsed.push(providerName);
108
+ }
109
+ if (!this.config.fallbackEnabled) {
110
+ break;
111
+ }
112
+ // Continue to next provider
113
+ continue;
114
+ }
115
+ }
116
+ return {
117
+ success: !!successProvider,
118
+ provider: successProvider ?? classification.recommendedProvider,
119
+ taskType: classification.taskType,
120
+ classification,
121
+ messages,
122
+ fallbacksUsed,
123
+ error: successProvider ? undefined : lastError,
124
+ };
125
+ }
126
+ /**
127
+ * Create a default classification when routing is disabled
128
+ */
129
+ createDefaultClassification(task) {
130
+ return {
131
+ taskType: 'general',
132
+ recommendedProvider: this.config.defaultProvider,
133
+ fallbackProviders: this.availableProviders.filter(p => p !== this.config.defaultProvider),
134
+ confidence: 1.0,
135
+ reasoning: 'Routing disabled, using default provider',
136
+ requiredCapabilities: ['tool_use'],
137
+ keywords: [],
138
+ };
139
+ }
140
+ /**
141
+ * Get current configuration
142
+ */
143
+ getConfig() {
144
+ return { ...this.config };
145
+ }
146
+ /**
147
+ * Update configuration
148
+ */
149
+ updateConfig(config) {
150
+ this.config = { ...this.config, ...config };
151
+ if (config.defaultProvider) {
152
+ this.classifier.setDefaultProvider(config.defaultProvider);
153
+ }
154
+ }
155
+ /**
156
+ * Get available providers
157
+ */
158
+ getAvailableProviders() {
159
+ return [...this.availableProviders];
160
+ }
161
+ /**
162
+ * Check if multi-agent review is available
163
+ */
164
+ canDoMultiAgentReview() {
165
+ return (this.config.multiAgentReviewEnabled &&
166
+ this.availableProviders.length >= this.config.minReviewProviders);
167
+ }
168
+ /**
169
+ * Get the task classifier for direct access
170
+ */
171
+ getClassifier() {
172
+ return this.classifier;
173
+ }
174
+ /**
175
+ * Manually classify a task without executing
176
+ */
177
+ classifyTask(task, context) {
178
+ return this.classifier.classify(task, context);
179
+ }
180
+ /**
181
+ * Get provider recommendation for a task type
182
+ */
183
+ getRecommendedProvider(taskType) {
184
+ const providers = this.classifier.getProvidersForTask(taskType);
185
+ return providers[0] ?? null;
186
+ }
187
+ }
188
+ /**
189
+ * Create a task orchestrator instance
190
+ */
191
+ export function createOrchestrator(config) {
192
+ return new TaskOrchestrator(config);
193
+ }
194
+ /**
195
+ * Singleton orchestrator instance
196
+ */
197
+ let orchestratorInstance = null;
198
+ /**
199
+ * Get or create the orchestrator singleton
200
+ */
201
+ export async function getOrchestrator(config) {
202
+ if (!orchestratorInstance) {
203
+ orchestratorInstance = createOrchestrator(config);
204
+ await orchestratorInstance.initialize();
205
+ }
206
+ return orchestratorInstance;
207
+ }
208
+ /**
209
+ * Reset the orchestrator singleton (for testing)
210
+ */
211
+ export function resetOrchestrator() {
212
+ orchestratorInstance = null;
213
+ }
214
+ // Re-export types
215
+ export { TaskClassifier, createTaskClassifier, };
216
+ export default TaskOrchestrator;
217
+ //# sourceMappingURL=index.js.map