monty-autonomous-fullstack-dev-multillm 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +81 -0
- package/README.md +608 -0
- package/bin/cli.js +448 -0
- package/dist/agents/coding.d.ts +15 -0
- package/dist/agents/coding.d.ts.map +1 -0
- package/dist/agents/coding.js +189 -0
- package/dist/agents/coding.js.map +1 -0
- package/dist/agents/initializer.d.ts +15 -0
- package/dist/agents/initializer.d.ts.map +1 -0
- package/dist/agents/initializer.js +87 -0
- package/dist/agents/initializer.js.map +1 -0
- package/dist/agents/prompts/arbitrator.md +143 -0
- package/dist/agents/prompts/coding.md +247 -0
- package/dist/agents/prompts/initializer.md +98 -0
- package/dist/config/agent-config.d.ts +103 -0
- package/dist/config/agent-config.d.ts.map +1 -0
- package/dist/config/agent-config.js +138 -0
- package/dist/config/agent-config.js.map +1 -0
- package/dist/config/auth-config.d.ts +152 -0
- package/dist/config/auth-config.d.ts.map +1 -0
- package/dist/config/auth-config.js +139 -0
- package/dist/config/auth-config.js.map +1 -0
- package/dist/config/mcp-config.d.ts +109 -0
- package/dist/config/mcp-config.d.ts.map +1 -0
- package/dist/config/mcp-config.js +234 -0
- package/dist/config/mcp-config.js.map +1 -0
- package/dist/config/provider-config.d.ts +139 -0
- package/dist/config/provider-config.d.ts.map +1 -0
- package/dist/config/provider-config.js +344 -0
- package/dist/config/provider-config.js.map +1 -0
- package/dist/config/subagents-config.d.ts +85 -0
- package/dist/config/subagents-config.d.ts.map +1 -0
- package/dist/config/subagents-config.js +430 -0
- package/dist/config/subagents-config.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +385 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestrator/arbitrator.d.ts +93 -0
- package/dist/orchestrator/arbitrator.d.ts.map +1 -0
- package/dist/orchestrator/arbitrator.js +330 -0
- package/dist/orchestrator/arbitrator.js.map +1 -0
- package/dist/orchestrator/index.d.ts +113 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +217 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/review-coordinator.d.ts +143 -0
- package/dist/orchestrator/review-coordinator.d.ts.map +1 -0
- package/dist/orchestrator/review-coordinator.js +401 -0
- package/dist/orchestrator/review-coordinator.js.map +1 -0
- package/dist/orchestrator/task-classifier.d.ts +87 -0
- package/dist/orchestrator/task-classifier.d.ts.map +1 -0
- package/dist/orchestrator/task-classifier.js +250 -0
- package/dist/orchestrator/task-classifier.js.map +1 -0
- package/dist/providers/anthropic-provider.d.ts +64 -0
- package/dist/providers/anthropic-provider.d.ts.map +1 -0
- package/dist/providers/anthropic-provider.js +264 -0
- package/dist/providers/anthropic-provider.js.map +1 -0
- package/dist/providers/base-provider.d.ts +219 -0
- package/dist/providers/base-provider.d.ts.map +1 -0
- package/dist/providers/base-provider.js +143 -0
- package/dist/providers/base-provider.js.map +1 -0
- package/dist/providers/cursor-provider.d.ts +82 -0
- package/dist/providers/cursor-provider.d.ts.map +1 -0
- package/dist/providers/cursor-provider.js +321 -0
- package/dist/providers/cursor-provider.js.map +1 -0
- package/dist/providers/google-provider.d.ts +75 -0
- package/dist/providers/google-provider.d.ts.map +1 -0
- package/dist/providers/google-provider.js +274 -0
- package/dist/providers/google-provider.js.map +1 -0
- package/dist/providers/index.d.ts +92 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +233 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai-provider.d.ts +83 -0
- package/dist/providers/openai-provider.d.ts.map +1 -0
- package/dist/providers/openai-provider.js +295 -0
- package/dist/providers/openai-provider.js.map +1 -0
- package/dist/templates/feature_list.template.json +66 -0
- package/dist/templates/progress.template.txt +51 -0
- package/dist/utils/auth-manager.d.ts +121 -0
- package/dist/utils/auth-manager.d.ts.map +1 -0
- package/dist/utils/auth-manager.js +560 -0
- package/dist/utils/auth-manager.js.map +1 -0
- package/dist/utils/budget-enforcer.d.ts +181 -0
- package/dist/utils/budget-enforcer.d.ts.map +1 -0
- package/dist/utils/budget-enforcer.js +386 -0
- package/dist/utils/budget-enforcer.js.map +1 -0
- package/dist/utils/chatgpt-detector.d.ts +51 -0
- package/dist/utils/chatgpt-detector.d.ts.map +1 -0
- package/dist/utils/chatgpt-detector.js +274 -0
- package/dist/utils/chatgpt-detector.js.map +1 -0
- package/dist/utils/claude-code-detector.d.ts +39 -0
- package/dist/utils/claude-code-detector.d.ts.map +1 -0
- package/dist/utils/claude-code-detector.js +153 -0
- package/dist/utils/claude-code-detector.js.map +1 -0
- package/dist/utils/code-quality.d.ts +58 -0
- package/dist/utils/code-quality.d.ts.map +1 -0
- package/dist/utils/code-quality.js +258 -0
- package/dist/utils/code-quality.js.map +1 -0
- package/dist/utils/context-primer.d.ts +50 -0
- package/dist/utils/context-primer.d.ts.map +1 -0
- package/dist/utils/context-primer.js +429 -0
- package/dist/utils/context-primer.js.map +1 -0
- package/dist/utils/dependency-management.d.ts +40 -0
- package/dist/utils/dependency-management.d.ts.map +1 -0
- package/dist/utils/dependency-management.js +123 -0
- package/dist/utils/dependency-management.js.map +1 -0
- package/dist/utils/environment-validation.d.ts +33 -0
- package/dist/utils/environment-validation.d.ts.map +1 -0
- package/dist/utils/environment-validation.js +136 -0
- package/dist/utils/environment-validation.js.map +1 -0
- package/dist/utils/error-recovery.d.ts +60 -0
- package/dist/utils/error-recovery.d.ts.map +1 -0
- package/dist/utils/error-recovery.js +183 -0
- package/dist/utils/error-recovery.js.map +1 -0
- package/dist/utils/feature-list.d.ts +102 -0
- package/dist/utils/feature-list.d.ts.map +1 -0
- package/dist/utils/feature-list.js +191 -0
- package/dist/utils/feature-list.js.map +1 -0
- package/dist/utils/gemini-detector.d.ts +65 -0
- package/dist/utils/gemini-detector.d.ts.map +1 -0
- package/dist/utils/gemini-detector.js +340 -0
- package/dist/utils/gemini-detector.js.map +1 -0
- package/dist/utils/git-utils.d.ts +48 -0
- package/dist/utils/git-utils.d.ts.map +1 -0
- package/dist/utils/git-utils.js +110 -0
- package/dist/utils/git-utils.js.map +1 -0
- package/dist/utils/health-check.d.ts +32 -0
- package/dist/utils/health-check.d.ts.map +1 -0
- package/dist/utils/health-check.js +152 -0
- package/dist/utils/health-check.js.map +1 -0
- package/dist/utils/hooks-manager.d.ts +154 -0
- package/dist/utils/hooks-manager.d.ts.map +1 -0
- package/dist/utils/hooks-manager.js +359 -0
- package/dist/utils/hooks-manager.js.map +1 -0
- package/dist/utils/multi-auth-manager.d.ts +144 -0
- package/dist/utils/multi-auth-manager.d.ts.map +1 -0
- package/dist/utils/multi-auth-manager.js +588 -0
- package/dist/utils/multi-auth-manager.js.map +1 -0
- package/dist/utils/progress.d.ts +49 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +209 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/project-detection.d.ts +40 -0
- package/dist/utils/project-detection.d.ts.map +1 -0
- package/dist/utils/project-detection.js +230 -0
- package/dist/utils/project-detection.js.map +1 -0
- package/dist/utils/session-manager.d.ts +119 -0
- package/dist/utils/session-manager.d.ts.map +1 -0
- package/dist/utils/session-manager.js +389 -0
- package/dist/utils/session-manager.js.map +1 -0
- package/dist/utils/skills-manager.d.ts +113 -0
- package/dist/utils/skills-manager.d.ts.map +1 -0
- package/dist/utils/skills-manager.js +332 -0
- package/dist/utils/skills-manager.js.map +1 -0
- package/dist/utils/structured-output.d.ts +117 -0
- package/dist/utils/structured-output.d.ts.map +1 -0
- package/dist/utils/structured-output.js +191 -0
- package/dist/utils/structured-output.js.map +1 -0
- package/dist/utils/subagent-manager.d.ts +143 -0
- package/dist/utils/subagent-manager.d.ts.map +1 -0
- package/dist/utils/subagent-manager.js +326 -0
- package/dist/utils/subagent-manager.js.map +1 -0
- package/dist/utils/supabase-setup.d.ts +50 -0
- package/dist/utils/supabase-setup.d.ts.map +1 -0
- package/dist/utils/supabase-setup.js +151 -0
- package/dist/utils/supabase-setup.js.map +1 -0
- package/dist/utils/token-refresh.d.ts +21 -0
- package/dist/utils/token-refresh.d.ts.map +1 -0
- package/dist/utils/token-refresh.js +77 -0
- package/dist/utils/token-refresh.js.map +1 -0
- package/dist/utils/tos-warning.d.ts +115 -0
- package/dist/utils/tos-warning.d.ts.map +1 -0
- package/dist/utils/tos-warning.js +304 -0
- package/dist/utils/tos-warning.js.map +1 -0
- package/dist/utils/usage-monitor.d.ts +156 -0
- package/dist/utils/usage-monitor.d.ts.map +1 -0
- package/dist/utils/usage-monitor.js +296 -0
- package/dist/utils/usage-monitor.js.map +1 -0
- package/package.json +105 -0
- package/scripts/init.ps1 +73 -0
- package/scripts/init.sh +86 -0
- package/scripts/test-auth.sh +90 -0
- package/templates/feature_list.template.json +66 -0
- package/templates/progress.template.txt +51 -0
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP (Model Context Protocol) Configuration (Feature A4)
|
|
3
|
+
* Settings for browser automation, GitHub, database, and other integrations
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2025 Dobeu Tech Solutions LLC
|
|
6
|
+
* Licensed under CC BY-NC 4.0
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Playwright MCP Server - Browser automation
|
|
10
|
+
*/
|
|
11
|
+
export const playwrightServer = {
|
|
12
|
+
name: 'playwright',
|
|
13
|
+
description: 'Browser automation for E2E testing with Playwright',
|
|
14
|
+
enabled: true,
|
|
15
|
+
type: 'stdio',
|
|
16
|
+
command: 'npx',
|
|
17
|
+
args: ['@anthropic-ai/mcp-server-playwright'],
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* GitHub MCP Server - Repository management
|
|
21
|
+
*/
|
|
22
|
+
export const githubServer = {
|
|
23
|
+
name: 'github',
|
|
24
|
+
description: 'GitHub integration for PRs, issues, and CI/CD',
|
|
25
|
+
enabled: false, // Requires GITHUB_TOKEN
|
|
26
|
+
type: 'stdio',
|
|
27
|
+
command: 'npx',
|
|
28
|
+
args: ['@anthropic-ai/mcp-server-github'],
|
|
29
|
+
env: {
|
|
30
|
+
GITHUB_TOKEN: '${GITHUB_TOKEN}',
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Filesystem MCP Server - Advanced file operations
|
|
35
|
+
*/
|
|
36
|
+
export const filesystemServer = {
|
|
37
|
+
name: 'filesystem',
|
|
38
|
+
description: 'Advanced filesystem operations beyond basic Read/Write',
|
|
39
|
+
enabled: false,
|
|
40
|
+
type: 'stdio',
|
|
41
|
+
command: 'npx',
|
|
42
|
+
args: ['@anthropic-ai/mcp-server-filesystem'],
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* PostgreSQL MCP Server - Database operations
|
|
46
|
+
*/
|
|
47
|
+
export const postgresServer = {
|
|
48
|
+
name: 'postgres',
|
|
49
|
+
description: 'PostgreSQL database operations and queries',
|
|
50
|
+
enabled: false, // Requires DATABASE_URL
|
|
51
|
+
type: 'stdio',
|
|
52
|
+
command: 'npx',
|
|
53
|
+
args: ['@anthropic-ai/mcp-server-postgres'],
|
|
54
|
+
env: {
|
|
55
|
+
DATABASE_URL: '${DATABASE_URL}',
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Slack MCP Server - Notifications
|
|
60
|
+
*/
|
|
61
|
+
export const slackServer = {
|
|
62
|
+
name: 'slack',
|
|
63
|
+
description: 'Slack notifications and messaging',
|
|
64
|
+
enabled: false, // Requires SLACK_TOKEN
|
|
65
|
+
type: 'sse',
|
|
66
|
+
url: 'https://mcp.slack.com/sse',
|
|
67
|
+
headers: {
|
|
68
|
+
Authorization: 'Bearer ${SLACK_TOKEN}',
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Default MCP configuration
|
|
73
|
+
*/
|
|
74
|
+
export const mcpConfig = {
|
|
75
|
+
browser: {
|
|
76
|
+
defaultTimeout: 30000,
|
|
77
|
+
headless: true,
|
|
78
|
+
viewport: {
|
|
79
|
+
width: 1280,
|
|
80
|
+
height: 720,
|
|
81
|
+
},
|
|
82
|
+
screenshotDir: '.agent/screenshots',
|
|
83
|
+
},
|
|
84
|
+
servers: {
|
|
85
|
+
playwright: playwrightServer,
|
|
86
|
+
github: githubServer,
|
|
87
|
+
filesystem: filesystemServer,
|
|
88
|
+
postgres: postgresServer,
|
|
89
|
+
slack: slackServer,
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Get enabled MCP servers for SDK
|
|
94
|
+
*/
|
|
95
|
+
export function getEnabledServersForSDK() {
|
|
96
|
+
const enabled = {};
|
|
97
|
+
for (const [name, server] of Object.entries(mcpConfig.servers)) {
|
|
98
|
+
if (!server.enabled)
|
|
99
|
+
continue;
|
|
100
|
+
if (server.type === 'stdio') {
|
|
101
|
+
const stdioServer = server;
|
|
102
|
+
// Replace environment variable placeholders
|
|
103
|
+
const env = {};
|
|
104
|
+
if (stdioServer.env) {
|
|
105
|
+
for (const [key, value] of Object.entries(stdioServer.env)) {
|
|
106
|
+
const match = value.match(/\$\{(\w+)\}/);
|
|
107
|
+
if (match?.[1]) {
|
|
108
|
+
const envVar = process.env[match[1]];
|
|
109
|
+
if (envVar) {
|
|
110
|
+
env[key] = envVar;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
env[key] = value;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
enabled[name] = {
|
|
119
|
+
command: stdioServer.command,
|
|
120
|
+
args: stdioServer.args,
|
|
121
|
+
...(Object.keys(env).length > 0 && { env }),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
else if (server.type === 'sse') {
|
|
125
|
+
const sseServer = server;
|
|
126
|
+
// Replace header placeholders
|
|
127
|
+
const headers = {};
|
|
128
|
+
if (sseServer.headers) {
|
|
129
|
+
for (const [key, value] of Object.entries(sseServer.headers)) {
|
|
130
|
+
const match = value.match(/\$\{(\w+)\}/);
|
|
131
|
+
if (match?.[1]) {
|
|
132
|
+
const envVar = process.env[match[1]];
|
|
133
|
+
if (envVar) {
|
|
134
|
+
headers[key] = value.replace(`\${${match[1]}}`, envVar);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
headers[key] = value;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
enabled[name] = {
|
|
143
|
+
type: 'sse',
|
|
144
|
+
url: sseServer.url,
|
|
145
|
+
...(Object.keys(headers).length > 0 && { headers }),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return enabled;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Enable/disable MCP server
|
|
153
|
+
*/
|
|
154
|
+
export function setServerEnabled(serverName, enabled) {
|
|
155
|
+
const server = mcpConfig.servers[serverName];
|
|
156
|
+
if (!server)
|
|
157
|
+
return false;
|
|
158
|
+
server.enabled = enabled;
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Check if required environment variables are set for a server
|
|
163
|
+
*/
|
|
164
|
+
export function checkServerRequirements(serverName) {
|
|
165
|
+
const server = mcpConfig.servers[serverName];
|
|
166
|
+
if (!server) {
|
|
167
|
+
return { ready: false, missing: ['Server not found'] };
|
|
168
|
+
}
|
|
169
|
+
const missing = [];
|
|
170
|
+
if (server.type === 'stdio') {
|
|
171
|
+
const stdioServer = server;
|
|
172
|
+
if (stdioServer.env) {
|
|
173
|
+
for (const value of Object.values(stdioServer.env)) {
|
|
174
|
+
const match = value.match(/\$\{(\w+)\}/);
|
|
175
|
+
if (match?.[1] && !process.env[match[1]]) {
|
|
176
|
+
missing.push(match[1]);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else if (server.type === 'sse') {
|
|
182
|
+
const sseServer = server;
|
|
183
|
+
if (sseServer.headers) {
|
|
184
|
+
for (const value of Object.values(sseServer.headers)) {
|
|
185
|
+
const match = value.match(/\$\{(\w+)\}/);
|
|
186
|
+
if (match?.[1] && !process.env[match[1]]) {
|
|
187
|
+
missing.push(match[1]);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return { ready: missing.length === 0, missing };
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Get browser automation instructions for the agent prompt
|
|
196
|
+
*/
|
|
197
|
+
export function getBrowserInstructions() {
|
|
198
|
+
return `
|
|
199
|
+
BROWSER AUTOMATION (via Playwright MCP):
|
|
200
|
+
- Use the mcp__playwright__* tools for browser interaction
|
|
201
|
+
- Navigate: mcp__playwright__navigate
|
|
202
|
+
- Click: mcp__playwright__click
|
|
203
|
+
- Type: mcp__playwright__fill
|
|
204
|
+
- Screenshot: mcp__playwright__screenshot
|
|
205
|
+
- Wait: mcp__playwright__wait_for_selector
|
|
206
|
+
|
|
207
|
+
TESTING WORKFLOW:
|
|
208
|
+
1. Start dev server using init script
|
|
209
|
+
2. Navigate to the application URL (http://localhost:3000 or 5173)
|
|
210
|
+
3. Perform test steps as defined in feature_list.json
|
|
211
|
+
4. Take screenshot for verification
|
|
212
|
+
5. Only mark feature as passing if ALL steps succeed
|
|
213
|
+
|
|
214
|
+
SETTINGS:
|
|
215
|
+
- Default timeout: ${mcpConfig.browser.defaultTimeout}ms
|
|
216
|
+
- Viewport: ${mcpConfig.browser.viewport.width}x${mcpConfig.browser.viewport.height}
|
|
217
|
+
- Screenshots saved to: ${mcpConfig.browser.screenshotDir}
|
|
218
|
+
`.trim();
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get MCP servers summary for logging
|
|
222
|
+
*/
|
|
223
|
+
export function getMCPSummary() {
|
|
224
|
+
const lines = ['MCP Servers:'];
|
|
225
|
+
for (const [name, server] of Object.entries(mcpConfig.servers)) {
|
|
226
|
+
const status = server.enabled ? '✓' : '✗';
|
|
227
|
+
const requirements = checkServerRequirements(name);
|
|
228
|
+
const ready = requirements.ready ? '' : ` (missing: ${requirements.missing.join(', ')})`;
|
|
229
|
+
lines.push(` ${status} ${name}: ${server.description}${ready}`);
|
|
230
|
+
}
|
|
231
|
+
return lines.join('\n');
|
|
232
|
+
}
|
|
233
|
+
export default mcpConfig;
|
|
234
|
+
//# sourceMappingURL=mcp-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../src/config/mcp-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA8DH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC9C,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,oDAAoD;IACjE,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,CAAC,qCAAqC,CAAC;CAC9C,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC1C,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,+CAA+C;IAC5D,OAAO,EAAE,KAAK,EAAE,wBAAwB;IACxC,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,CAAC,iCAAiC,CAAC;IACzC,GAAG,EAAE;QACH,YAAY,EAAE,iBAAiB;KAChC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC9C,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,wDAAwD;IACrE,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,CAAC,qCAAqC,CAAC;CAC9C,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,4CAA4C;IACzD,OAAO,EAAE,KAAK,EAAE,wBAAwB;IACxC,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,CAAC,mCAAmC,CAAC;IAC3C,GAAG,EAAE;QACH,YAAY,EAAE,iBAAiB;KAChC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,mCAAmC;IAChD,OAAO,EAAE,KAAK,EAAE,uBAAuB;IACvC,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,2BAA2B;IAChC,OAAO,EAAE;QACP,aAAa,EAAE,uBAAuB;KACvC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC,OAAO,EAAE;QACP,cAAc,EAAE,KAAK;QACrB,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE;YACR,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,GAAG;SACZ;QACD,aAAa,EAAE,oBAAoB;KACpC;IACD,OAAO,EAAE;QACP,UAAU,EAAE,gBAAgB;QAC5B,MAAM,EAAE,YAAY;QACpB,UAAU,EAAE,gBAAgB;QAC5B,QAAQ,EAAE,cAAc;QACxB,KAAK,EAAE,WAAW;KACnB;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,SAAS;QAE9B,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC5B,MAAM,WAAW,GAAG,MAAwB,CAAC;YAE7C,4CAA4C;YAC5C,MAAM,GAAG,GAA2B,EAAE,CAAC;YACvC,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC;gBACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;oBACzC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACf,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBACrC,IAAI,MAAM,EAAE,CAAC;4BACX,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;wBACpB,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;oBACnB,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,GAAG;gBACd,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;aAC5C,CAAC;QACJ,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,MAAsB,CAAC;YAEzC,8BAA8B;YAC9B,MAAM,OAAO,GAA2B,EAAE,CAAC;YAC3C,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;gBACtB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;oBACzC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACf,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBACrC,IAAI,MAAM,EAAE,CAAC;4BACX,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;wBAC1D,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;oBACvB,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,GAAG;gBACd,IAAI,EAAE,KAAK;gBACX,GAAG,EAAE,SAAS,CAAC,GAAG;gBAClB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;aACpD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAkB,EAAE,OAAgB;IACnE,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,UAAkB;IAIxD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC;IACzD,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,MAAwB,CAAC;QAC7C,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC;YACpB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACzC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,MAAsB,CAAC;QACzC,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACzC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO;;;;;;;;;;;;;;;;;qBAiBY,SAAS,CAAC,OAAO,CAAC,cAAc;cACvC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM;0BACzD,SAAS,CAAC,OAAO,CAAC,aAAa;CACxD,CAAC,IAAI,EAAE,CAAC;AACT,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,KAAK,GAAa,CAAC,cAAc,CAAC,CAAC;IAEzC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC1C,MAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACzF,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,CAAC,WAAW,GAAG,KAAK,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Configuration
|
|
3
|
+
* Configuration for all supported AI providers (Anthropic, OpenAI, Google, Cursor).
|
|
4
|
+
* Defines capabilities, tool mappings, models, and rate limits per provider.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2025 Dobeu Tech Solutions LLC
|
|
7
|
+
* Licensed under CC BY-NC 4.0
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Supported provider names
|
|
11
|
+
*/
|
|
12
|
+
export type ProviderName = 'anthropic' | 'openai' | 'google' | 'cursor';
|
|
13
|
+
/**
|
|
14
|
+
* Standard tool names used across providers
|
|
15
|
+
*/
|
|
16
|
+
export type StandardTool = 'Read' | 'Write' | 'Edit' | 'Bash' | 'Glob' | 'Grep' | 'Browser' | 'Task' | 'WebFetch' | 'WebSearch';
|
|
17
|
+
/**
|
|
18
|
+
* Task types for orchestrator routing
|
|
19
|
+
*/
|
|
20
|
+
export type TaskType = 'complex_reasoning' | 'architectural_decision' | 'ci_cd_automation' | 'test_execution' | 'research' | 'documentation' | 'ide_task' | 'rapid_prototyping' | 'code_review' | 'general';
|
|
21
|
+
/**
|
|
22
|
+
* Provider capabilities interface
|
|
23
|
+
*/
|
|
24
|
+
export interface ProviderCapabilities {
|
|
25
|
+
streaming: boolean;
|
|
26
|
+
threads: boolean;
|
|
27
|
+
browserAutomation: boolean;
|
|
28
|
+
codeExecution: boolean;
|
|
29
|
+
multiAgent: boolean;
|
|
30
|
+
toolCalling: boolean;
|
|
31
|
+
vision: boolean;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Model pricing information
|
|
35
|
+
*/
|
|
36
|
+
export interface ModelPricing {
|
|
37
|
+
input: number;
|
|
38
|
+
output: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Model configuration
|
|
42
|
+
*/
|
|
43
|
+
export interface ModelConfig {
|
|
44
|
+
id: string;
|
|
45
|
+
name: string;
|
|
46
|
+
contextWindow: number;
|
|
47
|
+
costPerMToken: ModelPricing;
|
|
48
|
+
capabilities: string[];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Rate limit configuration
|
|
52
|
+
*/
|
|
53
|
+
export interface RateLimitConfig {
|
|
54
|
+
requestsPerMinute: number;
|
|
55
|
+
tokensPerMinute: number;
|
|
56
|
+
tokensPerDay?: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Full provider configuration
|
|
60
|
+
*/
|
|
61
|
+
export interface ProviderConfig {
|
|
62
|
+
name: ProviderName;
|
|
63
|
+
displayName: string;
|
|
64
|
+
packageName: string | null;
|
|
65
|
+
enabled: boolean;
|
|
66
|
+
capabilities: ProviderCapabilities;
|
|
67
|
+
toolMapping: Partial<Record<StandardTool, string | null>>;
|
|
68
|
+
models: ModelConfig[];
|
|
69
|
+
defaultModel: string;
|
|
70
|
+
rateLimits: RateLimitConfig;
|
|
71
|
+
apiEndpoint?: string;
|
|
72
|
+
authHeader?: string;
|
|
73
|
+
envVarName: string;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Provider configurations for all supported providers
|
|
77
|
+
*/
|
|
78
|
+
export declare const PROVIDER_CONFIGS: Record<ProviderName, ProviderConfig>;
|
|
79
|
+
/**
|
|
80
|
+
* Task routing rules - maps task types to preferred providers (in order)
|
|
81
|
+
*/
|
|
82
|
+
export declare const TASK_ROUTING_RULES: Record<TaskType, ProviderName[]>;
|
|
83
|
+
/**
|
|
84
|
+
* Get provider configuration by name
|
|
85
|
+
*/
|
|
86
|
+
export declare function getProviderConfig(name: ProviderName): ProviderConfig;
|
|
87
|
+
/**
|
|
88
|
+
* Get all enabled providers
|
|
89
|
+
*/
|
|
90
|
+
export declare function getEnabledProviders(): ProviderConfig[];
|
|
91
|
+
/**
|
|
92
|
+
* Get default provider configuration
|
|
93
|
+
*/
|
|
94
|
+
export declare function getDefaultProvider(): ProviderConfig;
|
|
95
|
+
/**
|
|
96
|
+
* Check if a provider supports a specific tool
|
|
97
|
+
*/
|
|
98
|
+
export declare function providerSupportsTool(provider: ProviderName, tool: StandardTool): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Get routing preference for a task type
|
|
101
|
+
*/
|
|
102
|
+
export declare function getRoutingPreference(taskType: TaskType): ProviderName[];
|
|
103
|
+
/**
|
|
104
|
+
* Get model configuration by ID
|
|
105
|
+
*/
|
|
106
|
+
export declare function getModelConfig(provider: ProviderName, modelId: string): ModelConfig | null;
|
|
107
|
+
/**
|
|
108
|
+
* Get cheapest model for a provider
|
|
109
|
+
*/
|
|
110
|
+
export declare function getCheapestModel(provider: ProviderName): ModelConfig;
|
|
111
|
+
/**
|
|
112
|
+
* Calculate estimated cost for a query
|
|
113
|
+
*/
|
|
114
|
+
export declare function calculateQueryCost(provider: ProviderName, modelId: string, inputTokens: number, outputTokens: number): number;
|
|
115
|
+
/**
|
|
116
|
+
* Feature flag for multi-provider support
|
|
117
|
+
*/
|
|
118
|
+
export interface MultiProviderFeatureFlags {
|
|
119
|
+
/** Enable multi-provider orchestration */
|
|
120
|
+
orchestrationEnabled: boolean;
|
|
121
|
+
/** Enable multi-agent code review */
|
|
122
|
+
multiAgentReviewEnabled: boolean;
|
|
123
|
+
/** Enable automatic provider fallback */
|
|
124
|
+
fallbackEnabled: boolean;
|
|
125
|
+
/** Enable cost tracking across providers */
|
|
126
|
+
costTrackingEnabled: boolean;
|
|
127
|
+
/** Enable task-based routing */
|
|
128
|
+
taskRoutingEnabled: boolean;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Default feature flags (conservative defaults for gradual rollout)
|
|
132
|
+
*/
|
|
133
|
+
export declare const DEFAULT_MULTI_PROVIDER_FLAGS: MultiProviderFeatureFlags;
|
|
134
|
+
/**
|
|
135
|
+
* Validate provider configuration at runtime
|
|
136
|
+
*/
|
|
137
|
+
export declare function validateProviderConfig(config: ProviderConfig): string[];
|
|
138
|
+
export default PROVIDER_CONFIGS;
|
|
139
|
+
//# sourceMappingURL=provider-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-config.d.ts","sourceRoot":"","sources":["../../src/config/provider-config.ts"],"names":[],"mappings":"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"}
|