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.
Files changed (38) hide show
  1. package/README.md +52 -47
  2. package/dist/context7/fetch-all.d.ts +13 -0
  3. package/dist/context7/fetch-all.d.ts.map +1 -0
  4. package/dist/context7/fetch-all.js +104 -0
  5. package/dist/context7/fetch-all.js.map +1 -0
  6. package/dist/context7/index.d.ts +2 -0
  7. package/dist/context7/index.d.ts.map +1 -1
  8. package/dist/context7/index.js +1 -0
  9. package/dist/context7/index.js.map +1 -1
  10. package/dist/data/tech-queries.d.ts +11 -0
  11. package/dist/data/tech-queries.d.ts.map +1 -0
  12. package/dist/data/tech-queries.js +229 -0
  13. package/dist/data/tech-queries.js.map +1 -0
  14. package/dist/index.js +155 -22
  15. package/dist/index.js.map +1 -1
  16. package/dist/resources/tech-queries.d.ts +3 -0
  17. package/dist/resources/tech-queries.d.ts.map +1 -0
  18. package/dist/resources/tech-queries.js +16 -0
  19. package/dist/resources/tech-queries.js.map +1 -0
  20. package/dist/templates/claude-md.d.ts +1 -1
  21. package/dist/templates/claude-md.d.ts.map +1 -1
  22. package/dist/tools/analyze-repo.js +1 -1
  23. package/dist/tools/analyze-repo.js.map +1 -1
  24. package/dist/tools/fetch-docs.d.ts +0 -10
  25. package/dist/tools/fetch-docs.d.ts.map +1 -1
  26. package/dist/tools/fetch-docs.js +2 -104
  27. package/dist/tools/fetch-docs.js.map +1 -1
  28. package/dist/tools/generate-claude-md.d.ts.map +1 -1
  29. package/dist/tools/generate-claude-md.js +14 -3
  30. package/dist/tools/generate-claude-md.js.map +1 -1
  31. package/dist/tools/update-claude-md.d.ts.map +1 -1
  32. package/dist/tools/update-claude-md.js +3 -57
  33. package/dist/tools/update-claude-md.js.map +1 -1
  34. package/dist/tools/validate-claude-md.js +1 -1
  35. package/dist/tools/validate-claude-md.js.map +1 -1
  36. package/dist/types.d.ts +10 -0
  37. package/dist/types.d.ts.map +1 -1
  38. 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, detects structural gaps, and generates a tailored `CLAUDE.md` — so Claude Code understands your project like a senior engineer would.
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
  [![npm version](https://img.shields.io/npm/v/leadcode.svg)](https://www.npmjs.com/package/leadcode)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](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, identifies what's missing, and generates a `CLAUDE.md` file that tells Claude Code exactly how to behave in your codebase.
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 ──→ CLAUDE.md ──→ Claude Code knows your rules
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 22 categories (framework, ORM, auth, CSS, testing, i18n, etc.)
30
- 3. **Find Gaps** — Detects structural issues (missing error boundaries, no test setup, no validation, etc.)
31
- 4. **Suggest** — Proposes options (simple / clean / scalable) for each gap, with pros, cons, and Claude impact
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 is an MCP server it's used through Claude Code, not as a standalone CLI.
35
+ LeadCode requires **two MCP servers**: LeadCode itself and Context7 (for documentation fetching).
37
36
 
38
- **One command:**
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
- That's it. Restart Claude Code and LeadCode's tools are available.
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 → detect gapssuggest fixes → ask your preferences → generate `CLAUDE.md`.
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
- #### `detect-gaps`
72
- Takes the analysis output and identifies structural gaps (missing error handling, no tests, no validation schemas, etc.).
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 your choices.
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 (22 categories)
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, PandaCSS |
102
- | UI Components | shadcn (auto-detected), Radix, MUI, Chakra, Headless UI |
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
- | i18n | next-intl, i18next |
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, Netlify, Docker, Fly.io, Railway |
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 up to 11 sections, all tailored to your stack:
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. **File & Naming Conventions** — kebab-case, PascalCase rules
134
- 6. **Import Ordering** — Node builtins external internal relative types
135
- 7. **Conventions** — Stack-specific rules Claude must follow
136
- 8. **Cross-Stack Rules** — Rules for technology combinations (e.g., Next.js + Prisma)
137
- 9. **Interdictions** — Things Claude must never do
138
- 10. **Existing Code Patterns** — Patterns detected in your code to respect
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-Stack Rules (18 combinations)
145
+ ### Cross-Technology Documentation
142
146
 
143
- LeadCode generates specific rules for technology pairs:
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 + trpc` · `next + stripe` · `next + next-intl` · `next + react-query` · `next + zod` · `prisma + next-auth` · `prisma + zod` · `trpc + zod` · `express + prisma` · `fastify + prisma` · `tailwind + shadcn` · `tailwind + react`
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
- - **No test quality analysis** — Detects the runner but doesn't evaluate test coverage
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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"}
@@ -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"}
@@ -1,3 +1,4 @@
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
  //# sourceMappingURL=index.js.map
@@ -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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"}