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.
- package/README.md +198 -0
- package/bin/mustard.js +5 -0
- package/dist/analyzers/llm.d.ts +13 -0
- package/dist/analyzers/llm.js +339 -0
- package/dist/analyzers/llm.js.map +1 -0
- package/dist/analyzers/semantic.d.ts +13 -0
- package/dist/analyzers/semantic.js +215 -0
- package/dist/analyzers/semantic.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +42 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.js +377 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/sync.d.ts +5 -0
- package/dist/commands/sync.js +235 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/update.d.ts +8 -0
- package/dist/commands/update.js +237 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/generators/claude-md-llm.d.ts +5 -0
- package/dist/generators/claude-md-llm.js +101 -0
- package/dist/generators/claude-md-llm.js.map +1 -0
- package/dist/generators/claude-md-template.d.ts +5 -0
- package/dist/generators/claude-md-template.js +273 -0
- package/dist/generators/claude-md-template.js.map +1 -0
- package/dist/generators/commands.d.ts +17 -0
- package/dist/generators/commands.js +845 -0
- package/dist/generators/commands.js.map +1 -0
- package/dist/generators/context.d.ts +11 -0
- package/dist/generators/context.js +621 -0
- package/dist/generators/context.js.map +1 -0
- package/dist/generators/hooks.d.ts +5 -0
- package/dist/generators/hooks.js +128 -0
- package/dist/generators/hooks.js.map +1 -0
- package/dist/generators/index.d.ts +11 -0
- package/dist/generators/index.js +541 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/prompts.d.ts +13 -0
- package/dist/generators/prompts.js +579 -0
- package/dist/generators/prompts.js.map +1 -0
- package/dist/generators/registry.d.ts +5 -0
- package/dist/generators/registry.js +93 -0
- package/dist/generators/registry.js.map +1 -0
- package/dist/scanners/dependencies.d.ts +7 -0
- package/dist/scanners/dependencies.js +195 -0
- package/dist/scanners/dependencies.js.map +1 -0
- package/dist/scanners/index.d.ts +6 -0
- package/dist/scanners/index.js +37 -0
- package/dist/scanners/index.js.map +1 -0
- package/dist/scanners/samples.d.ts +8 -0
- package/dist/scanners/samples.js +193 -0
- package/dist/scanners/samples.js.map +1 -0
- package/dist/scanners/stack.d.ts +5 -0
- package/dist/scanners/stack.js +294 -0
- package/dist/scanners/stack.js.map +1 -0
- package/dist/scanners/structure.d.ts +5 -0
- package/dist/scanners/structure.js +274 -0
- package/dist/scanners/structure.js.map +1 -0
- package/dist/services/grepai.d.ts +25 -0
- package/dist/services/grepai.js +89 -0
- package/dist/services/grepai.js.map +1 -0
- package/dist/services/ollama.d.ts +22 -0
- package/dist/services/ollama.js +86 -0
- package/dist/services/ollama.js.map +1 -0
- package/dist/services/package-manager.d.ts +95 -0
- package/dist/services/package-manager.js +164 -0
- package/dist/services/package-manager.js.map +1 -0
- package/dist/types.d.ts +233 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- 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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"}
|