@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,371 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codebakers_run_interview
|
|
3
|
+
*
|
|
4
|
+
* Automated Interview Agent (Phase 1)
|
|
5
|
+
*
|
|
6
|
+
* Automates project interview to generate:
|
|
7
|
+
* - project-profile.md (intent, external services, constraints)
|
|
8
|
+
* - FLOWS.md (all user flows with status)
|
|
9
|
+
* - CREDENTIALS-NEEDED.md (external actions needed)
|
|
10
|
+
* - BRAIN.md initialization
|
|
11
|
+
*
|
|
12
|
+
* Reads from (if exist):
|
|
13
|
+
* - refs/prd/ (requirements)
|
|
14
|
+
* - refs/design/ (mockups - uses DESIGN-CONTRACT.md if exists)
|
|
15
|
+
* - refs/api/ (API docs)
|
|
16
|
+
* - INTEGRATION-CONFIG.md (if integrations tested)
|
|
17
|
+
*
|
|
18
|
+
* Output: Complete Phase 1 artifacts ready for Phase 2
|
|
19
|
+
*/
|
|
20
|
+
import * as fs from 'fs/promises';
|
|
21
|
+
import * as path from 'path';
|
|
22
|
+
export async function runInterview(args) {
|
|
23
|
+
const cwd = process.cwd();
|
|
24
|
+
const description = args.project_description || '';
|
|
25
|
+
console.error('š CodeBakers: Automated Interview (Phase 1)');
|
|
26
|
+
try {
|
|
27
|
+
// Gather context from refs/
|
|
28
|
+
const context = await gatherContext(cwd);
|
|
29
|
+
// Generate interview result
|
|
30
|
+
const result = await generateInterviewResult(description, context);
|
|
31
|
+
// Write artifacts
|
|
32
|
+
await writeProjectProfile(cwd, result);
|
|
33
|
+
await writeFlows(cwd, result);
|
|
34
|
+
await writeCredentialsNeeded(cwd, result);
|
|
35
|
+
await initializeBrain(cwd, result);
|
|
36
|
+
// Generate report
|
|
37
|
+
const report = generateInterviewReport(result);
|
|
38
|
+
return report;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
console.error('Error during interview:', error);
|
|
42
|
+
return `š CodeBakers: Interview Failed
|
|
43
|
+
|
|
44
|
+
Error: ${error instanceof Error ? error.message : String(error)}`;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async function gatherContext(cwd) {
|
|
48
|
+
const context = {
|
|
49
|
+
has_prd: false,
|
|
50
|
+
has_mockups: false,
|
|
51
|
+
has_design_contract: false,
|
|
52
|
+
has_integration_config: false,
|
|
53
|
+
prd_content: '',
|
|
54
|
+
mockup_count: 0,
|
|
55
|
+
integrations: [],
|
|
56
|
+
};
|
|
57
|
+
// Check refs/prd/
|
|
58
|
+
const prdPath = path.join(cwd, 'refs', 'prd');
|
|
59
|
+
const prdExists = await fs.access(prdPath).then(() => true).catch(() => false);
|
|
60
|
+
if (prdExists) {
|
|
61
|
+
const files = await fs.readdir(prdPath);
|
|
62
|
+
if (files.length > 0) {
|
|
63
|
+
context.has_prd = true;
|
|
64
|
+
const firstFile = files[0];
|
|
65
|
+
context.prd_content = await fs.readFile(path.join(prdPath, firstFile), 'utf-8');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Check refs/design/
|
|
69
|
+
const designPath = path.join(cwd, 'refs', 'design');
|
|
70
|
+
const designExists = await fs.access(designPath).then(() => true).catch(() => false);
|
|
71
|
+
if (designExists) {
|
|
72
|
+
const files = await fs.readdir(designPath);
|
|
73
|
+
context.mockup_count = files.filter(f => f.endsWith('.html') || f.endsWith('.png')).length;
|
|
74
|
+
context.has_mockups = context.mockup_count > 0;
|
|
75
|
+
}
|
|
76
|
+
// Check DESIGN-CONTRACT.md
|
|
77
|
+
const designContractPath = path.join(cwd, 'DESIGN-CONTRACT.md');
|
|
78
|
+
context.has_design_contract = await fs.access(designContractPath).then(() => true).catch(() => false);
|
|
79
|
+
// Check INTEGRATION-CONFIG.md
|
|
80
|
+
const integrationPath = path.join(cwd, 'INTEGRATION-CONFIG.md');
|
|
81
|
+
context.has_integration_config = await fs.access(integrationPath).then(() => true).catch(() => false);
|
|
82
|
+
if (context.has_integration_config) {
|
|
83
|
+
const content = await fs.readFile(integrationPath, 'utf-8');
|
|
84
|
+
// Simple parse: extract integration names
|
|
85
|
+
const matches = content.matchAll(/## Integration: (.+)/g);
|
|
86
|
+
for (const match of matches) {
|
|
87
|
+
context.integrations.push(match[1]);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return context;
|
|
91
|
+
}
|
|
92
|
+
async function generateInterviewResult(description, context) {
|
|
93
|
+
// Infer project type
|
|
94
|
+
let projectType = 'webapp';
|
|
95
|
+
let projectName = 'MyApp';
|
|
96
|
+
if (description.toLowerCase().includes('email')) {
|
|
97
|
+
projectType = 'email';
|
|
98
|
+
projectName = 'EmailApp';
|
|
99
|
+
}
|
|
100
|
+
else if (description.toLowerCase().includes('crm')) {
|
|
101
|
+
projectType = 'crm';
|
|
102
|
+
projectName = 'CRM';
|
|
103
|
+
}
|
|
104
|
+
else if (description.toLowerCase().includes('dashboard')) {
|
|
105
|
+
projectType = 'dashboard';
|
|
106
|
+
projectName = 'Dashboard';
|
|
107
|
+
}
|
|
108
|
+
// Extract entities from description
|
|
109
|
+
const coreEntities = [];
|
|
110
|
+
if (projectType === 'email') {
|
|
111
|
+
coreEntities.push('Message', 'Folder', 'Label', 'User');
|
|
112
|
+
}
|
|
113
|
+
else if (projectType === 'crm') {
|
|
114
|
+
coreEntities.push('Contact', 'Deal', 'Activity', 'User');
|
|
115
|
+
}
|
|
116
|
+
else if (projectType === 'dashboard') {
|
|
117
|
+
coreEntities.push('Metric', 'Chart', 'Report', 'User');
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
coreEntities.push('User', 'Item');
|
|
121
|
+
}
|
|
122
|
+
// Generate user flows
|
|
123
|
+
const userFlows = [];
|
|
124
|
+
if (projectType === 'email') {
|
|
125
|
+
userFlows.push({ name: 'View inbox', description: 'User sees list of messages', steps: ['Load messages', 'Display list', 'Show unread count'], priority: 'P0', status: 'pending' }, { name: 'Read message', description: 'User opens and reads message', steps: ['Click message', 'Load content', 'Mark as read'], priority: 'P0', status: 'pending' }, { name: 'Send message', description: 'User composes and sends message', steps: ['Open composer', 'Enter recipients', 'Write message', 'Send'], priority: 'P0', status: 'pending' }, { name: 'Delete message', description: 'User deletes message', steps: ['Select message', 'Click delete', 'Confirm', 'Update UI'], priority: 'P1', status: 'pending' }, { name: 'Search messages', description: 'User searches for messages', steps: ['Enter query', 'Execute search', 'Display results'], priority: 'P1', status: 'pending' });
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
userFlows.push({ name: 'User login', description: 'User authenticates', steps: ['Enter credentials', 'Submit', 'Redirect to app'], priority: 'P0', status: 'pending' }, { name: 'View list', description: 'User sees list of items', steps: ['Load items', 'Display list'], priority: 'P0', status: 'pending' }, { name: 'Create item', description: 'User creates new item', steps: ['Open form', 'Fill fields', 'Submit', 'Update list'], priority: 'P0', status: 'pending' });
|
|
129
|
+
}
|
|
130
|
+
// External services
|
|
131
|
+
const externalServices = [];
|
|
132
|
+
if (context.has_integration_config) {
|
|
133
|
+
for (const integration of context.integrations) {
|
|
134
|
+
externalServices.push({
|
|
135
|
+
name: integration,
|
|
136
|
+
purpose: 'External integration',
|
|
137
|
+
auth_method: 'OAuth 2.0',
|
|
138
|
+
credentials_needed: ['CLIENT_ID', 'CLIENT_SECRET'],
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Tech stack (CodeBakers standard)
|
|
143
|
+
const techStack = {
|
|
144
|
+
database: 'PostgreSQL (Supabase)',
|
|
145
|
+
backend: 'Next.js Server Actions',
|
|
146
|
+
frontend: 'Next.js 14 App Router + React',
|
|
147
|
+
auth: 'Supabase Auth',
|
|
148
|
+
};
|
|
149
|
+
return {
|
|
150
|
+
project_name: projectName,
|
|
151
|
+
project_type: projectType,
|
|
152
|
+
core_entities: coreEntities,
|
|
153
|
+
user_flows: userFlows,
|
|
154
|
+
external_services: externalServices,
|
|
155
|
+
tech_stack: techStack,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
async function writeProjectProfile(cwd, result) {
|
|
159
|
+
const content = `# Project Profile
|
|
160
|
+
|
|
161
|
+
**Project:** ${result.project_name}
|
|
162
|
+
**Type:** ${result.project_type}
|
|
163
|
+
**Generated:** ${new Date().toISOString()}
|
|
164
|
+
|
|
165
|
+
## Core Entities
|
|
166
|
+
|
|
167
|
+
${result.core_entities.map(e => `- ${e}`).join('\n')}
|
|
168
|
+
|
|
169
|
+
## Tech Stack
|
|
170
|
+
|
|
171
|
+
- **Database:** ${result.tech_stack.database}
|
|
172
|
+
- **Backend:** ${result.tech_stack.backend}
|
|
173
|
+
- **Frontend:** ${result.tech_stack.frontend}
|
|
174
|
+
- **Auth:** ${result.tech_stack.auth}
|
|
175
|
+
|
|
176
|
+
## External Services
|
|
177
|
+
|
|
178
|
+
${result.external_services.length > 0 ? result.external_services.map(s => `- ${s.name} (${s.purpose})`).join('\n') : 'None'}
|
|
179
|
+
|
|
180
|
+
## Domain Context
|
|
181
|
+
|
|
182
|
+
Domain: ${result.project_type}
|
|
183
|
+
|
|
184
|
+
Auto-loaded domain file: agents/domains/${result.project_type}.md (if exists)
|
|
185
|
+
|
|
186
|
+
This provides domain-specific expectations:
|
|
187
|
+
- Feature defaults
|
|
188
|
+
- Field display logic
|
|
189
|
+
- UX patterns
|
|
190
|
+
- Mutation patterns
|
|
191
|
+
`;
|
|
192
|
+
await fs.writeFile(path.join(cwd, 'project-profile.md'), content, 'utf-8');
|
|
193
|
+
}
|
|
194
|
+
async function writeFlows(cwd, result) {
|
|
195
|
+
const content = `# User Flows
|
|
196
|
+
|
|
197
|
+
**Project:** ${result.project_name}
|
|
198
|
+
**Total flows:** ${result.user_flows.length}
|
|
199
|
+
|
|
200
|
+
${result.user_flows.map((flow, i) => `
|
|
201
|
+
## ${i + 1}. ${flow.name} (${flow.priority})
|
|
202
|
+
|
|
203
|
+
**Description:** ${flow.description}
|
|
204
|
+
|
|
205
|
+
**Steps:**
|
|
206
|
+
${flow.steps.map((s, j) => `${j + 1}. ${s}`).join('\n')}
|
|
207
|
+
|
|
208
|
+
**Status:** ${flow.status}
|
|
209
|
+
`).join('\n')}
|
|
210
|
+
|
|
211
|
+
## Flow Status Summary
|
|
212
|
+
|
|
213
|
+
- **P0 (Critical):** ${result.user_flows.filter(f => f.priority === 'P0').length} flows
|
|
214
|
+
- **P1 (Important):** ${result.user_flows.filter(f => f.priority === 'P1').length} flows
|
|
215
|
+
- **P2 (Nice to have):** ${result.user_flows.filter(f => f.priority === 'P2').length} flows
|
|
216
|
+
|
|
217
|
+
**Pending:** ${result.user_flows.filter(f => f.status === 'pending').length}
|
|
218
|
+
**In progress:** ${result.user_flows.filter(f => f.status === 'in_progress').length}
|
|
219
|
+
**Complete:** ${result.user_flows.filter(f => f.status === 'complete').length}
|
|
220
|
+
`;
|
|
221
|
+
await fs.writeFile(path.join(cwd, 'FLOWS.md'), content, 'utf-8');
|
|
222
|
+
}
|
|
223
|
+
async function writeCredentialsNeeded(cwd, result) {
|
|
224
|
+
if (result.external_services.length === 0) {
|
|
225
|
+
return; // No credentials needed
|
|
226
|
+
}
|
|
227
|
+
const content = `# Credentials Needed
|
|
228
|
+
|
|
229
|
+
**Project:** ${result.project_name}
|
|
230
|
+
|
|
231
|
+
${result.external_services.map(service => `
|
|
232
|
+
## ${service.name}
|
|
233
|
+
|
|
234
|
+
**Purpose:** ${service.purpose}
|
|
235
|
+
**Auth method:** ${service.auth_method}
|
|
236
|
+
|
|
237
|
+
**Environment variables needed:**
|
|
238
|
+
|
|
239
|
+
${service.credentials_needed.map(cred => `\`\`\`bash
|
|
240
|
+
${cred}=[your-${cred.toLowerCase()}]
|
|
241
|
+
\`\`\``).join('\n\n')}
|
|
242
|
+
|
|
243
|
+
Add to \`.env.local\`:
|
|
244
|
+
\`\`\`
|
|
245
|
+
${service.credentials_needed.map(cred => `${cred}=`).join('\n')}
|
|
246
|
+
\`\`\`
|
|
247
|
+
|
|
248
|
+
**Setup instructions:** See INTEGRATION-CONFIG.md for ${service.name}
|
|
249
|
+
`).join('\n')}
|
|
250
|
+
`;
|
|
251
|
+
const credsPath = path.join(cwd, '.codebakers', 'CREDENTIALS-NEEDED.md');
|
|
252
|
+
await fs.mkdir(path.dirname(credsPath), { recursive: true });
|
|
253
|
+
await fs.writeFile(credsPath, content, 'utf-8');
|
|
254
|
+
}
|
|
255
|
+
async function initializeBrain(cwd, result) {
|
|
256
|
+
const content = `# BRAIN.md
|
|
257
|
+
|
|
258
|
+
**Project:** ${result.project_name}
|
|
259
|
+
**Type:** ${result.project_type}
|
|
260
|
+
**Initialized:** ${new Date().toISOString()}
|
|
261
|
+
|
|
262
|
+
## Project Intent
|
|
263
|
+
|
|
264
|
+
Building: ${result.project_name} (${result.project_type})
|
|
265
|
+
|
|
266
|
+
Core entities: ${result.core_entities.join(', ')}
|
|
267
|
+
|
|
268
|
+
## Tech Stack (CodeBakers Standard)
|
|
269
|
+
|
|
270
|
+
- Database: ${result.tech_stack.database}
|
|
271
|
+
- Backend: ${result.tech_stack.backend}
|
|
272
|
+
- Frontend: ${result.tech_stack.frontend}
|
|
273
|
+
- Auth: ${result.tech_stack.auth}
|
|
274
|
+
|
|
275
|
+
## Current Phase
|
|
276
|
+
|
|
277
|
+
**Phase:** 1 (Interview complete)
|
|
278
|
+
|
|
279
|
+
**Next:** Phase 2 (Deep Analysis)
|
|
280
|
+
|
|
281
|
+
Recommended next steps:
|
|
282
|
+
1. codebakers_validate_mockups (if mockups provided)
|
|
283
|
+
2. codebakers_analyze_mockups (after validation)
|
|
284
|
+
3. codebakers_generate_schema
|
|
285
|
+
4. codebakers_map_dependencies
|
|
286
|
+
|
|
287
|
+
## Architectural Decisions
|
|
288
|
+
|
|
289
|
+
1. **Stack:** Supabase + Next.js 14 (CodeBakers standard - not negotiable)
|
|
290
|
+
2. **Auth:** Supabase Auth only (no NextAuth, Auth0, Clerk)
|
|
291
|
+
3. **State:** Zustand stores (mapped with codebakers_map_dependencies)
|
|
292
|
+
4. **Testing:** Vitest (unit) + Playwright (E2E)
|
|
293
|
+
5. **Versioning:** Exact versions only (no ^ or ~)
|
|
294
|
+
|
|
295
|
+
## External Services
|
|
296
|
+
|
|
297
|
+
${result.external_services.length > 0 ? result.external_services.map(s => `- ${s.name}`).join('\n') : 'None'}
|
|
298
|
+
|
|
299
|
+
${result.external_services.length > 0 ? '\n**Action required:** Add credentials to .env.local (see CREDENTIALS-NEEDED.md)' : ''}
|
|
300
|
+
|
|
301
|
+
## Flows
|
|
302
|
+
|
|
303
|
+
Total: ${result.user_flows.length} user flows
|
|
304
|
+
|
|
305
|
+
See FLOWS.md for complete list.
|
|
306
|
+
|
|
307
|
+
## Memory Files
|
|
308
|
+
|
|
309
|
+
- ā
project-profile.md (created)
|
|
310
|
+
- ā
FLOWS.md (created)
|
|
311
|
+
- ā
BRAIN.md (this file)
|
|
312
|
+
${result.external_services.length > 0 ? '- ā
CREDENTIALS-NEEDED.md (created)' : ''}
|
|
313
|
+
- ā³ DEPENDENCY-MAP.md (pending - run after schema)
|
|
314
|
+
- ā³ BUILD-LOG.md (pending - starts with first build)
|
|
315
|
+
- ā³ ERROR-LOG.md (pending - starts with first error)
|
|
316
|
+
`;
|
|
317
|
+
const brainPath = path.join(cwd, '.codebakers', 'BRAIN.md');
|
|
318
|
+
await fs.mkdir(path.dirname(brainPath), { recursive: true });
|
|
319
|
+
await fs.writeFile(brainPath, content, 'utf-8');
|
|
320
|
+
}
|
|
321
|
+
function generateInterviewReport(result) {
|
|
322
|
+
let report = `š CodeBakers: Interview Complete\n\n`;
|
|
323
|
+
report += `**Project:** ${result.project_name}\n`;
|
|
324
|
+
report += `**Type:** ${result.project_type}\n\n`;
|
|
325
|
+
report += `---\n\n`;
|
|
326
|
+
report += `## ā
Artifacts Generated\n\n`;
|
|
327
|
+
report += `- **project-profile.md** - Project overview, entities, tech stack\n`;
|
|
328
|
+
report += `- **FLOWS.md** - ${result.user_flows.length} user flows (${result.user_flows.filter(f => f.priority === 'P0').length} P0, ${result.user_flows.filter(f => f.priority === 'P1').length} P1)\n`;
|
|
329
|
+
report += `- **.codebakers/BRAIN.md** - Master project state\n`;
|
|
330
|
+
if (result.external_services.length > 0) {
|
|
331
|
+
report += `- **.codebakers/CREDENTIALS-NEEDED.md** - ${result.external_services.length} external service(s)\n`;
|
|
332
|
+
}
|
|
333
|
+
report += `\n---\n\n`;
|
|
334
|
+
report += `## š Project Summary\n\n`;
|
|
335
|
+
report += `**Core entities:** ${result.core_entities.join(', ')}\n`;
|
|
336
|
+
report += `**User flows:** ${result.user_flows.length}\n`;
|
|
337
|
+
report += `**External services:** ${result.external_services.length}\n\n`;
|
|
338
|
+
report += `**Tech stack:**\n`;
|
|
339
|
+
report += `- ${result.tech_stack.database}\n`;
|
|
340
|
+
report += `- ${result.tech_stack.backend}\n`;
|
|
341
|
+
report += `- ${result.tech_stack.frontend}\n`;
|
|
342
|
+
report += `- ${result.tech_stack.auth}\n\n`;
|
|
343
|
+
report += `---\n\n`;
|
|
344
|
+
if (result.external_services.length > 0) {
|
|
345
|
+
report += `## ā ļø Action Required\n\n`;
|
|
346
|
+
report += `External services detected. Add credentials to \`.env.local\`:\n\n`;
|
|
347
|
+
for (const service of result.external_services) {
|
|
348
|
+
report += `**${service.name}:**\n`;
|
|
349
|
+
for (const cred of service.credentials_needed) {
|
|
350
|
+
report += `- ${cred}=[your-value]\n`;
|
|
351
|
+
}
|
|
352
|
+
report += `\n`;
|
|
353
|
+
}
|
|
354
|
+
report += `See: .codebakers/CREDENTIALS-NEEDED.md\n\n`;
|
|
355
|
+
report += `---\n\n`;
|
|
356
|
+
}
|
|
357
|
+
report += `## Next Steps\n\n`;
|
|
358
|
+
report += `**Phase 1 complete** ā Moving to Phase 2 (Deep Analysis)\n\n`;
|
|
359
|
+
report += `Recommended sequence:\n`;
|
|
360
|
+
report += `1. **codebakers_validate_mockups** (if mockups in refs/design/)\n`;
|
|
361
|
+
report += `2. **codebakers_fix_mockups** (auto-fix quality issues)\n`;
|
|
362
|
+
report += `3. **codebakers_verify_mockups** (100% quality check)\n`;
|
|
363
|
+
report += `4. **codebakers_analyze_mockups** (extract data from perfect mockups)\n`;
|
|
364
|
+
report += `5. **codebakers_generate_schema** (database from mockups)\n`;
|
|
365
|
+
report += `6. **codebakers_map_dependencies** (dependency graph)\n`;
|
|
366
|
+
report += `7. **codebakers_check_gate { phase: 2 }** (verify Phase 2 complete)\n\n`;
|
|
367
|
+
report += `Then: Ready for autonomous build\n`;
|
|
368
|
+
report += `ā **codebakers_autonomous_build { mode: "full" }**\n`;
|
|
369
|
+
return report;
|
|
370
|
+
}
|
|
371
|
+
//# sourceMappingURL=run-interview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-interview.js","sourceRoot":"","sources":["../../src/tools/run-interview.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codebakers_run_tests
|
|
3
|
+
*
|
|
4
|
+
* Test Orchestrator - Runs Vitest and Playwright tests
|
|
5
|
+
*/
|
|
6
|
+
interface TestArgs {
|
|
7
|
+
test_type: 'unit' | 'e2e' | 'all';
|
|
8
|
+
mode?: 'fast' | 'full';
|
|
9
|
+
}
|
|
10
|
+
export declare function runTests(args: TestArgs): Promise<string>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=run-tests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-tests.d.ts","sourceRoot":"","sources":["../../src/tools/run-tests.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,UAAU,QAAQ;IAChB,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB9D"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codebakers_run_tests
|
|
3
|
+
*
|
|
4
|
+
* Test Orchestrator - Runs Vitest and Playwright tests
|
|
5
|
+
*/
|
|
6
|
+
import { exec } from 'child_process';
|
|
7
|
+
import { promisify } from 'util';
|
|
8
|
+
const execAsync = promisify(exec);
|
|
9
|
+
export async function runTests(args) {
|
|
10
|
+
const { test_type, mode = 'full' } = args;
|
|
11
|
+
console.error('š CodeBakers: Running Tests');
|
|
12
|
+
let results = '';
|
|
13
|
+
try {
|
|
14
|
+
if (test_type === 'unit' || test_type === 'all') {
|
|
15
|
+
console.error('Running unit tests (Vitest)...');
|
|
16
|
+
const { stdout } = await execAsync('vitest run', { cwd: process.cwd() });
|
|
17
|
+
results += `## Unit Tests (Vitest)\n\n${stdout}\n\n`;
|
|
18
|
+
}
|
|
19
|
+
if (test_type === 'e2e' || test_type === 'all') {
|
|
20
|
+
console.error('Running E2E tests (Playwright)...');
|
|
21
|
+
const { stdout } = await execAsync('playwright test', { cwd: process.cwd() });
|
|
22
|
+
results += `## E2E Tests (Playwright)\n\n${stdout}\n\n`;
|
|
23
|
+
}
|
|
24
|
+
return `š CodeBakers: Test Results\n\n${results}\nā
All tests passed`;
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
return `š CodeBakers: Tests Failed\n\n${results}\n\nā Error: ${error instanceof Error ? error.message : String(error)}`;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=run-tests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-tests.js","sourceRoot":"","sources":["../../src/tools/run-tests.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAOlC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAc;IAC3C,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IAE1C,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAE9C,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,IAAI,CAAC;QACH,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAChD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACzE,OAAO,IAAI,6BAA6B,MAAM,MAAM,CAAC;QACvD,CAAC;QAED,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YAC/C,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACnD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC9E,OAAO,IAAI,gCAAgC,MAAM,MAAM,CAAC;QAC1D,CAAC;QAED,OAAO,kCAAkC,OAAO,sBAAsB,CAAC;IACzE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,kCAAkC,OAAO,gBAAgB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAC3H,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codebakers_scan_security
|
|
3
|
+
*
|
|
4
|
+
* Security Vulnerability Scanner
|
|
5
|
+
*
|
|
6
|
+
* Scans for:
|
|
7
|
+
* - Dependency vulnerabilities (npm audit)
|
|
8
|
+
* - XSS vulnerabilities
|
|
9
|
+
* - SQL injection risks
|
|
10
|
+
* - Exposed secrets
|
|
11
|
+
* - Insecure authentication patterns
|
|
12
|
+
* - Missing security headers
|
|
13
|
+
*/
|
|
14
|
+
interface SecurityArgs {
|
|
15
|
+
block_on_critical?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function scanSecurity(args?: SecurityArgs): Promise<string>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=scan-security.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-security.d.ts","sourceRoot":"","sources":["../../src/tools/scan-security.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,UAAU,YAAY;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAYD,wBAAsB,YAAY,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyC3E"}
|