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
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"}
|