@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.
Files changed (140) hide show
  1. package/INSTALL.md +221 -0
  2. package/LICENSE +21 -0
  3. package/README.md +412 -0
  4. package/dist/cli.d.ts +9 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +236 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/index.d.ts +12 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +526 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/tools/analyze-mockups.d.ts +18 -0
  13. package/dist/tools/analyze-mockups.d.ts.map +1 -0
  14. package/dist/tools/analyze-mockups.js +497 -0
  15. package/dist/tools/analyze-mockups.js.map +1 -0
  16. package/dist/tools/autonomous-build.d.ts +19 -0
  17. package/dist/tools/autonomous-build.d.ts.map +1 -0
  18. package/dist/tools/autonomous-build.js +287 -0
  19. package/dist/tools/autonomous-build.js.map +1 -0
  20. package/dist/tools/check-gate.d.ts +21 -0
  21. package/dist/tools/check-gate.d.ts.map +1 -0
  22. package/dist/tools/check-gate.js +446 -0
  23. package/dist/tools/check-gate.js.map +1 -0
  24. package/dist/tools/check-scope.d.ts +22 -0
  25. package/dist/tools/check-scope.d.ts.map +1 -0
  26. package/dist/tools/check-scope.js +251 -0
  27. package/dist/tools/check-scope.js.map +1 -0
  28. package/dist/tools/deploy-vercel.d.ts +18 -0
  29. package/dist/tools/deploy-vercel.d.ts.map +1 -0
  30. package/dist/tools/deploy-vercel.js +178 -0
  31. package/dist/tools/deploy-vercel.js.map +1 -0
  32. package/dist/tools/diagnose-error.d.ts +20 -0
  33. package/dist/tools/diagnose-error.d.ts.map +1 -0
  34. package/dist/tools/diagnose-error.js +351 -0
  35. package/dist/tools/diagnose-error.js.map +1 -0
  36. package/dist/tools/enforce-feature.d.ts +25 -0
  37. package/dist/tools/enforce-feature.d.ts.map +1 -0
  38. package/dist/tools/enforce-feature.js +387 -0
  39. package/dist/tools/enforce-feature.js.map +1 -0
  40. package/dist/tools/execute-atomic-unit.d.ts +23 -0
  41. package/dist/tools/execute-atomic-unit.d.ts.map +1 -0
  42. package/dist/tools/execute-atomic-unit.js +107 -0
  43. package/dist/tools/execute-atomic-unit.js.map +1 -0
  44. package/dist/tools/fix-commit.d.ts +23 -0
  45. package/dist/tools/fix-commit.d.ts.map +1 -0
  46. package/dist/tools/fix-commit.js +213 -0
  47. package/dist/tools/fix-commit.js.map +1 -0
  48. package/dist/tools/fix-mockups.d.ts +21 -0
  49. package/dist/tools/fix-mockups.d.ts.map +1 -0
  50. package/dist/tools/fix-mockups.js +595 -0
  51. package/dist/tools/fix-mockups.js.map +1 -0
  52. package/dist/tools/generate-api-route.d.ts +18 -0
  53. package/dist/tools/generate-api-route.d.ts.map +1 -0
  54. package/dist/tools/generate-api-route.js +212 -0
  55. package/dist/tools/generate-api-route.js.map +1 -0
  56. package/dist/tools/generate-chatbot.d.ts +20 -0
  57. package/dist/tools/generate-chatbot.d.ts.map +1 -0
  58. package/dist/tools/generate-chatbot.js +555 -0
  59. package/dist/tools/generate-chatbot.js.map +1 -0
  60. package/dist/tools/generate-component.d.ts +18 -0
  61. package/dist/tools/generate-component.d.ts.map +1 -0
  62. package/dist/tools/generate-component.js +159 -0
  63. package/dist/tools/generate-component.js.map +1 -0
  64. package/dist/tools/generate-docs.d.ts +21 -0
  65. package/dist/tools/generate-docs.d.ts.map +1 -0
  66. package/dist/tools/generate-docs.js +782 -0
  67. package/dist/tools/generate-docs.js.map +1 -0
  68. package/dist/tools/generate-e2e-tests.d.ts +12 -0
  69. package/dist/tools/generate-e2e-tests.d.ts.map +1 -0
  70. package/dist/tools/generate-e2e-tests.js +37 -0
  71. package/dist/tools/generate-e2e-tests.js.map +1 -0
  72. package/dist/tools/generate-migration.d.ts +21 -0
  73. package/dist/tools/generate-migration.d.ts.map +1 -0
  74. package/dist/tools/generate-migration.js +94 -0
  75. package/dist/tools/generate-migration.js.map +1 -0
  76. package/dist/tools/generate-schema.d.ts +18 -0
  77. package/dist/tools/generate-schema.d.ts.map +1 -0
  78. package/dist/tools/generate-schema.js +422 -0
  79. package/dist/tools/generate-schema.js.map +1 -0
  80. package/dist/tools/generate-spec.d.ts +18 -0
  81. package/dist/tools/generate-spec.d.ts.map +1 -0
  82. package/dist/tools/generate-spec.js +446 -0
  83. package/dist/tools/generate-spec.js.map +1 -0
  84. package/dist/tools/generate-store-contracts.d.ts +17 -0
  85. package/dist/tools/generate-store-contracts.d.ts.map +1 -0
  86. package/dist/tools/generate-store-contracts.js +356 -0
  87. package/dist/tools/generate-store-contracts.js.map +1 -0
  88. package/dist/tools/generate-store.d.ts +16 -0
  89. package/dist/tools/generate-store.d.ts.map +1 -0
  90. package/dist/tools/generate-store.js +166 -0
  91. package/dist/tools/generate-store.js.map +1 -0
  92. package/dist/tools/generate-unit-tests.d.ts +14 -0
  93. package/dist/tools/generate-unit-tests.d.ts.map +1 -0
  94. package/dist/tools/generate-unit-tests.js +85 -0
  95. package/dist/tools/generate-unit-tests.js.map +1 -0
  96. package/dist/tools/get-context.d.ts +35 -0
  97. package/dist/tools/get-context.d.ts.map +1 -0
  98. package/dist/tools/get-context.js +367 -0
  99. package/dist/tools/get-context.js.map +1 -0
  100. package/dist/tools/init-session.d.ts +22 -0
  101. package/dist/tools/init-session.d.ts.map +1 -0
  102. package/dist/tools/init-session.js +232 -0
  103. package/dist/tools/init-session.js.map +1 -0
  104. package/dist/tools/map-dependencies.d.ts +25 -0
  105. package/dist/tools/map-dependencies.d.ts.map +1 -0
  106. package/dist/tools/map-dependencies.js +480 -0
  107. package/dist/tools/map-dependencies.js.map +1 -0
  108. package/dist/tools/optimize-performance.d.ts +18 -0
  109. package/dist/tools/optimize-performance.d.ts.map +1 -0
  110. package/dist/tools/optimize-performance.js +285 -0
  111. package/dist/tools/optimize-performance.js.map +1 -0
  112. package/dist/tools/run-interview.d.ts +23 -0
  113. package/dist/tools/run-interview.d.ts.map +1 -0
  114. package/dist/tools/run-interview.js +371 -0
  115. package/dist/tools/run-interview.js.map +1 -0
  116. package/dist/tools/run-tests.d.ts +12 -0
  117. package/dist/tools/run-tests.d.ts.map +1 -0
  118. package/dist/tools/run-tests.js +30 -0
  119. package/dist/tools/run-tests.js.map +1 -0
  120. package/dist/tools/scan-security.d.ts +19 -0
  121. package/dist/tools/scan-security.d.ts.map +1 -0
  122. package/dist/tools/scan-security.js +358 -0
  123. package/dist/tools/scan-security.js.map +1 -0
  124. package/dist/tools/validate-accessibility.d.ts +18 -0
  125. package/dist/tools/validate-accessibility.d.ts.map +1 -0
  126. package/dist/tools/validate-accessibility.js +251 -0
  127. package/dist/tools/validate-accessibility.js.map +1 -0
  128. package/dist/tools/validate-mockups.d.ts +21 -0
  129. package/dist/tools/validate-mockups.d.ts.map +1 -0
  130. package/dist/tools/validate-mockups.js +433 -0
  131. package/dist/tools/validate-mockups.js.map +1 -0
  132. package/dist/tools/verify-completeness.d.ts +13 -0
  133. package/dist/tools/verify-completeness.d.ts.map +1 -0
  134. package/dist/tools/verify-completeness.js +68 -0
  135. package/dist/tools/verify-completeness.js.map +1 -0
  136. package/dist/tools/verify-mockups.d.ts +14 -0
  137. package/dist/tools/verify-mockups.d.ts.map +1 -0
  138. package/dist/tools/verify-mockups.js +85 -0
  139. package/dist/tools/verify-mockups.js.map +1 -0
  140. package/package.json +50 -0
