@codebakers/mcp 5.2.0 โ 5.4.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/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +76 -6
- package/dist/index.js.map +1 -1
- package/dist/tools/builder.d.ts +19 -0
- package/dist/tools/builder.d.ts.map +1 -0
- package/dist/tools/builder.js +287 -0
- package/dist/tools/builder.js.map +1 -0
- package/dist/tools/consult.d.ts +28 -0
- package/dist/tools/consult.d.ts.map +1 -0
- package/dist/tools/consult.js +425 -0
- package/dist/tools/consult.js.map +1 -0
- package/dist/tools/setup-github.d.ts +25 -0
- package/dist/tools/setup-github.d.ts.map +1 -0
- package/dist/tools/setup-github.js +285 -0
- package/dist/tools/setup-github.js.map +1 -0
- package/dist/tools/setup-supabase.d.ts +28 -0
- package/dist/tools/setup-supabase.d.ts.map +1 -0
- package/dist/tools/setup-supabase.js +320 -0
- package/dist/tools/setup-supabase.js.map +1 -0
- package/dist/tools/setup-vercel.d.ts +23 -0
- package/dist/tools/setup-vercel.d.ts.map +1 -0
- package/dist/tools/setup-vercel.js +264 -0
- package/dist/tools/setup-vercel.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codebakers_consult
|
|
3
|
+
*
|
|
4
|
+
* Context-Aware Consulting & Guidance
|
|
5
|
+
*
|
|
6
|
+
* Provides intelligent consulting based on full project context:
|
|
7
|
+
* - Current project state (BRAIN.md)
|
|
8
|
+
* - Architecture decisions (ASSUMPTIONS.md)
|
|
9
|
+
* - Dependencies (DEPENDENCY-MAP.md)
|
|
10
|
+
* - Past errors and learnings (ERROR-LOG.md)
|
|
11
|
+
* - User flows (FLOWS.md)
|
|
12
|
+
* - Tech stack (Supabase + Next.js)
|
|
13
|
+
* - Domain context (project-profile.md)
|
|
14
|
+
*
|
|
15
|
+
* Unlike generic AI responses, this tool provides answers specific to:
|
|
16
|
+
* - Your project's current state
|
|
17
|
+
* - Your existing architecture
|
|
18
|
+
* - Patterns that have worked (or failed) in your project
|
|
19
|
+
* - Your tech stack constraints
|
|
20
|
+
*/
|
|
21
|
+
import * as fs from 'fs/promises';
|
|
22
|
+
import * as path from 'path';
|
|
23
|
+
export async function consult(args) {
|
|
24
|
+
const cwd = process.cwd();
|
|
25
|
+
const { question, include_code_examples = true, focus_area } = args;
|
|
26
|
+
console.error('๐ CodeBakers: Context-Aware Consulting');
|
|
27
|
+
try {
|
|
28
|
+
if (!question || question.trim().length === 0) {
|
|
29
|
+
return `๐ CodeBakers: Consulting Mode\n\n**Ask me anything about your project:**\n\ncodebakers_consult({ question: "How should I handle user permissions?" })\ncodebakers_consult({ question: "What's the best way to implement search?" })\ncodebakers_consult({ question: "Explain this error: [paste error]" })\n\n**I'll provide context-aware answers based on:**\n- Your current project state\n- Your tech stack (Supabase + Next.js)\n- Your architecture decisions\n- Patterns from your ERROR-LOG.md\n- Your existing entities and flows`;
|
|
30
|
+
}
|
|
31
|
+
// Load full project context
|
|
32
|
+
console.error('Loading project context...\n');
|
|
33
|
+
const context = await loadProjectContext(cwd);
|
|
34
|
+
// Analyze question and context
|
|
35
|
+
const guidance = await generateGuidance(question, context, include_code_examples, focus_area);
|
|
36
|
+
return guidance;
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
return `๐ CodeBakers: Consulting Failed\n\nError: ${error instanceof Error ? error.message : String(error)}`;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async function loadProjectContext(cwd) {
|
|
43
|
+
const context = {
|
|
44
|
+
entities: [],
|
|
45
|
+
recentDecisions: [],
|
|
46
|
+
recentErrors: [],
|
|
47
|
+
hasSupabase: false,
|
|
48
|
+
hasNextJs: false,
|
|
49
|
+
hasPrisma: false
|
|
50
|
+
};
|
|
51
|
+
const codebakersDir = path.join(cwd, '.codebakers');
|
|
52
|
+
// Load BRAIN.md
|
|
53
|
+
try {
|
|
54
|
+
const brainPath = path.join(codebakersDir, 'BRAIN.md');
|
|
55
|
+
context.brain = await fs.readFile(brainPath, 'utf-8');
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// BRAIN.md doesn't exist
|
|
59
|
+
}
|
|
60
|
+
// Load ASSUMPTIONS.md
|
|
61
|
+
try {
|
|
62
|
+
const assumptionsPath = path.join(codebakersDir, 'ASSUMPTIONS.md');
|
|
63
|
+
context.assumptions = await fs.readFile(assumptionsPath, 'utf-8');
|
|
64
|
+
// Extract recent decisions (last 10)
|
|
65
|
+
const decisions = context.assumptions.split('\n').filter(line => line.startsWith('## '));
|
|
66
|
+
context.recentDecisions = decisions.slice(-10);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// ASSUMPTIONS.md doesn't exist
|
|
70
|
+
}
|
|
71
|
+
// Load DEPENDENCY-MAP.md
|
|
72
|
+
try {
|
|
73
|
+
const depMapPath = path.join(codebakersDir, 'DEPENDENCY-MAP.md');
|
|
74
|
+
context.dependencies = await fs.readFile(depMapPath, 'utf-8');
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// DEPENDENCY-MAP.md doesn't exist
|
|
78
|
+
}
|
|
79
|
+
// Load ERROR-LOG.md
|
|
80
|
+
try {
|
|
81
|
+
const errorLogPath = path.join(codebakersDir, 'ERROR-LOG.md');
|
|
82
|
+
context.errors = await fs.readFile(errorLogPath, 'utf-8');
|
|
83
|
+
// Extract recent errors (last 10)
|
|
84
|
+
const errorEntries = context.errors.split('\n## ').slice(-10);
|
|
85
|
+
context.recentErrors = errorEntries;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// ERROR-LOG.md doesn't exist
|
|
89
|
+
}
|
|
90
|
+
// Load FLOWS.md
|
|
91
|
+
try {
|
|
92
|
+
const flowsPath = path.join(cwd, 'FLOWS.md');
|
|
93
|
+
context.flows = await fs.readFile(flowsPath, 'utf-8');
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// FLOWS.md doesn't exist
|
|
97
|
+
}
|
|
98
|
+
// Load project-profile.md
|
|
99
|
+
try {
|
|
100
|
+
const profilePath = path.join(cwd, 'project-profile.md');
|
|
101
|
+
context.profile = await fs.readFile(profilePath, 'utf-8');
|
|
102
|
+
// Extract domain
|
|
103
|
+
const domainMatch = context.profile.match(/domain:\s*(\w+)/i);
|
|
104
|
+
if (domainMatch) {
|
|
105
|
+
context.domain = domainMatch[1];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// project-profile.md doesn't exist
|
|
110
|
+
}
|
|
111
|
+
// Load BUILD-LOG.md (last 50 lines)
|
|
112
|
+
try {
|
|
113
|
+
const buildLogPath = path.join(codebakersDir, 'BUILD-LOG.md');
|
|
114
|
+
const fullLog = await fs.readFile(buildLogPath, 'utf-8');
|
|
115
|
+
const lines = fullLog.split('\n');
|
|
116
|
+
context.buildLog = lines.slice(-50).join('\n');
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// BUILD-LOG.md doesn't exist
|
|
120
|
+
}
|
|
121
|
+
// Detect tech stack
|
|
122
|
+
try {
|
|
123
|
+
const packageJsonPath = path.join(cwd, 'package.json');
|
|
124
|
+
const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8'));
|
|
125
|
+
const allDeps = { ...packageJson.dependencies, ...packageJson.devDependencies };
|
|
126
|
+
context.hasSupabase = !!allDeps['@supabase/supabase-js'];
|
|
127
|
+
context.hasNextJs = !!allDeps['next'];
|
|
128
|
+
context.hasPrisma = !!allDeps['@prisma/client'];
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// package.json doesn't exist or can't be parsed
|
|
132
|
+
}
|
|
133
|
+
// Extract entities from BRAIN or FLOWS
|
|
134
|
+
if (context.brain) {
|
|
135
|
+
const entityMatches = context.brain.matchAll(/entity:\s*(\w+)/gi);
|
|
136
|
+
for (const match of entityMatches) {
|
|
137
|
+
if (!context.entities.includes(match[1])) {
|
|
138
|
+
context.entities.push(match[1]);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return context;
|
|
143
|
+
}
|
|
144
|
+
async function generateGuidance(question, context, includeExamples, focusArea) {
|
|
145
|
+
let response = `๐ CodeBakers: Consulting\n\n**Your Question:**\n${question}\n\n---\n\n`;
|
|
146
|
+
// Context summary
|
|
147
|
+
const contextItems = [];
|
|
148
|
+
if (context.domain)
|
|
149
|
+
contextItems.push(`Domain: ${context.domain}`);
|
|
150
|
+
if (context.hasSupabase)
|
|
151
|
+
contextItems.push('Stack: Supabase + Next.js');
|
|
152
|
+
if (context.hasPrisma)
|
|
153
|
+
contextItems.push('ORM: Prisma');
|
|
154
|
+
if (context.entities.length > 0)
|
|
155
|
+
contextItems.push(`Entities: ${context.entities.join(', ')}`);
|
|
156
|
+
if (contextItems.length > 0) {
|
|
157
|
+
response += `**Project Context:**\n${contextItems.map(item => `- ${item}`).join('\n')}\n\n---\n\n`;
|
|
158
|
+
}
|
|
159
|
+
// Analyze question type and provide relevant guidance
|
|
160
|
+
const questionLower = question.toLowerCase();
|
|
161
|
+
// Pattern matching for common question types
|
|
162
|
+
if (questionLower.includes('permission') || questionLower.includes('auth') || questionLower.includes('security')) {
|
|
163
|
+
response += await getSecurityGuidance(question, context, includeExamples);
|
|
164
|
+
}
|
|
165
|
+
else if (questionLower.includes('search') || questionLower.includes('filter') || questionLower.includes('query')) {
|
|
166
|
+
response += await getSearchGuidance(question, context, includeExamples);
|
|
167
|
+
}
|
|
168
|
+
else if (questionLower.includes('real-time') || questionLower.includes('websocket') || questionLower.includes('live')) {
|
|
169
|
+
response += await getRealtimeGuidance(question, context, includeExamples);
|
|
170
|
+
}
|
|
171
|
+
else if (questionLower.includes('performance') || questionLower.includes('slow') || questionLower.includes('optimize')) {
|
|
172
|
+
response += await getPerformanceGuidance(question, context, includeExamples);
|
|
173
|
+
}
|
|
174
|
+
else if (questionLower.includes('error') || questionLower.includes('bug') || questionLower.includes('issue')) {
|
|
175
|
+
response += await getErrorGuidance(question, context, includeExamples);
|
|
176
|
+
}
|
|
177
|
+
else if (questionLower.includes('deploy') || questionLower.includes('production') || questionLower.includes('vercel')) {
|
|
178
|
+
response += await getDeploymentGuidance(question, context, includeExamples);
|
|
179
|
+
}
|
|
180
|
+
else if (questionLower.includes('test') || questionLower.includes('testing')) {
|
|
181
|
+
response += await getTestingGuidance(question, context, includeExamples);
|
|
182
|
+
}
|
|
183
|
+
else if (questionLower.includes('ui') || questionLower.includes('component') || questionLower.includes('design')) {
|
|
184
|
+
response += await getUIGuidance(question, context, includeExamples);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
// General architectural guidance
|
|
188
|
+
response += await getGeneralGuidance(question, context, includeExamples);
|
|
189
|
+
}
|
|
190
|
+
// Add relevant context from project
|
|
191
|
+
if (context.recentDecisions.length > 0 && !questionLower.includes('error')) {
|
|
192
|
+
response += `\n\n**Related Decisions in Your Project:**\n`;
|
|
193
|
+
context.recentDecisions.slice(0, 3).forEach(decision => {
|
|
194
|
+
response += `- ${decision.replace('## ', '')}\n`;
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
if (context.recentErrors.length > 0 && questionLower.includes('error')) {
|
|
198
|
+
response += `\n\n**Recent Errors in Your Project:**\n`;
|
|
199
|
+
context.recentErrors.slice(0, 3).forEach(error => {
|
|
200
|
+
const firstLine = error.split('\n')[0];
|
|
201
|
+
response += `- ${firstLine}\n`;
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
return response;
|
|
205
|
+
}
|
|
206
|
+
async function getSecurityGuidance(question, context, includeExamples) {
|
|
207
|
+
let guidance = `## ๐ Security & Permissions Guidance\n\n`;
|
|
208
|
+
if (context.hasSupabase) {
|
|
209
|
+
guidance += `**Recommended Approach for Supabase:**\n\n`;
|
|
210
|
+
guidance += `1. **Row Level Security (RLS)** - Database-level enforcement\n`;
|
|
211
|
+
guidance += ` - Enable RLS on all tables\n`;
|
|
212
|
+
guidance += ` - Policy: Users can only access their own data\n`;
|
|
213
|
+
guidance += ` - Filter: \`auth.uid() = user_id\`\n\n`;
|
|
214
|
+
guidance += `2. **API Route Protection**\n`;
|
|
215
|
+
guidance += ` - Every mutation filters by BOTH \`id\` AND \`user_id\`\n`;
|
|
216
|
+
guidance += ` - Never trust client-provided \`user_id\`\n`;
|
|
217
|
+
guidance += ` - Get user from session: \`const { data: { session } } = await supabase.auth.getSession()\`\n\n`;
|
|
218
|
+
if (includeExamples) {
|
|
219
|
+
guidance += `**Example RLS Policy:**\n\`\`\`sql\nCREATE POLICY "Users can access own data"\n ON your_table\n FOR ALL\n USING (auth.uid() = user_id);\n\`\`\`\n\n`;
|
|
220
|
+
guidance += `**Example API Route (Secure):**\n\`\`\`typescript\n// pages/api/items/[id].ts\nexport default async function handler(req: Request) {\n const { data: { session } } = await supabase.auth.getSession();\n if (!session) return new Response('Unauthorized', { status: 401 });\n\n const userId = session.user.id;\n\n // CRITICAL: Filter by BOTH id AND user_id\n const { data } = await supabase\n .from('items')\n .update({ name: req.body.name })\n .eq('id', req.params.id)\n .eq('user_id', userId) // โ Prevents accessing other users' data\n .select()\n .maybeSingle();\n\n return new Response(JSON.stringify(data));\n}\n\`\`\`\n\n`;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
guidance += `**General Security Best Practices:**\n`;
|
|
225
|
+
guidance += `- Validate user identity on server-side (never trust client)\n`;
|
|
226
|
+
guidance += `- Use session-based auth or JWT tokens\n`;
|
|
227
|
+
guidance += `- Filter all queries by authenticated user ID\n`;
|
|
228
|
+
guidance += `- Implement role-based access control (RBAC) if needed\n\n`;
|
|
229
|
+
}
|
|
230
|
+
return guidance;
|
|
231
|
+
}
|
|
232
|
+
async function getSearchGuidance(question, context, includeExamples) {
|
|
233
|
+
let guidance = `## ๐ Search & Filtering Guidance\n\n`;
|
|
234
|
+
if (context.hasSupabase) {
|
|
235
|
+
guidance += `**Recommended Approach for Supabase:**\n\n`;
|
|
236
|
+
guidance += `1. **Full-Text Search** - Built-in PostgreSQL\n`;
|
|
237
|
+
guidance += ` - Use \`.textSearch()\` for natural language queries\n`;
|
|
238
|
+
guidance += ` - Create GIN index for performance\n`;
|
|
239
|
+
guidance += ` - Supports ranking and highlighting\n\n`;
|
|
240
|
+
guidance += `2. **Pattern Matching** - For simple searches\n`;
|
|
241
|
+
guidance += ` - Use \`.ilike()\` for case-insensitive partial match\n`;
|
|
242
|
+
guidance += ` - Example: \`.ilike('name', '%query%')\`\n\n`;
|
|
243
|
+
if (includeExamples) {
|
|
244
|
+
guidance += `**Example Full-Text Search:**\n\`\`\`typescript\nconst { data } = await supabase\n .from('posts')\n .select('*')\n .textSearch('content', query, {\n type: 'websearch',\n config: 'english'\n })\n .eq('user_id', userId);\n\`\`\`\n\n`;
|
|
245
|
+
guidance += `**Example Pattern Search:**\n\`\`\`typescript\nconst { data } = await supabase\n .from('users')\n .select('*')\n .ilike('name', \`%\${searchQuery}%\`)\n .limit(20);\n\`\`\`\n\n`;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
guidance += `**Performance Tips:**\n`;
|
|
249
|
+
guidance += `- Add database indexes on searchable columns\n`;
|
|
250
|
+
guidance += `- Limit results (pagination)\n`;
|
|
251
|
+
guidance += `- Debounce search input (300-500ms)\n`;
|
|
252
|
+
guidance += `- Cache common queries\n\n`;
|
|
253
|
+
return guidance;
|
|
254
|
+
}
|
|
255
|
+
async function getRealtimeGuidance(question, context, includeExamples) {
|
|
256
|
+
let guidance = `## โก Real-Time Updates Guidance\n\n`;
|
|
257
|
+
if (context.hasSupabase) {
|
|
258
|
+
guidance += `**Supabase Realtime (Recommended):**\n\n`;
|
|
259
|
+
guidance += `1. **Subscribe to table changes**\n`;
|
|
260
|
+
guidance += ` - Listen for INSERT, UPDATE, DELETE events\n`;
|
|
261
|
+
guidance += ` - Automatic WebSocket connection\n`;
|
|
262
|
+
guidance += ` - Filter by user_id for security\n\n`;
|
|
263
|
+
if (includeExamples) {
|
|
264
|
+
guidance += `**Example Realtime Subscription:**\n\`\`\`typescript\n// In Zustand store or component\nconst channel = supabase\n .channel('messages')\n .on('postgres_changes', {\n event: 'INSERT',\n schema: 'public',\n table: 'messages',\n filter: \`user_id=eq.\${userId}\`\n }, (payload) => {\n // Add new message to state\n setMessages(prev => [...prev, payload.new]);\n })\n .subscribe();\n\n// Cleanup\nreturn () => { channel.unsubscribe(); };\n\`\`\`\n\n`;
|
|
265
|
+
}
|
|
266
|
+
guidance += `**Alternative: Polling (Simpler)**\n`;
|
|
267
|
+
guidance += `- Fetch data every N seconds\n`;
|
|
268
|
+
guidance += `- Use SWR or React Query for caching\n`;
|
|
269
|
+
guidance += `- Good for less critical updates\n\n`;
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
guidance += `**General Approaches:**\n`;
|
|
273
|
+
guidance += `1. WebSockets (Socket.io, native WebSocket)\n`;
|
|
274
|
+
guidance += `2. Server-Sent Events (SSE)\n`;
|
|
275
|
+
guidance += `3. Polling (simplest, works everywhere)\n`;
|
|
276
|
+
guidance += `4. Long polling (if WebSockets blocked)\n\n`;
|
|
277
|
+
}
|
|
278
|
+
return guidance;
|
|
279
|
+
}
|
|
280
|
+
async function getPerformanceGuidance(question, context, includeExamples) {
|
|
281
|
+
let guidance = `## โก Performance Optimization Guidance\n\n`;
|
|
282
|
+
guidance += `**Quick Wins:**\n\n`;
|
|
283
|
+
guidance += `1. **Database Indexes** - Add to frequently queried columns\n`;
|
|
284
|
+
guidance += `2. **Pagination** - Limit results (don't fetch 10,000 rows)\n`;
|
|
285
|
+
guidance += `3. **Image Optimization** - Use Next.js Image component\n`;
|
|
286
|
+
guidance += `4. **Code Splitting** - Dynamic imports for large components\n`;
|
|
287
|
+
guidance += `5. **Caching** - SWR, React Query, or HTTP cache headers\n\n`;
|
|
288
|
+
if (context.hasNextJs) {
|
|
289
|
+
guidance += `**Next.js Specific:**\n`;
|
|
290
|
+
guidance += `- Use \`next/image\` for automatic optimization\n`;
|
|
291
|
+
guidance += `- Enable \`swcMinify: true\` in next.config.js\n`;
|
|
292
|
+
guidance += `- Use dynamic imports: \`const Heavy = dynamic(() => import('./Heavy'))\`\n`;
|
|
293
|
+
guidance += `- Implement Incremental Static Regeneration (ISR) where possible\n\n`;
|
|
294
|
+
}
|
|
295
|
+
if (context.hasSupabase) {
|
|
296
|
+
guidance += `**Supabase Query Optimization:**\n`;
|
|
297
|
+
guidance += `- Select only needed columns: \`.select('id, name')\` not \`.select('*')\`\n`;
|
|
298
|
+
guidance += `- Use \`.limit()\` and \`.range()\` for pagination\n`;
|
|
299
|
+
guidance += `- Add indexes on foreign keys and filter columns\n`;
|
|
300
|
+
guidance += `- Use \`.maybeSingle()\` instead of \`.limit(1)\` + array access\n\n`;
|
|
301
|
+
}
|
|
302
|
+
return guidance;
|
|
303
|
+
}
|
|
304
|
+
async function getErrorGuidance(question, context, includeExamples) {
|
|
305
|
+
let guidance = `## ๐ Error Diagnosis & Debugging\n\n`;
|
|
306
|
+
// Check if similar errors exist in ERROR-LOG.md
|
|
307
|
+
if (context.errors && context.recentErrors.length > 0) {
|
|
308
|
+
guidance += `**I found similar errors in your ERROR-LOG.md:**\n\n`;
|
|
309
|
+
// Try to match question to known errors
|
|
310
|
+
const questionWords = question.toLowerCase().split(' ');
|
|
311
|
+
const matchedErrors = context.recentErrors.filter(error => {
|
|
312
|
+
const errorLower = error.toLowerCase();
|
|
313
|
+
return questionWords.some(word => word.length > 4 && errorLower.includes(word));
|
|
314
|
+
});
|
|
315
|
+
if (matchedErrors.length > 0) {
|
|
316
|
+
guidance += matchedErrors.slice(0, 2).map(error => `\`\`\`\n${error}\n\`\`\`\n`).join('\n');
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
guidance += `**Common Next.js + Supabase Errors:**\n\n`;
|
|
320
|
+
guidance += `1. **"window is not defined"** - Accessing browser APIs during SSR\n`;
|
|
321
|
+
guidance += ` - Fix: Use dynamic imports with \`ssr: false\`\n\n`;
|
|
322
|
+
guidance += `2. **".maybeSingle() returned null"** - Query found no results\n`;
|
|
323
|
+
guidance += ` - Fix: Handle null case explicitly\n\n`;
|
|
324
|
+
guidance += `3. **"Row Level Security policy violation"** - User lacks permission\n`;
|
|
325
|
+
guidance += ` - Fix: Check RLS policies and user_id filtering\n\n`;
|
|
326
|
+
guidance += `4. **"Authentication required"** - No session found\n`;
|
|
327
|
+
guidance += ` - Fix: Redirect to login or refresh session\n\n`;
|
|
328
|
+
return guidance;
|
|
329
|
+
}
|
|
330
|
+
async function getDeploymentGuidance(question, context, includeExamples) {
|
|
331
|
+
let guidance = `## ๐ Deployment Guidance\n\n`;
|
|
332
|
+
guidance += `**Vercel Deployment (Recommended for Next.js):**\n\n`;
|
|
333
|
+
guidance += `1. **Environment Variables**\n`;
|
|
334
|
+
guidance += ` - Add all .env variables to Vercel dashboard\n`;
|
|
335
|
+
guidance += ` - Include: NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY\n`;
|
|
336
|
+
guidance += ` - Never commit .env to git\n\n`;
|
|
337
|
+
guidance += `2. **Build Settings**\n`;
|
|
338
|
+
guidance += ` - Framework: Next.js (auto-detected)\n`;
|
|
339
|
+
guidance += ` - Build command: \`next build\`\n`;
|
|
340
|
+
guidance += ` - Output directory: \`.next\`\n\n`;
|
|
341
|
+
guidance += `3. **Database Migrations**\n`;
|
|
342
|
+
guidance += ` - Run migrations on Supabase dashboard\n`;
|
|
343
|
+
guidance += ` - OR use Supabase CLI in CI/CD\n\n`;
|
|
344
|
+
guidance += `**Pre-Deployment Checklist:**\n`;
|
|
345
|
+
guidance += `- โ
Run: \`codebakers_scan_security\` (check for vulnerabilities)\n`;
|
|
346
|
+
guidance += `- โ
Run: \`codebakers_validate_accessibility\` (WCAG compliance)\n`;
|
|
347
|
+
guidance += `- โ
Run: \`codebakers_optimize_performance\` (bundle size, images)\n`;
|
|
348
|
+
guidance += `- โ
Test build locally: \`npm run build && npm start\`\n`;
|
|
349
|
+
guidance += `- โ
All tests passing: \`codebakers_run_tests({ test_type: "all" })\`\n\n`;
|
|
350
|
+
guidance += `**Quick Deploy:**\n\`\`\`\ncodebakers_deploy_vercel({ production: true })\n\`\`\`\n\n`;
|
|
351
|
+
return guidance;
|
|
352
|
+
}
|
|
353
|
+
async function getTestingGuidance(question, context, includeExamples) {
|
|
354
|
+
let guidance = `## ๐งช Testing Guidance\n\n`;
|
|
355
|
+
guidance += `**CodeBakers Testing Tools:**\n\n`;
|
|
356
|
+
guidance += `1. **Unit Tests (Vitest)**\n`;
|
|
357
|
+
guidance += ` - Test components, stores, utilities\n`;
|
|
358
|
+
guidance += ` - Run: \`codebakers_generate_unit_tests({ file_path: "...", test_type: "component" })\`\n\n`;
|
|
359
|
+
guidance += `2. **E2E Tests (Playwright)**\n`;
|
|
360
|
+
guidance += ` - Test complete user flows\n`;
|
|
361
|
+
guidance += ` - Run: \`codebakers_generate_e2e_tests({ flow_name: "...", steps: [...] })\`\n\n`;
|
|
362
|
+
guidance += `3. **Run Tests**\n`;
|
|
363
|
+
guidance += ` - Unit only: \`codebakers_run_tests({ test_type: "unit" })\`\n`;
|
|
364
|
+
guidance += ` - E2E only: \`codebakers_run_tests({ test_type: "e2e" })\`\n`;
|
|
365
|
+
guidance += ` - All tests: \`codebakers_run_tests({ test_type: "all" })\`\n\n`;
|
|
366
|
+
guidance += `**Testing Best Practices:**\n`;
|
|
367
|
+
guidance += `- Test user flows, not implementation details\n`;
|
|
368
|
+
guidance += `- Mock external APIs (Supabase, Stripe, etc.)\n`;
|
|
369
|
+
guidance += `- Test all 4 states: loading, error, empty, success\n`;
|
|
370
|
+
guidance += `- Run E2E against built app (not dev server)\n\n`;
|
|
371
|
+
return guidance;
|
|
372
|
+
}
|
|
373
|
+
async function getUIGuidance(question, context, includeExamples) {
|
|
374
|
+
let guidance = `## ๐จ UI & Component Guidance\n\n`;
|
|
375
|
+
guidance += `**CodeBakers Component Generation:**\n\n`;
|
|
376
|
+
guidance += `\`\`\`\ncodebakers_generate_component({\n name: "UserList",\n entity: "users",\n type: "list" // or "detail" or "form"\n})\n\`\`\`\n\n`;
|
|
377
|
+
guidance += `**All Generated Components Include:**\n`;
|
|
378
|
+
guidance += `- โ
Loading state (skeleton or spinner)\n`;
|
|
379
|
+
guidance += `- โ
Error state (with retry button)\n`;
|
|
380
|
+
guidance += `- โ
Empty state (with action button)\n`;
|
|
381
|
+
guidance += `- โ
Success state (with data)\n`;
|
|
382
|
+
guidance += `- โ
Responsive design (mobile-first)\n`;
|
|
383
|
+
guidance += `- โ
TypeScript types\n\n`;
|
|
384
|
+
if (context.domain) {
|
|
385
|
+
guidance += `**Domain-Specific Patterns (${context.domain}):**\n`;
|
|
386
|
+
guidance += `Your project uses domain context which auto-applies UX patterns.\n`;
|
|
387
|
+
guidance += `Check: \`agents/domains/${context.domain}.md\` for conventions.\n\n`;
|
|
388
|
+
}
|
|
389
|
+
guidance += `**UI Best Practices:**\n`;
|
|
390
|
+
guidance += `- Use Tailwind CSS for styling\n`;
|
|
391
|
+
guidance += `- Implement skeleton loaders (better UX than spinners)\n`;
|
|
392
|
+
guidance += `- Show inline errors (not toast notifications)\n`;
|
|
393
|
+
guidance += `- Confirm destructive actions (delete, etc.)\n`;
|
|
394
|
+
guidance += `- Test on mobile (not just desktop)\n\n`;
|
|
395
|
+
return guidance;
|
|
396
|
+
}
|
|
397
|
+
async function getGeneralGuidance(question, context, includeExamples) {
|
|
398
|
+
let guidance = `## ๐ก Guidance\n\n`;
|
|
399
|
+
guidance += `Based on your project:\n\n`;
|
|
400
|
+
if (context.entities.length > 0) {
|
|
401
|
+
guidance += `**Your Entities:** ${context.entities.join(', ')}\n\n`;
|
|
402
|
+
}
|
|
403
|
+
if (context.flows) {
|
|
404
|
+
const flowCount = (context.flows.match(/##\s+/g) || []).length;
|
|
405
|
+
guidance += `**Your Flows:** ${flowCount} user flows defined\n\n`;
|
|
406
|
+
}
|
|
407
|
+
guidance += `**Available CodeBakers Tools:**\n\n`;
|
|
408
|
+
guidance += `- \`codebakers_builder({ mode: "full" })\` - Build entire app autonomously\n`;
|
|
409
|
+
guidance += `- \`codebakers_generate_component({ ... })\` - Generate React component\n`;
|
|
410
|
+
guidance += `- \`codebakers_generate_api_route({ ... })\` - Generate API route\n`;
|
|
411
|
+
guidance += `- \`codebakers_generate_store({ ... })\` - Generate Zustand store\n`;
|
|
412
|
+
guidance += `- \`codebakers_scan_security({})\` - Security scan\n`;
|
|
413
|
+
guidance += `- \`codebakers_validate_accessibility({})\` - Accessibility check\n`;
|
|
414
|
+
guidance += `- \`codebakers_deploy_vercel({ production: true })\` - Deploy to Vercel\n\n`;
|
|
415
|
+
guidance += `**For more specific guidance, ask about:**\n`;
|
|
416
|
+
guidance += `- Security & permissions\n`;
|
|
417
|
+
guidance += `- Search & filtering\n`;
|
|
418
|
+
guidance += `- Real-time updates\n`;
|
|
419
|
+
guidance += `- Performance optimization\n`;
|
|
420
|
+
guidance += `- Error debugging\n`;
|
|
421
|
+
guidance += `- Testing strategy\n`;
|
|
422
|
+
guidance += `- Deployment process\n`;
|
|
423
|
+
return guidance;
|
|
424
|
+
}
|
|
425
|
+
//# sourceMappingURL=consult.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consult.js","sourceRoot":"","sources":["../../src/tools/consult.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codebakers_setup_github
|
|
3
|
+
*
|
|
4
|
+
* GitHub Repository Setup with OAuth
|
|
5
|
+
*
|
|
6
|
+
* Prompts user:
|
|
7
|
+
* - Have existing GitHub repo? โ Configure remote
|
|
8
|
+
* - Create new repo? โ OAuth โ Create โ Configure git
|
|
9
|
+
* - Skip? โ User will configure manually later
|
|
10
|
+
*
|
|
11
|
+
* For new repos:
|
|
12
|
+
* - Opens browser for GitHub OAuth
|
|
13
|
+
* - Creates repository via GitHub API
|
|
14
|
+
* - Configures git remote
|
|
15
|
+
* - Makes initial commit and push
|
|
16
|
+
*/
|
|
17
|
+
interface GitHubSetupArgs {
|
|
18
|
+
mode?: 'existing' | 'create' | 'skip';
|
|
19
|
+
repo_name?: string;
|
|
20
|
+
repo_url?: string;
|
|
21
|
+
is_private?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function setupGitHub(args?: GitHubSetupArgs): Promise<string>;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=setup-github.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-github.d.ts","sourceRoot":"","sources":["../../src/tools/setup-github.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH,UAAU,eAAe;IACvB,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAUD,wBAAsB,WAAW,CAAC,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CA0C7E"}
|