leadcode 0.2.1 → 1.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/dist/analyzers/detection.d.ts.map +1 -1
- package/dist/analyzers/detection.js +55 -5
- package/dist/analyzers/detection.js.map +1 -1
- package/dist/context7/client.d.ts +17 -0
- package/dist/context7/client.d.ts.map +1 -0
- package/dist/context7/client.js +82 -0
- package/dist/context7/client.js.map +1 -0
- package/dist/context7/index.d.ts +5 -0
- package/dist/context7/index.d.ts.map +1 -0
- package/dist/context7/index.js +3 -0
- package/dist/context7/index.js.map +1 -0
- package/dist/context7/queries.d.ts +11 -0
- package/dist/context7/queries.d.ts.map +1 -0
- package/dist/context7/queries.js +229 -0
- package/dist/context7/queries.js.map +1 -0
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +3 -242
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/fr.d.ts.map +1 -1
- package/dist/i18n/fr.js +21 -260
- package/dist/i18n/fr.js.map +1 -1
- package/dist/i18n/types.d.ts +2 -232
- package/dist/i18n/types.d.ts.map +1 -1
- package/dist/index.js +13 -19
- package/dist/index.js.map +1 -1
- package/dist/templates/claude-md.d.ts +3 -2
- package/dist/templates/claude-md.d.ts.map +1 -1
- package/dist/templates/claude-md.js +97 -65
- package/dist/templates/claude-md.js.map +1 -1
- package/dist/tools/fetch-docs.d.ts +13 -0
- package/dist/tools/fetch-docs.d.ts.map +1 -0
- package/dist/tools/fetch-docs.js +141 -0
- package/dist/tools/fetch-docs.js.map +1 -0
- package/dist/tools/generate-claude-md.d.ts.map +1 -1
- package/dist/tools/generate-claude-md.js +12 -12
- package/dist/tools/generate-claude-md.js.map +1 -1
- package/dist/tools/update-claude-md.d.ts.map +1 -1
- package/dist/tools/update-claude-md.js +63 -11
- package/dist/tools/update-claude-md.js.map +1 -1
- package/dist/tools/validate-claude-md.d.ts.map +1 -1
- package/dist/tools/validate-claude-md.js +10 -48
- package/dist/tools/validate-claude-md.js.map +1 -1
- package/dist/types.d.ts +2 -43
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/rules/auth.d.ts +0 -3
- package/dist/rules/auth.d.ts.map +0 -1
- package/dist/rules/auth.js +0 -48
- package/dist/rules/auth.js.map +0 -1
- package/dist/rules/cross-stack.d.ts +0 -3
- package/dist/rules/cross-stack.d.ts.map +0 -1
- package/dist/rules/cross-stack.js +0 -320
- package/dist/rules/cross-stack.js.map +0 -1
- package/dist/rules/drizzle.d.ts +0 -3
- package/dist/rules/drizzle.d.ts.map +0 -1
- package/dist/rules/drizzle.js +0 -43
- package/dist/rules/drizzle.js.map +0 -1
- package/dist/rules/index.d.ts +0 -7
- package/dist/rules/index.d.ts.map +0 -1
- package/dist/rules/index.js +0 -104
- package/dist/rules/index.js.map +0 -1
- package/dist/rules/nextjs.d.ts +0 -4
- package/dist/rules/nextjs.d.ts.map +0 -1
- package/dist/rules/nextjs.js +0 -86
- package/dist/rules/nextjs.js.map +0 -1
- package/dist/rules/node.d.ts +0 -3
- package/dist/rules/node.d.ts.map +0 -1
- package/dist/rules/node.js +0 -61
- package/dist/rules/node.js.map +0 -1
- package/dist/rules/prisma.d.ts +0 -3
- package/dist/rules/prisma.d.ts.map +0 -1
- package/dist/rules/prisma.js +0 -44
- package/dist/rules/prisma.js.map +0 -1
- package/dist/rules/react.d.ts +0 -3
- package/dist/rules/react.d.ts.map +0 -1
- package/dist/rules/react.js +0 -58
- package/dist/rules/react.js.map +0 -1
- package/dist/rules/state.d.ts +0 -3
- package/dist/rules/state.d.ts.map +0 -1
- package/dist/rules/state.js +0 -54
- package/dist/rules/state.js.map +0 -1
- package/dist/rules/tailwind.d.ts +0 -3
- package/dist/rules/tailwind.d.ts.map +0 -1
- package/dist/rules/tailwind.js +0 -41
- package/dist/rules/tailwind.js.map +0 -1
- package/dist/rules/trpc.d.ts +0 -3
- package/dist/rules/trpc.d.ts.map +0 -1
- package/dist/rules/trpc.js +0 -35
- package/dist/rules/trpc.js.map +0 -1
- package/dist/rules/typescript.d.ts +0 -3
- package/dist/rules/typescript.d.ts.map +0 -1
- package/dist/rules/typescript.js +0 -54
- package/dist/rules/typescript.js.map +0 -1
- package/dist/rules/validation.d.ts +0 -3
- package/dist/rules/validation.d.ts.map +0 -1
- package/dist/rules/validation.js +0 -38
- package/dist/rules/validation.js.map +0 -1
- package/dist/tools/detect-gaps.d.ts +0 -3
- package/dist/tools/detect-gaps.d.ts.map +0 -1
- package/dist/tools/detect-gaps.js +0 -34
- package/dist/tools/detect-gaps.js.map +0 -1
- package/dist/tools/suggest.d.ts +0 -3
- package/dist/tools/suggest.d.ts.map +0 -1
- package/dist/tools/suggest.js +0 -99
- package/dist/tools/suggest.js.map +0 -1
package/dist/i18n/fr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fr.js","sourceRoot":"","sources":["../../src/i18n/fr.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAAa;IAC1B,SAAS,EAAE;QACT,MAAM,EAAE;YACN,KAAK,EAAE,2BAA2B;YAClC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"fr.js","sourceRoot":"","sources":["../../src/i18n/fr.ts"],"names":[],"mappings":"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"}
|
package/dist/i18n/types.d.ts
CHANGED
|
@@ -1,208 +1,4 @@
|
|
|
1
1
|
export type Locale = "en" | "fr";
|
|
2
|
-
export interface SuggestionMessages {
|
|
3
|
-
testing: {
|
|
4
|
-
topic: string;
|
|
5
|
-
simple: {
|
|
6
|
-
description: string;
|
|
7
|
-
pros: string[];
|
|
8
|
-
cons: string[];
|
|
9
|
-
claudeImpact: string;
|
|
10
|
-
};
|
|
11
|
-
clean: {
|
|
12
|
-
description: string;
|
|
13
|
-
pros: string[];
|
|
14
|
-
cons: string[];
|
|
15
|
-
claudeImpact: string;
|
|
16
|
-
};
|
|
17
|
-
scalable: {
|
|
18
|
-
description: string;
|
|
19
|
-
pros: string[];
|
|
20
|
-
cons: string[];
|
|
21
|
-
claudeImpact: string;
|
|
22
|
-
};
|
|
23
|
-
};
|
|
24
|
-
inputValidation: {
|
|
25
|
-
topic: string;
|
|
26
|
-
simple: {
|
|
27
|
-
description: string;
|
|
28
|
-
pros: string[];
|
|
29
|
-
cons: string[];
|
|
30
|
-
claudeImpact: string;
|
|
31
|
-
};
|
|
32
|
-
clean: {
|
|
33
|
-
description: string;
|
|
34
|
-
pros: string[];
|
|
35
|
-
cons: string[];
|
|
36
|
-
claudeImpact: string;
|
|
37
|
-
};
|
|
38
|
-
};
|
|
39
|
-
errorHandling: {
|
|
40
|
-
topic: string;
|
|
41
|
-
simple: {
|
|
42
|
-
description: string;
|
|
43
|
-
pros: string[];
|
|
44
|
-
cons: string[];
|
|
45
|
-
claudeImpact: string;
|
|
46
|
-
};
|
|
47
|
-
clean: {
|
|
48
|
-
description: string;
|
|
49
|
-
pros: string[];
|
|
50
|
-
cons: string[];
|
|
51
|
-
claudeImpact: string;
|
|
52
|
-
};
|
|
53
|
-
};
|
|
54
|
-
schemaOrg: {
|
|
55
|
-
topic: string;
|
|
56
|
-
simple: {
|
|
57
|
-
description: string;
|
|
58
|
-
pros: string[];
|
|
59
|
-
cons: string[];
|
|
60
|
-
claudeImpact: string;
|
|
61
|
-
};
|
|
62
|
-
clean: {
|
|
63
|
-
description: string;
|
|
64
|
-
pros: string[];
|
|
65
|
-
cons: string[];
|
|
66
|
-
claudeImpact: string;
|
|
67
|
-
};
|
|
68
|
-
};
|
|
69
|
-
componentStructure: {
|
|
70
|
-
topic: string;
|
|
71
|
-
simple: {
|
|
72
|
-
description: string;
|
|
73
|
-
pros: string[];
|
|
74
|
-
cons: string[];
|
|
75
|
-
claudeImpact: string;
|
|
76
|
-
};
|
|
77
|
-
clean: {
|
|
78
|
-
description: string;
|
|
79
|
-
pros: string[];
|
|
80
|
-
cons: string[];
|
|
81
|
-
claudeImpact: string;
|
|
82
|
-
};
|
|
83
|
-
};
|
|
84
|
-
authMiddleware: {
|
|
85
|
-
topic: string;
|
|
86
|
-
simple: {
|
|
87
|
-
description: string;
|
|
88
|
-
pros: string[];
|
|
89
|
-
cons: string[];
|
|
90
|
-
claudeImpact: string;
|
|
91
|
-
};
|
|
92
|
-
clean: {
|
|
93
|
-
description: string;
|
|
94
|
-
pros: string[];
|
|
95
|
-
cons: string[];
|
|
96
|
-
claudeImpact: string;
|
|
97
|
-
};
|
|
98
|
-
};
|
|
99
|
-
loadingStates: {
|
|
100
|
-
topic: string;
|
|
101
|
-
simple: {
|
|
102
|
-
description: string;
|
|
103
|
-
pros: string[];
|
|
104
|
-
cons: string[];
|
|
105
|
-
claudeImpact: string;
|
|
106
|
-
};
|
|
107
|
-
clean: {
|
|
108
|
-
description: string;
|
|
109
|
-
pros: string[];
|
|
110
|
-
cons: string[];
|
|
111
|
-
claudeImpact: string;
|
|
112
|
-
};
|
|
113
|
-
};
|
|
114
|
-
metadata: {
|
|
115
|
-
topic: string;
|
|
116
|
-
simple: {
|
|
117
|
-
description: string;
|
|
118
|
-
pros: string[];
|
|
119
|
-
cons: string[];
|
|
120
|
-
claudeImpact: string;
|
|
121
|
-
};
|
|
122
|
-
clean: {
|
|
123
|
-
description: string;
|
|
124
|
-
pros: string[];
|
|
125
|
-
cons: string[];
|
|
126
|
-
claudeImpact: string;
|
|
127
|
-
};
|
|
128
|
-
};
|
|
129
|
-
prismaClient: {
|
|
130
|
-
topic: string;
|
|
131
|
-
simple: {
|
|
132
|
-
description: string;
|
|
133
|
-
pros: string[];
|
|
134
|
-
cons: string[];
|
|
135
|
-
claudeImpact: string;
|
|
136
|
-
};
|
|
137
|
-
};
|
|
138
|
-
authSession: {
|
|
139
|
-
topic: string;
|
|
140
|
-
simple: {
|
|
141
|
-
description: string;
|
|
142
|
-
pros: string[];
|
|
143
|
-
cons: string[];
|
|
144
|
-
claudeImpact: string;
|
|
145
|
-
};
|
|
146
|
-
clean: {
|
|
147
|
-
description: string;
|
|
148
|
-
pros: string[];
|
|
149
|
-
cons: string[];
|
|
150
|
-
claudeImpact: string;
|
|
151
|
-
};
|
|
152
|
-
};
|
|
153
|
-
envValidation: {
|
|
154
|
-
topic: string;
|
|
155
|
-
simple: {
|
|
156
|
-
description: string;
|
|
157
|
-
pros: string[];
|
|
158
|
-
cons: string[];
|
|
159
|
-
claudeImpact: string;
|
|
160
|
-
};
|
|
161
|
-
clean: {
|
|
162
|
-
description: string;
|
|
163
|
-
pros: string[];
|
|
164
|
-
cons: string[];
|
|
165
|
-
claudeImpact: string;
|
|
166
|
-
};
|
|
167
|
-
};
|
|
168
|
-
typesDir: {
|
|
169
|
-
topic: string;
|
|
170
|
-
simple: {
|
|
171
|
-
description: string;
|
|
172
|
-
pros: string[];
|
|
173
|
-
cons: string[];
|
|
174
|
-
claudeImpact: string;
|
|
175
|
-
};
|
|
176
|
-
};
|
|
177
|
-
storeOrg: {
|
|
178
|
-
topic: string;
|
|
179
|
-
simple: {
|
|
180
|
-
description: string;
|
|
181
|
-
pros: string[];
|
|
182
|
-
cons: string[];
|
|
183
|
-
claudeImpact: string;
|
|
184
|
-
};
|
|
185
|
-
};
|
|
186
|
-
drizzleSchema: {
|
|
187
|
-
topic: string;
|
|
188
|
-
simple: {
|
|
189
|
-
description: string;
|
|
190
|
-
pros: string[];
|
|
191
|
-
cons: string[];
|
|
192
|
-
claudeImpact: string;
|
|
193
|
-
};
|
|
194
|
-
clean: {
|
|
195
|
-
description: string;
|
|
196
|
-
pros: string[];
|
|
197
|
-
cons: string[];
|
|
198
|
-
claudeImpact: string;
|
|
199
|
-
};
|
|
200
|
-
};
|
|
201
|
-
genericFix: string;
|
|
202
|
-
genericPros: string[];
|
|
203
|
-
genericCons: string[];
|
|
204
|
-
genericClaudeImpact: string;
|
|
205
|
-
}
|
|
206
2
|
export interface TemplateMessages {
|
|
207
3
|
header: {
|
|
208
4
|
title: string;
|
|
@@ -216,9 +12,6 @@ export interface TemplateMessages {
|
|
|
216
12
|
availableScripts: string;
|
|
217
13
|
fileNaming: string;
|
|
218
14
|
importOrdering: string;
|
|
219
|
-
conventions: string;
|
|
220
|
-
crossStackRules: string;
|
|
221
|
-
interdictions: string;
|
|
222
15
|
projectDecisions: string;
|
|
223
16
|
existingPatterns: string;
|
|
224
17
|
claudeInstructions: string;
|
|
@@ -258,6 +51,8 @@ export interface TemplateMessages {
|
|
|
258
51
|
uiComponents: string;
|
|
259
52
|
testing: string;
|
|
260
53
|
stateManagement: string;
|
|
54
|
+
dataFetching: string;
|
|
55
|
+
formLibrary: string;
|
|
261
56
|
apiStyle: string;
|
|
262
57
|
i18n: string;
|
|
263
58
|
payments: string;
|
|
@@ -324,32 +119,7 @@ export interface TemplateMessages {
|
|
|
324
119
|
consoleLogs: string;
|
|
325
120
|
};
|
|
326
121
|
}
|
|
327
|
-
export interface ValidationMessages {
|
|
328
|
-
noClaudeMd: string;
|
|
329
|
-
frameworkVersionOutdated: string;
|
|
330
|
-
techMissing: string;
|
|
331
|
-
conventionMissing: string;
|
|
332
|
-
crossStackMissing: string;
|
|
333
|
-
gapStillExists: string;
|
|
334
|
-
inSync: string;
|
|
335
|
-
driftsFound: string;
|
|
336
|
-
}
|
|
337
|
-
export interface ToolMessages {
|
|
338
|
-
generateSuccess: string;
|
|
339
|
-
updateSuccess: string;
|
|
340
|
-
dirNotFound: string;
|
|
341
|
-
}
|
|
342
|
-
export interface PromptMessages {
|
|
343
|
-
setupTitle: string;
|
|
344
|
-
setupSteps: string[];
|
|
345
|
-
validateTitle: string;
|
|
346
|
-
validateSteps: string[];
|
|
347
|
-
}
|
|
348
122
|
export interface Messages {
|
|
349
123
|
templates: TemplateMessages;
|
|
350
|
-
suggestions: SuggestionMessages;
|
|
351
|
-
validation: ValidationMessages;
|
|
352
|
-
tools: ToolMessages;
|
|
353
|
-
prompts: PromptMessages;
|
|
354
124
|
}
|
|
355
125
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/i18n/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/i18n/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjC,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/i18n/types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,24 +2,22 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
2
2
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
3
|
import * as z from "zod";
|
|
4
4
|
import { registerAnalyzeRepo } from "./tools/analyze-repo.js";
|
|
5
|
-
import {
|
|
6
|
-
import { registerSuggest } from "./tools/suggest.js";
|
|
5
|
+
import { registerFetchDocs } from "./tools/fetch-docs.js";
|
|
7
6
|
import { registerGenerateClaudeMd } from "./tools/generate-claude-md.js";
|
|
8
7
|
import { registerValidateClaudeMd } from "./tools/validate-claude-md.js";
|
|
9
8
|
import { registerUpdateClaudeMd } from "./tools/update-claude-md.js";
|
|
10
9
|
const server = new McpServer({
|
|
11
10
|
name: "leadcode",
|
|
12
|
-
version: "0.
|
|
11
|
+
version: "1.0.0",
|
|
13
12
|
});
|
|
14
13
|
// Register tools
|
|
15
14
|
registerAnalyzeRepo(server);
|
|
16
|
-
|
|
17
|
-
registerSuggest(server);
|
|
15
|
+
registerFetchDocs(server);
|
|
18
16
|
registerGenerateClaudeMd(server);
|
|
19
17
|
registerValidateClaudeMd(server);
|
|
20
18
|
registerUpdateClaudeMd(server);
|
|
21
19
|
// Register prompts
|
|
22
|
-
server.prompt("setup-project", "Full LeadCode workflow: analyze →
|
|
20
|
+
server.prompt("setup-project", "Full LeadCode workflow: analyze repo → fetch documentation → generate CLAUDE.md with up-to-date conventions.", {
|
|
23
21
|
projectPath: z.string().describe("Absolute path to the project root"),
|
|
24
22
|
language: z.string().optional().describe("Output language: 'fr' for French, 'en' for English (default: en)"),
|
|
25
23
|
}, ({ projectPath, language }) => {
|
|
@@ -28,26 +26,22 @@ server.prompt("setup-project", "Full LeadCode workflow: analyze → detect gaps
|
|
|
28
26
|
? [
|
|
29
27
|
`Configure LeadCode pour le projet à ${projectPath}. Suis ces étapes :`,
|
|
30
28
|
"",
|
|
31
|
-
`1. Lance analyze-repo avec projectPath="${projectPath}" pour scanner le projet.`,
|
|
32
|
-
"2. Lance
|
|
33
|
-
"3.
|
|
34
|
-
"4.
|
|
35
|
-
"5. Demande-moi mes préférences pour chaque point (simple / clean / scalable).",
|
|
36
|
-
"6. Une fois mes choix faits, lance generate-claude-md avec mes choix pour créer le CLAUDE.md.",
|
|
29
|
+
`1. Lance analyze-repo avec projectPath="${projectPath}" pour scanner le projet et détecter le stack.`,
|
|
30
|
+
"2. Lance fetch-docs avec l'analyse pour récupérer la documentation à jour de chaque technologie détectée via Context7.",
|
|
31
|
+
"3. Présente un résumé clair : stack détecté, documentation récupérée, techs sans documentation.",
|
|
32
|
+
"4. Lance generate-claude-md avec l'analyse et la documentation pour créer le CLAUDE.md.",
|
|
37
33
|
"",
|
|
38
34
|
"Explique chaque étape simplement. Réponds en français.",
|
|
39
35
|
]
|
|
40
36
|
: [
|
|
41
37
|
`Please set up LeadCode for the project at ${projectPath}. Follow these steps:`,
|
|
42
38
|
"",
|
|
43
|
-
`1. Call analyze-repo with projectPath="${projectPath}" to scan the project.`,
|
|
44
|
-
"2. Call
|
|
45
|
-
"3.
|
|
46
|
-
"4.
|
|
47
|
-
"5. Ask me which options I prefer for each gap (simple / clean / scalable).",
|
|
48
|
-
"6. Once I've chosen, call generate-claude-md with my choices to create the CLAUDE.md file.",
|
|
39
|
+
`1. Call analyze-repo with projectPath="${projectPath}" to scan the project and detect the stack.`,
|
|
40
|
+
"2. Call fetch-docs with the analysis to fetch up-to-date documentation for each detected technology via Context7.",
|
|
41
|
+
"3. Present a summary: detected stack, fetched documentation, any techs without docs.",
|
|
42
|
+
"4. Call generate-claude-md with the analysis and docs to create the CLAUDE.md file.",
|
|
49
43
|
"",
|
|
50
|
-
"Be thorough and explain
|
|
44
|
+
"Be thorough and explain the results clearly.",
|
|
51
45
|
];
|
|
52
46
|
return {
|
|
53
47
|
messages: [
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { RepoAnalysis
|
|
1
|
+
import type { RepoAnalysis } from "../types.js";
|
|
2
2
|
import type { CodePatterns } from "../analyzers/patterns.js";
|
|
3
|
+
import type { FetchedDocs } from "../tools/fetch-docs.js";
|
|
3
4
|
import type { Locale } from "../i18n/types.js";
|
|
4
|
-
export declare function generateClaudeMd(analysis: RepoAnalysis,
|
|
5
|
+
export declare function generateClaudeMd(analysis: RepoAnalysis, docs: FetchedDocs, choices: Record<string, string>, patterns?: CodePatterns, locale?: Locale): string;
|
|
5
6
|
//# sourceMappingURL=claude-md.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAmI/C,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,QAAQ,CAAC,EAAE,YAAY,EACvB,MAAM,GAAE,MAAa,GACpB,MAAM,CAoLR"}
|
|
@@ -11,6 +11,9 @@ function describeArchitecture(analysis, locale) {
|
|
|
11
11
|
else if (f?.name === "vite-react") {
|
|
12
12
|
lines.push(`- **${m.architecture.frontend}**: ${m.architecture.reactSpaVite} ${f.version}`);
|
|
13
13
|
}
|
|
14
|
+
else if (f?.name === "react") {
|
|
15
|
+
lines.push(`- **${m.architecture.frontend}**: React ${f.version}`);
|
|
16
|
+
}
|
|
14
17
|
else if (f) {
|
|
15
18
|
lines.push(`- **${m.architecture.framework}**: ${f.name} ${f.version}`);
|
|
16
19
|
}
|
|
@@ -63,33 +66,77 @@ function buildDynamicInstructions(analysis, locale) {
|
|
|
63
66
|
lines.push(`- ${m.appRouterPages}`);
|
|
64
67
|
lines.push(`- ${m.serverActions}`);
|
|
65
68
|
}
|
|
66
|
-
if (d.orm === "prisma")
|
|
69
|
+
if (d.orm === "prisma")
|
|
67
70
|
lines.push(`- ${m.prismaAfterChange}`);
|
|
68
|
-
|
|
69
|
-
else if (d.orm === "drizzle") {
|
|
71
|
+
else if (d.orm === "drizzle")
|
|
70
72
|
lines.push(`- ${m.drizzleAfterChange}`);
|
|
71
|
-
|
|
72
|
-
if (d.validation === "zod") {
|
|
73
|
+
if (d.validation === "zod")
|
|
73
74
|
lines.push(`- ${m.zodValidate}`);
|
|
74
|
-
|
|
75
|
-
if (d.css === "tailwind") {
|
|
75
|
+
if (d.css === "tailwind")
|
|
76
76
|
lines.push(`- ${m.tailwindClasses}`);
|
|
77
|
-
|
|
78
|
-
if (d.uiComponents === "shadcn") {
|
|
77
|
+
if (d.uiComponents === "shadcn")
|
|
79
78
|
lines.push(`- ${m.shadcnComponents}`);
|
|
80
|
-
|
|
81
|
-
if (d.testing) {
|
|
79
|
+
if (d.testing)
|
|
82
80
|
lines.push(`- ${interpolate(m.runTests, { testing: d.testing })}`);
|
|
83
|
-
|
|
84
|
-
if (d.linter) {
|
|
81
|
+
if (d.linter)
|
|
85
82
|
lines.push(`- ${interpolate(m.runLinter, { linter: d.linter })}`);
|
|
86
|
-
|
|
87
|
-
if (d.i18n) {
|
|
83
|
+
if (d.i18n)
|
|
88
84
|
lines.push(`- ${m.i18nStrings}`);
|
|
89
|
-
}
|
|
90
85
|
return lines;
|
|
91
86
|
}
|
|
92
|
-
|
|
87
|
+
/** Format a tech name for display as section header */
|
|
88
|
+
function techDisplayName(tech) {
|
|
89
|
+
const names = {
|
|
90
|
+
next: "Next.js",
|
|
91
|
+
react: "React",
|
|
92
|
+
"vite-react": "Vite + React",
|
|
93
|
+
nuxt: "Nuxt",
|
|
94
|
+
remix: "Remix",
|
|
95
|
+
astro: "Astro",
|
|
96
|
+
sveltekit: "SvelteKit",
|
|
97
|
+
express: "Express",
|
|
98
|
+
fastify: "Fastify",
|
|
99
|
+
hono: "Hono",
|
|
100
|
+
prisma: "Prisma",
|
|
101
|
+
drizzle: "Drizzle",
|
|
102
|
+
typeorm: "TypeORM",
|
|
103
|
+
mongoose: "Mongoose",
|
|
104
|
+
kysely: "Kysely",
|
|
105
|
+
"next-auth": "NextAuth.js",
|
|
106
|
+
clerk: "Clerk",
|
|
107
|
+
"better-auth": "Better Auth",
|
|
108
|
+
auth0: "Auth0",
|
|
109
|
+
"supabase-auth": "Supabase Auth",
|
|
110
|
+
zod: "Zod",
|
|
111
|
+
valibot: "Valibot",
|
|
112
|
+
tailwind: "Tailwind CSS",
|
|
113
|
+
shadcn: "shadcn/ui",
|
|
114
|
+
chakra: "Chakra UI",
|
|
115
|
+
mui: "Material UI",
|
|
116
|
+
mantine: "Mantine",
|
|
117
|
+
vitest: "Vitest",
|
|
118
|
+
jest: "Jest",
|
|
119
|
+
playwright: "Playwright",
|
|
120
|
+
cypress: "Cypress",
|
|
121
|
+
zustand: "Zustand",
|
|
122
|
+
redux: "Redux Toolkit",
|
|
123
|
+
jotai: "Jotai",
|
|
124
|
+
"react-query": "TanStack Query",
|
|
125
|
+
swr: "SWR",
|
|
126
|
+
"react-hook-form": "React Hook Form",
|
|
127
|
+
trpc: "tRPC",
|
|
128
|
+
stripe: "Stripe",
|
|
129
|
+
resend: "Resend",
|
|
130
|
+
"next-intl": "next-intl",
|
|
131
|
+
i18next: "i18next",
|
|
132
|
+
"socket.io": "Socket.IO",
|
|
133
|
+
inngest: "Inngest",
|
|
134
|
+
sanity: "Sanity",
|
|
135
|
+
contentful: "Contentful",
|
|
136
|
+
};
|
|
137
|
+
return names[tech] ?? tech;
|
|
138
|
+
}
|
|
139
|
+
export function generateClaudeMd(analysis, docs, choices, patterns, locale = "en") {
|
|
93
140
|
const m = getMessages(locale).templates;
|
|
94
141
|
const lines = [];
|
|
95
142
|
// Header
|
|
@@ -110,9 +157,7 @@ export function generateClaudeMd(analysis, conventions, interdictions, crossRefs
|
|
|
110
157
|
lines.push(`## ${m.sections.stack}`);
|
|
111
158
|
lines.push("");
|
|
112
159
|
if (analysis.framework) {
|
|
113
|
-
const variant = analysis.framework.variant
|
|
114
|
-
? ` (${analysis.framework.variant})`
|
|
115
|
-
: "";
|
|
160
|
+
const variant = analysis.framework.variant ? ` (${analysis.framework.variant})` : "";
|
|
116
161
|
lines.push(`- **${m.stackLabels.framework}**: ${analysis.framework.name} ${analysis.framework.version}${variant}`);
|
|
117
162
|
}
|
|
118
163
|
const d = analysis.detected;
|
|
@@ -132,6 +177,10 @@ export function generateClaudeMd(analysis, conventions, interdictions, crossRefs
|
|
|
132
177
|
lines.push(`- **${m.stackLabels.testing}**: ${d.testing}`);
|
|
133
178
|
if (d.stateManagement)
|
|
134
179
|
lines.push(`- **${m.stackLabels.stateManagement}**: ${d.stateManagement}`);
|
|
180
|
+
if (d.dataFetching)
|
|
181
|
+
lines.push(`- **${m.stackLabels.dataFetching}**: ${d.dataFetching}`);
|
|
182
|
+
if (d.formLibrary)
|
|
183
|
+
lines.push(`- **${m.stackLabels.formLibrary}**: ${d.formLibrary}`);
|
|
135
184
|
if (d.apiStyle)
|
|
136
185
|
lines.push(`- **${m.stackLabels.apiStyle}**: ${d.apiStyle}`);
|
|
137
186
|
if (d.i18n)
|
|
@@ -204,6 +253,31 @@ export function generateClaudeMd(analysis, conventions, interdictions, crossRefs
|
|
|
204
253
|
}
|
|
205
254
|
lines.push("");
|
|
206
255
|
}
|
|
256
|
+
// Per-tech documentation (from Context7)
|
|
257
|
+
const techEntries = Object.entries(docs.techDocs);
|
|
258
|
+
if (techEntries.length > 0) {
|
|
259
|
+
for (const [tech, docContent] of techEntries) {
|
|
260
|
+
if (!docContent.trim())
|
|
261
|
+
continue;
|
|
262
|
+
lines.push(`## ${techDisplayName(tech)} Conventions`);
|
|
263
|
+
lines.push("");
|
|
264
|
+
lines.push(docContent.trim());
|
|
265
|
+
lines.push("");
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// Cross-stack documentation (from Context7)
|
|
269
|
+
const crossEntries = Object.entries(docs.crossDocs);
|
|
270
|
+
if (crossEntries.length > 0) {
|
|
271
|
+
for (const [key, docContent] of crossEntries) {
|
|
272
|
+
if (!docContent.trim())
|
|
273
|
+
continue;
|
|
274
|
+
const [tech1, tech2] = key.split("+");
|
|
275
|
+
lines.push(`## Cross-Stack: ${techDisplayName(tech1)} + ${techDisplayName(tech2)}`);
|
|
276
|
+
lines.push("");
|
|
277
|
+
lines.push(docContent.trim());
|
|
278
|
+
lines.push("");
|
|
279
|
+
}
|
|
280
|
+
}
|
|
207
281
|
// File naming conventions
|
|
208
282
|
lines.push(`## ${m.sections.fileNaming}`);
|
|
209
283
|
lines.push("");
|
|
@@ -211,9 +285,8 @@ export function generateClaudeMd(analysis, conventions, interdictions, crossRefs
|
|
|
211
285
|
lines.push(`- ${m.naming.reactComponents}`);
|
|
212
286
|
lines.push(`- ${m.naming.hooks}`);
|
|
213
287
|
lines.push(`- ${m.naming.constants}`);
|
|
214
|
-
if (s.hasSrcDir)
|
|
288
|
+
if (s.hasSrcDir)
|
|
215
289
|
lines.push(`- ${m.naming.newFilesSrc}`);
|
|
216
|
-
}
|
|
217
290
|
lines.push("");
|
|
218
291
|
// Import ordering
|
|
219
292
|
lines.push(`## ${m.sections.importOrdering}`);
|
|
@@ -224,45 +297,6 @@ export function generateClaudeMd(analysis, conventions, interdictions, crossRefs
|
|
|
224
297
|
}
|
|
225
298
|
lines.push("```");
|
|
226
299
|
lines.push("");
|
|
227
|
-
// Conventions
|
|
228
|
-
if (conventions.length > 0) {
|
|
229
|
-
lines.push(`## ${m.sections.conventions}`);
|
|
230
|
-
lines.push("");
|
|
231
|
-
for (const conv of conventions) {
|
|
232
|
-
lines.push(`### ${conv.description}`);
|
|
233
|
-
lines.push(`<!-- id:${conv.id} -->`);
|
|
234
|
-
lines.push(conv.rule);
|
|
235
|
-
lines.push("");
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
// Cross-stack rules
|
|
239
|
-
if (crossRefs.length > 0) {
|
|
240
|
-
lines.push(`## ${m.sections.crossStackRules}`);
|
|
241
|
-
lines.push("");
|
|
242
|
-
for (const cr of crossRefs) {
|
|
243
|
-
lines.push(`### ${cr.techs.join(" + ")}`);
|
|
244
|
-
lines.push("");
|
|
245
|
-
for (const conv of cr.conventions) {
|
|
246
|
-
lines.push(`- **${conv.description}**: ${conv.rule}`);
|
|
247
|
-
}
|
|
248
|
-
if (cr.interdictions.length > 0) {
|
|
249
|
-
lines.push("");
|
|
250
|
-
for (const inter of cr.interdictions) {
|
|
251
|
-
lines.push(`- ${inter}`);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
lines.push("");
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
// Interdictions
|
|
258
|
-
if (interdictions.length > 0) {
|
|
259
|
-
lines.push(`## ${m.sections.interdictions}`);
|
|
260
|
-
lines.push("");
|
|
261
|
-
for (const inter of interdictions) {
|
|
262
|
-
lines.push(`- ${inter}`);
|
|
263
|
-
}
|
|
264
|
-
lines.push("");
|
|
265
|
-
}
|
|
266
300
|
// User choices
|
|
267
301
|
const choiceEntries = Object.entries(choices);
|
|
268
302
|
if (choiceEntries.length > 0) {
|
|
@@ -286,12 +320,10 @@ export function generateClaudeMd(analysis, conventions, interdictions, crossRefs
|
|
|
286
320
|
if (patterns.useServerCount > 0) {
|
|
287
321
|
patternLines.push(`- ${interpolate(m.patterns.serverActions, { count: patterns.useServerCount })}`);
|
|
288
322
|
}
|
|
289
|
-
if (patterns.usesPathAlias)
|
|
323
|
+
if (patterns.usesPathAlias)
|
|
290
324
|
patternLines.push(`- ${m.patterns.pathAliases}`);
|
|
291
|
-
|
|
292
|
-
if (patterns.hasBarrelFiles) {
|
|
325
|
+
if (patterns.hasBarrelFiles)
|
|
293
326
|
patternLines.push(`- ${m.patterns.barrelFiles}`);
|
|
294
|
-
}
|
|
295
327
|
if (patterns.largeFiles.length > 0) {
|
|
296
328
|
patternLines.push(`- ${interpolate(m.patterns.largeFiles, { count: patterns.largeFiles.length })}`);
|
|
297
329
|
}
|