mustard-claude 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +198 -0
  2. package/bin/mustard.js +5 -0
  3. package/dist/analyzers/llm.d.ts +13 -0
  4. package/dist/analyzers/llm.js +339 -0
  5. package/dist/analyzers/llm.js.map +1 -0
  6. package/dist/analyzers/semantic.d.ts +13 -0
  7. package/dist/analyzers/semantic.js +215 -0
  8. package/dist/analyzers/semantic.js.map +1 -0
  9. package/dist/cli.d.ts +1 -0
  10. package/dist/cli.js +42 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/commands/init.d.ts +5 -0
  13. package/dist/commands/init.js +377 -0
  14. package/dist/commands/init.js.map +1 -0
  15. package/dist/commands/sync.d.ts +5 -0
  16. package/dist/commands/sync.js +235 -0
  17. package/dist/commands/sync.js.map +1 -0
  18. package/dist/commands/update.d.ts +8 -0
  19. package/dist/commands/update.js +237 -0
  20. package/dist/commands/update.js.map +1 -0
  21. package/dist/generators/claude-md-llm.d.ts +5 -0
  22. package/dist/generators/claude-md-llm.js +101 -0
  23. package/dist/generators/claude-md-llm.js.map +1 -0
  24. package/dist/generators/claude-md-template.d.ts +5 -0
  25. package/dist/generators/claude-md-template.js +273 -0
  26. package/dist/generators/claude-md-template.js.map +1 -0
  27. package/dist/generators/commands.d.ts +17 -0
  28. package/dist/generators/commands.js +845 -0
  29. package/dist/generators/commands.js.map +1 -0
  30. package/dist/generators/context.d.ts +11 -0
  31. package/dist/generators/context.js +621 -0
  32. package/dist/generators/context.js.map +1 -0
  33. package/dist/generators/hooks.d.ts +5 -0
  34. package/dist/generators/hooks.js +128 -0
  35. package/dist/generators/hooks.js.map +1 -0
  36. package/dist/generators/index.d.ts +11 -0
  37. package/dist/generators/index.js +541 -0
  38. package/dist/generators/index.js.map +1 -0
  39. package/dist/generators/prompts.d.ts +13 -0
  40. package/dist/generators/prompts.js +579 -0
  41. package/dist/generators/prompts.js.map +1 -0
  42. package/dist/generators/registry.d.ts +5 -0
  43. package/dist/generators/registry.js +93 -0
  44. package/dist/generators/registry.js.map +1 -0
  45. package/dist/scanners/dependencies.d.ts +7 -0
  46. package/dist/scanners/dependencies.js +195 -0
  47. package/dist/scanners/dependencies.js.map +1 -0
  48. package/dist/scanners/index.d.ts +6 -0
  49. package/dist/scanners/index.js +37 -0
  50. package/dist/scanners/index.js.map +1 -0
  51. package/dist/scanners/samples.d.ts +8 -0
  52. package/dist/scanners/samples.js +193 -0
  53. package/dist/scanners/samples.js.map +1 -0
  54. package/dist/scanners/stack.d.ts +5 -0
  55. package/dist/scanners/stack.js +294 -0
  56. package/dist/scanners/stack.js.map +1 -0
  57. package/dist/scanners/structure.d.ts +5 -0
  58. package/dist/scanners/structure.js +274 -0
  59. package/dist/scanners/structure.js.map +1 -0
  60. package/dist/services/grepai.d.ts +25 -0
  61. package/dist/services/grepai.js +89 -0
  62. package/dist/services/grepai.js.map +1 -0
  63. package/dist/services/ollama.d.ts +22 -0
  64. package/dist/services/ollama.js +86 -0
  65. package/dist/services/ollama.js.map +1 -0
  66. package/dist/services/package-manager.d.ts +95 -0
  67. package/dist/services/package-manager.js +164 -0
  68. package/dist/services/package-manager.js.map +1 -0
  69. package/dist/types.d.ts +233 -0
  70. package/dist/types.js +5 -0
  71. package/dist/types.js.map +1 -0
  72. package/package.json +56 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/generators/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { ProjectInfo, Analysis, CodeSamples } from '../types.js';
