@codebakers/mcp 5.2.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/INSTALL.md +221 -0
- package/LICENSE +21 -0
- package/README.md +412 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +236 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +526 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/analyze-mockups.d.ts +18 -0
- package/dist/tools/analyze-mockups.d.ts.map +1 -0
- package/dist/tools/analyze-mockups.js +497 -0
- package/dist/tools/analyze-mockups.js.map +1 -0
- package/dist/tools/autonomous-build.d.ts +19 -0
- package/dist/tools/autonomous-build.d.ts.map +1 -0
- package/dist/tools/autonomous-build.js +287 -0
- package/dist/tools/autonomous-build.js.map +1 -0
- package/dist/tools/check-gate.d.ts +21 -0
- package/dist/tools/check-gate.d.ts.map +1 -0
- package/dist/tools/check-gate.js +446 -0
- package/dist/tools/check-gate.js.map +1 -0
- package/dist/tools/check-scope.d.ts +22 -0
- package/dist/tools/check-scope.d.ts.map +1 -0
- package/dist/tools/check-scope.js +251 -0
- package/dist/tools/check-scope.js.map +1 -0
- package/dist/tools/deploy-vercel.d.ts +18 -0
- package/dist/tools/deploy-vercel.d.ts.map +1 -0
- package/dist/tools/deploy-vercel.js +178 -0
- package/dist/tools/deploy-vercel.js.map +1 -0
- package/dist/tools/diagnose-error.d.ts +20 -0
- package/dist/tools/diagnose-error.d.ts.map +1 -0
- package/dist/tools/diagnose-error.js +351 -0
- package/dist/tools/diagnose-error.js.map +1 -0
- package/dist/tools/enforce-feature.d.ts +25 -0
- package/dist/tools/enforce-feature.d.ts.map +1 -0
- package/dist/tools/enforce-feature.js +387 -0
- package/dist/tools/enforce-feature.js.map +1 -0
- package/dist/tools/execute-atomic-unit.d.ts +23 -0
- package/dist/tools/execute-atomic-unit.d.ts.map +1 -0
- package/dist/tools/execute-atomic-unit.js +107 -0
- package/dist/tools/execute-atomic-unit.js.map +1 -0
- package/dist/tools/fix-commit.d.ts +23 -0
- package/dist/tools/fix-commit.d.ts.map +1 -0
- package/dist/tools/fix-commit.js +213 -0
- package/dist/tools/fix-commit.js.map +1 -0
- package/dist/tools/fix-mockups.d.ts +21 -0
- package/dist/tools/fix-mockups.d.ts.map +1 -0
- package/dist/tools/fix-mockups.js +595 -0
- package/dist/tools/fix-mockups.js.map +1 -0
- package/dist/tools/generate-api-route.d.ts +18 -0
- package/dist/tools/generate-api-route.d.ts.map +1 -0
- package/dist/tools/generate-api-route.js +212 -0
- package/dist/tools/generate-api-route.js.map +1 -0
- package/dist/tools/generate-chatbot.d.ts +20 -0
- package/dist/tools/generate-chatbot.d.ts.map +1 -0
- package/dist/tools/generate-chatbot.js +555 -0
- package/dist/tools/generate-chatbot.js.map +1 -0
- package/dist/tools/generate-component.d.ts +18 -0
- package/dist/tools/generate-component.d.ts.map +1 -0
- package/dist/tools/generate-component.js +159 -0
- package/dist/tools/generate-component.js.map +1 -0
- package/dist/tools/generate-docs.d.ts +21 -0
- package/dist/tools/generate-docs.d.ts.map +1 -0
- package/dist/tools/generate-docs.js +782 -0
- package/dist/tools/generate-docs.js.map +1 -0
- package/dist/tools/generate-e2e-tests.d.ts +12 -0
- package/dist/tools/generate-e2e-tests.d.ts.map +1 -0
- package/dist/tools/generate-e2e-tests.js +37 -0
- package/dist/tools/generate-e2e-tests.js.map +1 -0
- package/dist/tools/generate-migration.d.ts +21 -0
- package/dist/tools/generate-migration.d.ts.map +1 -0
- package/dist/tools/generate-migration.js +94 -0
- package/dist/tools/generate-migration.js.map +1 -0
- package/dist/tools/generate-schema.d.ts +18 -0
- package/dist/tools/generate-schema.d.ts.map +1 -0
- package/dist/tools/generate-schema.js +422 -0
- package/dist/tools/generate-schema.js.map +1 -0
- package/dist/tools/generate-spec.d.ts +18 -0
- package/dist/tools/generate-spec.d.ts.map +1 -0
- package/dist/tools/generate-spec.js +446 -0
- package/dist/tools/generate-spec.js.map +1 -0
- package/dist/tools/generate-store-contracts.d.ts +17 -0
- package/dist/tools/generate-store-contracts.d.ts.map +1 -0
- package/dist/tools/generate-store-contracts.js +356 -0
- package/dist/tools/generate-store-contracts.js.map +1 -0
- package/dist/tools/generate-store.d.ts +16 -0
- package/dist/tools/generate-store.d.ts.map +1 -0
- package/dist/tools/generate-store.js +166 -0
- package/dist/tools/generate-store.js.map +1 -0
- package/dist/tools/generate-unit-tests.d.ts +14 -0
- package/dist/tools/generate-unit-tests.d.ts.map +1 -0
- package/dist/tools/generate-unit-tests.js +85 -0
- package/dist/tools/generate-unit-tests.js.map +1 -0
- package/dist/tools/get-context.d.ts +35 -0
- package/dist/tools/get-context.d.ts.map +1 -0
- package/dist/tools/get-context.js +367 -0
- package/dist/tools/get-context.js.map +1 -0
- package/dist/tools/init-session.d.ts +22 -0
- package/dist/tools/init-session.d.ts.map +1 -0
- package/dist/tools/init-session.js +232 -0
- package/dist/tools/init-session.js.map +1 -0
- package/dist/tools/map-dependencies.d.ts +25 -0
- package/dist/tools/map-dependencies.d.ts.map +1 -0
- package/dist/tools/map-dependencies.js +480 -0
- package/dist/tools/map-dependencies.js.map +1 -0
- package/dist/tools/optimize-performance.d.ts +18 -0
- package/dist/tools/optimize-performance.d.ts.map +1 -0
- package/dist/tools/optimize-performance.js +285 -0
- package/dist/tools/optimize-performance.js.map +1 -0
- package/dist/tools/run-interview.d.ts +23 -0
- package/dist/tools/run-interview.d.ts.map +1 -0
- package/dist/tools/run-interview.js +371 -0
- package/dist/tools/run-interview.js.map +1 -0
- package/dist/tools/run-tests.d.ts +12 -0
- package/dist/tools/run-tests.d.ts.map +1 -0
- package/dist/tools/run-tests.js +30 -0
- package/dist/tools/run-tests.js.map +1 -0
- package/dist/tools/scan-security.d.ts +19 -0
- package/dist/tools/scan-security.d.ts.map +1 -0
- package/dist/tools/scan-security.js +358 -0
- package/dist/tools/scan-security.js.map +1 -0
- package/dist/tools/validate-accessibility.d.ts +18 -0
- package/dist/tools/validate-accessibility.d.ts.map +1 -0
- package/dist/tools/validate-accessibility.js +251 -0
- package/dist/tools/validate-accessibility.js.map +1 -0
- package/dist/tools/validate-mockups.d.ts +21 -0
- package/dist/tools/validate-mockups.d.ts.map +1 -0
- package/dist/tools/validate-mockups.js +433 -0
- package/dist/tools/validate-mockups.js.map +1 -0
- package/dist/tools/verify-completeness.d.ts +13 -0
- package/dist/tools/verify-completeness.d.ts.map +1 -0
- package/dist/tools/verify-completeness.js +68 -0
- package/dist/tools/verify-completeness.js.map +1 -0
- package/dist/tools/verify-mockups.d.ts +14 -0
- package/dist/tools/verify-mockups.d.ts.map +1 -0
- package/dist/tools/verify-mockups.js +85 -0
- package/dist/tools/verify-mockups.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codebakers_check_scope
|
|
3
|
+
*
|
|
4
|
+
* Scope Verification
|
|
5
|
+
*
|
|
6
|
+
* Verifies that a feature request is defined in PROJECT-SPEC.md.
|
|
7
|
+
* Prevents scope creep by enforcing spec boundaries.
|
|
8
|
+
*
|
|
9
|
+
* Rules:
|
|
10
|
+
* - Feature must be in Gate 1 (Entities) or Gate 2 (State Changes)
|
|
11
|
+
* - If not found, must either:
|
|
12
|
+
* 1. Add to spec (formal amendment)
|
|
13
|
+
* 2. Descope (remove from request)
|
|
14
|
+
* 3. Flag for future iteration
|
|
15
|
+
* - Never silently expand scope
|
|
16
|
+
*
|
|
17
|
+
* Based on CodeBakers Method Principle #7: Fixed Appetite, Not Open Scope
|
|
18
|
+
*/
|
|
19
|
+
import * as fs from 'fs/promises';
|
|
20
|
+
import * as path from 'path';
|
|
21
|
+
export async function checkScope(args) {
|
|
22
|
+
const description = args.feature_description || 'unknown';
|
|
23
|
+
const cwd = process.cwd();
|
|
24
|
+
console.error('🍞 CodeBakers: Scope Verification');
|
|
25
|
+
console.error(`Checking: ${description}`);
|
|
26
|
+
try {
|
|
27
|
+
// 1. Load PROJECT-SPEC.md
|
|
28
|
+
const specPath = path.join(cwd, '.codebakers', 'PROJECT-SPEC.md');
|
|
29
|
+
const specExists = await fs.access(specPath).then(() => true).catch(() => false);
|
|
30
|
+
if (!specExists) {
|
|
31
|
+
return `🍞 CodeBakers: Scope Check BLOCKED
|
|
32
|
+
|
|
33
|
+
❌ PROJECT-SPEC.md not found
|
|
34
|
+
|
|
35
|
+
Cannot verify scope without specification.
|
|
36
|
+
|
|
37
|
+
Next step: Run Phase 0 first (codebakers_generate_spec)`;
|
|
38
|
+
}
|
|
39
|
+
const specContent = await fs.readFile(specPath, 'utf-8');
|
|
40
|
+
// 2. Extract entities and state changes from spec
|
|
41
|
+
const entities = extractEntities(specContent);
|
|
42
|
+
const stateChanges = extractStateChanges(specContent);
|
|
43
|
+
console.error(`Spec contains ${entities.length} entities and ${stateChanges.length} state changes`);
|
|
44
|
+
// 3. Check if feature matches spec
|
|
45
|
+
const result = checkFeatureAgainstSpec(description, entities, stateChanges);
|
|
46
|
+
console.error(`Match confidence: ${result.confidence}`);
|
|
47
|
+
console.error(`In scope: ${result.in_scope}`);
|
|
48
|
+
// 4. Generate report
|
|
49
|
+
const report = generateScopeReport(description, result, entities, stateChanges);
|
|
50
|
+
return report;
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.error('Error during scope check:', error);
|
|
54
|
+
return `🍞 CodeBakers: Scope Check Failed
|
|
55
|
+
|
|
56
|
+
Error: ${error instanceof Error ? error.message : String(error)}
|
|
57
|
+
|
|
58
|
+
Please verify PROJECT-SPEC.md exists and is readable.`;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Extract entities from spec
|
|
63
|
+
*/
|
|
64
|
+
function extractEntities(spec) {
|
|
65
|
+
const entities = [];
|
|
66
|
+
// Extract from Gate 1 section
|
|
67
|
+
const gate1Match = spec.match(/## Gate 1: Entities([\s\S]*?)(?=---|\n## Gate|$)/);
|
|
68
|
+
if (!gate1Match)
|
|
69
|
+
return entities;
|
|
70
|
+
const gate1Content = gate1Match[1];
|
|
71
|
+
// Extract entity names (markdown headers like ### User, ### Message, etc.)
|
|
72
|
+
const entityMatches = gate1Content.matchAll(/### (\w+)/g);
|
|
73
|
+
for (const match of entityMatches) {
|
|
74
|
+
entities.push(match[1].toLowerCase());
|
|
75
|
+
}
|
|
76
|
+
return entities;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Extract state changes from spec
|
|
80
|
+
*/
|
|
81
|
+
function extractStateChanges(spec) {
|
|
82
|
+
const stateChanges = [];
|
|
83
|
+
// Extract from Gate 2 section
|
|
84
|
+
const gate2Match = spec.match(/## Gate 2: State Changes([\s\S]*?)(?=---|\n## Gate|$)/);
|
|
85
|
+
if (!gate2Match)
|
|
86
|
+
return stateChanges;
|
|
87
|
+
const gate2Content = gate2Match[1];
|
|
88
|
+
// Extract from table format: | createUser | User | create | ... |
|
|
89
|
+
const stateMatches = gate2Content.matchAll(/\|\s*(\w+)\s*\|/g);
|
|
90
|
+
for (const match of stateMatches) {
|
|
91
|
+
const action = match[1];
|
|
92
|
+
// Skip table headers
|
|
93
|
+
if (action !== 'Action' && action !== 'Affects' && action !== 'Type' && action !== 'Description') {
|
|
94
|
+
stateChanges.push(action.toLowerCase());
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return stateChanges;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Check feature against spec
|
|
101
|
+
*/
|
|
102
|
+
function checkFeatureAgainstSpec(description, entities, stateChanges) {
|
|
103
|
+
const lowerDesc = description.toLowerCase();
|
|
104
|
+
const words = lowerDesc.split(/\s+/);
|
|
105
|
+
const matchedEntities = [];
|
|
106
|
+
const matchedStateChanges = [];
|
|
107
|
+
// Check entity matches
|
|
108
|
+
for (const entity of entities) {
|
|
109
|
+
if (lowerDesc.includes(entity)) {
|
|
110
|
+
matchedEntities.push(entity);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Check state change matches
|
|
114
|
+
for (const stateChange of stateChanges) {
|
|
115
|
+
if (lowerDesc.includes(stateChange.replace(/^(create|update|delete)/, '')) ||
|
|
116
|
+
words.some(w => stateChange.includes(w))) {
|
|
117
|
+
matchedStateChanges.push(stateChange);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Check for CRUD verbs
|
|
121
|
+
const crudVerbs = ['create', 'add', 'new', 'update', 'edit', 'modify', 'delete', 'remove'];
|
|
122
|
+
const hasCrudVerb = crudVerbs.some(verb => lowerDesc.includes(verb));
|
|
123
|
+
// Determine confidence
|
|
124
|
+
let confidence;
|
|
125
|
+
let inScope;
|
|
126
|
+
let recommendation;
|
|
127
|
+
let specAmendmentRequired;
|
|
128
|
+
if (matchedEntities.length > 0 && matchedStateChanges.length > 0) {
|
|
129
|
+
// Strong match
|
|
130
|
+
confidence = 'high';
|
|
131
|
+
inScope = true;
|
|
132
|
+
recommendation = `✅ Feature matches spec. Entity: ${matchedEntities.join(', ')}. State change: ${matchedStateChanges.join(', ')}.`;
|
|
133
|
+
specAmendmentRequired = false;
|
|
134
|
+
}
|
|
135
|
+
else if (matchedEntities.length > 0 && hasCrudVerb) {
|
|
136
|
+
// Moderate match - entity found, CRUD verb present
|
|
137
|
+
confidence = 'medium';
|
|
138
|
+
inScope = true;
|
|
139
|
+
recommendation = `⚠️ Entity found in spec (${matchedEntities.join(', ')}), but specific state change not defined. May need spec amendment.`;
|
|
140
|
+
specAmendmentRequired = false; // Lenient - allow if entity exists
|
|
141
|
+
}
|
|
142
|
+
else if (matchedEntities.length > 0) {
|
|
143
|
+
// Entity found but no clear action
|
|
144
|
+
confidence = 'low';
|
|
145
|
+
inScope = false;
|
|
146
|
+
recommendation = `⚠️ Entity exists (${matchedEntities.join(', ')}), but action unclear. Clarify or add state change to spec.`;
|
|
147
|
+
specAmendmentRequired = true;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
// No matches
|
|
151
|
+
confidence = 'none';
|
|
152
|
+
inScope = false;
|
|
153
|
+
recommendation = `❌ Feature not found in spec. This appears to be scope creep.`;
|
|
154
|
+
specAmendmentRequired = true;
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
in_scope: inScope,
|
|
158
|
+
matched_entities: matchedEntities,
|
|
159
|
+
matched_state_changes: matchedStateChanges,
|
|
160
|
+
confidence: confidence,
|
|
161
|
+
recommendation: recommendation,
|
|
162
|
+
spec_amendment_required: specAmendmentRequired,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Generate scope report
|
|
167
|
+
*/
|
|
168
|
+
function generateScopeReport(description, result, entities, stateChanges) {
|
|
169
|
+
let report = `🍞 CodeBakers: Scope Verification\n\n`;
|
|
170
|
+
report += `**Feature:** ${description}\n`;
|
|
171
|
+
report += `**Confidence:** ${result.confidence.toUpperCase()}\n`;
|
|
172
|
+
report += `**In Scope:** ${result.in_scope ? 'YES' : 'NO'}\n\n`;
|
|
173
|
+
report += `---\n\n`;
|
|
174
|
+
// Matches
|
|
175
|
+
report += `## Analysis\n\n`;
|
|
176
|
+
if (result.matched_entities.length > 0) {
|
|
177
|
+
report += `**Matched Entities:**\n`;
|
|
178
|
+
for (const entity of result.matched_entities) {
|
|
179
|
+
report += `- ${entity}\n`;
|
|
180
|
+
}
|
|
181
|
+
report += `\n`;
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
report += `**Matched Entities:** None\n\n`;
|
|
185
|
+
}
|
|
186
|
+
if (result.matched_state_changes.length > 0) {
|
|
187
|
+
report += `**Matched State Changes:**\n`;
|
|
188
|
+
for (const change of result.matched_state_changes) {
|
|
189
|
+
report += `- ${change}\n`;
|
|
190
|
+
}
|
|
191
|
+
report += `\n`;
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
report += `**Matched State Changes:** None\n\n`;
|
|
195
|
+
}
|
|
196
|
+
report += `---\n\n`;
|
|
197
|
+
// Recommendation
|
|
198
|
+
report += `## Recommendation\n\n`;
|
|
199
|
+
report += `${result.recommendation}\n\n`;
|
|
200
|
+
// Next steps
|
|
201
|
+
report += `---\n\n`;
|
|
202
|
+
report += `## Next Steps\n\n`;
|
|
203
|
+
if (result.in_scope && !result.spec_amendment_required) {
|
|
204
|
+
report += `✅ **APPROVED** - Feature is in scope\n\n`;
|
|
205
|
+
report += `Proceed with build:\n`;
|
|
206
|
+
report += `1. Use: codebakers_enforce_feature\n`;
|
|
207
|
+
report += `2. Follow atomic unit protocol\n`;
|
|
208
|
+
report += `3. Build feature\n\n`;
|
|
209
|
+
}
|
|
210
|
+
else if (result.in_scope && result.spec_amendment_required) {
|
|
211
|
+
report += `⚠️ **CONDITIONAL APPROVAL** - Clarification needed\n\n`;
|
|
212
|
+
report += `Options:\n`;
|
|
213
|
+
report += `1. Add specific state change to spec (amendment)\n`;
|
|
214
|
+
report += `2. Clarify feature description to match existing spec\n`;
|
|
215
|
+
report += `3. Proceed with caution if action is implied\n\n`;
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
report += `❌ **SCOPE CREEP DETECTED** - Feature not in spec\n\n`;
|
|
219
|
+
report += `You MUST choose one:\n\n`;
|
|
220
|
+
report += `**Option 1: Spec Amendment (Recommended)**\n`;
|
|
221
|
+
report += `1. Review PROJECT-SPEC.md\n`;
|
|
222
|
+
report += `2. Add this feature to Gate 1 (Entities) or Gate 2 (State Changes)\n`;
|
|
223
|
+
report += `3. Get human approval for spec change\n`;
|
|
224
|
+
report += `4. Then proceed with build\n\n`;
|
|
225
|
+
report += `**Option 2: Descope**\n`;
|
|
226
|
+
report += `Remove this feature from request\n\n`;
|
|
227
|
+
report += `**Option 3: Future Iteration**\n`;
|
|
228
|
+
report += `Flag for next phase/version\n\n`;
|
|
229
|
+
report += `**NOT ALLOWED:**\n`;
|
|
230
|
+
report += `❌ Silently building features not in spec\n`;
|
|
231
|
+
report += `❌ Expanding scope without formal amendment\n\n`;
|
|
232
|
+
}
|
|
233
|
+
// Spec reference
|
|
234
|
+
report += `---\n\n`;
|
|
235
|
+
report += `## Spec Reference\n\n`;
|
|
236
|
+
report += `**Entities in spec (${entities.length}):**\n`;
|
|
237
|
+
for (const entity of entities) {
|
|
238
|
+
report += `- ${entity}\n`;
|
|
239
|
+
}
|
|
240
|
+
report += `\n`;
|
|
241
|
+
report += `**State changes in spec (${stateChanges.length}):**\n`;
|
|
242
|
+
for (const change of stateChanges.slice(0, 10)) {
|
|
243
|
+
report += `- ${change}\n`;
|
|
244
|
+
}
|
|
245
|
+
if (stateChanges.length > 10) {
|
|
246
|
+
report += `- ... and ${stateChanges.length - 10} more\n`;
|
|
247
|
+
}
|
|
248
|
+
report += `\n`;
|
|
249
|
+
return report;
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=check-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-scope.js","sourceRoot":"","sources":["../../src/tools/check-scope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codebakers_deploy_vercel
|
|
3
|
+
*
|
|
4
|
+
* Vercel Deployment Automation
|
|
5
|
+
*
|
|
6
|
+
* Deploys app to Vercel:
|
|
7
|
+
* - Configures project
|
|
8
|
+
* - Sets environment variables
|
|
9
|
+
* - Deploys to production
|
|
10
|
+
* - Returns live URL
|
|
11
|
+
*/
|
|
12
|
+
interface DeployArgs {
|
|
13
|
+
production?: boolean;
|
|
14
|
+
env_file?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function deployVercel(args?: DeployArgs): Promise<string>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=deploy-vercel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-vercel.d.ts","sourceRoot":"","sources":["../../src/tools/deploy-vercel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,UAAU,UAAU;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,YAAY,CAAC,IAAI,GAAE,UAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAsCzE"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codebakers_deploy_vercel
|
|
3
|
+
*
|
|
4
|
+
* Vercel Deployment Automation
|
|
5
|
+
*
|
|
6
|
+
* Deploys app to Vercel:
|
|
7
|
+
* - Configures project
|
|
8
|
+
* - Sets environment variables
|
|
9
|
+
* - Deploys to production
|
|
10
|
+
* - Returns live URL
|
|
11
|
+
*/
|
|
12
|
+
import * as fs from 'fs/promises';
|
|
13
|
+
import * as path from 'path';
|
|
14
|
+
import { execSync } from 'child_process';
|
|
15
|
+
export async function deployVercel(args = {}) {
|
|
16
|
+
const cwd = process.cwd();
|
|
17
|
+
const { production = true, env_file = '.env' } = args;
|
|
18
|
+
console.error('🍞 CodeBakers: Deploying to Vercel');
|
|
19
|
+
try {
|
|
20
|
+
// Step 1: Check if Vercel CLI is installed
|
|
21
|
+
await ensureVercelCLI();
|
|
22
|
+
// Step 2: Check if project is linked
|
|
23
|
+
const projectLinked = await isProjectLinked(cwd);
|
|
24
|
+
if (!projectLinked) {
|
|
25
|
+
console.error('Project not linked to Vercel - linking now...');
|
|
26
|
+
await linkProject(cwd);
|
|
27
|
+
}
|
|
28
|
+
// Step 3: Load environment variables
|
|
29
|
+
const envVars = await loadEnvVars(cwd, env_file);
|
|
30
|
+
// Step 4: Set environment variables in Vercel
|
|
31
|
+
if (envVars.length > 0) {
|
|
32
|
+
console.error(`Setting ${envVars.length} environment variables...`);
|
|
33
|
+
await setEnvVars(cwd, envVars);
|
|
34
|
+
}
|
|
35
|
+
// Step 5: Deploy
|
|
36
|
+
console.error(production ? 'Deploying to production...' : 'Deploying preview...');
|
|
37
|
+
const url = await deploy(cwd, production);
|
|
38
|
+
// Step 6: Update BRAIN.md with deployment info
|
|
39
|
+
await updateBrainWithDeployment(cwd, url);
|
|
40
|
+
return generateDeploymentReport(url, production, envVars.length);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
return `🍞 CodeBakers: Deployment Failed\n\nError: ${error instanceof Error ? error.message : String(error)}`;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function ensureVercelCLI() {
|
|
47
|
+
try {
|
|
48
|
+
execSync('vercel --version', { stdio: 'ignore' });
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
throw new Error('Vercel CLI not installed.\n\n' +
|
|
52
|
+
'Install with: npm install -g vercel\n' +
|
|
53
|
+
'Then run: vercel login');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async function isProjectLinked(cwd) {
|
|
57
|
+
const vercelDir = path.join(cwd, '.vercel');
|
|
58
|
+
try {
|
|
59
|
+
await fs.access(vercelDir);
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async function linkProject(cwd) {
|
|
67
|
+
try {
|
|
68
|
+
// Try to link project (requires user interaction)
|
|
69
|
+
execSync('vercel link', {
|
|
70
|
+
cwd,
|
|
71
|
+
stdio: 'inherit'
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
throw new Error('Failed to link project to Vercel.\n\n' +
|
|
76
|
+
'Run: vercel link\n' +
|
|
77
|
+
'Then retry deployment.');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async function loadEnvVars(cwd, envFile) {
|
|
81
|
+
const envPath = path.join(cwd, envFile);
|
|
82
|
+
const envVars = [];
|
|
83
|
+
try {
|
|
84
|
+
const content = await fs.readFile(envPath, 'utf-8');
|
|
85
|
+
const lines = content.split('\n');
|
|
86
|
+
for (const line of lines) {
|
|
87
|
+
// Skip comments and empty lines
|
|
88
|
+
if (!line.trim() || line.trim().startsWith('#'))
|
|
89
|
+
continue;
|
|
90
|
+
const match = line.match(/^([A-Z_][A-Z0-9_]*)\s*=\s*(.+)$/);
|
|
91
|
+
if (match) {
|
|
92
|
+
const [, key, value] = match;
|
|
93
|
+
// Remove quotes if present
|
|
94
|
+
const cleanValue = value.replace(/^["']|["']$/g, '');
|
|
95
|
+
envVars.push({ key, value: cleanValue });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// .env doesn't exist - that's okay
|
|
101
|
+
}
|
|
102
|
+
return envVars;
|
|
103
|
+
}
|
|
104
|
+
async function setEnvVars(cwd, envVars) {
|
|
105
|
+
// Note: vercel env add requires interactive input
|
|
106
|
+
// For automation, we'll provide guidance instead
|
|
107
|
+
console.error('\nEnvironment variables detected.\n' +
|
|
108
|
+
'Set them in Vercel dashboard or run:\n');
|
|
109
|
+
for (const { key } of envVars) {
|
|
110
|
+
console.error(` vercel env add ${key}`);
|
|
111
|
+
}
|
|
112
|
+
console.error('\nSkipping automatic env setup - deploy will continue...\n');
|
|
113
|
+
}
|
|
114
|
+
async function deploy(cwd, production) {
|
|
115
|
+
try {
|
|
116
|
+
const args = production ? '--prod' : '';
|
|
117
|
+
const output = execSync(`vercel ${args} --yes`, {
|
|
118
|
+
cwd,
|
|
119
|
+
encoding: 'utf-8',
|
|
120
|
+
stdio: ['pipe', 'pipe', 'pipe']
|
|
121
|
+
});
|
|
122
|
+
// Extract URL from output
|
|
123
|
+
const urlMatch = output.match(/https:\/\/[^\s]+/);
|
|
124
|
+
if (urlMatch) {
|
|
125
|
+
return urlMatch[0];
|
|
126
|
+
}
|
|
127
|
+
throw new Error('Deployment succeeded but URL not found in output');
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
throw new Error('Deployment failed.\n\n' +
|
|
131
|
+
'Possible causes:\n' +
|
|
132
|
+
'- Not logged in: Run `vercel login`\n' +
|
|
133
|
+
'- Build errors: Check TypeScript and Next.js config\n' +
|
|
134
|
+
'- Missing environment variables\n\n' +
|
|
135
|
+
`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async function updateBrainWithDeployment(cwd, url) {
|
|
139
|
+
const brainPath = path.join(cwd, '.codebakers', 'BRAIN.md');
|
|
140
|
+
try {
|
|
141
|
+
let content = await fs.readFile(brainPath, 'utf-8');
|
|
142
|
+
// Update or add deployment section
|
|
143
|
+
const deploymentSection = `\n## Deployment\n\n**Production URL:** ${url}\n**Last deployed:** ${new Date().toISOString()}\n**Platform:** Vercel\n`;
|
|
144
|
+
if (content.includes('## Deployment')) {
|
|
145
|
+
content = content.replace(/## Deployment[\s\S]*?(?=\n##|$)/, deploymentSection);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
content += deploymentSection;
|
|
149
|
+
}
|
|
150
|
+
await fs.writeFile(brainPath, content, 'utf-8');
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// BRAIN.md doesn't exist - create minimal version
|
|
154
|
+
await fs.mkdir(path.dirname(brainPath), { recursive: true });
|
|
155
|
+
await fs.writeFile(brainPath, `# Project Memory\n\n## Deployment\n\n**Production URL:** ${url}\n**Last deployed:** ${new Date().toISOString()}\n**Platform:** Vercel\n`, 'utf-8');
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function generateDeploymentReport(url, production, envCount) {
|
|
159
|
+
let report = `🍞 CodeBakers: Deployment ${production ? 'Complete' : 'Preview Ready'}\n\n`;
|
|
160
|
+
report += `✅ **Live URL:** ${url}\n\n`;
|
|
161
|
+
report += `## Deployment Details\n\n`;
|
|
162
|
+
report += `- **Environment:** ${production ? 'Production' : 'Preview'}\n`;
|
|
163
|
+
report += `- **Platform:** Vercel\n`;
|
|
164
|
+
report += `- **Deployed:** ${new Date().toLocaleString()}\n`;
|
|
165
|
+
if (envCount > 0) {
|
|
166
|
+
report += `- **Environment variables:** ${envCount} loaded\n`;
|
|
167
|
+
}
|
|
168
|
+
report += `\n## Next Steps\n\n`;
|
|
169
|
+
report += `1. Visit: ${url}\n`;
|
|
170
|
+
report += `2. Test core functionality\n`;
|
|
171
|
+
report += `3. Monitor errors: https://vercel.com/dashboard\n`;
|
|
172
|
+
if (envCount > 0) {
|
|
173
|
+
report += `4. Verify environment variables in Vercel dashboard\n`;
|
|
174
|
+
}
|
|
175
|
+
report += `\n✨ Your app is live!\n`;
|
|
176
|
+
return report;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=deploy-vercel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-vercel.js","sourceRoot":"","sources":["../../src/tools/deploy-vercel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codebakers_diagnose_error
|
|
3
|
+
*
|
|
4
|
+
* AI-Powered Error Diagnosis
|
|
5
|
+
*
|
|
6
|
+
* Analyzes errors and provides:
|
|
7
|
+
* - Root cause analysis
|
|
8
|
+
* - Affected files
|
|
9
|
+
* - Multiple fix approaches
|
|
10
|
+
* - Confidence scores
|
|
11
|
+
* - Related patterns from ERROR-LOG.md
|
|
12
|
+
*/
|
|
13
|
+
interface DiagnoseArgs {
|
|
14
|
+
error_message: string;
|
|
15
|
+
stack_trace?: string;
|
|
16
|
+
context?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function diagnoseError(args: DiagnoseArgs): Promise<string>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=diagnose-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnose-error.d.ts","sourceRoot":"","sources":["../../src/tools/diagnose-error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,UAAU,YAAY;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAiBD,wBAAsB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAmCvE"}
|