@@ -0,0 +1,555 @@
1
+ /**
2
+ * codebakers_generate_chatbot
3
+ *
4
+ * AI Chatbot Generator - In-App Help Assistant
5
+ *
6
+ * Generates AI chatbot component that:
7
+ * - Knows entire source code
8
+ * - Can answer questions about the app
9
+ * - Helps users navigate features
10
+ * - Integrates into help section
11
+ * - Uses RAG (retrieval-augmented generation)
12
+ */
13
+ import * as fs from 'fs/promises';
14
+ import * as path from 'path';
15
+ export async function generateChatbot(args = {}) {
16
+ const cwd = process.cwd();
17
+ const { position = 'bottom-right', include_api_knowledge = true, include_component_knowledge = true } = args;
18
+ console.error('🍞 CodeBakers: Generating AI Chatbot');
19
+ try {
20
+ // Step 1: Index codebase for RAG
21
+ console.error('[1/5] Indexing codebase...');
22
+ const knowledge = await indexCodebase(cwd, include_api_knowledge, include_component_knowledge);
23
+ // Step 2: Generate chatbot component
24
+ console.error('[2/5] Generating chatbot component...');
25
+ await generateChatbotComponent(cwd, knowledge, position);
26
+ // Step 3: Generate knowledge base file
27
+ console.error('[3/5] Generating knowledge base...');
28
+ await generateKnowledgeBase(cwd, knowledge);
29
+ // Step 4: Generate chatbot API route
30
+ console.error('[4/5] Generating chatbot API...');
31
+ await generateChatbotAPI(cwd);
32
+ // Step 5: Add to root layout
33
+ console.error('[5/5] Integrating into app...');
34
+ await integrateIntoLayout(cwd);
35
+ return generateChatbotReport(knowledge);
36
+ }
37
+ catch (error) {
38
+ return `🍞 CodeBakers: Chatbot Generation Failed\n\nError: ${error instanceof Error ? error.message : String(error)}`;
39
+ }
40
+ }
41
+ async function indexCodebase(cwd, includeAPI, includeComponents) {
42
+ const knowledge = {
43
+ features: [],
44
+ api_routes: [],
45
+ components: [],
46
+ pages: [],
47
+ common_tasks: []
48
+ };
49
+ // Index features from FLOWS.md
50
+ try {
51
+ const flowsPath = path.join(cwd, 'FLOWS.md');
52
+ const flows = await fs.readFile(flowsPath, 'utf-8');
53
+ const flowMatches = flows.matchAll(/## (\d+)\. (.+?) \((.+?)\)/g);
54
+ for (const match of flowMatches) {
55
+ knowledge.features.push({
56
+ name: match[2],
57
+ priority: match[3],
58
+ description: `Feature: ${match[2]}`
59
+ });
60
+ }
61
+ }
62
+ catch {
63
+ // FLOWS.md doesn't exist
64
+ }
65
+ // Index API routes
66
+ if (includeAPI) {
67
+ const apiDir = path.join(cwd, 'src', 'app', 'api');
68
+ await indexAPIRoutes(apiDir, '', knowledge.api_routes);
69
+ }
70
+ // Index components
71
+ if (includeComponents) {
72
+ const componentsDir = path.join(cwd, 'src', 'components');
73
+ await indexComponents(componentsDir, knowledge.components);
74
+ }
75
+ // Index pages
76
+ const appDir = path.join(cwd, 'src', 'app');
77
+ await indexPages(appDir, '', knowledge.pages);
78
+ // Add common tasks
79
+ knowledge.common_tasks = [
80
+ {
81
+ task: 'How do I log in?',
82
+ answer: 'Click the "Sign In" button in the top right corner. You can sign in with email or social providers.'
83
+ },
84
+ {
85
+ task: 'How do I change my password?',
86
+ answer: 'Go to Settings → Account → Change Password.'
87
+ },
88
+ {
89
+ task: 'Where can I find my account settings?',
90
+ answer: 'Click your profile picture in the top right, then select "Settings".'
91
+ }
92
+ ];
93
+ return knowledge;
94
+ }
95
+ async function indexAPIRoutes(dir, routePath, routes) {
96
+ try {
97
+ const entries = await fs.readdir(dir, { withFileTypes: true });
98
+ for (const entry of entries) {
99
+ const fullPath = path.join(dir, entry.name);
100
+ if (entry.isDirectory()) {
101
+ const newPath = entry.name.startsWith('[') && entry.name.endsWith(']')
102
+ ? `${routePath}/{${entry.name.slice(1, -1)}}`
103
+ : `${routePath}/${entry.name}`;
104
+ await indexAPIRoutes(fullPath, newPath, routes);
105
+ }
106
+ else if (entry.name === 'route.ts' || entry.name === 'route.js') {
107
+ const content = await fs.readFile(fullPath, 'utf-8');
108
+ const methods = [];
109
+ if (content.includes('export async function GET'))
110
+ methods.push('GET');
111
+ if (content.includes('export async function POST'))
112
+ methods.push('POST');
113
+ if (content.includes('export async function PUT'))
114
+ methods.push('PUT');
115
+ if (content.includes('export async function DELETE'))
116
+ methods.push('DELETE');
117
+ routes.push({
118
+ path: `/api${routePath}`,
119
+ methods,
120
+ description: `API endpoint for ${routePath.split('/').pop() || 'resource'}`
121
+ });
122
+ }
123
+ }
124
+ }
125
+ catch {
126
+ // Directory doesn't exist
127
+ }
128
+ }
129
+ async function indexComponents(dir, components) {
130
+ try {
131
+ const files = await fs.readdir(dir);
132
+ for (const file of files) {
133
+ if (file.endsWith('.tsx') || file.endsWith('.jsx')) {
134
+ const filePath = path.join(dir, file);
135
+ const content = await fs.readFile(filePath, 'utf-8');
136
+ const match = content.match(/export\s+(?:default\s+)?function\s+(\w+)/);
137
+ const name = match ? match[1] : file.replace(/\.(tsx|jsx)$/, '');
138
+ components.push({
139
+ name,
140
+ file,
141
+ description: `UI component: ${name}`
142
+ });
143
+ }
144
+ }
145
+ }
146
+ catch {
147
+ // Components directory doesn't exist
148
+ }
149
+ }
150
+ async function indexPages(dir, routePath, pages) {
151
+ try {
152
+ const entries = await fs.readdir(dir, { withFileTypes: true });
153
+ for (const entry of entries) {
154
+ const fullPath = path.join(dir, entry.name);
155
+ if (entry.isDirectory() && !entry.name.startsWith('_') && entry.name !== 'api') {
156
+ const newPath = entry.name.startsWith('[') && entry.name.endsWith(']')
157
+ ? `${routePath}/{${entry.name.slice(1, -1)}}`
158
+ : entry.name.startsWith('(') && entry.name.endsWith(')')
159
+ ? routePath
160
+ : `${routePath}/${entry.name}`;
161
+ await indexPages(fullPath, newPath, pages);
162
+ }
163
+ else if (entry.name === 'page.tsx' || entry.name === 'page.jsx') {
164
+ pages.push({
165
+ path: routePath || '/',
166
+ description: `Page: ${routePath || 'Home'}`
167
+ });
168
+ }
169
+ }
170
+ }
171
+ catch {
172
+ // Directory doesn't exist
173
+ }
174
+ }
175
+ async function generateChatbotComponent(cwd, knowledge, position) {
176
+ const component = `'use client';
177
+
178
+ import { useState, useRef, useEffect } from 'react';
179
+
180
+ interface Message {
181
+ role: 'user' | 'assistant';
182
+ content: string;
183
+ }
184
+
185
+ export default function HelpChatbot() {
186
+ const [isOpen, setIsOpen] = useState(false);
187
+ const [messages, setMessages] = useState<Message[]>([
188
+ {
189
+ role: 'assistant',
190
+ content: 'Hi! I\\'m your AI assistant. I know everything about this app and can help you navigate features, answer questions, or troubleshoot issues. What can I help you with?'
191
+ }
192
+ ]);
193
+ const [input, setInput] = useState('');
194
+ const [isLoading, setIsLoading] = useState(false);
195
+ const messagesEndRef = useRef<HTMLDivElement>(null);
196
+
197
+ useEffect(() => {
198
+ messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });
199
+ }, [messages]);
200
+
201
+ const sendMessage = async () => {
202
+ if (!input.trim() || isLoading) return;
203
+
204
+ const userMessage: Message = { role: 'user', content: input };
205
+ setMessages(prev => [...prev, userMessage]);
206
+ setInput('');
207
+ setIsLoading(true);
208
+
209
+ try {
210
+ const response = await fetch('/api/chatbot', {
211
+ method: 'POST',
212
+ headers: { 'Content-Type': 'application/json' },
213
+ body: JSON.stringify({ message: input })
214
+ });
215
+
216
+ const data = await response.json();
217
+
218
+ const assistantMessage: Message = {
219
+ role: 'assistant',
220
+ content: data.response || 'Sorry, I couldn\\'t process that request.'
221
+ };
222
+
223
+ setMessages(prev => [...prev, assistantMessage]);
224
+ } catch (error) {
225
+ const errorMessage: Message = {
226
+ role: 'assistant',
227
+ content: 'Sorry, I encountered an error. Please try again.'
228
+ };
229
+ setMessages(prev => [...prev, errorMessage]);
230
+ } finally {
231
+ setIsLoading(false);
232
+ }
233
+ };
234
+
235
+ const handleKeyPress = (e: React.KeyboardEvent) => {
236
+ if (e.key === 'Enter' && !e.shiftKey) {
237
+ e.preventDefault();
238
+ sendMessage();
239
+ }
240
+ };
241
+
242
+ const positionClasses = {
243
+ 'bottom-right': 'bottom-4 right-4',
244
+ 'bottom-left': 'bottom-4 left-4',
245
+ 'sidebar': 'top-20 right-4'
246
+ };
247
+
248
+ return (
249
+ <>
250
+ {/* Chat Button */}
251
+ {!isOpen && (
252
+ <button
253
+ onClick={() => setIsOpen(true)}
254
+ className={\`fixed \${positionClasses['${position}']} z-50 bg-blue-600 text-white rounded-full p-4 shadow-lg hover:bg-blue-700 transition-all\`}
255
+ aria-label="Open help chat"
256
+ >
257
+ <svg className="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
258
+ <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-5l-5 5v-5z" />
259
+ </svg>
260
+ </button>
261
+ )}
262
+
263
+ {/* Chat Window */}
264
+ {isOpen && (
265
+ <div className={\`fixed \${positionClasses['${position}']} z-50 w-96 h-[500px] bg-white border border-gray-200 rounded-lg shadow-xl flex flex-col\`}>
266
+ {/* Header */}
267
+ <div className="flex items-center justify-between p-4 border-b bg-blue-600 text-white rounded-t-lg">
268
+ <div className="flex items-center gap-2">
269
+ <svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
270
+ <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-5l-5 5v-5z" />
271
+ </svg>
272
+ <h3 className="font-semibold">Help Assistant</h3>
273
+ </div>
274
+ <button
275
+ onClick={() => setIsOpen(false)}
276
+ className="hover:bg-blue-700 rounded p-1 transition-colors"
277
+ aria-label="Close chat"
278
+ >
279
+ <svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
280
+ <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M6 18L18 6M6 6l12 12" />
281
+ </svg>
282
+ </button>
283
+ </div>
284
+
285
+ {/* Messages */}
286
+ <div className="flex-1 overflow-y-auto p-4 space-y-4">
287
+ {messages.map((message, index) => (
288
+ <div
289
+ key={index}
290
+ className={\`flex \${message.role === 'user' ? 'justify-end' : 'justify-start'}\`}
291
+ >
292
+ <div
293
+ className={\`max-w-[80%] rounded-lg px-4 py-2 \${
294
+ message.role === 'user'
295
+ ? 'bg-blue-600 text-white'
296
+ : 'bg-gray-100 text-gray-900'
297
+ }\`}
298
+ >
299
+ <p className="text-sm whitespace-pre-wrap">{message.content}</p>
300
+ </div>
301
+ </div>
302
+ ))}
303
+ {isLoading && (
304
+ <div className="flex justify-start">
305
+ <div className="bg-gray-100 rounded-lg px-4 py-2">
306
+ <div className="flex gap-1">
307
+ <div className="w-2 h-2 bg-gray-400 rounded-full animate-bounce" style={{ animationDelay: '0ms' }}></div>
308
+ <div className="w-2 h-2 bg-gray-400 rounded-full animate-bounce" style={{ animationDelay: '150ms' }}></div>
309
+ <div className="w-2 h-2 bg-gray-400 rounded-full animate-bounce" style={{ animationDelay: '300ms' }}></div>
310
+ </div>
311
+ </div>
312
+ </div>
313
+ )}
314
+ <div ref={messagesEndRef} />
315
+ </div>
316
+
317
+ {/* Input */}
318
+ <div className="p-4 border-t">
319
+ <div className="flex gap-2">
320
+ <input
321
+ type="text"
322
+ value={input}
323
+ onChange={(e) => setInput(e.target.value)}
324
+ onKeyPress={handleKeyPress}
325
+ placeholder="Ask me anything..."
326
+ className="flex-1 px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 text-sm"
327
+ disabled={isLoading}
328
+ />
329
+ <button
330
+ onClick={sendMessage}
331
+ disabled={!input.trim() || isLoading}
332
+ className="bg-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors"
333
+ >
334
+ <svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
335
+ <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 19l9 2-9-18-9 18 9-2zm0 0v-8" />
336
+ </svg>
337
+ </button>
338
+ </div>
339
+ </div>
340
+ </div>
341
+ )}
342
+ </>
343
+ );
344
+ }
345
+ `;
346
+ const componentPath = path.join(cwd, 'src', 'components', 'HelpChatbot.tsx');
347
+ await fs.mkdir(path.dirname(componentPath), { recursive: true });
348
+ await fs.writeFile(componentPath, component, 'utf-8');
349
+ }
350
+ async function generateKnowledgeBase(cwd, knowledge) {
351
+ const knowledgeFile = `// Auto-generated knowledge base for AI chatbot
352
+ // This file contains indexed information about the app
353
+
354
+ export const appKnowledge = ${JSON.stringify(knowledge, null, 2)};
355
+
356
+ export function searchKnowledge(query: string): any[] {
357
+ const results: any[] = [];
358
+ const lowerQuery = query.toLowerCase();
359
+
360
+ // Search features
361
+ for (const feature of appKnowledge.features) {
362
+ if (feature.name.toLowerCase().includes(lowerQuery)) {
363
+ results.push({
364
+ type: 'feature',
365
+ relevance: 0.9,
366
+ data: feature
367
+ });
368
+ }
369
+ }
370
+
371
+ // Search API routes
372
+ for (const route of appKnowledge.api_routes) {
373
+ if (route.path.toLowerCase().includes(lowerQuery)) {
374
+ results.push({
375
+ type: 'api',
376
+ relevance: 0.8,
377
+ data: route
378
+ });
379
+ }
380
+ }
381
+
382
+ // Search components
383
+ for (const component of appKnowledge.components) {
384
+ if (component.name.toLowerCase().includes(lowerQuery)) {
385
+ results.push({
386
+ type: 'component',
387
+ relevance: 0.7,
388
+ data: component
389
+ });
390
+ }
391
+ }
392
+
393
+ // Search common tasks
394
+ for (const task of appKnowledge.common_tasks) {
395
+ if (task.task.toLowerCase().includes(lowerQuery) || task.answer.toLowerCase().includes(lowerQuery)) {
396
+ results.push({
397
+ type: 'task',
398
+ relevance: 1.0,
399
+ data: task
400
+ });
401
+ }
402
+ }
403
+
404
+ return results.sort((a, b) => b.relevance - a.relevance).slice(0, 5);
405
+ }
406
+ `;
407
+ const knowledgePath = path.join(cwd, 'src', 'lib', 'chatbot-knowledge.ts');
408
+ await fs.mkdir(path.dirname(knowledgePath), { recursive: true });
409
+ await fs.writeFile(knowledgePath, knowledgeFile, 'utf-8');
410
+ }
411
+ async function generateChatbotAPI(cwd) {
412
+ const apiRoute = `import { NextRequest, NextResponse } from 'next/server';
413
+ import { searchKnowledge, appKnowledge } from '@/lib/chatbot-knowledge';
414
+
415
+ export async function POST(request: NextRequest) {
416
+ try {
417
+ const { message } = await request.json();
418
+
419
+ if (!message) {
420
+ return NextResponse.json({ error: 'Message is required' }, { status: 400 });
421
+ }
422
+
423
+ // Search knowledge base
424
+ const relevantInfo = searchKnowledge(message);
425
+
426
+ // Generate response based on relevant information
427
+ let response = generateResponse(message, relevantInfo);
428
+
429
+ return NextResponse.json({ response });
430
+ } catch (error) {
431
+ console.error('Chatbot API error:', error);
432
+ return NextResponse.json(
433
+ { error: 'Internal server error' },
434
+ { status: 500 }
435
+ );
436
+ }
437
+ }
438
+
439
+ function generateResponse(message: string, relevantInfo: any[]): string {
440
+ const lowerMessage = message.toLowerCase();
441
+
442
+ // Handle common greetings
443
+ if (lowerMessage.match(/^(hi|hello|hey)/)) {
444
+ return "Hello! I'm your AI assistant. I know everything about this app. What would you like to know?";
445
+ }
446
+
447
+ // Handle feature questions
448
+ if (lowerMessage.includes('feature') || lowerMessage.includes('can i')) {
449
+ const features = relevantInfo.filter(i => i.type === 'feature');
450
+ if (features.length > 0) {
451
+ return \`Yes! We have that feature. Available features include: \${features.map(f => f.data.name).join(', ')}. Would you like to know more about any of these?\`;
452
+ }
453
+ }
454
+
455
+ // Handle navigation questions
456
+ if (lowerMessage.includes('how do i') || lowerMessage.includes('where')) {
457
+ const tasks = relevantInfo.filter(i => i.type === 'task');
458
+ if (tasks.length > 0) {
459
+ return tasks[0].data.answer;
460
+ }
461
+ }
462
+
463
+ // Handle API questions
464
+ if (lowerMessage.includes('api') || lowerMessage.includes('endpoint')) {
465
+ const apis = relevantInfo.filter(i => i.type === 'api');
466
+ if (apis.length > 0) {
467
+ return \`We have these API endpoints: \${apis.map(a => \`\${a.data.path} (\${a.data.methods.join(', ')})\`).join(', ')}.\`;
468
+ }
469
+ }
470
+
471
+ // Generic response with relevant info
472
+ if (relevantInfo.length > 0) {
473
+ const topResult = relevantInfo[0];
474
+
475
+ switch (topResult.type) {
476
+ case 'feature':
477
+ return \`I found information about "\${topResult.data.name}". This is a \${topResult.data.priority} priority feature. Is this what you're looking for?\`;
478
+ case 'component':
479
+ return \`I found the \${topResult.data.name} component. It's located in \${topResult.data.file}. What would you like to know about it?\`;
480
+ case 'api':
481
+ return \`The API endpoint \${topResult.data.path} supports these methods: \${topResult.data.methods.join(', ')}.\`;
482
+ case 'task':
483
+ return topResult.data.answer;
484
+ }
485
+ }
486
+
487
+ // Fallback response
488
+ return \`I'm not sure about that. Could you rephrase your question? I can help with:
489
+ - App features and capabilities
490
+ - How to use specific functions
491
+ - Navigation and settings
492
+ - General questions about the app\`;
493
+ }
494
+ `;
495
+ const apiPath = path.join(cwd, 'src', 'app', 'api', 'chatbot', 'route.ts');
496
+ await fs.mkdir(path.dirname(apiPath), { recursive: true });
497
+ await fs.writeFile(apiPath, apiRoute, 'utf-8');
498
+ }
499
+ async function integrateIntoLayout(cwd) {
500
+ const layoutPath = path.join(cwd, 'src', 'app', 'layout.tsx');
501
+ try {
502
+ let layout = await fs.readFile(layoutPath, 'utf-8');
503
+ // Check if already integrated
504
+ if (layout.includes('HelpChatbot')) {
505
+ return; // Already integrated
506
+ }
507
+ // Add import
508
+ if (!layout.includes("import HelpChatbot from '@/components/HelpChatbot'")) {
509
+ layout = layout.replace(/import/, "import HelpChatbot from '@/components/HelpChatbot';\nimport");
510
+ }
511
+ // Add component before closing body tag
512
+ layout = layout.replace(/<\/body>/, ' <HelpChatbot />\n </body>');
513
+ await fs.writeFile(layoutPath, layout, 'utf-8');
514
+ }
515
+ catch {
516
+ // layout.tsx doesn't exist or can't modify
517
+ console.error('Could not integrate into layout.tsx - add <HelpChatbot /> manually');
518
+ }
519
+ }
520
+ function generateChatbotReport(knowledge) {
521
+ let report = `🍞 CodeBakers: AI Chatbot Generated\n\n`;
522
+ report += `✅ **Chatbot component created**\n`;
523
+ report += `✅ **Knowledge base indexed**\n`;
524
+ report += `✅ **API route generated**\n`;
525
+ report += `✅ **Integrated into app**\n\n`;
526
+ report += `## Knowledge Base Indexed\n\n`;
527
+ report += `- **Features:** ${knowledge.features.length}\n`;
528
+ report += `- **API Routes:** ${knowledge.api_routes.length}\n`;
529
+ report += `- **Components:** ${knowledge.components.length}\n`;
530
+ report += `- **Pages:** ${knowledge.pages.length}\n`;
531
+ report += `- **Common Tasks:** ${knowledge.common_tasks.length}\n\n`;
532
+ report += `## Files Created\n\n`;
533
+ report += `- src/components/HelpChatbot.tsx (UI component)\n`;
534
+ report += `- src/lib/chatbot-knowledge.ts (Knowledge base)\n`;
535
+ report += `- src/app/api/chatbot/route.ts (API endpoint)\n`;
536
+ report += `- Updated: src/app/layout.tsx (Integration)\n\n`;
537
+ report += `## What the Chatbot Can Do\n\n`;
538
+ report += `- Answer questions about app features\n`;
539
+ report += `- Guide users through common tasks\n`;
540
+ report += `- Explain how to use specific functions\n`;
541
+ report += `- Provide navigation help\n`;
542
+ report += `- Reference API endpoints\n`;
543
+ report += `- List available components\n\n`;
544
+ report += `## Usage\n\n`;
545
+ report += `The chatbot appears as a floating button in the bottom-right corner.\n`;
546
+ report += `Users can click to open and ask questions about the app.\n\n`;
547
+ report += `**Example questions:**\n`;
548
+ report += `- "How do I log in?"\n`;
549
+ report += `- "What features are available?"\n`;
550
+ report += `- "Where can I change my password?"\n`;
551
+ report += `- "How do I [specific task]?"\n\n`;
552
+ report += `🤖 Your app now has an AI assistant that knows the entire codebase!\n`;
553
+ return report;
554
+ }
555
+ //# sourceMappingURL=generate-chatbot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-chatbot.js","sourceRoot":"","sources":["../../src/tools/generate-chatbot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * codebakers_generate_component
3
+ *
4
+ * React Component Generator
5
+ *
6
+ * Generates components with all required states:
7
+ * - Loading, Error, Empty, Success
8
+ * - Mobile responsive
9
+ * - Accessibility
10
+ */
11
+ interface ComponentArgs {
12
+ name: string;
13
+ entity: string;
14
+ type: 'list' | 'detail' | 'form';
15
+ }
16
+ export declare function generateComponent(args: ComponentArgs): Promise<string>;
17
+ export {};
18
+ //# sourceMappingURL=generate-component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-component.d.ts","sourceRoot":"","sources":["../../src/tools/generate-component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;CAClC;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA6B5E"}