2
+ export interface ContextGeneratorOptions {
3
+ useOllama?: boolean;
4
+ model?: string;
5
+ verbose?: boolean;
6
+ }
7
+ /**
8
+ * Generate context files for the .claude/context/ folder
9
+ * These files provide instant context to agents during implementations
10
+ */
11
+ export declare function generateContext(claudePath: string, projectInfo: ProjectInfo, analysis: Analysis, codeSamples: CodeSamples, options?: ContextGeneratorOptions): Promise<string[]>;
@@ -0,0 +1,621 @@
1
+ import { writeFile, mkdir } from 'fs/promises';
2
+ import { join } from 'path';
3
+ import * as ollama from '../services/ollama.js';
4
+ /**
5
+ * Generate context files for the .claude/context/ folder
6
+ * These files provide instant context to agents during implementations
7
+ */
8
+ export async function generateContext(claudePath, projectInfo, analysis, codeSamples, options = {}) {
9
+ const generatedFiles = [];
10
+ const contextPath = join(claudePath, 'context');
11
+ await mkdir(contextPath, { recursive: true });
12
+ // Try Ollama for richer context generation
13
+ if (options.useOllama) {
14
+ const ollamaContent = await generateContextWithOllama(projectInfo, analysis, codeSamples, options);
15
+ if (ollamaContent) {
16
+ for (const [filename, content] of Object.entries(ollamaContent)) {
17
+ if (content) {
18
+ const filePath = join(contextPath, filename);
19
+ await writeFile(filePath, content);
20
+ generatedFiles.push(`context/${filename}`);
21
+ }
22
+ }
23
+ return generatedFiles;
24
+ }
25
+ }
26
+ return generateContextFromTemplate(contextPath, projectInfo, analysis);
27
+ }
28
+ // ============== Ollama Generation ==============
29
+ async function generateContextWithOllama(projectInfo, analysis, codeSamples, options) {
30
+ try {
31
+ const isAvailable = await ollama.checkOllamaAvailable();
32
+ if (!isAvailable) {
33
+ if (options.verbose)
34
+ console.log(' Ollama not available, using templates');
35
+ return null;
36
+ }
37
+ const models = await ollama.getAvailableModels();
38
+ const model = options.model || await ollama.selectBestModel(models);
39
+ if (!model)
40
+ return null;
41
+ if (options.verbose)
42
+ console.log(` Using Ollama (${model}) for context generation`);
43
+ const prompt = buildOllamaPrompt(projectInfo, analysis, codeSamples);
44
+ return await ollama.generateJSON(prompt, { model, timeout: 90000 });
45
+ }
46
+ catch {
47
+ if (options.verbose)
48
+ console.log(' Ollama generation failed, falling back to templates');
49
+ return null;
50
+ }
51
+ }
52
+ /**
53
+ * Build the Ollama prompt using ONLY detected project data.
54
+ * No hardcoded patterns - Ollama must infer from the data provided.
55
+ */
56
+ function buildOllamaPrompt(projectInfo, analysis, codeSamples) {
57
+ const stacksStr = projectInfo.stacks.map(s => `- ${s.name} ${s.version} (${s.path})`).join('\n');
58
+ const subprojectsStr = projectInfo.structure.subprojects.map(s => `- ${s.name} (${s.path})`).join('\n');
59
+ const dirsStr = projectInfo.structure.directories.slice(0, 30).join('\n');
60
+ let samplesSection = '';
61
+ for (const [key, sample] of Object.entries(codeSamples)) {
62
+ if (sample) {
63
+ samplesSection += `\n### ${key} (${sample.file}):\n\`\`\`\n${sample.content.slice(0, 2000)}\n\`\`\`\n`;
64
+ }
65
+ }
66
+ return `You are generating project documentation for an AI coding assistant.
67
+ Analyze the project data below and generate documentation that accurately describes THIS project's architecture, patterns, and naming conventions.
68
+
69
+ IMPORTANT:
70
+ - Only document patterns you can SEE in the code samples and directory structure
71
+ - Do NOT invent patterns or conventions not present in the data
72
+ - Do NOT generate code examples - only describe the patterns found
73
+ - Use the actual file/folder names from the directory structure
74
+
75
+ ## Project: ${projectInfo.name}
76
+ - Type: ${projectInfo.type}
77
+ - Package Manager: ${projectInfo.packageManager}
78
+ - Architecture: ${analysis.architecture.type} (${analysis.architecture.confidence} confidence)
79
+
80
+ ## Stacks:
81
+ ${stacksStr}
82
+
83
+ ## Subprojects:
84
+ ${subprojectsStr || 'Single project'}
85
+
86
+ ## Detected Patterns: ${analysis.patterns.length > 0 ? analysis.patterns.join(', ') : 'none detected'}
87
+
88
+ ## Naming Conventions (detected):
89
+ - Classes: ${projectInfo.patterns.classes}
90
+ - Files: ${JSON.stringify(projectInfo.patterns.files)}
91
+ - Folders: ${projectInfo.patterns.folders}
92
+
93
+ ## Directory Structure:
94
+ \`\`\`
95
+ ${dirsStr}
96
+ \`\`\`
97
+
98
+ ## Dependencies (from package.json / .csproj):
99
+ ${formatDepsForPrompt(projectInfo.dependencies)}
100
+
101
+ ## Code Samples:
102
+ ${samplesSection || 'No code samples available'}
103
+
104
+ ## TASK
105
+
106
+ Generate 3 markdown files. Base ALL content on the data above. Never invent patterns not visible in the samples/structure.
107
+
108
+ 1. **architecture.md**: Project type, stacks with versions, subproject layout, layer organization (inferred from directories), how layers connect
109
+ 2. **patterns.md**: For each stack, describe the actual patterns visible in the code samples and directory structure. Include folder conventions found.
110
+ 3. **naming.md**: Document the actual naming conventions found in file names, folder names, and code samples.
111
+
112
+ Response format (JSON only):
113
+ {
114
+ "architecture.md": "# Architecture\\n\\n...",
115
+ "patterns.md": "# Patterns\\n\\n...",
116
+ "naming.md": "# Naming Conventions\\n\\n..."
117
+ }`;
118
+ }
119
+ // ============== Template Generation ==============
120
+ async function generateContextFromTemplate(contextPath, projectInfo, analysis) {
121
+ const generatedFiles = [];
122
+ const architecture = generateArchitectureMd(projectInfo, analysis);
123
+ await writeFile(join(contextPath, 'architecture.md'), architecture);
124
+ generatedFiles.push('context/architecture.md');
125
+ const patterns = generatePatternsMd(projectInfo, analysis);
126
+ await writeFile(join(contextPath, 'patterns.md'), patterns);
127
+ generatedFiles.push('context/patterns.md');
128
+ const naming = generateNamingMd(projectInfo);
129
+ await writeFile(join(contextPath, 'naming.md'), naming);
130
+ generatedFiles.push('context/naming.md');
131
+ return generatedFiles;
132
+ }
133
+ // ============== Helpers ==============
134
+ function getBackendStacks(stacks) {
135
+ return stacks.filter(s => ['dotnet', 'node', 'python', 'java', 'go', 'rust', 'fastapi', 'django', 'spring'].includes(s.name));
136
+ }
137
+ function getFrontendStacks(stacks) {
138
+ return stacks.filter(s => ['react', 'nextjs', 'vue', 'angular', 'svelte'].includes(s.name));
139
+ }
140
+ function getDatabaseStacks(stacks) {
141
+ return stacks.filter(s => ['drizzle', 'prisma', 'typeorm', 'sequelize'].includes(s.name));
142
+ }
143
+ function guessSubprojectRole(name) {
144
+ const lower = name.toLowerCase();
145
+ if (lower.includes('backend') || lower.includes('api') || lower.includes('server'))
146
+ return 'Backend API';
147
+ if (lower.includes('frontend') || lower.includes('web') || lower.includes('client') || lower.includes('ui'))
148
+ return 'Frontend App';
149
+ if (lower.includes('database') || lower.includes('db') || lower.includes('data'))
150
+ return 'Database/Migrations';
151
+ if (lower.includes('lib') || lower.includes('shared') || lower.includes('common'))
152
+ return 'Shared Libraries';
153
+ if (lower.includes('test') || lower.includes('spec'))
154
+ return 'Tests';
155
+ return 'Module';
156
+ }
157
+ // ============== Architecture Template ==============
158
+ function generateArchitectureMd(projectInfo, analysis) {
159
+ const backend = getBackendStacks(projectInfo.stacks);
160
+ const frontend = getFrontendStacks(projectInfo.stacks);
161
+ const database = getDatabaseStacks(projectInfo.stacks);
162
+ let subprojectsSection = '';
163
+ if (projectInfo.structure.subprojects.length > 0) {
164
+ subprojectsSection = `## Subprojects
165
+
166
+ | Project | Path | Role |
167
+ |---------|------|------|
168
+ ${projectInfo.structure.subprojects.map(s => `| **${s.name}** | \`${s.path}\` | ${guessSubprojectRole(s.name)} |`).join('\n')}
169
+ `;
170
+ }
171
+ const stackRows = projectInfo.stacks.map(s => `| ${s.name} | ${s.version} | \`${s.path}\` |`).join('\n');
172
+ const dirsDisplay = projectInfo.structure.directories.slice(0, 25).join('\n');
173
+ // Layer diagram based only on detected stacks
174
+ const layerParts = [];
175
+ if (frontend.length > 0) {
176
+ layerParts.push(` [Frontend: ${frontend.map(s => `${s.name} ${s.version}`).join(', ')}]`);
177
+ layerParts.push(' |');
178
+ layerParts.push(' HTTP/API');
179
+ layerParts.push(' |');
180
+ }
181
+ if (backend.length > 0) {
182
+ layerParts.push(` [Backend: ${backend.map(s => `${s.name} ${s.version}`).join(', ')}]`);
183
+ layerParts.push(' |');
184
+ }
185
+ if (database.length > 0) {
186
+ layerParts.push(` [Database: ${database.map(s => `${s.name} ${s.version}`).join(', ')}]`);
187
+ }
188
+ return `# Architecture
189
+
190
+ > Auto-generated by Mustard CLI. Edit to add project-specific details.
191
+
192
+ ## Overview
193
+
194
+ | Property | Value |
195
+ |----------|-------|
196
+ | **Project** | ${projectInfo.name} |
197
+ | **Type** | ${projectInfo.type} |
198
+ | **Architecture** | ${analysis.architecture.type} |
199
+ | **Package Manager** | ${projectInfo.packageManager} |
200
+
201
+ ${subprojectsSection}
202
+ ## Technology Stack
203
+
204
+ | Stack | Version | Path |
205
+ |-------|---------|------|
206
+ ${stackRows}
207
+
208
+ ${layerParts.length > 0 ? `## Layer Interactions
209
+
210
+ \`\`\`
211
+ ${layerParts.join('\n')}
212
+ \`\`\`` : ''}
213
+
214
+ ## Directory Structure
215
+
216
+ \`\`\`
217
+ ${dirsDisplay}
218
+ ${projectInfo.structure.directories.length > 25 ? '...' : ''}
219
+ \`\`\`
220
+
221
+ ## Dependencies
222
+
223
+ ${generateDependenciesSection(projectInfo)}
224
+
225
+ ## Architecture Decisions
226
+
227
+ > Document your architecture decisions below:
228
+
229
+ -
230
+ -
231
+ `;
232
+ }
233
+ function formatDepsForPrompt(deps) {
234
+ if (!deps || Object.keys(deps).length === 0)
235
+ return 'No dependencies scanned';
236
+ const lines = [];
237
+ for (const [subPath, categories] of Object.entries(deps)) {
238
+ lines.push(`### ${subPath}`);
239
+ for (const [category, libs] of Object.entries(categories)) {
240
+ if (libs && libs.length > 0) {
241
+ lines.push(`- ${category}: ${libs.join(', ')}`);
242
+ }
243
+ }
244
+ }
245
+ return lines.join('\n');
246
+ }
247
+ function generateDependenciesSection(projectInfo) {
248
+ const deps = projectInfo.dependencies;
249
+ if (!deps || Object.keys(deps).length === 0) {
250
+ return '> Run `mustard init` with package.json present to auto-detect dependencies.';
251
+ }
252
+ const sections = [];
253
+ for (const [subPath, categories] of Object.entries(deps)) {
254
+ const label = subPath === '.' ? 'Root' : subPath;
255
+ const rows = [];
256
+ for (const [category, libs] of Object.entries(categories)) {
257
+ if (libs && libs.length > 0) {
258
+ rows.push(`| **${category}** | ${libs.join(', ')} |`);
259
+ }
260
+ }
261
+ if (rows.length > 0) {
262
+ sections.push(`### ${label}\n\n| Category | Libraries |\n|----------|----------|\n${rows.join('\n')}`);
263
+ }
264
+ }
265
+ return sections.join('\n\n');
266
+ }
267
+ // ============== Patterns Template ==============
268
+ function generatePatternsMd(projectInfo, analysis) {
269
+ const backend = getBackendStacks(projectInfo.stacks);
270
+ const frontend = getFrontendStacks(projectInfo.stacks);
271
+ const database = getDatabaseStacks(projectInfo.stacks);
272
+ const detectedList = analysis.patterns.length > 0
273
+ ? analysis.patterns.map(p => `- ${p}`).join('\n')
274
+ : '';
275
+ const rulesList = analysis.rules.length > 0
276
+ ? analysis.rules.map(r => `- ${r}`).join('\n')
277
+ : '';
278
+ let backendSection = '';
279
+ for (const stack of backend) {
280
+ backendSection += generateBackendPatternSection(stack);
281
+ }
282
+ let frontendSection = '';
283
+ for (const stack of frontend) {
284
+ frontendSection += generateFrontendPatternSection(stack);
285
+ }
286
+ let databaseSection = '';
287
+ for (const stack of database) {
288
+ databaseSection += generateDatabasePatternSection(stack);
289
+ }
290
+ return `# Patterns & Conventions
291
+
292
+ > Auto-generated by Mustard CLI. Edit to match your actual project patterns.
293
+ > Add code samples as .md files in context/ folder for Claude to reference.
294
+
295
+ ${detectedList ? `## Detected Patterns\n\n${detectedList}\n` : ''}
296
+ ${backendSection}
297
+ ${frontendSection}
298
+ ${databaseSection}
299
+ ## General Principles
300
+
301
+ - Separate business logic from data access
302
+ - Validate at system boundaries (endpoints, forms)
303
+ - Use consistent error response shapes
304
+ - Follow established naming conventions (see naming.md)
305
+
306
+ ${rulesList ? `## Project Rules\n\n${rulesList}\n` : ''}
307
+ ## Anti-Patterns to Avoid
308
+
309
+ - Business logic in controllers/endpoints
310
+ - Data access outside the data layer
311
+ - Duplicated validation logic
312
+ - Hardcoded values instead of constants/enums
313
+ `;
314
+ }
315
+ function generateBackendPatternSection(stack) {
316
+ const v = stack.version ? ` ${stack.version}` : '';
317
+ if (stack.name === 'dotnet') {
318
+ return `## Backend Patterns (.NET${v})
319
+
320
+ ### Layered Architecture
321
+ - **Endpoints/Controllers** - HTTP route handlers, parameter binding, response mapping
322
+ - **Services** - Business logic, orchestration, validation
323
+ - **Repositories** - Data access, query building
324
+
325
+ ### Dependency Injection
326
+ - Services receive dependencies via constructor injection
327
+ - Endpoints receive services as method parameters (Minimal APIs) or constructor (Controllers)
328
+
329
+ ### DTO / Mapping
330
+ - Separate DTOs for request input and response output
331
+ - Map between entities and DTOs at the boundary
332
+
333
+ > Add service-example.md and endpoint-example.md to context/ for reference patterns.
334
+
335
+ `;
336
+ }
337
+ if (stack.name === 'node') {
338
+ return `## Backend Patterns (Node.js${v})
339
+
340
+ ### Module Structure
341
+ - Controllers/routes handle HTTP concerns
342
+ - Services contain business logic
343
+ - Repositories handle data access (if applicable)
344
+
345
+ ### Dependency Injection
346
+ - Constructor injection or module-level imports
347
+
348
+ > Add service-example.md and endpoint-example.md to context/ for reference patterns.
349
+
350
+ `;
351
+ }
352
+ if (stack.name === 'python' || stack.name === 'fastapi' || stack.name === 'django') {
353
+ return `## Backend Patterns (${stack.name}${v})
354
+
355
+ ### Module Structure
356
+ - Route handlers / views
357
+ - Service layer for business logic
358
+ - Models for data access
359
+
360
+ > Add code examples as .md files in context/ for reference patterns.
361
+
362
+ `;
363
+ }
364
+ return `## Backend Patterns (${stack.name}${v})
365
+
366
+ > Add code examples as .md files in context/ for reference patterns.
367
+
368
+ `;
369
+ }
370
+ function generateFrontendPatternSection(stack) {
371
+ const v = stack.version ? ` ${stack.version}` : '';
372
+ if (stack.name === 'react' || stack.name === 'nextjs') {
373
+ const name = stack.name === 'nextjs' ? `Next.js${v}` : `React${v}`;
374
+ return `## Frontend Patterns (${name})
375
+
376
+ ### Component Organization
377
+ - Page-level components handle routing and data fetching
378
+ - Feature components handle business UI logic
379
+ - Shared UI components in a common directory
380
+
381
+ ### Hooks
382
+ - Custom hooks encapsulate data fetching and state logic
383
+ - Entity-specific hooks for CRUD operations
384
+
385
+ ### Forms
386
+ - Form library for state management and validation
387
+ - Schema-based validation (Zod, Yup, or similar)
388
+
389
+ ### State Management
390
+ - Server state via data-fetching library (TanStack Query, SWR, etc.)
391
+ - Client state via context, Zustand, or similar
392
+
393
+ > Add component-example.md and hook-example.md to context/ for reference patterns.
394
+
395
+ `;
396
+ }
397
+ if (stack.name === 'vue') {
398
+ return `## Frontend Patterns (Vue${v})
399
+
400
+ ### Component Organization
401
+ - Page components for routing
402
+ - Composable functions for reusable logic
403
+ - Shared components directory
404
+
405
+ > Add code examples as .md files in context/ for reference patterns.
406
+
407
+ `;
408
+ }
409
+ return `## Frontend Patterns (${stack.name}${v})
410
+
411
+ > Add code examples as .md files in context/ for reference patterns.
412
+
413
+ `;
414
+ }
415
+ function generateDatabasePatternSection(stack) {
416
+ const v = stack.version ? ` ${stack.version}` : '';
417
+ if (stack.name === 'drizzle') {
418
+ return `## Database Patterns (Drizzle${v})
419
+
420
+ ### Schema Organization
421
+ - One file per table in the schema directory
422
+ - Shared enums in a separate file
423
+ - Index file re-exports all schemas
424
+
425
+ ### Common Column Patterns
426
+ - Auto-increment primary key
427
+ - UUID for public-facing identifiers
428
+ - Timestamp columns for audit trail
429
+ - Soft delete pattern (boolean flag + timestamp)
430
+
431
+ ### Migrations
432
+ - Generated from schema changes (\`drizzle-kit generate\`)
433
+ - Applied with migration runner
434
+
435
+ > Add schema-example.md to context/ for reference patterns.
436
+
437
+ `;
438
+ }
439
+ if (stack.name === 'prisma') {
440
+ return `## Database Patterns (Prisma${v})
441
+
442
+ ### Schema
443
+ - Single schema file defining all models
444
+ - Relations defined with \`@relation\`
445
+
446
+ ### Migrations
447
+ - Generated with \`prisma migrate dev\`
448
+ - Applied with \`prisma migrate deploy\`
449
+
450
+ > Add code examples as .md files in context/ for reference patterns.
451
+
452
+ `;
453
+ }
454
+ if (stack.name === 'typeorm') {
455
+ return `## Database Patterns (TypeORM${v})
456
+
457
+ ### Entity Pattern
458
+ - Decorator-based entity definitions
459
+ - Repository pattern for data access
460
+
461
+ > Add code examples as .md files in context/ for reference patterns.
462
+
463
+ `;
464
+ }
465
+ return `## Database Patterns (${stack.name}${v})
466
+
467
+ > Add code examples as .md files in context/ for reference patterns.
468
+
469
+ `;
470
+ }
471
+ // ============== Naming Template ==============
472
+ function generateNamingMd(projectInfo) {
473
+ const filesPattern = typeof projectInfo.patterns.files === 'object'
474
+ ? Object.entries(projectInfo.patterns.files)
475
+ .map(([ext, pattern]) => `| \`.${ext}\` | ${pattern} |`)
476
+ .join('\n')
477
+ : `| all | ${projectInfo.patterns.files} |`;
478
+ // Build stack-specific naming from detected stacks (generic per stack type)
479
+ const backend = getBackendStacks(projectInfo.stacks);
480
+ const frontend = getFrontendStacks(projectInfo.stacks);
481
+ const database = getDatabaseStacks(projectInfo.stacks);
482
+ let backendNaming = '';
483
+ for (const stack of backend) {
484
+ backendNaming += generateBackendNamingSection(stack);
485
+ }
486
+ let frontendNaming = '';
487
+ for (const stack of frontend) {
488
+ frontendNaming += generateFrontendNamingSection(stack);
489
+ }
490
+ let databaseNaming = '';
491
+ for (const stack of database) {
492
+ databaseNaming += generateDatabaseNamingSection(stack);
493
+ }
494
+ return `# Naming Conventions
495
+
496
+ > Auto-generated by Mustard CLI.
497
+ > For actual naming patterns, refer to the code samples in context/ folder.
498
+
499
+ ## Detected Conventions
500
+
501
+ | Type | Convention |
502
+ |------|-----------|
503
+ | Classes | ${projectInfo.patterns.classes} |
504
+ | Folders | ${projectInfo.patterns.folders} |
505
+
506
+ ### File Extensions
507
+
508
+ | Extension | Convention |
509
+ |-----------|-----------|
510
+ ${filesPattern}
511
+
512
+ ${backendNaming}
513
+ ${frontendNaming}
514
+ ${databaseNaming}
515
+
516
+ ## General Rules
517
+
518
+ | Type | Convention |
519
+ |------|-----------|
520
+ | Entities | PascalCase singular |
521
+ | DB Tables | snake_case plural |
522
+ | DB Columns | snake_case |
523
+ | API Endpoints | kebab-case |
524
+
525
+ > Review code samples in context/ folder for the exact naming patterns used.
526
+ `;
527
+ }
528
+ function generateBackendNamingSection(stack) {
529
+ if (stack.name === 'dotnet') {
530
+ return `## Backend Naming (.NET)
531
+
532
+ | Type | Convention |
533
+ |------|-----------|
534
+ | Classes | PascalCase |
535
+ | Interfaces | \`I\` prefix + PascalCase |
536
+ | Services | \`{Entity}Service\` |
537
+ | Repositories | \`{Entity}Repository\` |
538
+ | DTOs | \`{Entity}{Purpose}Dto\` |
539
+ | Endpoints | \`{Entity}EndPoints\` or \`{Entity}Controller\` |
540
+ | Namespaces | Match folder path |
541
+
542
+ > Check actual file/folder structure in the code samples.
543
+
544
+ `;
545
+ }
546
+ if (stack.name === 'node') {
547
+ return `## Backend Naming (Node.js)
548
+
549
+ | Type | Convention |
550
+ |------|-----------|
551
+ | Files | kebab-case or camelCase |
552
+ | Classes | PascalCase |
553
+ | Functions | camelCase |
554
+ | Controllers | \`{entity}.controller.ts\` |
555
+ | Services | \`{entity}.service.ts\` |
556
+
557
+ `;
558
+ }
559
+ return '';
560
+ }
561
+ function generateFrontendNamingSection(stack) {
562
+ if (stack.name === 'react' || stack.name === 'nextjs') {
563
+ return `## Frontend Naming (${stack.name === 'nextjs' ? 'Next.js' : 'React'})
564
+
565
+ | Type | Convention |
566
+ |------|-----------|
567
+ | Components | PascalCase or kebab-case files |
568
+ | Hooks | \`use-{name}\` or \`use{Name}\` files |
569
+ | Pages | \`page.tsx\` (Next.js) or PascalCase |
570
+ | Shared components | Common directory |
571
+ | Feature components | Co-located with pages |
572
+
573
+ > Check actual file structure in component-example.md and hook-example.md in context/.
574
+
575
+ `;
576
+ }
577
+ if (stack.name === 'vue') {
578
+ return `## Frontend Naming (Vue)
579
+
580
+ | Type | Convention |
581
+ |------|-----------|
582
+ | Components | PascalCase .vue files |
583
+ | Composables | \`use{Name}\` functions |
584
+ | Pages | lowercase or kebab-case |
585
+
586
+ `;
587
+ }
588
+ return '';
589
+ }
590
+ function generateDatabaseNamingSection(stack) {
591
+ if (stack.name === 'drizzle') {
592
+ return `## Database Naming (Drizzle)
593
+
594
+ | Type | Convention |
595
+ |------|-----------|
596
+ | Schema files | kebab-case: \`{entity}.ts\` |
597
+ | Table names | snake_case plural |
598
+ | Column names | snake_case |
599
+ | Foreign keys | \`{referenced_table}_id\` |
600
+ | Indexes | \`{table}_{column}_idx\` |
601
+ | Unique indexes | \`{table}_{description}_unique\` |
602
+
603
+ > Check schema-example.md in context/ for actual column patterns.
604
+
605
+ `;
606
+ }
607
+ if (stack.name === 'prisma') {
608
+ return `## Database Naming (Prisma)
609
+
610
+ | Type | Convention |
611
+ |------|-----------|
612
+ | Models | PascalCase singular |
613
+ | Fields | camelCase |
614
+ | Relations | camelCase |
615
+ | Enums | PascalCase |
616
+
617
+ `;
618
+ }
619
+ return '';
620
+ }
621
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/generators/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ProjectInfo, GeneratedHooks, GeneratorOptions } from '../types.js';
2
+ /**
3
+ * Generate hook files
4
+ */
5
+ export declare function generateHooks(projectInfo: ProjectInfo, options?: GeneratorOptions): GeneratedHooks;