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
package/dist/index.js ADDED
@@ -0,0 +1,385 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Monty Full-Stack Agent Framework
4
+ * Main entry point that routes between initializer and coding agents.
5
+ *
6
+ * Copyright (c) 2025 Dobeu Tech Solutions LLC
7
+ * Licensed under CC BY-NC 4.0 - Non-commercial use only
8
+ * https://creativecommons.org/licenses/by-nc/4.0/
9
+ *
10
+ * Based on Anthropic's best practices for effective agent harnesses:
11
+ * https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents
12
+ */
13
+ import { existsSync, mkdirSync } from "fs";
14
+ import { agentConfig } from "./config/agent-config.js";
15
+ import { runInitializerAgent } from "./agents/initializer.js";
16
+ import { runCodingAgent } from "./agents/coding.js";
17
+ import { multiAuthManager } from "./utils/multi-auth-manager.js";
18
+ /**
19
+ * Check if this is the first run (no .agent directory)
20
+ */
21
+ function isFirstRun() {
22
+ return !existsSync(agentConfig.paths.agentDir);
23
+ }
24
+ /**
25
+ * Run a function with retry logic for transient failures
26
+ * Implements exponential backoff with configurable max retries
27
+ */
28
+ async function runWithRetry(runFn, maxRetries = agentConfig.session.maxRetries) {
29
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
30
+ try {
31
+ await runFn();
32
+ return;
33
+ }
34
+ catch (error) {
35
+ const errorMessage = error instanceof Error ? error.message : String(error);
36
+ // Don't retry on certain errors that indicate configuration issues
37
+ if (errorMessage.includes("Feature list not found") ||
38
+ errorMessage.includes("not been initialized")) {
39
+ throw error;
40
+ }
41
+ if (attempt === maxRetries) {
42
+ console.error(`\n❌ All ${maxRetries} attempts failed.`);
43
+ throw error;
44
+ }
45
+ console.log(`\n⚠️ Attempt ${attempt}/${maxRetries} failed: ${errorMessage}`);
46
+ console.log(` Retrying in ${attempt} second(s)...`);
47
+ // Exponential backoff
48
+ await new Promise(resolve => setTimeout(resolve, 1000 * attempt));
49
+ }
50
+ }
51
+ }
52
+ /**
53
+ * Valid provider names for --provider option
54
+ */
55
+ const VALID_PROVIDERS = ['anthropic', 'openai', 'google', 'cursor'];
56
+ /**
57
+ * Parse command line arguments
58
+ */
59
+ function parseArgs() {
60
+ const args = process.argv.slice(2);
61
+ // Parse --provider=<name> option
62
+ const providerArg = args.find(a => a.startsWith("--provider="))?.split("=")[1];
63
+ let provider;
64
+ if (providerArg) {
65
+ if (providerArg === 'all') {
66
+ provider = 'all';
67
+ }
68
+ else if (VALID_PROVIDERS.includes(providerArg)) {
69
+ provider = providerArg;
70
+ }
71
+ else {
72
+ console.error(`\n✗ Invalid provider: "${providerArg}"`);
73
+ console.error(` Valid providers: ${VALID_PROVIDERS.join(', ')}, all\n`);
74
+ process.exit(1);
75
+ }
76
+ }
77
+ // Parse --set-default=<name> option
78
+ const setDefaultArg = args.find(a => a.startsWith("--set-default="))?.split("=")[1];
79
+ let setDefault;
80
+ if (setDefaultArg && VALID_PROVIDERS.includes(setDefaultArg)) {
81
+ setDefault = setDefaultArg;
82
+ }
83
+ return {
84
+ forceInit: args.includes("--init") || process.env.FORCE_INIT === "true",
85
+ forceCoding: args.includes("--code"),
86
+ spec: args.find(a => a.startsWith("--spec="))?.split("=").slice(1).join("="),
87
+ context: args.find(a => a.startsWith("--context="))?.split("=").slice(1).join("="),
88
+ login: args.includes("--login") || args.includes("login"),
89
+ logout: args.includes("--logout") || args.includes("logout"),
90
+ whoami: args.includes("--whoami") || args.includes("whoami"),
91
+ providers: args.includes("--providers") || args.includes("providers"),
92
+ provider,
93
+ setDefault,
94
+ };
95
+ }
96
+ /**
97
+ * Display usage information
98
+ */
99
+ function showUsage() {
100
+ console.log(`
101
+ ╔══════════════════════════════════════════════════════════════════════════════╗
102
+ ║ MONTY FULL-STACK AGENT FRAMEWORK ║
103
+ ║ ║
104
+ ║ Multi-provider AI orchestration with Claude, OpenAI, Google, and Cursor ║
105
+ ╚══════════════════════════════════════════════════════════════════════════════╝
106
+
107
+ USAGE:
108
+ monty Auto-detect mode (init or coding)
109
+ monty init Force initialization mode
110
+ monty code Force coding mode
111
+
112
+ AUTHENTICATION:
113
+ monty login Interactive login (auto-detects Claude Code)
114
+ monty login --provider=NAME Login to specific provider
115
+ monty logout Logout from all providers
116
+ monty logout --provider=NAME Logout from specific provider
117
+ monty whoami Show current authentication status
118
+ monty providers Show all provider status
119
+
120
+ Provider Names: anthropic, openai, google, cursor, all
121
+
122
+ PROVIDER OPTIONS:
123
+ --provider=NAME Target specific provider (anthropic, openai, google, cursor)
124
+ --provider=all Configure all providers
125
+ --set-default=NAME Set default provider for routing
126
+
127
+ AGENT OPTIONS:
128
+ --init Force run initializer agent
129
+ --code Force run coding agent
130
+ --spec="..." Project specification for initializer
131
+ --context="..." Additional context for coding agent
132
+
133
+ ENVIRONMENT VARIABLES:
134
+ ANTHROPIC_API_KEY Anthropic/Claude API key
135
+ OPENAI_API_KEY OpenAI/Codex API key
136
+ GOOGLE_API_KEY Google/Gemini API key
137
+ CURSOR_API_KEY Cursor Cloud API key
138
+ FORCE_INIT=true Force initialization mode
139
+
140
+ WORKFLOW:
141
+ 1. First run automatically triggers Initializer Agent
142
+ 2. Subsequent runs use Coding Agent for incremental progress
143
+ 3. Task orchestrator routes tasks to optimal provider
144
+ 4. Multi-agent review available for code review tasks
145
+
146
+ FILES:
147
+ ~/.monty/credentials.json Multi-provider credentials (v2.0)
148
+ .agent/feature_list.json Feature tracking (JSON)
149
+ .agent/claude-progress.txt Progress log between sessions
150
+
151
+ EXAMPLES:
152
+ monty login # Interactive login, auto-detect Claude Code
153
+ monty login --provider=openai # Login to OpenAI only
154
+ monty login --provider=all # Configure all providers
155
+ monty providers # Show status of all providers
156
+ monty --set-default=google # Set Google as default provider
157
+ `);
158
+ }
159
+ /**
160
+ * Display provider status
161
+ */
162
+ function showProviderStatus() {
163
+ console.log('\n╔══════════════════════════════════════════════════════════════════════════════╗');
164
+ console.log('║ AI PROVIDER STATUS ║');
165
+ console.log('╚══════════════════════════════════════════════════════════════════════════════╝\n');
166
+ const providers = multiAuthManager.getProviderDisplayInfo();
167
+ const defaultProvider = multiAuthManager.getDefaultProvider();
168
+ console.log(' Provider Status Auth Method Default');
169
+ console.log(' ─────────────────────────────────────────────────────────────────────────────');
170
+ for (const provider of providers) {
171
+ const status = provider.authenticated
172
+ ? '\x1b[32m✓ Authenticated\x1b[0m'
173
+ : '\x1b[90m○ Not configured\x1b[0m';
174
+ const method = provider.method ?? '-';
175
+ const isDefault = provider.name === defaultProvider ? '★' : '';
176
+ const keyPreview = provider.keyPreview ? ` (${provider.keyPreview})` : '';
177
+ console.log(` ${provider.displayName.padEnd(18)} ${(provider.authenticated ? '✓ Authenticated' : '○ Not configured').padEnd(20)} ${method.padEnd(14)} ${isDefault}`);
178
+ if (provider.keyPreview) {
179
+ console.log(` Key: ${provider.keyPreview}`);
180
+ }
181
+ }
182
+ const authenticatedCount = providers.filter(p => p.authenticated).length;
183
+ console.log('\n ─────────────────────────────────────────────────────────────────────────────');
184
+ console.log(` Authenticated: ${authenticatedCount}/${providers.length} providers`);
185
+ console.log(` Default: ${defaultProvider}`);
186
+ if (authenticatedCount === 0) {
187
+ console.log('\n Run "monty login" to authenticate with a provider.');
188
+ }
189
+ else if (authenticatedCount === 1) {
190
+ console.log('\n Run "monty login --provider=NAME" to add more providers.');
191
+ }
192
+ else {
193
+ console.log('\n Multi-agent code review is available with multiple providers.');
194
+ }
195
+ console.log('');
196
+ }
197
+ /**
198
+ * Main entry point
199
+ */
200
+ async function main() {
201
+ const args = parseArgs();
202
+ // Show help if requested
203
+ if (process.argv.includes("--help") || process.argv.includes("-h")) {
204
+ showUsage();
205
+ process.exit(0);
206
+ }
207
+ // Handle set-default option
208
+ if (args.setDefault) {
209
+ multiAuthManager.setDefaultProvider(args.setDefault);
210
+ console.log(`\n✓ Default provider set to: ${args.setDefault}\n`);
211
+ process.exit(0);
212
+ }
213
+ // Handle providers command - show all provider status
214
+ if (args.providers) {
215
+ showProviderStatus();
216
+ process.exit(0);
217
+ }
218
+ // Handle authentication commands FIRST (before auth check)
219
+ if (args.login) {
220
+ let success;
221
+ if (args.provider === 'all') {
222
+ await multiAuthManager.loginAll();
223
+ success = multiAuthManager.isAnyProviderAuthenticated();
224
+ }
225
+ else if (args.provider) {
226
+ success = await multiAuthManager.loginProvider(args.provider);
227
+ }
228
+ else {
229
+ // Default: try multi-auth login (starts with Anthropic auto-detect)
230
+ success = await multiAuthManager.loginProvider('anthropic');
231
+ if (success) {
232
+ // Ask if user wants to configure additional providers
233
+ const rl = await import('readline').then(m => m.createInterface({
234
+ input: process.stdin,
235
+ output: process.stdout,
236
+ }));
237
+ const answer = await new Promise(resolve => {
238
+ rl.question('\nWould you like to configure additional providers? (y/N): ', resolve);
239
+ });
240
+ rl.close();
241
+ if (answer.toLowerCase() === 'y') {
242
+ for (const provider of ['openai', 'google', 'cursor']) {
243
+ const configure = await new Promise(resolve => {
244
+ const rl2 = require('readline').createInterface({
245
+ input: process.stdin,
246
+ output: process.stdout,
247
+ });
248
+ rl2.question(`Configure ${provider}? (y/N): `, (ans) => {
249
+ rl2.close();
250
+ resolve(ans);
251
+ });
252
+ });
253
+ if (configure.toLowerCase() === 'y') {
254
+ await multiAuthManager.loginProvider(provider);
255
+ }
256
+ }
257
+ }
258
+ }
259
+ }
260
+ process.exit(success ? 0 : 1);
261
+ }
262
+ if (args.logout) {
263
+ if (args.provider && args.provider !== 'all') {
264
+ multiAuthManager.logoutProvider(args.provider);
265
+ }
266
+ else {
267
+ multiAuthManager.logoutAll();
268
+ }
269
+ process.exit(0);
270
+ }
271
+ if (args.whoami) {
272
+ multiAuthManager.whoami();
273
+ process.exit(0);
274
+ }
275
+ // Check authentication for other commands - now checks any provider
276
+ if (!multiAuthManager.isAnyProviderAuthenticated()) {
277
+ console.log(`
278
+ ╔══════════════════════════════════════════════════════════════════════════════╗
279
+ ║ AUTHENTICATION REQUIRED ║
280
+ ╚══════════════════════════════════════════════════════════════════════════════╝
281
+
282
+ No AI provider is authenticated.
283
+
284
+ To authenticate, choose one of:
285
+ 1. Run: monty login (auto-detect Claude Code)
286
+ 2. Run: monty login --provider=anthropic (configure Anthropic/Claude)
287
+ 3. Run: monty login --provider=openai (configure OpenAI/Codex)
288
+ 4. Run: monty login --provider=google (configure Google/Gemini)
289
+ 5. Run: monty login --provider=all (configure all providers)
290
+
291
+ Or set environment variables:
292
+ export ANTHROPIC_API_KEY=your-key
293
+ export OPENAI_API_KEY=your-key
294
+ export GOOGLE_API_KEY=your-key
295
+ `);
296
+ process.exit(1);
297
+ }
298
+ // Validate authentication before proceeding (async to handle token refresh)
299
+ const defaultProvider = multiAuthManager.getDefaultProvider();
300
+ const apiKey = await multiAuthManager.getApiKey(defaultProvider);
301
+ if (!apiKey) {
302
+ // Try to find any authenticated provider
303
+ const authenticatedProviders = multiAuthManager.getAuthenticatedProviders();
304
+ if (authenticatedProviders.length === 0) {
305
+ console.error(`
306
+ No valid authentication found for any provider.
307
+
308
+ Please authenticate using: monty login
309
+ `);
310
+ process.exit(1);
311
+ }
312
+ // Use the first authenticated provider
313
+ const fallbackProvider = authenticatedProviders[0];
314
+ console.log(`Default provider (${defaultProvider}) not authenticated, using ${fallbackProvider}`);
315
+ multiAuthManager.setDefaultProvider(fallbackProvider);
316
+ }
317
+ // Ensure API keys are set in environment for all authenticated providers
318
+ multiAuthManager.setEnvForChildProcess();
319
+ // Show provider status
320
+ const authenticatedProviders = multiAuthManager.getAuthenticatedProviders();
321
+ const providerList = authenticatedProviders.length > 1
322
+ ? `(${authenticatedProviders.join(', ')})`
323
+ : `(${defaultProvider})`;
324
+ console.log(`
325
+ ╔══════════════════════════════════════════════════════════════════════════════╗
326
+ ║ MONTY FULL-STACK AGENT FRAMEWORK ║
327
+ ║ Multi-Provider AI Orchestration System ║
328
+ ╚══════════════════════════════════════════════════════════════════════════════╝
329
+ Providers: ${authenticatedProviders.length} active ${providerList}
330
+ `);
331
+ // Determine which agent to run
332
+ const shouldInitialize = args.forceInit || (isFirstRun() && !args.forceCoding);
333
+ if (shouldInitialize) {
334
+ // Initialize mode
335
+ console.log("📦 Mode: INITIALIZER");
336
+ console.log("━".repeat(70));
337
+ if (!args.spec) {
338
+ console.log(`
339
+ ⚠️ No project specification provided.
340
+
341
+ Please provide a project spec using one of these methods:
342
+ 1. Command line: npm start -- --spec="Build a todo app with React..."
343
+ 2. Interactive: The agent will ask for your specification
344
+
345
+ For now, please describe what you want to build:
346
+ `);
347
+ // In a real implementation, you'd read from stdin here
348
+ // For now, we'll use a placeholder that prompts the agent to ask
349
+ const spec = "Please ask the user for their project specification.";
350
+ // Ensure .agent directory exists
351
+ if (!existsSync(agentConfig.paths.agentDir)) {
352
+ mkdirSync(agentConfig.paths.agentDir, { recursive: true });
353
+ }
354
+ await runWithRetry(() => runInitializerAgent(spec));
355
+ }
356
+ else {
357
+ // Ensure .agent directory exists
358
+ if (!existsSync(agentConfig.paths.agentDir)) {
359
+ mkdirSync(agentConfig.paths.agentDir, { recursive: true });
360
+ }
361
+ await runWithRetry(() => runInitializerAgent(args.spec));
362
+ }
363
+ }
364
+ else {
365
+ // Coding mode
366
+ console.log("🔨 Mode: CODING");
367
+ console.log("━".repeat(70));
368
+ if (!existsSync(agentConfig.paths.featureList)) {
369
+ console.error(`
370
+ ❌ Error: Feature list not found at ${agentConfig.paths.featureList}
371
+
372
+ The project has not been initialized. Run with --init flag first:
373
+ npm run agent:init
374
+ `);
375
+ process.exit(1);
376
+ }
377
+ await runWithRetry(() => runCodingAgent(args.context));
378
+ }
379
+ }
380
+ // Run main function
381
+ main().catch((error) => {
382
+ console.error("Fatal error:", error);
383
+ process.exit(1);
384
+ });
385
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
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 { type ProviderName } from '../config/provider-config.js';
10
+ import { type ReviewFinding, type CoordinatedReviewResult } from './review-coordinator.js';
11
+ /**
12
+ * Arbitration decision for a single conflict
13
+ */
14
+ export interface ConflictDecision {
15
+ conflictId: string;
16
+ winner: ProviderName;
17
+ reasoning: string;
18
+ confidence: number;
19
+ resolvedFinding?: ReviewFinding;
20
+ }
21
+ /**
22
+ * Full arbitration result
23
+ */
24
+ export interface ArbitrationResult {
25
+ decisions: ConflictDecision[];
26
+ finalReview: {
27
+ findings: ReviewFinding[];
28
+ suggestions: string[];
29
+ overallSeverity: 'pass' | 'minor' | 'major' | 'critical';
30
+ };
31
+ summary: string;
32
+ arbitratorProvider: ProviderName;
33
+ executionTime: number;
34
+ }
35
+ /**
36
+ * Arbitrator configuration
37
+ */
38
+ export interface ArbitratorConfig {
39
+ /** Provider to use for arbitration */
40
+ provider: ProviderName;
41
+ /** Maximum time for arbitration (ms) */
42
+ timeout: number;
43
+ /** Read-only tools for investigation */
44
+ allowedTools: string[];
45
+ /** Whether to investigate code directly */
46
+ investigateCode: boolean;
47
+ }
48
+ /**
49
+ * Arbitrator Sub-Agent
50
+ * Resolves conflicts between AI provider reviews
51
+ */
52
+ export declare class Arbitrator {
53
+ private config;
54
+ constructor(config?: Partial<ArbitratorConfig>);
55
+ /**
56
+ * Resolve conflicts from a coordinated review
57
+ */
58
+ resolve(reviewResult: CoordinatedReviewResult, context?: string): Promise<ArbitrationResult>;
59
+ /**
60
+ * Build the arbitration prompt
61
+ */
62
+ private buildArbitrationPrompt;
63
+ /**
64
+ * Parse arbitration decisions from response
65
+ */
66
+ private parseArbitrationDecisions;
67
+ /**
68
+ * Build the final merged review
69
+ */
70
+ private buildFinalReview;
71
+ /**
72
+ * Generate arbitration summary
73
+ */
74
+ private generateSummary;
75
+ /**
76
+ * Create result when there are no conflicts
77
+ */
78
+ private createNoConflictResult;
79
+ /**
80
+ * Update configuration
81
+ */
82
+ updateConfig(config: Partial<ArbitratorConfig>): void;
83
+ /**
84
+ * Get current configuration
85
+ */
86
+ getConfig(): ArbitratorConfig;
87
+ }
88
+ /**
89
+ * Create an arbitrator instance
90
+ */
91
+ export declare function createArbitrator(config?: Partial<ArbitratorConfig>): Arbitrator;
92
+ export default Arbitrator;
93
+ //# sourceMappingURL=arbitrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arbitrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/arbitrator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,YAAY,EAElB,MAAM,8BAA8B,CAAC;AAMtC,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC7B,MAAM,yBAAyB,CAAC;AAEjC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,aAAa,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,WAAW,EAAE;QACX,QAAQ,EAAE,aAAa,EAAE,CAAC;QAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,eAAe,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;KAC1D,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,YAAY,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,QAAQ,EAAE,YAAY,CAAC;IACvB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,2CAA2C;IAC3C,eAAe,EAAE,OAAO,CAAC;CAC1B;AAYD;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAI9C;;OAEG;IACG,OAAO,CACX,YAAY,EAAE,uBAAuB,EACrC,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,iBAAiB,CAAC;IAyD7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAmF9B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAiEjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqDxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAgCvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+B9B;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAIrD;;OAEG;IACH,SAAS,IAAI,gBAAgB;CAG9B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAE/E;AAED,eAAe,UAAU,CAAC"}