leadcode 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -47
- package/dist/context7/fetch-all.d.ts +13 -0
- package/dist/context7/fetch-all.d.ts.map +1 -0
- package/dist/context7/fetch-all.js +104 -0
- package/dist/context7/fetch-all.js.map +1 -0
- package/dist/context7/index.d.ts +2 -0
- package/dist/context7/index.d.ts.map +1 -1
- package/dist/context7/index.js +1 -0
- package/dist/context7/index.js.map +1 -1
- package/dist/data/tech-queries.d.ts +11 -0
- package/dist/data/tech-queries.d.ts.map +1 -0
- package/dist/data/tech-queries.js +229 -0
- package/dist/data/tech-queries.js.map +1 -0
- package/dist/index.js +155 -22
- package/dist/index.js.map +1 -1
- package/dist/resources/tech-queries.d.ts +3 -0
- package/dist/resources/tech-queries.d.ts.map +1 -0
- package/dist/resources/tech-queries.js +16 -0
- package/dist/resources/tech-queries.js.map +1 -0
- package/dist/templates/claude-md.d.ts +1 -1
- package/dist/templates/claude-md.d.ts.map +1 -1
- package/dist/tools/analyze-repo.js +1 -1
- package/dist/tools/analyze-repo.js.map +1 -1
- package/dist/tools/fetch-docs.d.ts +0 -10
- package/dist/tools/fetch-docs.d.ts.map +1 -1
- package/dist/tools/fetch-docs.js +2 -104
- package/dist/tools/fetch-docs.js.map +1 -1
- package/dist/tools/generate-claude-md.d.ts.map +1 -1
- package/dist/tools/generate-claude-md.js +14 -3
- 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 +3 -57
- package/dist/tools/update-claude-md.js.map +1 -1
- package/dist/tools/validate-claude-md.js +1 -1
- package/dist/tools/validate-claude-md.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# LeadCode
|
|
2
2
|
|
|
3
|
-
**Your virtual Lead Tech for Claude Code.** An MCP server that analyzes your codebase,
|
|
3
|
+
**Your virtual Lead Tech for Claude Code.** An MCP server that analyzes your codebase, fetches up-to-date documentation for each detected technology via [Context7](https://context7.com), and generates a tailored `CLAUDE.md` — so Claude Code understands your project like a senior engineer would.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/leadcode)
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
@@ -17,34 +17,42 @@ Claude Code is powerful, but its output quality depends on context. Without clea
|
|
|
17
17
|
- Forget auth checks on new routes
|
|
18
18
|
- Use inline styles when your project uses Tailwind
|
|
19
19
|
|
|
20
|
-
**LeadCode fixes this.** It scans your project, detects what you're using,
|
|
20
|
+
**LeadCode fixes this.** It scans your project, detects what you're using, fetches the latest documentation for each technology, cross-references them, and generates a `CLAUDE.md` file that tells Claude Code exactly how to behave in your codebase.
|
|
21
21
|
|
|
22
22
|
## How It Works
|
|
23
23
|
|
|
24
24
|
```
|
|
25
|
-
Your Project ──→ LeadCode
|
|
25
|
+
Your Project ──→ LeadCode (detect stack) ──→ Context7 (fetch docs) ──→ CLAUDE.md
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
1. **Analyze** — Scans `package.json`, directory structure, and source code patterns
|
|
29
|
-
2. **Detect** — Identifies your stack across
|
|
30
|
-
3. **
|
|
31
|
-
4. **
|
|
32
|
-
5. **Generate** — Writes a structured `CLAUDE.md` with conventions, interdictions, and cross-stack rules
|
|
29
|
+
2. **Detect** — Identifies your stack across 25+ categories (framework, ORM, auth, CSS, testing, i18n, etc.)
|
|
30
|
+
3. **Fetch Docs** — Queries Context7 API for up-to-date documentation of each detected technology, including cross-technology best practices (e.g., "how to use Prisma with Next.js App Router")
|
|
31
|
+
4. **Generate** — Writes a structured `CLAUDE.md` with real, version-specific conventions from official docs
|
|
33
32
|
|
|
34
33
|
## Installation
|
|
35
34
|
|
|
36
|
-
LeadCode
|
|
35
|
+
LeadCode requires **two MCP servers**: LeadCode itself and Context7 (for documentation fetching).
|
|
37
36
|
|
|
38
|
-
**
|
|
37
|
+
**Two commands:**
|
|
39
38
|
|
|
40
39
|
```bash
|
|
41
40
|
claude mcp add --scope project leadcode -- npx -y leadcode@latest
|
|
41
|
+
claude mcp add --scope project context7 -- npx -y @upstash/context7-mcp@latest
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
Restart Claude Code and you're ready.
|
|
45
45
|
|
|
46
46
|
> Use `--scope user` instead of `--scope project` to install globally across all your projects.
|
|
47
47
|
|
|
48
|
+
**Optional:** Set a Context7 API key for higher rate limits (free tier works without it):
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
export CONTEXT7_API_KEY=your_key_here
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Get a key at [context7.com/dashboard](https://context7.com/dashboard).
|
|
55
|
+
|
|
48
56
|
## Usage
|
|
49
57
|
|
|
50
58
|
### Quick Start (Recommended)
|
|
@@ -55,7 +63,7 @@ Use the built-in prompt in Claude Code:
|
|
|
55
63
|
Use the setup-project prompt with /path/to/your/project
|
|
56
64
|
```
|
|
57
65
|
|
|
58
|
-
This walks through the full workflow: analyze →
|
|
66
|
+
This walks through the full workflow: analyze → fetch docs → generate `CLAUDE.md`.
|
|
59
67
|
|
|
60
68
|
### Manual Tool Usage
|
|
61
69
|
|
|
@@ -68,50 +76,47 @@ Scans a project and returns structured facts — framework, dependencies, direct
|
|
|
68
76
|
Call analyze-repo with projectPath: /path/to/project
|
|
69
77
|
```
|
|
70
78
|
|
|
71
|
-
#### `
|
|
72
|
-
Takes the analysis output and
|
|
73
|
-
|
|
74
|
-
#### `suggest-conventions`
|
|
75
|
-
Proposes options for each gap. Each suggestion includes:
|
|
76
|
-
- **Simple** — Minimal setup, quick wins
|
|
77
|
-
- **Clean** — Best practices, good DX
|
|
78
|
-
- **Scalable** — Full setup for large projects
|
|
79
|
+
#### `fetch-docs`
|
|
80
|
+
Takes the analysis output and fetches up-to-date documentation from Context7 for each detected technology. Also fetches cross-technology docs (e.g., Next.js + Prisma best practices).
|
|
79
81
|
|
|
80
82
|
#### `generate-claude-md`
|
|
81
|
-
Generates and writes `CLAUDE.md` to the project root based on the analysis and
|
|
83
|
+
Generates and writes `CLAUDE.md` to the project root based on the analysis and fetched documentation.
|
|
82
84
|
|
|
83
85
|
#### `validate-claude-md`
|
|
84
86
|
Checks if an existing `CLAUDE.md` is still in sync with the project. Detects drifts after adding dependencies or changing structure.
|
|
85
87
|
|
|
86
88
|
#### `update-claude-md`
|
|
87
|
-
Re-analyzes and regenerates `CLAUDE.md` while preserving your choices from the "Project Decisions" section.
|
|
89
|
+
Re-analyzes the project, re-fetches documentation, and regenerates `CLAUDE.md` while preserving your choices from the "Project Decisions" section.
|
|
88
90
|
|
|
89
91
|
## What Gets Detected
|
|
90
92
|
|
|
91
93
|
### Frameworks
|
|
92
|
-
Next.js (App/Pages Router), Nuxt, Remix, Astro, SvelteKit, SolidStart, Vite+React, Express, Fastify, Hono
|
|
94
|
+
Next.js (App/Pages Router), Nuxt, Remix, Astro, SvelteKit, SolidStart, Vite+React, React, Express, Fastify, Hono
|
|
93
95
|
|
|
94
|
-
### Stack (
|
|
96
|
+
### Stack (25+ categories)
|
|
95
97
|
|
|
96
98
|
| Category | Examples |
|
|
97
99
|
|----------|----------|
|
|
98
|
-
| ORM | Prisma, Drizzle, TypeORM, Mongoose, Kysely |
|
|
99
|
-
| Auth | NextAuth, Clerk, Lucia, Supabase Auth, Auth0, Kinde |
|
|
100
|
-
| Validation | Zod, Yup, Joi, Valibot |
|
|
101
|
-
| CSS | Tailwind, styled-components, Emotion,
|
|
102
|
-
| UI Components | shadcn (auto-detected), Radix,
|
|
100
|
+
| ORM | Prisma, Drizzle, TypeORM, MikroORM, Mongoose, Kysely, Sequelize |
|
|
101
|
+
| Auth | NextAuth, Clerk, Lucia, Supabase Auth, Auth0, Kinde, Better Auth |
|
|
102
|
+
| Validation | Zod, Yup, Joi, Valibot, ArkType |
|
|
103
|
+
| CSS | Tailwind, Chakra, MUI, styled-components, Emotion, Panda, Mantine, Ant Design |
|
|
104
|
+
| UI Components | shadcn (auto-detected), Radix, Headless UI, NextUI, Tremor |
|
|
103
105
|
| Testing | Vitest, Jest, Playwright, Cypress |
|
|
104
|
-
| State | Zustand, Redux, Jotai, Valtio, XState |
|
|
105
|
-
|
|
|
106
|
+
| State | Zustand, Redux, Jotai, Valtio, XState, Recoil, MobX |
|
|
107
|
+
| Data Fetching | TanStack Query, SWR |
|
|
108
|
+
| Forms | React Hook Form, Formik, TanStack Form |
|
|
109
|
+
| i18n | next-intl, i18next, Lingui, react-intl |
|
|
106
110
|
| Payments | Stripe, LemonSqueezy |
|
|
107
|
-
| CMS | Contentlayer, MDX, Sanity, Notion |
|
|
108
|
-
| Email | Resend, Nodemailer, SendGrid |
|
|
111
|
+
| CMS | Contentlayer, MDX, Sanity, Notion, Contentful, Strapi |
|
|
112
|
+
| Email | Resend, Nodemailer, SendGrid, Postmark, React Email |
|
|
109
113
|
| File Upload | UploadThing, Vercel Blob, Multer, S3 |
|
|
110
114
|
| Realtime | Socket.io, Pusher, Ably |
|
|
111
115
|
| Jobs | BullMQ, Inngest, Trigger.dev |
|
|
112
|
-
| Database | PostgreSQL, MySQL, SQLite, MongoDB, Supabase |
|
|
116
|
+
| Database | PostgreSQL, MySQL, SQLite, MongoDB, Supabase, PlanetScale, Redis |
|
|
117
|
+
| API Style | tRPC, GraphQL |
|
|
113
118
|
| Monorepo | Turborepo, Nx, Lerna |
|
|
114
|
-
| Deployment | Vercel
|
|
119
|
+
| Deployment | Vercel |
|
|
115
120
|
| Runtime | Node, Bun, Deno |
|
|
116
121
|
|
|
117
122
|
### Code Patterns
|
|
@@ -124,29 +129,29 @@ Next.js (App/Pages Router), Nuxt, Remix, Astro, SvelteKit, SolidStart, Vite+Reac
|
|
|
124
129
|
|
|
125
130
|
## What Gets Generated
|
|
126
131
|
|
|
127
|
-
The `CLAUDE.md` includes
|
|
132
|
+
The `CLAUDE.md` includes sections tailored to your stack:
|
|
128
133
|
|
|
129
134
|
1. **Architecture Overview** — Framework, data layer, auth, project size
|
|
130
|
-
2. **Stack** — All detected technologies
|
|
135
|
+
2. **Stack** — All detected technologies with versions
|
|
131
136
|
3. **Project Structure** — Directories, special files
|
|
132
137
|
4. **Available Scripts** — `npm run` commands
|
|
133
|
-
5. **
|
|
134
|
-
6. **
|
|
135
|
-
7. **Conventions** —
|
|
136
|
-
8. **
|
|
137
|
-
9. **
|
|
138
|
-
10. **
|
|
139
|
-
11. **Claude Code Instructions** — Dynamic instructions based on your stack
|
|
138
|
+
5. **Per-Technology Conventions** — Up-to-date best practices from official docs (via Context7)
|
|
139
|
+
6. **Cross-Stack Rules** — Best practices for technology combinations (e.g., Next.js + Prisma, Zod + react-hook-form)
|
|
140
|
+
7. **File & Naming Conventions** — kebab-case, PascalCase rules
|
|
141
|
+
8. **Import Ordering** — Node builtins → external → internal → relative → types
|
|
142
|
+
9. **Existing Code Patterns** — Patterns detected in your code to respect
|
|
143
|
+
10. **Claude Code Instructions** — Dynamic instructions based on your stack
|
|
140
144
|
|
|
141
|
-
### Cross-
|
|
145
|
+
### Cross-Technology Documentation
|
|
142
146
|
|
|
143
|
-
LeadCode
|
|
147
|
+
LeadCode fetches specific documentation for technology pairs detected in your project:
|
|
144
148
|
|
|
145
|
-
`next + prisma` · `next + drizzle` · `next + next-auth` · `next + clerk` · `next + supabase-auth` · `next +
|
|
149
|
+
`next + prisma` · `next + drizzle` · `next + next-auth` · `next + clerk` · `next + supabase-auth` · `next + zod` · `next + stripe` · `next + react-query` · `next + next-intl` · `next + tailwind` · `next + shadcn` · `zod + react-hook-form` · `trpc + zod` — and more.
|
|
146
150
|
|
|
147
151
|
## Requirements
|
|
148
152
|
|
|
149
153
|
- **Node.js** >= 18
|
|
154
|
+
- **Context7 MCP server** installed alongside LeadCode
|
|
150
155
|
- The target project must have a `package.json`
|
|
151
156
|
- Currently optimized for JavaScript/TypeScript projects
|
|
152
157
|
|
|
@@ -156,7 +161,7 @@ LeadCode generates specific rules for technology pairs:
|
|
|
156
161
|
- **Single package.json** — Monorepo support detects the tool but analyzes only the root
|
|
157
162
|
- **No lint config reading** — Detects ESLint/Biome but doesn't parse their rules
|
|
158
163
|
- **No CI/CD detection** — GitHub Actions, etc. are not analyzed
|
|
159
|
-
- **
|
|
164
|
+
- **Requires Context7** — Documentation quality depends on Context7's library coverage
|
|
160
165
|
|
|
161
166
|
## Contributing
|
|
162
167
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { RepoAnalysis } from "../types.js";
|
|
2
|
+
export interface FetchedDocs {
|
|
3
|
+
techDocs: Record<string, string>;
|
|
4
|
+
crossDocs: Record<string, string>;
|
|
5
|
+
metadata: {
|
|
6
|
+
techCount: number;
|
|
7
|
+
snippetCount: number;
|
|
8
|
+
failedTechs: string[];
|
|
9
|
+
warning?: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export declare function fetchAllDocs(analysis: RepoAnalysis): Promise<FetchedDocs>;
|
|
13
|
+
//# sourceMappingURL=fetch-all.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-all.d.ts","sourceRoot":"","sources":["../../src/context7/fetch-all.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAiDD,wBAAsB,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA+E/E"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { resolveAndFetch } from "./client.js";
|
|
2
|
+
import { TECH_QUERIES } from "./queries.js";
|
|
3
|
+
/** Collect all detected tech identifiers from analysis */
|
|
4
|
+
function collectTechs(analysis) {
|
|
5
|
+
const techs = [];
|
|
6
|
+
if (analysis.framework) {
|
|
7
|
+
techs.push(analysis.framework.name);
|
|
8
|
+
}
|
|
9
|
+
const d = analysis.detected;
|
|
10
|
+
const fields = [
|
|
11
|
+
"orm", "auth", "validation", "css", "testing",
|
|
12
|
+
"stateManagement", "dataFetching", "formLibrary", "apiStyle",
|
|
13
|
+
"i18n", "payments", "realtime", "email", "cms", "jobs",
|
|
14
|
+
"uiComponents",
|
|
15
|
+
];
|
|
16
|
+
for (const field of fields) {
|
|
17
|
+
const value = d[field];
|
|
18
|
+
if (typeof value === "string") {
|
|
19
|
+
techs.push(value);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return [...new Set(techs)];
|
|
23
|
+
}
|
|
24
|
+
/** Run promises with concurrency limit */
|
|
25
|
+
async function pMap(items, fn, concurrency) {
|
|
26
|
+
const results = [];
|
|
27
|
+
let index = 0;
|
|
28
|
+
async function next() {
|
|
29
|
+
while (index < items.length) {
|
|
30
|
+
const i = index++;
|
|
31
|
+
results[i] = await fn(items[i]);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const workers = Array.from({ length: Math.min(concurrency, items.length) }, () => next());
|
|
35
|
+
await Promise.all(workers);
|
|
36
|
+
return results;
|
|
37
|
+
}
|
|
38
|
+
export async function fetchAllDocs(analysis) {
|
|
39
|
+
const techs = collectTechs(analysis);
|
|
40
|
+
const techDocs = {};
|
|
41
|
+
const crossDocs = {};
|
|
42
|
+
const failedTechs = [];
|
|
43
|
+
let snippetCount = 0;
|
|
44
|
+
// Fetch per-tech docs
|
|
45
|
+
const techTasks = techs
|
|
46
|
+
.filter((t) => t in TECH_QUERIES)
|
|
47
|
+
.map((tech) => ({
|
|
48
|
+
tech,
|
|
49
|
+
query: TECH_QUERIES[tech],
|
|
50
|
+
}));
|
|
51
|
+
await pMap(techTasks, async ({ tech, query }) => {
|
|
52
|
+
const allQueries = query.queries.join(". ");
|
|
53
|
+
const docs = await resolveAndFetch(query.libraryName, allQueries);
|
|
54
|
+
if (docs) {
|
|
55
|
+
techDocs[tech] = docs;
|
|
56
|
+
snippetCount++;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
failedTechs.push(tech);
|
|
60
|
+
}
|
|
61
|
+
}, 5);
|
|
62
|
+
// Fetch cross-tech docs
|
|
63
|
+
const crossTasks = [];
|
|
64
|
+
for (const tech of techs) {
|
|
65
|
+
const mapping = TECH_QUERIES[tech];
|
|
66
|
+
if (!mapping?.crossQueries)
|
|
67
|
+
continue;
|
|
68
|
+
for (const [otherTech, crossQuery] of Object.entries(mapping.crossQueries)) {
|
|
69
|
+
if (techs.includes(otherTech)) {
|
|
70
|
+
const key = `${tech}+${otherTech}`;
|
|
71
|
+
const reverseKey = `${otherTech}+${tech}`;
|
|
72
|
+
if (!(reverseKey in crossDocs) && !crossTasks.some((t) => t.key === reverseKey)) {
|
|
73
|
+
crossTasks.push({ key, libraryName: mapping.libraryName, query: crossQuery });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
await pMap(crossTasks, async ({ key, libraryName, query }) => {
|
|
79
|
+
const docs = await resolveAndFetch(libraryName, query);
|
|
80
|
+
if (docs) {
|
|
81
|
+
crossDocs[key] = docs;
|
|
82
|
+
snippetCount++;
|
|
83
|
+
}
|
|
84
|
+
}, 5);
|
|
85
|
+
// Track techs with no mapping at all
|
|
86
|
+
for (const tech of techs) {
|
|
87
|
+
if (!(tech in TECH_QUERIES) && !failedTechs.includes(tech)) {
|
|
88
|
+
failedTechs.push(tech);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
techDocs,
|
|
93
|
+
crossDocs,
|
|
94
|
+
metadata: {
|
|
95
|
+
techCount: Object.keys(techDocs).length,
|
|
96
|
+
snippetCount,
|
|
97
|
+
failedTechs,
|
|
98
|
+
...(failedTechs.length > 0 && {
|
|
99
|
+
warning: `No documentation found for: ${failedTechs.join(", ")}`,
|
|
100
|
+
}),
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=fetch-all.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-all.js","sourceRoot":"","sources":["../../src/context7/fetch-all.ts"],"names":[],"mappings":"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"}
|
package/dist/context7/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { searchLibrary, fetchDocs, resolveAndFetch } from "./client.js";
|
|
2
2
|
export { TECH_QUERIES } from "./queries.js";
|
|
3
|
+
export { fetchAllDocs } from "./fetch-all.js";
|
|
3
4
|
export type { LibrarySearchResult, DocSnippet } from "./client.js";
|
|
4
5
|
export type { TechQuery } from "./queries.js";
|
|
6
|
+
export type { FetchedDocs } from "./fetch-all.js";
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context7/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACnE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context7/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACnE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/context7/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context7/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context7/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface TechQuery {
|
|
2
|
+
libraryName: string;
|
|
3
|
+
queries: string[];
|
|
4
|
+
crossQueries?: Record<string, string>;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Maps detected tech identifiers to Context7 library names and relevant queries.
|
|
8
|
+
* This is NOT hardcoded rules — just "what to ask" for each technology.
|
|
9
|
+
*/
|
|
10
|
+
export declare const TECH_QUERIES: Record<string, TechQuery>;
|
|
11
|
+
//# sourceMappingURL=tech-queries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tech-queries.d.ts","sourceRoot":"","sources":["../../src/data/tech-queries.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CA8OlD,CAAC"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maps detected tech identifiers to Context7 library names and relevant queries.
|
|
3
|
+
* This is NOT hardcoded rules — just "what to ask" for each technology.
|
|
4
|
+
*/
|
|
5
|
+
export const TECH_QUERIES = {
|
|
6
|
+
// Frameworks
|
|
7
|
+
next: {
|
|
8
|
+
libraryName: "next.js",
|
|
9
|
+
queries: [
|
|
10
|
+
"App Router conventions, Server Components vs Client Components, when to use 'use client'",
|
|
11
|
+
"Server Actions best practices, data fetching patterns, caching strategies",
|
|
12
|
+
],
|
|
13
|
+
crossQueries: {
|
|
14
|
+
prisma: "Using Prisma with Next.js App Router, server-only imports, singleton pattern, data access layer",
|
|
15
|
+
drizzle: "Using Drizzle ORM with Next.js, server-only database queries",
|
|
16
|
+
"next-auth": "NextAuth.js v5 setup with Next.js App Router, middleware auth, session in Server Components",
|
|
17
|
+
clerk: "Clerk authentication with Next.js App Router, middleware, server-side auth",
|
|
18
|
+
"supabase-auth": "Supabase Auth with Next.js App Router, server client, middleware session refresh",
|
|
19
|
+
zod: "Zod validation in Next.js Server Actions and Route Handlers",
|
|
20
|
+
stripe: "Stripe payments and webhooks in Next.js, server-only SDK, webhook route handler",
|
|
21
|
+
"react-query": "React Query with Next.js App Router, HydrationBoundary, prefetching in Server Components",
|
|
22
|
+
"next-intl": "next-intl setup with App Router, middleware locale detection, Server Components i18n",
|
|
23
|
+
tailwind: "Tailwind CSS with Next.js, configuration, dark mode",
|
|
24
|
+
shadcn: "shadcn/ui with Next.js, component installation, theming",
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
nuxt: {
|
|
28
|
+
libraryName: "nuxt",
|
|
29
|
+
queries: ["Nuxt 3 conventions, composables, server routes, auto-imports"],
|
|
30
|
+
},
|
|
31
|
+
remix: {
|
|
32
|
+
libraryName: "remix",
|
|
33
|
+
queries: ["Remix loaders and actions, data loading patterns, form handling"],
|
|
34
|
+
},
|
|
35
|
+
astro: {
|
|
36
|
+
libraryName: "astro",
|
|
37
|
+
queries: ["Astro components, islands architecture, content collections"],
|
|
38
|
+
},
|
|
39
|
+
sveltekit: {
|
|
40
|
+
libraryName: "sveltekit",
|
|
41
|
+
queries: ["SvelteKit load functions, form actions, server-side rendering"],
|
|
42
|
+
},
|
|
43
|
+
"solid-start": {
|
|
44
|
+
libraryName: "solid-start",
|
|
45
|
+
queries: ["SolidStart routing, server functions, data loading"],
|
|
46
|
+
},
|
|
47
|
+
"vite-react": {
|
|
48
|
+
libraryName: "vite",
|
|
49
|
+
queries: ["Vite React project configuration, plugins, build optimization"],
|
|
50
|
+
},
|
|
51
|
+
react: {
|
|
52
|
+
libraryName: "react",
|
|
53
|
+
queries: ["React hooks best practices, component patterns, performance optimization"],
|
|
54
|
+
},
|
|
55
|
+
express: {
|
|
56
|
+
libraryName: "express",
|
|
57
|
+
queries: ["Express.js middleware patterns, error handling, route organization"],
|
|
58
|
+
},
|
|
59
|
+
fastify: {
|
|
60
|
+
libraryName: "fastify",
|
|
61
|
+
queries: ["Fastify plugins, schema validation, hooks lifecycle"],
|
|
62
|
+
},
|
|
63
|
+
hono: {
|
|
64
|
+
libraryName: "hono",
|
|
65
|
+
queries: ["Hono middleware, routing, request handling patterns"],
|
|
66
|
+
},
|
|
67
|
+
// ORM / Database
|
|
68
|
+
prisma: {
|
|
69
|
+
libraryName: "prisma",
|
|
70
|
+
queries: ["Prisma client singleton, connection pooling, best practices, select vs include"],
|
|
71
|
+
},
|
|
72
|
+
drizzle: {
|
|
73
|
+
libraryName: "drizzle-orm",
|
|
74
|
+
queries: ["Drizzle ORM schema definition, queries, migrations, best practices"],
|
|
75
|
+
},
|
|
76
|
+
typeorm: {
|
|
77
|
+
libraryName: "typeorm",
|
|
78
|
+
queries: ["TypeORM entity patterns, repository pattern, migrations"],
|
|
79
|
+
},
|
|
80
|
+
kysely: {
|
|
81
|
+
libraryName: "kysely",
|
|
82
|
+
queries: ["Kysely query builder patterns, type-safe queries"],
|
|
83
|
+
},
|
|
84
|
+
mongoose: {
|
|
85
|
+
libraryName: "mongoose",
|
|
86
|
+
queries: ["Mongoose schema design, middleware, connection management"],
|
|
87
|
+
},
|
|
88
|
+
// Auth
|
|
89
|
+
"next-auth": {
|
|
90
|
+
libraryName: "next-auth",
|
|
91
|
+
queries: ["NextAuth.js v5 configuration, providers, session management, middleware"],
|
|
92
|
+
},
|
|
93
|
+
clerk: {
|
|
94
|
+
libraryName: "clerk",
|
|
95
|
+
queries: ["Clerk authentication setup, middleware, server-side auth, user management"],
|
|
96
|
+
},
|
|
97
|
+
"better-auth": {
|
|
98
|
+
libraryName: "better-auth",
|
|
99
|
+
queries: ["Better Auth setup, session management, providers"],
|
|
100
|
+
},
|
|
101
|
+
auth0: {
|
|
102
|
+
libraryName: "auth0",
|
|
103
|
+
queries: ["Auth0 SDK setup, authentication flow, token management"],
|
|
104
|
+
},
|
|
105
|
+
// Validation
|
|
106
|
+
zod: {
|
|
107
|
+
libraryName: "zod",
|
|
108
|
+
queries: ["Zod schema patterns, parse vs safeParse, type inference, error handling"],
|
|
109
|
+
crossQueries: {
|
|
110
|
+
"react-hook-form": "Zod resolver with react-hook-form, shared schemas for forms and API validation",
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
valibot: {
|
|
114
|
+
libraryName: "valibot",
|
|
115
|
+
queries: ["Valibot schema validation, tree-shaking, type inference"],
|
|
116
|
+
},
|
|
117
|
+
// CSS / UI
|
|
118
|
+
tailwind: {
|
|
119
|
+
libraryName: "tailwindcss",
|
|
120
|
+
queries: ["Tailwind CSS utility classes, configuration, responsive design, dark mode"],
|
|
121
|
+
},
|
|
122
|
+
shadcn: {
|
|
123
|
+
libraryName: "shadcn/ui",
|
|
124
|
+
queries: ["shadcn/ui component usage, theming, customization, cn utility"],
|
|
125
|
+
},
|
|
126
|
+
chakra: {
|
|
127
|
+
libraryName: "chakra-ui",
|
|
128
|
+
queries: ["Chakra UI component patterns, theming, responsive styles"],
|
|
129
|
+
},
|
|
130
|
+
mui: {
|
|
131
|
+
libraryName: "material-ui",
|
|
132
|
+
queries: ["Material UI component usage, theming, sx prop patterns"],
|
|
133
|
+
},
|
|
134
|
+
mantine: {
|
|
135
|
+
libraryName: "mantine",
|
|
136
|
+
queries: ["Mantine components, hooks, theming, form handling"],
|
|
137
|
+
},
|
|
138
|
+
// Testing
|
|
139
|
+
vitest: {
|
|
140
|
+
libraryName: "vitest",
|
|
141
|
+
queries: ["Vitest testing patterns, mocking, setup, configuration"],
|
|
142
|
+
},
|
|
143
|
+
jest: {
|
|
144
|
+
libraryName: "jest",
|
|
145
|
+
queries: ["Jest testing patterns, mocking, configuration, best practices"],
|
|
146
|
+
},
|
|
147
|
+
playwright: {
|
|
148
|
+
libraryName: "playwright",
|
|
149
|
+
queries: ["Playwright E2E testing, page objects, assertions, configuration"],
|
|
150
|
+
},
|
|
151
|
+
cypress: {
|
|
152
|
+
libraryName: "cypress",
|
|
153
|
+
queries: ["Cypress E2E testing, commands, fixtures, best practices"],
|
|
154
|
+
},
|
|
155
|
+
// State
|
|
156
|
+
zustand: {
|
|
157
|
+
libraryName: "zustand",
|
|
158
|
+
queries: ["Zustand store patterns, middleware, persist, selectors"],
|
|
159
|
+
},
|
|
160
|
+
redux: {
|
|
161
|
+
libraryName: "redux-toolkit",
|
|
162
|
+
queries: ["Redux Toolkit slices, createAsyncThunk, RTK Query"],
|
|
163
|
+
},
|
|
164
|
+
jotai: {
|
|
165
|
+
libraryName: "jotai",
|
|
166
|
+
queries: ["Jotai atom patterns, derived atoms, async atoms"],
|
|
167
|
+
},
|
|
168
|
+
// Data fetching
|
|
169
|
+
"react-query": {
|
|
170
|
+
libraryName: "tanstack-query",
|
|
171
|
+
queries: ["TanStack Query patterns, mutations, invalidation, caching strategies"],
|
|
172
|
+
},
|
|
173
|
+
swr: {
|
|
174
|
+
libraryName: "swr",
|
|
175
|
+
queries: ["SWR data fetching, revalidation, mutation, error handling"],
|
|
176
|
+
},
|
|
177
|
+
// Forms
|
|
178
|
+
"react-hook-form": {
|
|
179
|
+
libraryName: "react-hook-form",
|
|
180
|
+
queries: ["React Hook Form usage, register, Controller, validation integration"],
|
|
181
|
+
},
|
|
182
|
+
// API
|
|
183
|
+
trpc: {
|
|
184
|
+
libraryName: "trpc",
|
|
185
|
+
queries: ["tRPC router setup, procedures, middleware, input validation with Zod"],
|
|
186
|
+
crossQueries: {
|
|
187
|
+
zod: "tRPC with Zod input validation, end-to-end type safety",
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
// Payments
|
|
191
|
+
stripe: {
|
|
192
|
+
libraryName: "stripe",
|
|
193
|
+
queries: ["Stripe API integration, webhooks, checkout, payment intents"],
|
|
194
|
+
},
|
|
195
|
+
// Email
|
|
196
|
+
resend: {
|
|
197
|
+
libraryName: "resend",
|
|
198
|
+
queries: ["Resend email API, sending emails, React Email templates"],
|
|
199
|
+
},
|
|
200
|
+
// i18n
|
|
201
|
+
"next-intl": {
|
|
202
|
+
libraryName: "next-intl",
|
|
203
|
+
queries: ["next-intl middleware, Server Components, message organization"],
|
|
204
|
+
},
|
|
205
|
+
i18next: {
|
|
206
|
+
libraryName: "i18next",
|
|
207
|
+
queries: ["i18next configuration, namespaces, interpolation, react-i18next"],
|
|
208
|
+
},
|
|
209
|
+
// CMS
|
|
210
|
+
sanity: {
|
|
211
|
+
libraryName: "sanity",
|
|
212
|
+
queries: ["Sanity CMS setup, GROQ queries, studio configuration"],
|
|
213
|
+
},
|
|
214
|
+
contentful: {
|
|
215
|
+
libraryName: "contentful",
|
|
216
|
+
queries: ["Contentful API, content delivery, content management"],
|
|
217
|
+
},
|
|
218
|
+
// Realtime
|
|
219
|
+
"socket.io": {
|
|
220
|
+
libraryName: "socket.io",
|
|
221
|
+
queries: ["Socket.IO setup, events, rooms, namespaces, error handling"],
|
|
222
|
+
},
|
|
223
|
+
// Jobs
|
|
224
|
+
inngest: {
|
|
225
|
+
libraryName: "inngest",
|
|
226
|
+
queries: ["Inngest function patterns, event-driven workflows, retries"],
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
//# sourceMappingURL=tech-queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tech-queries.js","sourceRoot":"","sources":["../../src/data/tech-queries.ts"],"names":[],"mappings":"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"}
|