leadcode 0.2.2 → 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 +30 -0
- 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 +1 -242
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/fr.d.ts.map +1 -1
- package/dist/i18n/fr.js +19 -260
- package/dist/i18n/fr.js.map +1 -1
- package/dist/i18n/types.d.ts +0 -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 +92 -67
- 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 +0 -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 -51
- 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;
|
|
@@ -326,32 +119,7 @@ export interface TemplateMessages {
|
|
|
326
119
|
consoleLogs: string;
|
|
327
120
|
};
|
|
328
121
|
}
|
|
329
|
-
export interface ValidationMessages {
|
|
330
|
-
noClaudeMd: string;
|
|
331
|
-
frameworkVersionOutdated: string;
|
|
332
|
-
techMissing: string;
|
|
333
|
-
conventionMissing: string;
|
|
334
|
-
crossStackMissing: string;
|
|
335
|
-
gapStillExists: string;
|
|
336
|
-
inSync: string;
|
|
337
|
-
driftsFound: string;
|
|
338
|
-
}
|
|
339
|
-
export interface ToolMessages {
|
|
340
|
-
generateSuccess: string;
|
|
341
|
-
updateSuccess: string;
|
|
342
|
-
dirNotFound: string;
|
|
343
|
-
}
|
|
344
|
-
export interface PromptMessages {
|
|
345
|
-
setupTitle: string;
|
|
346
|
-
setupSteps: string[];
|
|
347
|
-
validateTitle: string;
|
|
348
|
-
validateSteps: string[];
|
|
349
|
-
}
|
|
350
122
|
export interface Messages {
|
|
351
123
|
templates: TemplateMessages;
|
|
352
|
-
suggestions: SuggestionMessages;
|
|
353
|
-
validation: ValidationMessages;
|
|
354
|
-
tools: ToolMessages;
|
|
355
|
-
prompts: PromptMessages;
|
|
356
124
|
}
|
|
357
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"}
|
|
@@ -66,33 +66,77 @@ function buildDynamicInstructions(analysis, locale) {
|
|
|
66
66
|
lines.push(`- ${m.appRouterPages}`);
|
|
67
67
|
lines.push(`- ${m.serverActions}`);
|
|
68
68
|
}
|
|
69
|
-
if (d.orm === "prisma")
|
|
69
|
+
if (d.orm === "prisma")
|
|
70
70
|
lines.push(`- ${m.prismaAfterChange}`);
|
|
71
|
-
|
|
72
|
-
else if (d.orm === "drizzle") {
|
|
71
|
+
else if (d.orm === "drizzle")
|
|
73
72
|
lines.push(`- ${m.drizzleAfterChange}`);
|
|
74
|
-
|
|
75
|
-
if (d.validation === "zod") {
|
|
73
|
+
if (d.validation === "zod")
|
|
76
74
|
lines.push(`- ${m.zodValidate}`);
|
|
77
|
-
|
|
78
|
-
if (d.css === "tailwind") {
|
|
75
|
+
if (d.css === "tailwind")
|
|
79
76
|
lines.push(`- ${m.tailwindClasses}`);
|
|
80
|
-
|
|
81
|
-
if (d.uiComponents === "shadcn") {
|
|
77
|
+
if (d.uiComponents === "shadcn")
|
|
82
78
|
lines.push(`- ${m.shadcnComponents}`);
|
|
83
|
-
|
|
84
|
-
if (d.testing) {
|
|
79
|
+
if (d.testing)
|
|
85
80
|
lines.push(`- ${interpolate(m.runTests, { testing: d.testing })}`);
|
|
86
|
-
|
|
87
|
-
if (d.linter) {
|
|
81
|
+
if (d.linter)
|
|
88
82
|
lines.push(`- ${interpolate(m.runLinter, { linter: d.linter })}`);
|
|
89
|
-
|
|
90
|
-
if (d.i18n) {
|
|
83
|
+
if (d.i18n)
|
|
91
84
|
lines.push(`- ${m.i18nStrings}`);
|
|
92
|
-
}
|
|
93
85
|
return lines;
|
|
94
86
|
}
|
|
95
|
-
|
|
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") {
|
|
96
140
|
const m = getMessages(locale).templates;
|
|
97
141
|
const lines = [];
|
|
98
142
|
// Header
|
|
@@ -113,9 +157,7 @@ export function generateClaudeMd(analysis, conventions, interdictions, crossRefs
|
|
|
113
157
|
lines.push(`## ${m.sections.stack}`);
|
|
114
158
|
lines.push("");
|
|
115
159
|
if (analysis.framework) {
|
|
116
|
-
const variant = analysis.framework.variant
|
|
117
|
-
? ` (${analysis.framework.variant})`
|
|
118
|
-
: "";
|
|
160
|
+
const variant = analysis.framework.variant ? ` (${analysis.framework.variant})` : "";
|
|
119
161
|
lines.push(`- **${m.stackLabels.framework}**: ${analysis.framework.name} ${analysis.framework.version}${variant}`);
|
|
120
162
|
}
|
|
121
163
|
const d = analysis.detected;
|
|
@@ -136,9 +178,9 @@ export function generateClaudeMd(analysis, conventions, interdictions, crossRefs
|
|
|
136
178
|
if (d.stateManagement)
|
|
137
179
|
lines.push(`- **${m.stackLabels.stateManagement}**: ${d.stateManagement}`);
|
|
138
180
|
if (d.dataFetching)
|
|
139
|
-
lines.push(`-
|
|
181
|
+
lines.push(`- **${m.stackLabels.dataFetching}**: ${d.dataFetching}`);
|
|
140
182
|
if (d.formLibrary)
|
|
141
|
-
lines.push(`-
|
|
183
|
+
lines.push(`- **${m.stackLabels.formLibrary}**: ${d.formLibrary}`);
|
|
142
184
|
if (d.apiStyle)
|
|
143
185
|
lines.push(`- **${m.stackLabels.apiStyle}**: ${d.apiStyle}`);
|
|
144
186
|
if (d.i18n)
|
|
@@ -211,6 +253,31 @@ export function generateClaudeMd(analysis, conventions, interdictions, crossRefs
|
|
|
211
253
|
}
|
|
212
254
|
lines.push("");
|
|
213
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
|
+
}
|
|
214
281
|
// File naming conventions
|
|
215
282
|
lines.push(`## ${m.sections.fileNaming}`);
|
|
216
283
|
lines.push("");
|
|
@@ -218,9 +285,8 @@ export function generateClaudeMd(analysis, conventions, interdictions, crossRefs
|
|
|
218
285
|
lines.push(`- ${m.naming.reactComponents}`);
|
|
219
286
|
lines.push(`- ${m.naming.hooks}`);
|
|
220
287
|
lines.push(`- ${m.naming.constants}`);
|
|
221
|
-
if (s.hasSrcDir)
|
|
288
|
+
if (s.hasSrcDir)
|
|
222
289
|
lines.push(`- ${m.naming.newFilesSrc}`);
|
|
223
|
-
}
|
|
224
290
|
lines.push("");
|
|
225
291
|
// Import ordering
|
|
226
292
|
lines.push(`## ${m.sections.importOrdering}`);
|
|
@@ -231,45 +297,6 @@ export function generateClaudeMd(analysis, conventions, interdictions, crossRefs
|
|
|
231
297
|
}
|
|
232
298
|
lines.push("```");
|
|
233
299
|
lines.push("");
|
|
234
|
-
// Conventions
|
|
235
|
-
if (conventions.length > 0) {
|
|
236
|
-
lines.push(`## ${m.sections.conventions}`);
|
|
237
|
-
lines.push("");
|
|
238
|
-
for (const conv of conventions) {
|
|
239
|
-
lines.push(`### ${conv.description}`);
|
|
240
|
-
lines.push(`<!-- id:${conv.id} -->`);
|
|
241
|
-
lines.push(conv.rule);
|
|
242
|
-
lines.push("");
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
// Cross-stack rules
|
|
246
|
-
if (crossRefs.length > 0) {
|
|
247
|
-
lines.push(`## ${m.sections.crossStackRules}`);
|
|
248
|
-
lines.push("");
|
|
249
|
-
for (const cr of crossRefs) {
|
|
250
|
-
lines.push(`### ${cr.techs.join(" + ")}`);
|
|
251
|
-
lines.push("");
|
|
252
|
-
for (const conv of cr.conventions) {
|
|
253
|
-
lines.push(`- **${conv.description}**: ${conv.rule}`);
|
|
254
|
-
}
|
|
255
|
-
if (cr.interdictions.length > 0) {
|
|
256
|
-
lines.push("");
|
|
257
|
-
for (const inter of cr.interdictions) {
|
|
258
|
-
lines.push(`- ${inter}`);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
lines.push("");
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
// Interdictions
|
|
265
|
-
if (interdictions.length > 0) {
|
|
266
|
-
lines.push(`## ${m.sections.interdictions}`);
|
|
267
|
-
lines.push("");
|
|
268
|
-
for (const inter of interdictions) {
|
|
269
|
-
lines.push(`- ${inter}`);
|
|
270
|
-
}
|
|
271
|
-
lines.push("");
|
|
272
|
-
}
|
|
273
300
|
// User choices
|
|
274
301
|
const choiceEntries = Object.entries(choices);
|
|
275
302
|
if (choiceEntries.length > 0) {
|
|
@@ -293,12 +320,10 @@ export function generateClaudeMd(analysis, conventions, interdictions, crossRefs
|
|
|
293
320
|
if (patterns.useServerCount > 0) {
|
|
294
321
|
patternLines.push(`- ${interpolate(m.patterns.serverActions, { count: patterns.useServerCount })}`);
|
|
295
322
|
}
|
|
296
|
-
if (patterns.usesPathAlias)
|
|
323
|
+
if (patterns.usesPathAlias)
|
|
297
324
|
patternLines.push(`- ${m.patterns.pathAliases}`);
|
|
298
|
-
|
|
299
|
-
if (patterns.hasBarrelFiles) {
|
|
325
|
+
if (patterns.hasBarrelFiles)
|
|
300
326
|
patternLines.push(`- ${m.patterns.barrelFiles}`);
|
|
301
|
-
}
|
|
302
327
|
if (patterns.largeFiles.length > 0) {
|
|
303
328
|
patternLines.push(`- ${interpolate(m.patterns.largeFiles, { count: patterns.largeFiles.length })}`);
|
|
304
329
|
}
|