leadcode 0.2.2 → 1.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/README.md +52 -47
- package/dist/analyzers/detection.d.ts.map +1 -1
- package/dist/analyzers/detection.js +30 -0
- package/dist/analyzers/detection.js.map +1 -1
- package/dist/context7/client.d.ts +17 -0
- package/dist/context7/client.d.ts.map +1 -0
- package/dist/context7/client.js +82 -0
- package/dist/context7/client.js.map +1 -0
- package/dist/context7/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 +7 -0
- package/dist/context7/index.d.ts.map +1 -0
- package/dist/context7/index.js +4 -0
- package/dist/context7/index.js.map +1 -0
- package/dist/context7/queries.d.ts +11 -0
- package/dist/context7/queries.d.ts.map +1 -0
- package/dist/context7/queries.js +229 -0
- package/dist/context7/queries.js.map +1 -0
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +1 -242
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/fr.d.ts.map +1 -1
- package/dist/i18n/fr.js +19 -260
- package/dist/i18n/fr.js.map +1 -1
- package/dist/i18n/types.d.ts +0 -232
- package/dist/i18n/types.d.ts.map +1 -1
- package/dist/index.js +11 -19
- package/dist/index.js.map +1 -1
- package/dist/templates/claude-md.d.ts +3 -2
- package/dist/templates/claude-md.d.ts.map +1 -1
- package/dist/templates/claude-md.js +92 -67
- package/dist/templates/claude-md.js.map +1 -1
- package/dist/tools/fetch-docs.d.ts +3 -0
- package/dist/tools/fetch-docs.d.ts.map +1 -0
- package/dist/tools/fetch-docs.js +39 -0
- package/dist/tools/fetch-docs.js.map +1 -0
- package/dist/tools/generate-claude-md.d.ts.map +1 -1
- package/dist/tools/generate-claude-md.js +10 -11
- 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 +9 -11
- package/dist/tools/update-claude-md.js.map +1 -1
- package/dist/tools/validate-claude-md.d.ts.map +1 -1
- package/dist/tools/validate-claude-md.js +10 -48
- package/dist/tools/validate-claude-md.js.map +1 -1
- package/dist/types.d.ts +0 -43
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/rules/auth.d.ts +0 -3
- package/dist/rules/auth.d.ts.map +0 -1
- package/dist/rules/auth.js +0 -48
- package/dist/rules/auth.js.map +0 -1
- package/dist/rules/cross-stack.d.ts +0 -3
- package/dist/rules/cross-stack.d.ts.map +0 -1
- package/dist/rules/cross-stack.js +0 -320
- package/dist/rules/cross-stack.js.map +0 -1
- package/dist/rules/drizzle.d.ts +0 -3
- package/dist/rules/drizzle.d.ts.map +0 -1
- package/dist/rules/drizzle.js +0 -43
- package/dist/rules/drizzle.js.map +0 -1
- package/dist/rules/index.d.ts +0 -7
- package/dist/rules/index.d.ts.map +0 -1
- package/dist/rules/index.js +0 -104
- package/dist/rules/index.js.map +0 -1
- package/dist/rules/nextjs.d.ts +0 -4
- package/dist/rules/nextjs.d.ts.map +0 -1
- package/dist/rules/nextjs.js +0 -86
- package/dist/rules/nextjs.js.map +0 -1
- package/dist/rules/node.d.ts +0 -3
- package/dist/rules/node.d.ts.map +0 -1
- package/dist/rules/node.js +0 -61
- package/dist/rules/node.js.map +0 -1
- package/dist/rules/prisma.d.ts +0 -3
- package/dist/rules/prisma.d.ts.map +0 -1
- package/dist/rules/prisma.js +0 -44
- package/dist/rules/prisma.js.map +0 -1
- package/dist/rules/react.d.ts +0 -3
- package/dist/rules/react.d.ts.map +0 -1
- package/dist/rules/react.js +0 -58
- package/dist/rules/react.js.map +0 -1
- package/dist/rules/state.d.ts +0 -3
- package/dist/rules/state.d.ts.map +0 -1
- package/dist/rules/state.js +0 -51
- package/dist/rules/state.js.map +0 -1
- package/dist/rules/tailwind.d.ts +0 -3
- package/dist/rules/tailwind.d.ts.map +0 -1
- package/dist/rules/tailwind.js +0 -41
- package/dist/rules/tailwind.js.map +0 -1
- package/dist/rules/trpc.d.ts +0 -3
- package/dist/rules/trpc.d.ts.map +0 -1
- package/dist/rules/trpc.js +0 -35
- package/dist/rules/trpc.js.map +0 -1
- package/dist/rules/typescript.d.ts +0 -3
- package/dist/rules/typescript.d.ts.map +0 -1
- package/dist/rules/typescript.js +0 -54
- package/dist/rules/typescript.js.map +0 -1
- package/dist/rules/validation.d.ts +0 -3
- package/dist/rules/validation.d.ts.map +0 -1
- package/dist/rules/validation.js +0 -38
- package/dist/rules/validation.js.map +0 -1
- package/dist/tools/detect-gaps.d.ts +0 -3
- package/dist/tools/detect-gaps.d.ts.map +0 -1
- package/dist/tools/detect-gaps.js +0 -34
- package/dist/tools/detect-gaps.js.map +0 -1
- package/dist/tools/suggest.d.ts +0 -3
- package/dist/tools/suggest.d.ts.map +0 -1
- package/dist/tools/suggest.js +0 -99
- package/dist/tools/suggest.js.map +0 -1
package/dist/rules/typescript.js
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
export const typescriptRules = {
|
|
2
|
-
id: "typescript",
|
|
3
|
-
name: "TypeScript",
|
|
4
|
-
applies: (a) => a.structure.hasTsConfig,
|
|
5
|
-
gaps: [
|
|
6
|
-
{
|
|
7
|
-
category: "types-dir",
|
|
8
|
-
severity: "low",
|
|
9
|
-
check: (a) => !a.structure.hasTypesDir && a.structure.approximateFileCount > 20,
|
|
10
|
-
message: "No shared types directory detected",
|
|
11
|
-
details: "For projects with 20+ files, a dedicated types/ directory helps Claude find and reuse type definitions.",
|
|
12
|
-
},
|
|
13
|
-
],
|
|
14
|
-
conventions: [
|
|
15
|
-
{
|
|
16
|
-
id: "ts-strict",
|
|
17
|
-
description: "Strict TypeScript",
|
|
18
|
-
rule: "Enable strict mode in tsconfig.json. Never use `any` unless justified with a comment explaining why.",
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
id: "ts-explicit-returns",
|
|
22
|
-
description: "Explicit return types on exports",
|
|
23
|
-
rule: "All exported functions must have explicit return types. Internal functions can use inference.",
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
id: "ts-no-enums",
|
|
27
|
-
description: "Prefer unions over enums",
|
|
28
|
-
rule: "Use string union types (`type Status = 'active' | 'inactive'`) instead of enums. Use `as const` satisfies for object maps.",
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
id: "ts-discriminated-unions",
|
|
32
|
-
description: "Discriminated unions for state",
|
|
33
|
-
rule: "Model loading/success/error states with discriminated unions: `{ status: 'loading' } | { status: 'success', data: T } | { status: 'error', error: string }`.",
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
id: "ts-import-types",
|
|
37
|
-
description: "Type-only imports",
|
|
38
|
-
rule: "Use `import type { Foo }` for type-only imports. This improves tree-shaking and makes intent clear.",
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
id: "ts-no-non-null",
|
|
42
|
-
description: "No non-null assertions",
|
|
43
|
-
rule: "Avoid the non-null assertion operator (!). Handle null/undefined cases explicitly with narrowing, optional chaining, or nullish coalescing.",
|
|
44
|
-
},
|
|
45
|
-
],
|
|
46
|
-
interdictions: [
|
|
47
|
-
"NEVER use `// @ts-ignore` — use `// @ts-expect-error` with an explanation of why the suppression is needed.",
|
|
48
|
-
"NEVER use `any` in exported function signatures without a comment justifying it.",
|
|
49
|
-
"NEVER use `as` type casts to silence type errors — fix the underlying type instead.",
|
|
50
|
-
"NEVER use `Object`, `Function`, or `{}` as types — use specific types or `unknown`.",
|
|
51
|
-
],
|
|
52
|
-
crossRefs: [],
|
|
53
|
-
};
|
|
54
|
-
//# sourceMappingURL=typescript.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../src/rules/typescript.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,EAAE,EAAE,YAAY;IAChB,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW;IACvC,IAAI,EAAE;QACJ;YACE,QAAQ,EAAE,WAAW;YACrB,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,IAAI,CAAC,CAAC,SAAS,CAAC,oBAAoB,GAAG,EAAE;YAC/E,OAAO,EAAE,oCAAoC;YAC7C,OAAO,EACL,yGAAyG;SAC5G;KACF;IACD,WAAW,EAAE;QACX;YACE,EAAE,EAAE,WAAW;YACf,WAAW,EAAE,mBAAmB;YAChC,IAAI,EAAE,sGAAsG;SAC7G;QACD;YACE,EAAE,EAAE,qBAAqB;YACzB,WAAW,EAAE,kCAAkC;YAC/C,IAAI,EAAE,+FAA+F;SACtG;QACD;YACE,EAAE,EAAE,aAAa;YACjB,WAAW,EAAE,0BAA0B;YACvC,IAAI,EAAE,4HAA4H;SACnI;QACD;YACE,EAAE,EAAE,yBAAyB;YAC7B,WAAW,EAAE,gCAAgC;YAC7C,IAAI,EAAE,8JAA8J;SACrK;QACD;YACE,EAAE,EAAE,iBAAiB;YACrB,WAAW,EAAE,mBAAmB;YAChC,IAAI,EAAE,qGAAqG;SAC5G;QACD;YACE,EAAE,EAAE,gBAAgB;YACpB,WAAW,EAAE,wBAAwB;YACrC,IAAI,EAAE,6IAA6I;SACpJ;KACF;IACD,aAAa,EAAE;QACb,6GAA6G;QAC7G,kFAAkF;QAClF,qFAAqF;QACrF,qFAAqF;KACtF;IACD,SAAS,EAAE,EAAE;CACd,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/rules/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,eAAO,MAAM,eAAe,EAAE,IAqC7B,CAAC"}
|
package/dist/rules/validation.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
export const validationRules = {
|
|
2
|
-
id: "validation",
|
|
3
|
-
name: "Input Validation",
|
|
4
|
-
applies: (a) => a.detected.validation !== null,
|
|
5
|
-
gaps: [
|
|
6
|
-
{
|
|
7
|
-
category: "shared-schemas",
|
|
8
|
-
severity: "medium",
|
|
9
|
-
check: (a) => !a.structure.hasSchemasDir,
|
|
10
|
-
message: "No shared schemas directory found",
|
|
11
|
-
details: "Without a dedicated directory for validation schemas, Claude will duplicate them across files. Create a /schemas or /lib/schemas directory.",
|
|
12
|
-
},
|
|
13
|
-
],
|
|
14
|
-
conventions: [
|
|
15
|
-
{
|
|
16
|
-
id: "validation-shared",
|
|
17
|
-
description: "Shared validation schemas",
|
|
18
|
-
rule: "Define validation schemas in a shared location (lib/schemas/ or schemas/). Import them in both API routes and forms.",
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
id: "validation-api-boundary",
|
|
22
|
-
description: "Validate at API boundaries",
|
|
23
|
-
rule: "Every API route must validate its input using the schema library. Parse, don't validate: use schema.parse() to get typed output.",
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
id: "validation-error-messages",
|
|
27
|
-
description: "User-friendly error messages",
|
|
28
|
-
rule: "Customize validation error messages for user-facing forms. Use schema library's message customization.",
|
|
29
|
-
},
|
|
30
|
-
],
|
|
31
|
-
interdictions: [
|
|
32
|
-
"NEVER validate manually with if/else when a schema library is available.",
|
|
33
|
-
"NEVER duplicate schema definitions — import from the shared location.",
|
|
34
|
-
"NEVER trust TypeScript types alone for runtime safety — types are erased at runtime.",
|
|
35
|
-
],
|
|
36
|
-
crossRefs: [],
|
|
37
|
-
};
|
|
38
|
-
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/rules/validation.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,EAAE,EAAE,YAAY;IAChB,IAAI,EAAE,kBAAkB;IACxB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,KAAK,IAAI;IAC9C,IAAI,EAAE;QACJ;YACE,QAAQ,EAAE,gBAAgB;YAC1B,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa;YACxC,OAAO,EAAE,mCAAmC;YAC5C,OAAO,EACL,6IAA6I;SAChJ;KACF;IACD,WAAW,EAAE;QACX;YACE,EAAE,EAAE,mBAAmB;YACvB,WAAW,EAAE,2BAA2B;YACxC,IAAI,EAAE,sHAAsH;SAC7H;QACD;YACE,EAAE,EAAE,yBAAyB;YAC7B,WAAW,EAAE,4BAA4B;YACzC,IAAI,EAAE,kIAAkI;SACzI;QACD;YACE,EAAE,EAAE,2BAA2B;YAC/B,WAAW,EAAE,8BAA8B;YAC3C,IAAI,EAAE,wGAAwG;SAC/G;KACF;IACD,aAAa,EAAE;QACb,0EAA0E;QAC1E,uEAAuE;QACvE,sFAAsF;KACvF;IACD,SAAS,EAAE,EAAE;CACd,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,34 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/tools/suggest.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../src/tools/suggest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8EzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+BvD"}
|
package/dist/tools/suggest.js
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import * as z from "zod";
|
|
2
|
-
import { getMessages } from "../i18n/index.js";
|
|
3
|
-
function opt(o, level) {
|
|
4
|
-
return { level, description: o.description, pros: o.pros, cons: o.cons, claudeImpact: o.claudeImpact };
|
|
5
|
-
}
|
|
6
|
-
function buildSuggestions(analysis, gaps) {
|
|
7
|
-
const m = getMessages("en").suggestions;
|
|
8
|
-
const suggestions = [];
|
|
9
|
-
for (const gap of gaps) {
|
|
10
|
-
switch (gap.category) {
|
|
11
|
-
case "testing":
|
|
12
|
-
suggestions.push({
|
|
13
|
-
topic: m.testing.topic,
|
|
14
|
-
options: [opt(m.testing.simple, "simple"), opt(m.testing.clean, "clean"), opt(m.testing.scalable, "scalable")],
|
|
15
|
-
});
|
|
16
|
-
break;
|
|
17
|
-
case "input-validation":
|
|
18
|
-
suggestions.push({ topic: m.inputValidation.topic, options: [opt(m.inputValidation.simple, "simple"), opt(m.inputValidation.clean, "clean")] });
|
|
19
|
-
break;
|
|
20
|
-
case "error-handling":
|
|
21
|
-
suggestions.push({ topic: m.errorHandling.topic, options: [opt(m.errorHandling.simple, "simple"), opt(m.errorHandling.clean, "clean")] });
|
|
22
|
-
break;
|
|
23
|
-
case "shared-schemas":
|
|
24
|
-
suggestions.push({ topic: m.schemaOrg.topic, options: [opt(m.schemaOrg.simple, "simple"), opt(m.schemaOrg.clean, "clean")] });
|
|
25
|
-
break;
|
|
26
|
-
case "component-structure":
|
|
27
|
-
suggestions.push({ topic: m.componentStructure.topic, options: [opt(m.componentStructure.simple, "simple"), opt(m.componentStructure.clean, "clean")] });
|
|
28
|
-
break;
|
|
29
|
-
case "auth-middleware":
|
|
30
|
-
suggestions.push({ topic: m.authMiddleware.topic, options: [opt(m.authMiddleware.simple, "simple"), opt(m.authMiddleware.clean, "clean")] });
|
|
31
|
-
break;
|
|
32
|
-
case "loading-states":
|
|
33
|
-
suggestions.push({ topic: m.loadingStates.topic, options: [opt(m.loadingStates.simple, "simple"), opt(m.loadingStates.clean, "clean")] });
|
|
34
|
-
break;
|
|
35
|
-
case "metadata":
|
|
36
|
-
suggestions.push({ topic: m.metadata.topic, options: [opt(m.metadata.simple, "simple"), opt(m.metadata.clean, "clean")] });
|
|
37
|
-
break;
|
|
38
|
-
case "prisma-client-singleton":
|
|
39
|
-
suggestions.push({ topic: m.prismaClient.topic, options: [opt(m.prismaClient.simple, "simple")] });
|
|
40
|
-
break;
|
|
41
|
-
case "auth-session":
|
|
42
|
-
suggestions.push({ topic: m.authSession.topic, options: [opt(m.authSession.simple, "simple"), opt(m.authSession.clean, "clean")] });
|
|
43
|
-
break;
|
|
44
|
-
case "env-validation":
|
|
45
|
-
suggestions.push({ topic: m.envValidation.topic, options: [opt(m.envValidation.simple, "simple"), opt(m.envValidation.clean, "clean")] });
|
|
46
|
-
break;
|
|
47
|
-
case "types-dir":
|
|
48
|
-
suggestions.push({ topic: m.typesDir.topic, options: [opt(m.typesDir.simple, "simple")] });
|
|
49
|
-
break;
|
|
50
|
-
case "store-organization":
|
|
51
|
-
suggestions.push({ topic: m.storeOrg.topic, options: [opt(m.storeOrg.simple, "simple")] });
|
|
52
|
-
break;
|
|
53
|
-
case "drizzle-schema-org":
|
|
54
|
-
suggestions.push({ topic: m.drizzleSchema.topic, options: [opt(m.drizzleSchema.simple, "simple"), opt(m.drizzleSchema.clean, "clean")] });
|
|
55
|
-
break;
|
|
56
|
-
default:
|
|
57
|
-
suggestions.push({
|
|
58
|
-
topic: gap.message,
|
|
59
|
-
options: [{
|
|
60
|
-
level: "simple",
|
|
61
|
-
description: `Address: ${gap.message}`,
|
|
62
|
-
pros: m.genericPros,
|
|
63
|
-
cons: m.genericCons,
|
|
64
|
-
claudeImpact: m.genericClaudeImpact,
|
|
65
|
-
}],
|
|
66
|
-
});
|
|
67
|
-
break;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return suggestions;
|
|
71
|
-
}
|
|
72
|
-
export function registerSuggest(server) {
|
|
73
|
-
server.registerTool("suggest-conventions", {
|
|
74
|
-
title: "Suggest Conventions",
|
|
75
|
-
description: "Given a repo analysis and detected gaps, proposes structured options (simple / clean / scalable) for each gap. Each option includes pros, cons, and impact on Claude Code behavior.",
|
|
76
|
-
inputSchema: {
|
|
77
|
-
analysis: z.string().describe("JSON string of RepoAnalysis"),
|
|
78
|
-
gaps: z.string().describe("JSON string of gaps array (output of detect-gaps)"),
|
|
79
|
-
},
|
|
80
|
-
}, async ({ analysis: analysisStr, gaps: gapsStr }) => {
|
|
81
|
-
try {
|
|
82
|
-
const analysis = JSON.parse(analysisStr);
|
|
83
|
-
const parsed = JSON.parse(gapsStr);
|
|
84
|
-
const gaps = Array.isArray(parsed) ? parsed : parsed.gaps;
|
|
85
|
-
const suggestions = buildSuggestions(analysis, gaps);
|
|
86
|
-
return {
|
|
87
|
-
content: [{ type: "text", text: JSON.stringify({ suggestions }, null, 2) }],
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
catch (err) {
|
|
91
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
92
|
-
return {
|
|
93
|
-
isError: true,
|
|
94
|
-
content: [{ type: "text", text: `suggest-conventions failed: ${message}` }],
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
//# sourceMappingURL=suggest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../src/tools/suggest.ts"],"names":[],"mappings":"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"}
|