leadcode 0.1.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/LICENSE +21 -0
- package/README.md +186 -0
- package/bin/leadcode.js +2 -0
- package/dist/analyzers/constants.d.ts +3 -0
- package/dist/analyzers/constants.d.ts.map +1 -0
- package/dist/analyzers/constants.js +14 -0
- package/dist/analyzers/constants.js.map +1 -0
- package/dist/analyzers/dependencies.d.ts +8 -0
- package/dist/analyzers/dependencies.d.ts.map +1 -0
- package/dist/analyzers/dependencies.js +13 -0
- package/dist/analyzers/dependencies.js.map +1 -0
- package/dist/analyzers/detection.d.ts +6 -0
- package/dist/analyzers/detection.d.ts.map +1 -0
- package/dist/analyzers/detection.js +334 -0
- package/dist/analyzers/detection.js.map +1 -0
- package/dist/analyzers/patterns.d.ts +12 -0
- package/dist/analyzers/patterns.d.ts.map +1 -0
- package/dist/analyzers/patterns.js +84 -0
- package/dist/analyzers/patterns.js.map +1 -0
- package/dist/analyzers/structure.d.ts +3 -0
- package/dist/analyzers/structure.d.ts.map +1 -0
- package/dist/analyzers/structure.js +217 -0
- package/dist/analyzers/structure.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -0
- package/dist/rules/auth.d.ts +3 -0
- package/dist/rules/auth.d.ts.map +1 -0
- package/dist/rules/auth.js +48 -0
- package/dist/rules/auth.js.map +1 -0
- package/dist/rules/cross-stack.d.ts +3 -0
- package/dist/rules/cross-stack.d.ts.map +1 -0
- package/dist/rules/cross-stack.js +320 -0
- package/dist/rules/cross-stack.js.map +1 -0
- package/dist/rules/drizzle.d.ts +3 -0
- package/dist/rules/drizzle.d.ts.map +1 -0
- package/dist/rules/drizzle.js +43 -0
- package/dist/rules/drizzle.js.map +1 -0
- package/dist/rules/index.d.ts +7 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +104 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/nextjs.d.ts +4 -0
- package/dist/rules/nextjs.d.ts.map +1 -0
- package/dist/rules/nextjs.js +86 -0
- package/dist/rules/nextjs.js.map +1 -0
- package/dist/rules/node.d.ts +3 -0
- package/dist/rules/node.d.ts.map +1 -0
- package/dist/rules/node.js +61 -0
- package/dist/rules/node.js.map +1 -0
- package/dist/rules/prisma.d.ts +3 -0
- package/dist/rules/prisma.d.ts.map +1 -0
- package/dist/rules/prisma.js +44 -0
- package/dist/rules/prisma.js.map +1 -0
- package/dist/rules/react.d.ts +3 -0
- package/dist/rules/react.d.ts.map +1 -0
- package/dist/rules/react.js +58 -0
- package/dist/rules/react.js.map +1 -0
- package/dist/rules/state.d.ts +3 -0
- package/dist/rules/state.d.ts.map +1 -0
- package/dist/rules/state.js +54 -0
- package/dist/rules/state.js.map +1 -0
- package/dist/rules/tailwind.d.ts +3 -0
- package/dist/rules/tailwind.d.ts.map +1 -0
- package/dist/rules/tailwind.js +41 -0
- package/dist/rules/tailwind.js.map +1 -0
- package/dist/rules/trpc.d.ts +3 -0
- package/dist/rules/trpc.d.ts.map +1 -0
- package/dist/rules/trpc.js +35 -0
- package/dist/rules/trpc.js.map +1 -0
- package/dist/rules/typescript.d.ts +3 -0
- package/dist/rules/typescript.d.ts.map +1 -0
- package/dist/rules/typescript.js +54 -0
- package/dist/rules/typescript.js.map +1 -0
- package/dist/rules/validation.d.ts +3 -0
- package/dist/rules/validation.d.ts.map +1 -0
- package/dist/rules/validation.js +38 -0
- package/dist/rules/validation.js.map +1 -0
- package/dist/templates/claude-md.d.ts +4 -0
- package/dist/templates/claude-md.d.ts.map +1 -0
- package/dist/templates/claude-md.js +309 -0
- package/dist/templates/claude-md.js.map +1 -0
- package/dist/tools/analyze-repo.d.ts +3 -0
- package/dist/tools/analyze-repo.d.ts.map +1 -0
- package/dist/tools/analyze-repo.js +68 -0
- package/dist/tools/analyze-repo.js.map +1 -0
- package/dist/tools/detect-gaps.d.ts +3 -0
- package/dist/tools/detect-gaps.d.ts.map +1 -0
- package/dist/tools/detect-gaps.js +34 -0
- package/dist/tools/detect-gaps.js.map +1 -0
- package/dist/tools/generate-claude-md.d.ts +3 -0
- package/dist/tools/generate-claude-md.d.ts.map +1 -0
- package/dist/tools/generate-claude-md.js +70 -0
- package/dist/tools/generate-claude-md.js.map +1 -0
- package/dist/tools/suggest.d.ts +3 -0
- package/dist/tools/suggest.d.ts.map +1 -0
- package/dist/tools/suggest.js +340 -0
- package/dist/tools/suggest.js.map +1 -0
- package/dist/tools/update-claude-md.d.ts +3 -0
- package/dist/tools/update-claude-md.d.ts.map +1 -0
- package/dist/tools/update-claude-md.js +108 -0
- package/dist/tools/update-claude-md.js.map +1 -0
- package/dist/tools/validate-claude-md.d.ts +3 -0
- package/dist/tools/validate-claude-md.d.ts.map +1 -0
- package/dist/tools/validate-claude-md.js +137 -0
- package/dist/tools/validate-claude-md.js.map +1 -0
- package/dist/types.d.ts +116 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
function describeArchitecture(analysis) {
|
|
2
|
+
const lines = [];
|
|
3
|
+
const f = analysis.framework;
|
|
4
|
+
const d = analysis.detected;
|
|
5
|
+
if (f?.name === "next") {
|
|
6
|
+
const variant = f.variant === "app-router" ? "App Router" : f.variant === "pages-router" ? "Pages Router" : "";
|
|
7
|
+
lines.push(`- **Frontend + Backend**: Next.js ${f.version} (${variant}) — full-stack React framework`);
|
|
8
|
+
}
|
|
9
|
+
else if (f?.name === "vite-react") {
|
|
10
|
+
lines.push(`- **Frontend**: React SPA with Vite ${f.version}`);
|
|
11
|
+
}
|
|
12
|
+
else if (f) {
|
|
13
|
+
lines.push(`- **Framework**: ${f.name} ${f.version}`);
|
|
14
|
+
}
|
|
15
|
+
if (d.orm)
|
|
16
|
+
lines.push(`- **Data Layer**: ${d.orm}${d.database ? ` → ${d.database}` : ""}`);
|
|
17
|
+
else if (d.database)
|
|
18
|
+
lines.push(`- **Database**: ${d.database}`);
|
|
19
|
+
if (d.auth)
|
|
20
|
+
lines.push(`- **Authentication**: ${d.auth}`);
|
|
21
|
+
if (d.apiStyle)
|
|
22
|
+
lines.push(`- **API**: ${d.apiStyle}`);
|
|
23
|
+
if (d.stateManagement)
|
|
24
|
+
lines.push(`- **Client State**: ${d.stateManagement}`);
|
|
25
|
+
if (d.i18n)
|
|
26
|
+
lines.push(`- **i18n**: ${d.i18n}`);
|
|
27
|
+
if (d.payments)
|
|
28
|
+
lines.push(`- **Payments**: ${d.payments}`);
|
|
29
|
+
if (d.realtime)
|
|
30
|
+
lines.push(`- **Realtime**: ${d.realtime}`);
|
|
31
|
+
if (d.email)
|
|
32
|
+
lines.push(`- **Email**: ${d.email}`);
|
|
33
|
+
if (d.cms)
|
|
34
|
+
lines.push(`- **Content**: ${d.cms}`);
|
|
35
|
+
if (d.jobs)
|
|
36
|
+
lines.push(`- **Background Jobs**: ${d.jobs}`);
|
|
37
|
+
if (d.fileUpload)
|
|
38
|
+
lines.push(`- **File Upload**: ${d.fileUpload}`);
|
|
39
|
+
const scale = analysis.structure.approximateFileCount;
|
|
40
|
+
if (scale > 0) {
|
|
41
|
+
const size = scale < 30 ? "Small" : scale < 100 ? "Medium" : scale < 300 ? "Large" : "Very large";
|
|
42
|
+
lines.push(`- **Project Size**: ${size} (~${scale} source files)`);
|
|
43
|
+
}
|
|
44
|
+
return lines;
|
|
45
|
+
}
|
|
46
|
+
function buildDynamicInstructions(analysis) {
|
|
47
|
+
const lines = [];
|
|
48
|
+
const f = analysis.framework;
|
|
49
|
+
const d = analysis.detected;
|
|
50
|
+
lines.push("- Follow ALL rules in this document without exception.");
|
|
51
|
+
lines.push("- When creating new files, respect the existing project structure and naming conventions.");
|
|
52
|
+
lines.push("- When unsure about a pattern, check existing code for precedent before inventing new patterns.");
|
|
53
|
+
lines.push("- Never introduce new dependencies without being explicitly asked.");
|
|
54
|
+
lines.push("- Prefer small, focused changes over large refactors.");
|
|
55
|
+
if (f?.name === "next" && f.variant === "app-router") {
|
|
56
|
+
lines.push("- Default to Server Components. Only add 'use client' when the component needs interactivity.");
|
|
57
|
+
lines.push("- Place new pages in app/ following the existing route structure.");
|
|
58
|
+
lines.push("- Use Server Actions for mutations, Route Handlers for API endpoints.");
|
|
59
|
+
}
|
|
60
|
+
if (d.orm === "prisma") {
|
|
61
|
+
lines.push("- After changing schema.prisma, always run `npx prisma migrate dev` and `npx prisma generate`.");
|
|
62
|
+
}
|
|
63
|
+
else if (d.orm === "drizzle") {
|
|
64
|
+
lines.push("- After changing Drizzle schemas, run `npx drizzle-kit generate` to create migrations.");
|
|
65
|
+
}
|
|
66
|
+
if (d.validation === "zod") {
|
|
67
|
+
lines.push("- Validate all inputs at API boundaries with Zod. Parse, don't validate.");
|
|
68
|
+
}
|
|
69
|
+
if (d.css === "tailwind") {
|
|
70
|
+
lines.push("- Use Tailwind utility classes for styling. Use cn() for conditional classes.");
|
|
71
|
+
}
|
|
72
|
+
if (d.uiComponents === "shadcn") {
|
|
73
|
+
lines.push("- Use shadcn/ui components from components/ui/ as building blocks.");
|
|
74
|
+
}
|
|
75
|
+
if (d.testing) {
|
|
76
|
+
lines.push(`- Run tests with the project's ${d.testing} setup before marking work as done.`);
|
|
77
|
+
}
|
|
78
|
+
if (d.linter) {
|
|
79
|
+
lines.push(`- Run ${d.linter} before committing. Fix all warnings.`);
|
|
80
|
+
}
|
|
81
|
+
if (d.i18n) {
|
|
82
|
+
lines.push("- All user-facing strings must go through the i18n system. Never hardcode text.");
|
|
83
|
+
}
|
|
84
|
+
return lines;
|
|
85
|
+
}
|
|
86
|
+
export function generateClaudeMd(analysis, conventions, interdictions, crossRefs, choices, patterns) {
|
|
87
|
+
const lines = [];
|
|
88
|
+
// Header
|
|
89
|
+
lines.push(`# ${analysis.projectName} — Project Rules`);
|
|
90
|
+
lines.push("");
|
|
91
|
+
lines.push("> Auto-generated by [LeadCode](https://github.com/Julxoo/LeadCode). This file is the source of truth for Claude Code.");
|
|
92
|
+
lines.push("> Modify as needed, then commit to version control.");
|
|
93
|
+
lines.push("");
|
|
94
|
+
// Architecture overview
|
|
95
|
+
const archLines = describeArchitecture(analysis);
|
|
96
|
+
if (archLines.length > 0) {
|
|
97
|
+
lines.push("## Architecture Overview");
|
|
98
|
+
lines.push("");
|
|
99
|
+
lines.push(...archLines);
|
|
100
|
+
lines.push("");
|
|
101
|
+
}
|
|
102
|
+
// Stack details
|
|
103
|
+
lines.push("## Stack");
|
|
104
|
+
lines.push("");
|
|
105
|
+
if (analysis.framework) {
|
|
106
|
+
const variant = analysis.framework.variant
|
|
107
|
+
? ` (${analysis.framework.variant})`
|
|
108
|
+
: "";
|
|
109
|
+
lines.push(`- **Framework**: ${analysis.framework.name} ${analysis.framework.version}${variant}`);
|
|
110
|
+
}
|
|
111
|
+
const d = analysis.detected;
|
|
112
|
+
if (d.orm)
|
|
113
|
+
lines.push(`- **ORM**: ${d.orm}`);
|
|
114
|
+
if (d.database)
|
|
115
|
+
lines.push(`- **Database**: ${d.database}`);
|
|
116
|
+
if (d.auth)
|
|
117
|
+
lines.push(`- **Auth**: ${d.auth}`);
|
|
118
|
+
if (d.validation)
|
|
119
|
+
lines.push(`- **Validation**: ${d.validation}`);
|
|
120
|
+
if (d.css)
|
|
121
|
+
lines.push(`- **CSS**: ${d.css}`);
|
|
122
|
+
if (d.uiComponents)
|
|
123
|
+
lines.push(`- **UI Components**: ${d.uiComponents}`);
|
|
124
|
+
if (d.testing)
|
|
125
|
+
lines.push(`- **Testing**: ${d.testing}`);
|
|
126
|
+
if (d.stateManagement)
|
|
127
|
+
lines.push(`- **State Management**: ${d.stateManagement}`);
|
|
128
|
+
if (d.apiStyle)
|
|
129
|
+
lines.push(`- **API Style**: ${d.apiStyle}`);
|
|
130
|
+
if (d.i18n)
|
|
131
|
+
lines.push(`- **i18n**: ${d.i18n}`);
|
|
132
|
+
if (d.payments)
|
|
133
|
+
lines.push(`- **Payments**: ${d.payments}`);
|
|
134
|
+
if (d.email)
|
|
135
|
+
lines.push(`- **Email**: ${d.email}`);
|
|
136
|
+
if (d.realtime)
|
|
137
|
+
lines.push(`- **Realtime**: ${d.realtime}`);
|
|
138
|
+
if (d.cms)
|
|
139
|
+
lines.push(`- **CMS/Content**: ${d.cms}`);
|
|
140
|
+
if (d.fileUpload)
|
|
141
|
+
lines.push(`- **File Upload**: ${d.fileUpload}`);
|
|
142
|
+
if (d.jobs)
|
|
143
|
+
lines.push(`- **Jobs/Queue**: ${d.jobs}`);
|
|
144
|
+
if (d.monorepo)
|
|
145
|
+
lines.push(`- **Monorepo**: ${d.monorepo}`);
|
|
146
|
+
if (d.deployment)
|
|
147
|
+
lines.push(`- **Deployment**: ${d.deployment}`);
|
|
148
|
+
if (d.linter)
|
|
149
|
+
lines.push(`- **Linter**: ${d.linter}`);
|
|
150
|
+
if (d.formatter)
|
|
151
|
+
lines.push(`- **Formatter**: ${d.formatter}`);
|
|
152
|
+
if (d.runtime && d.runtime !== "node")
|
|
153
|
+
lines.push(`- **Runtime**: ${d.runtime}`);
|
|
154
|
+
lines.push("");
|
|
155
|
+
// Project structure
|
|
156
|
+
lines.push("## Project Structure");
|
|
157
|
+
lines.push("");
|
|
158
|
+
const s = analysis.structure;
|
|
159
|
+
if (s.hasSrcDir)
|
|
160
|
+
lines.push("- Source code in `src/`");
|
|
161
|
+
if (s.hasAppDir)
|
|
162
|
+
lines.push("- App Router: `app/`");
|
|
163
|
+
if (s.hasPagesDir)
|
|
164
|
+
lines.push("- Pages Router: `pages/`");
|
|
165
|
+
if (s.hasApiRoutes)
|
|
166
|
+
lines.push("- API routes present");
|
|
167
|
+
if (s.hasMiddleware)
|
|
168
|
+
lines.push("- Middleware configured");
|
|
169
|
+
if (s.hasComponentsDir)
|
|
170
|
+
lines.push("- Components: `components/`");
|
|
171
|
+
if (s.hasLibDir)
|
|
172
|
+
lines.push("- Shared utilities: `lib/`");
|
|
173
|
+
if (s.hasServicesDir)
|
|
174
|
+
lines.push("- Services: `services/`");
|
|
175
|
+
if (s.hasHooksDir)
|
|
176
|
+
lines.push("- Custom hooks: `hooks/`");
|
|
177
|
+
if (s.hasStoreDir)
|
|
178
|
+
lines.push("- State stores: `store/`");
|
|
179
|
+
if (s.hasSchemasDir)
|
|
180
|
+
lines.push("- Validation schemas: `schemas/`");
|
|
181
|
+
if (s.hasTypesDir)
|
|
182
|
+
lines.push("- Type definitions: `types/`");
|
|
183
|
+
if (s.hasConfigDir)
|
|
184
|
+
lines.push("- Configuration: `config/`");
|
|
185
|
+
if (s.hasProvidersDir)
|
|
186
|
+
lines.push("- React providers: `providers/`");
|
|
187
|
+
if (s.hasPrismaSchema)
|
|
188
|
+
lines.push("- Prisma schema: `prisma/schema.prisma`");
|
|
189
|
+
lines.push("");
|
|
190
|
+
// Scripts
|
|
191
|
+
const scripts = Object.entries(analysis.scripts);
|
|
192
|
+
if (scripts.length > 0) {
|
|
193
|
+
lines.push("## Available Scripts");
|
|
194
|
+
lines.push("");
|
|
195
|
+
for (const [name, cmd] of scripts) {
|
|
196
|
+
lines.push(`- \`npm run ${name}\` → \`${cmd}\``);
|
|
197
|
+
}
|
|
198
|
+
lines.push("");
|
|
199
|
+
}
|
|
200
|
+
// File naming conventions
|
|
201
|
+
lines.push("## File & Naming Conventions");
|
|
202
|
+
lines.push("");
|
|
203
|
+
lines.push("- **Files**: kebab-case (e.g., `user-profile.ts`, `auth-utils.ts`)");
|
|
204
|
+
lines.push("- **React components**: PascalCase filename matching component name (e.g., `UserProfile.tsx` exports `UserProfile`)");
|
|
205
|
+
lines.push("- **Hooks**: camelCase prefixed with `use` (e.g., `useAuth.ts`)");
|
|
206
|
+
lines.push("- **Constants/config**: SCREAMING_SNAKE_CASE for values, kebab-case for files");
|
|
207
|
+
if (s.hasSrcDir) {
|
|
208
|
+
lines.push("- **New files**: Place in `src/` following the existing directory structure");
|
|
209
|
+
}
|
|
210
|
+
lines.push("");
|
|
211
|
+
// Import ordering
|
|
212
|
+
lines.push("## Import Ordering");
|
|
213
|
+
lines.push("");
|
|
214
|
+
lines.push("```");
|
|
215
|
+
lines.push("1. Node.js builtins (node:fs, node:path)");
|
|
216
|
+
lines.push("2. External packages (react, next, etc.)");
|
|
217
|
+
lines.push("3. Internal aliases (@/ or ~/)");
|
|
218
|
+
lines.push("4. Relative imports (../ and ./)");
|
|
219
|
+
lines.push("5. Type imports (import type { ... })");
|
|
220
|
+
lines.push("```");
|
|
221
|
+
lines.push("");
|
|
222
|
+
// Conventions
|
|
223
|
+
if (conventions.length > 0) {
|
|
224
|
+
lines.push("## Conventions (MUST follow)");
|
|
225
|
+
lines.push("");
|
|
226
|
+
for (const conv of conventions) {
|
|
227
|
+
lines.push(`### ${conv.description}`);
|
|
228
|
+
lines.push(`<!-- id:${conv.id} -->`);
|
|
229
|
+
lines.push(conv.rule);
|
|
230
|
+
lines.push("");
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// Cross-stack rules
|
|
234
|
+
if (crossRefs.length > 0) {
|
|
235
|
+
lines.push("## Cross-Stack Rules (CRITICAL)");
|
|
236
|
+
lines.push("");
|
|
237
|
+
for (const cr of crossRefs) {
|
|
238
|
+
lines.push(`### ${cr.techs.join(" + ")}`);
|
|
239
|
+
lines.push("");
|
|
240
|
+
for (const conv of cr.conventions) {
|
|
241
|
+
lines.push(`- **${conv.description}**: ${conv.rule}`);
|
|
242
|
+
}
|
|
243
|
+
if (cr.interdictions.length > 0) {
|
|
244
|
+
lines.push("");
|
|
245
|
+
for (const inter of cr.interdictions) {
|
|
246
|
+
lines.push(`- ${inter}`);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
lines.push("");
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// Interdictions
|
|
253
|
+
if (interdictions.length > 0) {
|
|
254
|
+
lines.push("## Interdictions (NEVER do)");
|
|
255
|
+
lines.push("");
|
|
256
|
+
for (const inter of interdictions) {
|
|
257
|
+
lines.push(`- ${inter}`);
|
|
258
|
+
}
|
|
259
|
+
lines.push("");
|
|
260
|
+
}
|
|
261
|
+
// User choices
|
|
262
|
+
const choiceEntries = Object.entries(choices);
|
|
263
|
+
if (choiceEntries.length > 0) {
|
|
264
|
+
lines.push("## Project Decisions");
|
|
265
|
+
lines.push("");
|
|
266
|
+
for (const [topic, choice] of choiceEntries) {
|
|
267
|
+
lines.push(`- **${topic}**: ${choice}`);
|
|
268
|
+
}
|
|
269
|
+
lines.push("");
|
|
270
|
+
}
|
|
271
|
+
// Existing code patterns
|
|
272
|
+
if (patterns) {
|
|
273
|
+
const patternLines = [];
|
|
274
|
+
if (patterns.totalComponents > 0) {
|
|
275
|
+
patternLines.push(`- **Client/Server ratio**: ${patterns.useClientCount} client components out of ${patterns.totalComponents} total (${Math.round(patterns.clientRatio * 100)}% client)`);
|
|
276
|
+
}
|
|
277
|
+
if (patterns.useServerCount > 0) {
|
|
278
|
+
patternLines.push(`- **Server Actions**: ${patterns.useServerCount} files with 'use server'`);
|
|
279
|
+
}
|
|
280
|
+
if (patterns.usesPathAlias) {
|
|
281
|
+
patternLines.push("- **Path aliases**: Project uses @/ or ~/ imports — keep using them");
|
|
282
|
+
}
|
|
283
|
+
if (patterns.hasBarrelFiles) {
|
|
284
|
+
patternLines.push("- **Barrel files**: Project uses index.ts re-exports — follow this pattern");
|
|
285
|
+
}
|
|
286
|
+
if (patterns.largeFiles.length > 0) {
|
|
287
|
+
patternLines.push(`- **Large files** (>300 lines): ${patterns.largeFiles.length} file(s) — consider splitting`);
|
|
288
|
+
}
|
|
289
|
+
if (patterns.consoleLogCount > 0) {
|
|
290
|
+
patternLines.push(`- **Console.log**: ${patterns.consoleLogCount} occurrences found — clean up before production`);
|
|
291
|
+
}
|
|
292
|
+
if (patternLines.length > 0) {
|
|
293
|
+
lines.push("## Existing Code Patterns");
|
|
294
|
+
lines.push("");
|
|
295
|
+
lines.push(...patternLines);
|
|
296
|
+
lines.push("");
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// Dynamic Claude Code instructions
|
|
300
|
+
lines.push("## Claude Code Instructions");
|
|
301
|
+
lines.push("");
|
|
302
|
+
const instructions = buildDynamicInstructions(analysis);
|
|
303
|
+
for (const instr of instructions) {
|
|
304
|
+
lines.push(instr);
|
|
305
|
+
}
|
|
306
|
+
lines.push("");
|
|
307
|
+
return lines.join("\n");
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=claude-md.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-md.js","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"AAGA,SAAS,oBAAoB,CAAC,QAAsB;IAClD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC;IAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAE5B,IAAI,CAAC,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/G,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,OAAO,KAAK,OAAO,gCAAgC,CAAC,CAAC;IACzG,CAAC;SAAM,IAAI,CAAC,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACjE,CAAC;SAAM,IAAI,CAAC,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC,CAAC,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SACtF,IAAI,CAAC,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEjE,IAAI,CAAC,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,CAAC,eAAe;QAAE,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;IAC9E,IAAI,CAAC,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,IAAI,CAAC,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACnD,IAAI,CAAC,CAAC,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IAEnE,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,oBAAoB,CAAC;IACtD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,MAAM,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;QAClG,KAAK,CAAC,IAAI,CAAC,uBAAuB,IAAI,MAAM,KAAK,gBAAgB,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,wBAAwB,CAAC,QAAsB;IACtD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC;IAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAE5B,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;IACrE,KAAK,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC;IACxG,KAAK,CAAC,IAAI,CAAC,iGAAiG,CAAC,CAAC;IAC9G,KAAK,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;IACjF,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IAEpE,IAAI,CAAC,EAAE,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,+FAA+F,CAAC,CAAC;QAC5G,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,gGAAgG,CAAC,CAAC;IAC/G,CAAC;SAAM,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,wFAAwF,CAAC,CAAC;IACvG,CAAC;IAED,IAAI,CAAC,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,CAAC,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,CAAC,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;IACnF,CAAC;IAED,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,OAAO,qCAAqC,CAAC,CAAC;IAC/F,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,uCAAuC,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACX,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;IAChG,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAAsB,EACtB,WAAyB,EACzB,aAAuB,EACvB,SAAqB,EACrB,OAA+B,EAC/B,QAAuB;IAEvB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,SAAS;IACT,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,WAAW,kBAAkB,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,uHAAuH,CAAC,CAAC;IACpI,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IAClE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,wBAAwB;IACxB,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,gBAAgB;IAChB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO;YACxC,CAAC,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,OAAO,GAAG;YACpC,CAAC,CAAC,EAAE,CAAC;QACP,KAAK,CAAC,IAAI,CACR,oBAAoB,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,GAAG,OAAO,EAAE,CACtF,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAC5B,IAAI,CAAC,CAAC,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,IAAI,CAAC,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IAClE,IAAI,CAAC,CAAC,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,CAAC,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;IACzE,IAAI,CAAC,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC,CAAC,eAAe;QAAE,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;IAClF,IAAI,CAAC,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,IAAI,CAAC,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACnD,IAAI,CAAC,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,CAAC,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACrD,IAAI,CAAC,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IACnE,IAAI,CAAC,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IAClE,IAAI,CAAC,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACjF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,oBAAoB;IACpB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC;IAC7B,IAAI,CAAC,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACvD,IAAI,CAAC,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACpD,IAAI,CAAC,CAAC,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACvD,IAAI,CAAC,CAAC,aAAa;QAAE,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAC3D,IAAI,CAAC,CAAC,gBAAgB;QAAE,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAClE,IAAI,CAAC,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC,cAAc;QAAE,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAC5D,IAAI,CAAC,CAAC,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC,aAAa;QAAE,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IACpE,IAAI,CAAC,CAAC,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC9D,IAAI,CAAC,CAAC,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC7D,IAAI,CAAC,CAAC,eAAe;QAAE,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACrE,IAAI,CAAC,CAAC,eAAe;QAAE,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAC7E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,UAAU;IACV,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,UAAU,GAAG,IAAI,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,0BAA0B;IAC1B,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;IACjF,KAAK,CAAC,IAAI,CAAC,qHAAqH,CAAC,CAAC;IAClI,KAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;IAC9E,KAAK,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;IAC5F,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;IAC5F,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,kBAAkB;IAClB,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,cAAc;IACd,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAClC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,EAAE,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC;oBACrC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;QAC3B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,eAAe;IACf,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,MAAM,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,yBAAyB;IACzB,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,IAAI,QAAQ,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;YACjC,YAAY,CAAC,IAAI,CAAC,8BAA8B,QAAQ,CAAC,cAAc,6BAA6B,QAAQ,CAAC,eAAe,WAAW,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5L,CAAC;QACD,IAAI,QAAQ,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;YAChC,YAAY,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,cAAc,0BAA0B,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC3B,YAAY,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC5B,YAAY,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;QAClG,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,YAAY,CAAC,IAAI,CAAC,mCAAmC,QAAQ,CAAC,UAAU,CAAC,MAAM,+BAA+B,CAAC,CAAC;QAClH,CAAC;QACD,IAAI,QAAQ,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;YACjC,YAAY,CAAC,IAAI,CAAC,sBAAsB,QAAQ,CAAC,eAAe,iDAAiD,CAAC,CAAC;QACrH,CAAC;QACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,MAAM,YAAY,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACxD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-repo.d.ts","sourceRoot":"","sources":["../../src/tools/analyze-repo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsE3D"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { stat } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import * as z from "zod";
|
|
4
|
+
import { analyzeDependencies } from "../analyzers/dependencies.js";
|
|
5
|
+
import { analyzeStructure } from "../analyzers/structure.js";
|
|
6
|
+
import { detectFramework, detectStack } from "../analyzers/detection.js";
|
|
7
|
+
export function registerAnalyzeRepo(server) {
|
|
8
|
+
server.registerTool("analyze-repo", {
|
|
9
|
+
title: "Analyze Repository",
|
|
10
|
+
description: "Scans a project directory and returns structured technical facts: framework, dependencies, directory structure, detected stack (ORM, auth, validation, CSS, testing, etc.). No opinions, only facts.",
|
|
11
|
+
inputSchema: {
|
|
12
|
+
projectPath: z
|
|
13
|
+
.string()
|
|
14
|
+
.describe("Absolute path to the project root directory"),
|
|
15
|
+
},
|
|
16
|
+
}, async ({ projectPath }) => {
|
|
17
|
+
try {
|
|
18
|
+
// Verify path exists
|
|
19
|
+
try {
|
|
20
|
+
await stat(projectPath);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return {
|
|
24
|
+
isError: true,
|
|
25
|
+
content: [{ type: "text", text: `Directory not found: ${projectPath}` }],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
// Verify package.json exists
|
|
29
|
+
try {
|
|
30
|
+
await stat(join(projectPath, "package.json"));
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return {
|
|
34
|
+
isError: true,
|
|
35
|
+
content: [{ type: "text", text: `No package.json found in ${projectPath}. LeadCode requires a Node.js project.` }],
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const pkg = await analyzeDependencies(projectPath);
|
|
39
|
+
const structure = await analyzeStructure(projectPath);
|
|
40
|
+
const framework = detectFramework(pkg.dependencies, pkg.devDependencies, structure);
|
|
41
|
+
const detected = detectStack(pkg.dependencies, pkg.devDependencies);
|
|
42
|
+
detected.runtime = structure.detectedRuntime;
|
|
43
|
+
const analysis = {
|
|
44
|
+
projectPath,
|
|
45
|
+
projectName: pkg.name,
|
|
46
|
+
framework,
|
|
47
|
+
dependencies: pkg.dependencies,
|
|
48
|
+
devDependencies: pkg.devDependencies,
|
|
49
|
+
scripts: pkg.scripts,
|
|
50
|
+
structure,
|
|
51
|
+
detected,
|
|
52
|
+
};
|
|
53
|
+
return {
|
|
54
|
+
content: [
|
|
55
|
+
{ type: "text", text: JSON.stringify(analysis, null, 2) },
|
|
56
|
+
],
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
61
|
+
return {
|
|
62
|
+
isError: true,
|
|
63
|
+
content: [{ type: "text", text: `analyze-repo failed: ${message}` }],
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=analyze-repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-repo.js","sourceRoot":"","sources":["../../src/tools/analyze-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGzE,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,sMAAsM;QACxM,WAAW,EAAE;YACX,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,QAAQ,CAAC,6CAA6C,CAAC;SAC3D;KACF,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,qBAAqB;YACrB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,wBAAwB,WAAW,EAAE,EAAE,CAAC;iBAClF,CAAC;YACJ,CAAC;YAED,6BAA6B;YAC7B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;YAChD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,4BAA4B,WAAW,wCAAwC,EAAE,CAAC;iBAC5H,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;YACtD,MAAM,SAAS,GAAG,eAAe,CAC/B,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,eAAe,EACnB,SAAS,CACV,CAAC;YACF,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;YACpE,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,eAAe,CAAC;YAE7C,MAAM,QAAQ,GAAiB;gBAC7B,WAAW;gBACX,WAAW,EAAE,GAAG,CAAC,IAAI;gBACrB,SAAS;gBACT,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,eAAe,EAAE,GAAG,CAAC,eAAe;gBACpC,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,SAAS;gBACT,QAAQ;aACT,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;iBACnE;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,wBAAwB,OAAO,EAAE,EAAE,CAAC;aAC9E,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-gaps.d.ts","sourceRoot":"","sources":["../../src/tools/detect-gaps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmC1D"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
import { detectGaps } from "../rules/index.js";
|
|
3
|
+
export function registerDetectGaps(server) {
|
|
4
|
+
server.registerTool("detect-gaps", {
|
|
5
|
+
title: "Detect Gaps",
|
|
6
|
+
description: "Analyzes a repo analysis result and identifies structural gaps: missing error handling, no validation, no test framework, missing patterns, etc. Returns gaps with severity levels.",
|
|
7
|
+
inputSchema: {
|
|
8
|
+
analysis: z
|
|
9
|
+
.string()
|
|
10
|
+
.describe("JSON string of the RepoAnalysis object (output of analyze-repo)"),
|
|
11
|
+
},
|
|
12
|
+
}, async ({ analysis: analysisStr }) => {
|
|
13
|
+
try {
|
|
14
|
+
const analysis = JSON.parse(analysisStr);
|
|
15
|
+
const gaps = detectGaps(analysis);
|
|
16
|
+
return {
|
|
17
|
+
content: [
|
|
18
|
+
{
|
|
19
|
+
type: "text",
|
|
20
|
+
text: JSON.stringify({ gaps, total: gaps.length }, null, 2),
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
27
|
+
return {
|
|
28
|
+
isError: true,
|
|
29
|
+
content: [{ type: "text", text: `detect-gaps failed: ${message}` }],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=detect-gaps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-gaps.js","sourceRoot":"","sources":["../../src/tools/detect-gaps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,qLAAqL;QACvL,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,CAAC,iEAAiE,CAAC;SAC/E;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAiB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;YAElC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC5D;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,uBAAuB,OAAO,EAAE,EAAE,CAAC;aAC7E,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-claude-md.d.ts","sourceRoot":"","sources":["../../src/tools/generate-claude-md.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmFhE"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { writeFile, stat } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import * as z from "zod";
|
|
4
|
+
import { getConventions, getInterdictions, getActiveCrossRefs, } from "../rules/index.js";
|
|
5
|
+
import { generateClaudeMd } from "../templates/claude-md.js";
|
|
6
|
+
import { analyzePatterns } from "../analyzers/patterns.js";
|
|
7
|
+
export function registerGenerateClaudeMd(server) {
|
|
8
|
+
server.registerTool("generate-claude-md", {
|
|
9
|
+
title: "Generate CLAUDE.md",
|
|
10
|
+
description: "Generates a structured CLAUDE.md file from the repo analysis and user choices. Writes it directly to the project root. This file becomes the source of truth for Claude Code.",
|
|
11
|
+
inputSchema: {
|
|
12
|
+
analysis: z
|
|
13
|
+
.string()
|
|
14
|
+
.describe("JSON string of RepoAnalysis"),
|
|
15
|
+
choices: z
|
|
16
|
+
.string()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe("JSON string of user choices: Record<string, string> mapping topic to chosen option. Optional."),
|
|
19
|
+
},
|
|
20
|
+
}, async ({ analysis: analysisStr, choices: choicesStr }) => {
|
|
21
|
+
try {
|
|
22
|
+
const analysis = JSON.parse(analysisStr);
|
|
23
|
+
const choices = choicesStr
|
|
24
|
+
? JSON.parse(choicesStr)
|
|
25
|
+
: {};
|
|
26
|
+
// Verify project path still exists
|
|
27
|
+
try {
|
|
28
|
+
await stat(analysis.projectPath);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return {
|
|
32
|
+
isError: true,
|
|
33
|
+
content: [{ type: "text", text: `Project directory not found: ${analysis.projectPath}` }],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const conventions = getConventions(analysis);
|
|
37
|
+
const interdictions = getInterdictions(analysis);
|
|
38
|
+
const crossRefs = getActiveCrossRefs(analysis);
|
|
39
|
+
const patterns = await analyzePatterns(analysis.projectPath);
|
|
40
|
+
const content = generateClaudeMd(analysis, conventions, interdictions, crossRefs, choices, patterns);
|
|
41
|
+
const outputPath = join(analysis.projectPath, "CLAUDE.md");
|
|
42
|
+
await writeFile(outputPath, content, "utf-8");
|
|
43
|
+
return {
|
|
44
|
+
content: [
|
|
45
|
+
{
|
|
46
|
+
type: "text",
|
|
47
|
+
text: JSON.stringify({
|
|
48
|
+
path: outputPath,
|
|
49
|
+
message: "CLAUDE.md generated successfully",
|
|
50
|
+
sections: {
|
|
51
|
+
conventions: conventions.length,
|
|
52
|
+
interdictions: interdictions.length,
|
|
53
|
+
crossStackRules: crossRefs.length,
|
|
54
|
+
choices: Object.keys(choices).length,
|
|
55
|
+
},
|
|
56
|
+
}, null, 2),
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
63
|
+
return {
|
|
64
|
+
isError: true,
|
|
65
|
+
content: [{ type: "text", text: `generate-claude-md failed: ${message}` }],
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=generate-claude-md.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-claude-md.js","sourceRoot":"","sources":["../../src/tools/generate-claude-md.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../src/tools/suggest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAoWzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuCvD"}
|