devkit-debugging-mcp 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.
Files changed (81) hide show
  1. package/AGENTS.md +52 -0
  2. package/PRD.md +86 -0
  3. package/README.md +21 -0
  4. package/TRD.md +120 -0
  5. package/dist/bin.d.ts +3 -0
  6. package/dist/bin.d.ts.map +1 -0
  7. package/dist/bin.js +7 -0
  8. package/dist/bin.js.map +1 -0
  9. package/dist/core/errors.d.ts +12 -0
  10. package/dist/core/errors.d.ts.map +1 -0
  11. package/dist/core/errors.js +23 -0
  12. package/dist/core/errors.js.map +1 -0
  13. package/dist/core/fs/readText.d.ts +2 -0
  14. package/dist/core/fs/readText.d.ts.map +1 -0
  15. package/dist/core/fs/readText.js +9 -0
  16. package/dist/core/fs/readText.js.map +1 -0
  17. package/dist/core/fs/walk.d.ts +7 -0
  18. package/dist/core/fs/walk.d.ts.map +1 -0
  19. package/dist/core/fs/walk.js +48 -0
  20. package/dist/core/fs/walk.js.map +1 -0
  21. package/dist/core/jsonc.d.ts +2 -0
  22. package/dist/core/jsonc.d.ts.map +1 -0
  23. package/dist/core/jsonc.js +6 -0
  24. package/dist/core/jsonc.js.map +1 -0
  25. package/dist/core/mcp/mcpResult.d.ts +9 -0
  26. package/dist/core/mcp/mcpResult.d.ts.map +1 -0
  27. package/dist/core/mcp/mcpResult.js +7 -0
  28. package/dist/core/mcp/mcpResult.js.map +1 -0
  29. package/dist/core/patch/suggestPatch.d.ts +26 -0
  30. package/dist/core/patch/suggestPatch.d.ts.map +1 -0
  31. package/dist/core/patch/suggestPatch.js +139 -0
  32. package/dist/core/patch/suggestPatch.js.map +1 -0
  33. package/dist/core/readiness/checkReadiness.d.ts +19 -0
  34. package/dist/core/readiness/checkReadiness.d.ts.map +1 -0
  35. package/dist/core/readiness/checkReadiness.js +105 -0
  36. package/dist/core/readiness/checkReadiness.js.map +1 -0
  37. package/dist/core/redact.d.ts +2 -0
  38. package/dist/core/redact.d.ts.map +1 -0
  39. package/dist/core/redact.js +29 -0
  40. package/dist/core/redact.js.map +1 -0
  41. package/dist/core/toolRunner.d.ts +3 -0
  42. package/dist/core/toolRunner.d.ts.map +1 -0
  43. package/dist/core/toolRunner.js +19 -0
  44. package/dist/core/toolRunner.js.map +1 -0
  45. package/dist/core/triage/triageIssue.d.ts +22 -0
  46. package/dist/core/triage/triageIssue.d.ts.map +1 -0
  47. package/dist/core/triage/triageIssue.js +234 -0
  48. package/dist/core/triage/triageIssue.js.map +1 -0
  49. package/dist/index.d.ts +2 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +2 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/server/createDebuggingServer.d.ts +3 -0
  54. package/dist/server/createDebuggingServer.d.ts.map +1 -0
  55. package/dist/server/createDebuggingServer.js +17 -0
  56. package/dist/server/createDebuggingServer.js.map +1 -0
  57. package/dist/tools/check_debugging_readiness.d.ts +14 -0
  58. package/dist/tools/check_debugging_readiness.d.ts.map +1 -0
  59. package/dist/tools/check_debugging_readiness.js +38 -0
  60. package/dist/tools/check_debugging_readiness.js.map +1 -0
  61. package/dist/tools/refactor_guarded.d.ts +50 -0
  62. package/dist/tools/refactor_guarded.d.ts.map +1 -0
  63. package/dist/tools/refactor_guarded.js +64 -0
  64. package/dist/tools/refactor_guarded.js.map +1 -0
  65. package/dist/tools/schemas.d.ts +103 -0
  66. package/dist/tools/schemas.d.ts.map +1 -0
  67. package/dist/tools/schemas.js +25 -0
  68. package/dist/tools/schemas.js.map +1 -0
  69. package/dist/tools/suggest_patch.d.ts +23 -0
  70. package/dist/tools/suggest_patch.d.ts.map +1 -0
  71. package/dist/tools/suggest_patch.js +41 -0
  72. package/dist/tools/suggest_patch.js.map +1 -0
  73. package/dist/tools/triage_issue.d.ts +17 -0
  74. package/dist/tools/triage_issue.d.ts.map +1 -0
  75. package/dist/tools/triage_issue.js +33 -0
  76. package/dist/tools/triage_issue.js.map +1 -0
  77. package/dist/types/contracts.d.ts +36 -0
  78. package/dist/types/contracts.d.ts.map +1 -0
  79. package/dist/types/contracts.js +2 -0
  80. package/dist/types/contracts.js.map +1 -0
  81. package/package.json +47 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestPatch.js","sourceRoot":"","sources":["../../../src/core/patch/suggestPatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export type ReadinessWarning = {
2
+ code: string;
3
+ message: string;
4
+ path?: string;
5
+ };
6
+ export type ReadinessResult = {
7
+ rootDir: string;
8
+ detected: {
9
+ packageManager?: "npm" | "pnpm" | "yarn" | "unknown";
10
+ isNext?: boolean;
11
+ isSupabase?: boolean;
12
+ testRunners: string[];
13
+ };
14
+ scripts: Record<string, string>;
15
+ warnings: ReadinessWarning[];
16
+ suggestions: string[];
17
+ };
18
+ export declare function checkDebuggingReadiness(rootDirRaw: string): Promise<ReadinessResult>;
19
+ //# sourceMappingURL=checkReadiness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkReadiness.d.ts","sourceRoot":"","sources":["../../../src/core/readiness/checkReadiness.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;QACrD,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAWF,wBAAsB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAsG1F"}
@@ -0,0 +1,105 @@
1
+ import path from "node:path";
2
+ import fs from "node:fs/promises";
3
+ import { walkFiles } from "../fs/walk.js";
4
+ import { readTextFile } from "../fs/readText.js";
5
+ async function exists(p) {
6
+ try {
7
+ await fs.access(p);
8
+ return true;
9
+ }
10
+ catch {
11
+ return false;
12
+ }
13
+ }
14
+ export async function checkDebuggingReadiness(rootDirRaw) {
15
+ const rootDir = path.resolve(rootDirRaw);
16
+ const warnings = [];
17
+ const suggestions = [];
18
+ const pkgPath = path.join(rootDir, "package.json");
19
+ if (!(await exists(pkgPath))) {
20
+ warnings.push({ code: "NO_PACKAGE_JSON", message: "No package.json found at project root.", path: pkgPath });
21
+ return {
22
+ rootDir,
23
+ detected: { packageManager: "unknown", testRunners: [] },
24
+ scripts: {},
25
+ warnings,
26
+ suggestions: ["Point `path` to the actual project root that contains `package.json`."],
27
+ };
28
+ }
29
+ const pkg = JSON.parse(await readTextFile(pkgPath, 256_000));
30
+ const scripts = pkg.scripts ?? {};
31
+ const deps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };
32
+ const isNext = Boolean(deps.next);
33
+ const isSupabase = Boolean(deps.supabase || deps["@supabase/supabase-js"] || deps["@supabase/ssr"] || deps["@supabase/auth-helpers-nextjs"]);
34
+ const testRunners = [];
35
+ if (deps.jest || deps["@jest/globals"])
36
+ testRunners.push("jest");
37
+ if (deps.vitest)
38
+ testRunners.push("vitest");
39
+ if (deps["@playwright/test"])
40
+ testRunners.push("playwright");
41
+ if (!scripts.test && testRunners.length > 0) {
42
+ warnings.push({
43
+ code: "NO_TEST_SCRIPT",
44
+ message: "A test runner dependency is present, but `npm run test` is not configured.",
45
+ path: pkgPath,
46
+ });
47
+ }
48
+ if (!scripts.typecheck) {
49
+ warnings.push({ code: "NO_TYPECHECK_SCRIPT", message: "Missing `typecheck` script.", path: pkgPath });
50
+ suggestions.push("Add a `typecheck` script (e.g. `tsc --noEmit`).");
51
+ }
52
+ if (isNext && !scripts.build) {
53
+ warnings.push({ code: "NO_BUILD_SCRIPT", message: "Next.js detected, but missing `build` script.", path: pkgPath });
54
+ }
55
+ const supabaseDir = path.join(rootDir, "supabase");
56
+ const hasSupabaseDir = await exists(supabaseDir);
57
+ if (isSupabase && !hasSupabaseDir) {
58
+ warnings.push({ code: "NO_SUPABASE_DIR", message: "Supabase dependency detected, but `supabase/` directory is missing." });
59
+ }
60
+ if (hasSupabaseDir && !(await exists(path.join(supabaseDir, "migrations")))) {
61
+ warnings.push({ code: "NO_SUPABASE_MIGRATIONS", message: "`supabase/` exists, but `supabase/migrations/` is missing." });
62
+ }
63
+ const files = await walkFiles({ rootDir, maxFiles: 2500 });
64
+ const hasEnvExample = files.some((f) => /(?:^|\/)\.env\.example$/.test(f) || /(?:^|\/)\.env\.local\.example$/.test(f));
65
+ if (!hasEnvExample) {
66
+ warnings.push({
67
+ code: "NO_ENV_EXAMPLE",
68
+ message: "No `.env.example` (or `.env.local.example`) found; onboarding and debugging becomes harder.",
69
+ });
70
+ suggestions.push("Add `.env.example` documenting required environment variables (without secret values).");
71
+ }
72
+ const hasNextConfig = files.some((f) => /(?:^|\/)next\.config\.(?:js|mjs|ts)$/.test(f));
73
+ if (isNext && !hasNextConfig) {
74
+ warnings.push({ code: "NO_NEXT_CONFIG", message: "Next.js detected, but `next.config.*` was not found (may be OK)." });
75
+ }
76
+ const hasAppRouter = files.some((f) => /(?:^|\/)app\/.+/.test(f));
77
+ if (isNext && !hasAppRouter) {
78
+ warnings.push({ code: "NO_APP_DIR", message: "Next.js detected, but `app/` directory not found (App Router expected)." });
79
+ }
80
+ suggestions.push("Run the smallest failing check first: `npm run typecheck` then `npm test` then `npm run build`.");
81
+ if (isSupabase) {
82
+ suggestions.push("When debugging Supabase errors, capture: SQL operation, role (anon/auth/service_role), and RLS policy names.");
83
+ }
84
+ return {
85
+ rootDir,
86
+ detected: {
87
+ packageManager: await (async () => {
88
+ if (await exists(path.join(rootDir, "pnpm-lock.yaml")))
89
+ return "pnpm";
90
+ if (await exists(path.join(rootDir, "yarn.lock")))
91
+ return "yarn";
92
+ if (await exists(path.join(rootDir, "package-lock.json")))
93
+ return "npm";
94
+ return "unknown";
95
+ })(),
96
+ isNext: isNext || undefined,
97
+ isSupabase: isSupabase || undefined,
98
+ testRunners,
99
+ },
100
+ scripts,
101
+ warnings,
102
+ suggestions,
103
+ };
104
+ }
105
+ //# sourceMappingURL=checkReadiness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkReadiness.js","sourceRoot":"","sources":["../../../src/core/readiness/checkReadiness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function redactSecrets(input: string): string;
2
+ //# sourceMappingURL=redact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/core/redact.ts"],"names":[],"mappings":"AAqBA,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMnD"}
@@ -0,0 +1,29 @@
1
+ const OPENAI_KEY_RE = /\bsk-[A-Za-z0-9]{20,}\b/g;
2
+ const JWT_RE = /\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g;
3
+ const POSTGRES_URL_RE = /\b(postgres(?:ql)?):\/\/([^:\s]+):([^@\s]+)@/g;
4
+ const SENSITIVE_ENV_LINE_RE = /^([A-Z0-9_]*(?:SECRET|TOKEN|KEY|PASSWORD|SERVICE_ROLE|OPENAI|SUPABASE)[A-Z0-9_]*)\s*=\s*(.+)$/gm;
5
+ function envRedactionForKey(key) {
6
+ if (/OPENAI/i.test(key))
7
+ return "<redacted:openai_key>";
8
+ if (/SUPABASE/i.test(key))
9
+ return "<redacted:supabase_key>";
10
+ if (/SERVICE_ROLE/i.test(key))
11
+ return "<redacted:service_role_key>";
12
+ return "<redacted>";
13
+ }
14
+ function redactEnvLine(key, rawValue) {
15
+ const trimmed = rawValue.trim();
16
+ const quote = trimmed.startsWith('"') ? '"' : trimmed.startsWith("'") ? "'" : null;
17
+ const redactedValue = envRedactionForKey(key);
18
+ if (!quote)
19
+ return `${key}=${redactedValue}`;
20
+ return `${key}=${quote}${redactedValue}${quote}`;
21
+ }
22
+ export function redactSecrets(input) {
23
+ return input
24
+ .replace(POSTGRES_URL_RE, (_m, scheme, user) => `${scheme}://${user}:<redacted:password>@`)
25
+ .replace(SENSITIVE_ENV_LINE_RE, (_m, key, value) => redactEnvLine(key, value))
26
+ .replace(OPENAI_KEY_RE, "<redacted:openai_key>")
27
+ .replace(JWT_RE, "<redacted:jwt>");
28
+ }
29
+ //# sourceMappingURL=redact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/core/redact.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,0BAA0B,CAAC;AACjD,MAAM,MAAM,GAAG,wDAAwD,CAAC;AACxE,MAAM,eAAe,GAAG,+CAA+C,CAAC;AACxE,MAAM,qBAAqB,GACzB,iGAAiG,CAAC;AAEpG,SAAS,kBAAkB,CAAC,GAAW;IACrC,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,uBAAuB,CAAC;IACxD,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,yBAAyB,CAAC;IAC5D,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,6BAA6B,CAAC;IACpE,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,aAAa,CAAC,GAAW,EAAE,QAAgB;IAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACnF,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,GAAG,IAAI,aAAa,EAAE,CAAC;IAC7C,OAAO,GAAG,GAAG,IAAI,KAAK,GAAG,aAAa,GAAG,KAAK,EAAE,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,KAAK;SACT,OAAO,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,MAAM,MAAM,IAAI,uBAAuB,CAAC;SAC1F,OAAO,CAAC,qBAAqB,EAAE,CAAC,EAAE,EAAE,GAAW,EAAE,KAAa,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC7F,OAAO,CAAC,aAAa,EAAE,uBAAuB,CAAC;SAC/C,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolResult } from "../types/contracts.js";
2
+ export declare function runTool<TData>(fn: () => Promise<ToolResult<TData>>): Promise<ToolResult<TData>>;
3
+ //# sourceMappingURL=toolRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolRunner.d.ts","sourceRoot":"","sources":["../../src/core/toolRunner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,wBAAsB,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAerG"}
@@ -0,0 +1,19 @@
1
+ import { ToolErrorBase } from "./errors.js";
2
+ export async function runTool(fn) {
3
+ try {
4
+ return await fn();
5
+ }
6
+ catch (error) {
7
+ if (error instanceof ToolErrorBase) {
8
+ return {
9
+ ok: false,
10
+ error: { code: error.code, message: error.message, details: error.details },
11
+ };
12
+ }
13
+ return {
14
+ ok: false,
15
+ error: { code: "INTERNAL_ERROR", message: "Unexpected error", details: error },
16
+ };
17
+ }
18
+ }
19
+ //# sourceMappingURL=toolRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolRunner.js","sourceRoot":"","sources":["../../src/core/toolRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,CAAC,KAAK,UAAU,OAAO,CAAQ,EAAoC;IACvE,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;YACnC,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;aAC5E,CAAC;QACJ,CAAC;QACD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE;SAC/E,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,22 @@
1
+ export type TriageCategory = "test_failure" | "typescript" | "eslint" | "module_not_found" | "next_build" | "next_runtime" | "supabase_rls" | "supabase_migration" | "database" | "env" | "network" | "unknown";
2
+ export type TriageSeverity = "error" | "warn" | "info";
3
+ export type TriageResult = {
4
+ category: TriageCategory;
5
+ severity: TriageSeverity;
6
+ detected: {
7
+ isNext?: boolean;
8
+ isSupabase?: boolean;
9
+ testRunner: "jest" | "vitest" | "playwright" | "unknown";
10
+ };
11
+ summary: string;
12
+ suspectedFiles: string[];
13
+ checklist: string[];
14
+ questions: string[];
15
+ redactedInputExcerpt: string;
16
+ signals: Array<{
17
+ kind: string;
18
+ value: string;
19
+ }>;
20
+ };
21
+ export declare function triageIssue(rawText: string): TriageResult;
22
+ //# sourceMappingURL=triageIssue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triageIssue.d.ts","sourceRoot":"","sources":["../../../src/core/triage/triageIssue.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GACtB,cAAc,GACd,YAAY,GACZ,QAAQ,GACR,kBAAkB,GAClB,YAAY,GACZ,cAAc,GACd,cAAc,GACd,oBAAoB,GACpB,UAAU,GACV,KAAK,GACL,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvD,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE;QACR,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC;KAC1D,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD,CAAC;AA8LF,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAwDzD"}
@@ -0,0 +1,234 @@
1
+ import path from "node:path";
2
+ import { redactSecrets } from "../redact.js";
3
+ const FILE_PATH_RE = /(?:^|\s)([A-Za-z0-9_./-]+\.(?:ts|tsx|js|jsx|mjs|cjs|json|sql|md|yml|yaml))(?:[:)\s]|$)/g;
4
+ function uniqStable(items) {
5
+ const seen = new Set();
6
+ const out = [];
7
+ for (const item of items) {
8
+ if (seen.has(item))
9
+ continue;
10
+ seen.add(item);
11
+ out.push(item);
12
+ }
13
+ return out;
14
+ }
15
+ function takeExcerpt(text, maxChars = 4000) {
16
+ const normalized = text.replace(/\r\n/g, "\n");
17
+ return normalized.length > maxChars ? normalized.slice(0, maxChars) + "\n<trimmed>" : normalized;
18
+ }
19
+ function extractFiles(text) {
20
+ const out = [];
21
+ let m;
22
+ while ((m = FILE_PATH_RE.exec(text))) {
23
+ const raw = m[1];
24
+ if (!raw)
25
+ continue;
26
+ const cleaned = raw.replace(/[),]*$/g, "");
27
+ out.push(cleaned);
28
+ }
29
+ return uniqStable(out).slice(0, 25);
30
+ }
31
+ function detectTestRunner(text) {
32
+ if (/\bvitest\b/i.test(text) || /\bVITEST\b/.test(text))
33
+ return "vitest";
34
+ if (/\bjest\b/i.test(text) || /\bTest Suites:\b/.test(text))
35
+ return "jest";
36
+ if (/\bplaywright\b/i.test(text) || /\bexpect\.toHaveScreenshot\b/.test(text))
37
+ return "playwright";
38
+ return "unknown";
39
+ }
40
+ function categorize(text) {
41
+ const signals = [];
42
+ if (/Module not found: Can't resolve|Cannot find module/i.test(text)) {
43
+ signals.push({ kind: "match", value: "module_not_found" });
44
+ return { category: "module_not_found", signals };
45
+ }
46
+ if (/\bType error\b|TS\d{3,5}\b|Cannot find name\b|is not assignable to type\b/i.test(text)) {
47
+ signals.push({ kind: "match", value: "typescript" });
48
+ return { category: "typescript", signals };
49
+ }
50
+ if (/\bESLint\b|\bParsing error\b|eslint-disable\b/i.test(text)) {
51
+ signals.push({ kind: "match", value: "eslint" });
52
+ return { category: "eslint", signals };
53
+ }
54
+ if (/\bFAIL\b.*\n|\bTest Suites:\b|\bAssertionError\b|expected .* received/i.test(text)) {
55
+ signals.push({ kind: "match", value: "test_failure" });
56
+ return { category: "test_failure", signals };
57
+ }
58
+ if (/new row violates row-level security policy|row-level security|permission denied for table/i.test(text)) {
59
+ signals.push({ kind: "match", value: "supabase_rls" });
60
+ return { category: "supabase_rls", signals };
61
+ }
62
+ if (/supabase\/migrations|migration|schema cache|Postgrest/i.test(text)) {
63
+ signals.push({ kind: "match", value: "supabase_migration" });
64
+ return { category: "supabase_migration", signals };
65
+ }
66
+ if (/\bECONNREFUSED\b|\bETIMEDOUT\b|\bENOTFOUND\b/i.test(text)) {
67
+ signals.push({ kind: "match", value: "network" });
68
+ return { category: "network", signals };
69
+ }
70
+ if (/\bEADDRINUSE\b/i.test(text)) {
71
+ signals.push({ kind: "match", value: "network_port_in_use" });
72
+ return { category: "network", signals };
73
+ }
74
+ if (/process\.env\.[A-Z0-9_]+|Missing environment variable|is not defined/i.test(text)) {
75
+ signals.push({ kind: "match", value: "env" });
76
+ return { category: "env", signals };
77
+ }
78
+ if (/next\/build|Failed to compile|Collecting page data|Route Handler/i.test(text)) {
79
+ signals.push({ kind: "match", value: "next_build" });
80
+ return { category: "next_build", signals };
81
+ }
82
+ if (/Unhandled Runtime Error|Hydration failed|window is not defined|document is not defined/i.test(text)) {
83
+ signals.push({ kind: "match", value: "next_runtime" });
84
+ return { category: "next_runtime", signals };
85
+ }
86
+ return { category: "unknown", signals };
87
+ }
88
+ function severityFromCategory(category) {
89
+ switch (category) {
90
+ case "unknown":
91
+ return "warn";
92
+ default:
93
+ return "error";
94
+ }
95
+ }
96
+ function buildChecklist(category, suspectedFiles, detectedRunner) {
97
+ const items = [];
98
+ if (suspectedFiles.length > 0) {
99
+ items.push(`Open the first suspected file: ${suspectedFiles[0]}`);
100
+ items.push("Locate the exact line referenced by the stack trace or error output.");
101
+ }
102
+ else {
103
+ items.push("Identify the first meaningful error line (ignore secondary cascades).");
104
+ }
105
+ switch (category) {
106
+ case "test_failure":
107
+ items.push(`Re-run the failing test with increased verbosity (${detectedRunner}).`);
108
+ items.push("Confirm whether the failure is deterministic or flaky.");
109
+ items.push("Check if the failure is a snapshot mismatch, timing issue, or environment dependency.");
110
+ break;
111
+ case "typescript":
112
+ items.push("Run typecheck to confirm the minimal failing error.");
113
+ items.push("Check recent changes to types, imports, and generated types.");
114
+ break;
115
+ case "eslint":
116
+ items.push("Run lint on the smallest scope (file or package).");
117
+ items.push("Confirm the rule and whether the config changed recently.");
118
+ break;
119
+ case "module_not_found":
120
+ items.push("Confirm the import path and whether tsconfig path aliases are configured.");
121
+ items.push("Check case-sensitivity and file extension differences.");
122
+ break;
123
+ case "supabase_rls":
124
+ items.push("Identify which table/action is blocked (SELECT/INSERT/UPDATE/DELETE).");
125
+ items.push("Confirm the authenticated role and session claims used in the request.");
126
+ items.push("Inspect RLS policies for the table; avoid broad allow-all policies.");
127
+ break;
128
+ case "supabase_migration":
129
+ items.push("Confirm local migrations are applied in the expected order.");
130
+ items.push("Check if the failing statement depends on extensions or schema that is missing.");
131
+ break;
132
+ case "env":
133
+ items.push("Confirm the variable exists in runtime (server vs client).");
134
+ items.push("Ensure server-only secrets are never referenced by client components.");
135
+ break;
136
+ case "next_build":
137
+ items.push("Re-run `next build` and capture the first compilation error block.");
138
+ items.push("Check for dynamic imports, server/client boundary issues, and invalid route handlers.");
139
+ break;
140
+ case "next_runtime":
141
+ items.push("Confirm whether the error occurs on server or client.");
142
+ items.push("Check for browser-only globals (window/document) used in server contexts.");
143
+ break;
144
+ case "network":
145
+ items.push("Check whether the target service is running and reachable from this environment.");
146
+ items.push("If `EADDRINUSE`, free the port or change the port configuration.");
147
+ break;
148
+ default:
149
+ items.push("Provide a minimal reproduction and the full first error block.");
150
+ break;
151
+ }
152
+ return items;
153
+ }
154
+ function buildQuestions(category) {
155
+ switch (category) {
156
+ case "test_failure":
157
+ return [
158
+ "Which test file and test name is failing?",
159
+ "Does it fail locally or only in CI?",
160
+ "Did the failure start after a dependency upgrade?",
161
+ ];
162
+ case "supabase_rls":
163
+ return [
164
+ "Is the request authenticated (user session present)?",
165
+ "Which role is used for this query (anon/authenticated/service_role)?",
166
+ "What is the exact failing SQL operation and table?",
167
+ ];
168
+ case "env":
169
+ return [
170
+ "Is the code running on server or client when the variable is accessed?",
171
+ "Is this variable supposed to be public (`NEXT_PUBLIC_`) or secret (server-only)?",
172
+ ];
173
+ case "module_not_found":
174
+ return [
175
+ "Is the import path using aliases like `@/`? If yes, is `tsconfig.json` configured?",
176
+ "Is the file name casing identical across OS/CI?",
177
+ ];
178
+ default:
179
+ return ["What is the minimal reproduction (command + expected vs actual)?"];
180
+ }
181
+ }
182
+ export function triageIssue(rawText) {
183
+ const redacted = redactSecrets(rawText);
184
+ const excerpt = takeExcerpt(redacted);
185
+ const suspectedFiles = extractFiles(redacted).map((p) => (p.includes("/") || p.includes("\\") ? p : path.normalize(p)));
186
+ const { category, signals } = categorize(redacted);
187
+ const detectedRunner = detectTestRunner(redacted);
188
+ const isNext = /\bnext\b|next\/|Next\.js/i.test(redacted);
189
+ const isSupabase = /\bsupabase\b|postgrest|pg_/i.test(redacted);
190
+ const checklist = buildChecklist(category, suspectedFiles, detectedRunner);
191
+ const questions = buildQuestions(category);
192
+ const summary = (() => {
193
+ switch (category) {
194
+ case "module_not_found":
195
+ return "A module import could not be resolved (missing file, wrong path, or misconfigured aliases).";
196
+ case "typescript":
197
+ return "TypeScript compilation/type inference error.";
198
+ case "eslint":
199
+ return "Linting/configuration error.";
200
+ case "test_failure":
201
+ return "A test failed; isolate the smallest failing assertion and confirm determinism.";
202
+ case "supabase_rls":
203
+ return "Supabase/Postgres RLS denied an operation; inspect policies and request role/claims.";
204
+ case "supabase_migration":
205
+ return "A migration or schema-related issue; verify migration order and dependencies.";
206
+ case "env":
207
+ return "An environment variable is missing or accessed from the wrong runtime boundary.";
208
+ case "next_build":
209
+ return "Next.js build/compile error; focus on the first compilation block.";
210
+ case "next_runtime":
211
+ return "Next.js runtime error; verify server/client context and browser-only globals.";
212
+ case "network":
213
+ return "A network/service connectivity issue (connection refused/timeout/port conflict).";
214
+ default:
215
+ return "Unable to confidently categorize the issue from the provided text.";
216
+ }
217
+ })();
218
+ return {
219
+ category,
220
+ severity: severityFromCategory(category),
221
+ detected: {
222
+ isNext: isNext || undefined,
223
+ isSupabase: isSupabase || undefined,
224
+ testRunner: detectedRunner,
225
+ },
226
+ summary,
227
+ suspectedFiles,
228
+ checklist,
229
+ questions,
230
+ redactedInputExcerpt: excerpt,
231
+ signals,
232
+ };
233
+ }
234
+ //# sourceMappingURL=triageIssue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triageIssue.js","sourceRoot":"","sources":["../../../src/core/triage/triageIssue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { createDebuggingServer } from "./server/createDebuggingServer.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { createDebuggingServer } from "./server/createDebuggingServer.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function createDebuggingServer(): McpServer;
3
+ //# sourceMappingURL=createDebuggingServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createDebuggingServer.d.ts","sourceRoot":"","sources":["../../src/server/createDebuggingServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,wBAAgB,qBAAqB,cAYpC"}
@@ -0,0 +1,17 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { registerCheckDebuggingReadinessTool } from "../tools/check_debugging_readiness.js";
3
+ import { registerRefactorGuardedTool } from "../tools/refactor_guarded.js";
4
+ import { registerSuggestPatchTool } from "../tools/suggest_patch.js";
5
+ import { registerTriageIssueTool } from "../tools/triage_issue.js";
6
+ export function createDebuggingServer() {
7
+ const server = new McpServer({
8
+ name: "devkit-debugging-mcp",
9
+ version: "0.1.0",
10
+ });
11
+ registerTriageIssueTool(server);
12
+ registerCheckDebuggingReadinessTool(server);
13
+ registerSuggestPatchTool(server);
14
+ registerRefactorGuardedTool(server);
15
+ return server;
16
+ }
17
+ //# sourceMappingURL=createDebuggingServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createDebuggingServer.js","sourceRoot":"","sources":["../../src/server/createDebuggingServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,mCAAmC,EAAE,MAAM,uCAAuC,CAAC;AAC5F,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,MAAM,UAAU,qBAAqB;IACnC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,mCAAmC,CAAC,MAAM,CAAC,CAAC;IAC5C,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAEpC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { z } from "zod";
3
+ import type { ToolResult } from "../types/contracts.js";
4
+ declare const InputSchema: z.ZodObject<{
5
+ path: z.ZodOptional<z.ZodString>;
6
+ }, "strip", z.ZodTypeAny, {
7
+ path?: string | undefined;
8
+ }, {
9
+ path?: string | undefined;
10
+ }>;
11
+ export declare function runCheckDebuggingReadiness(rawArgs: z.infer<typeof InputSchema>): Promise<ToolResult>;
12
+ export declare function registerCheckDebuggingReadinessTool(server: McpServer): void;
13
+ export {};
14
+ //# sourceMappingURL=check_debugging_readiness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check_debugging_readiness.d.ts","sourceRoot":"","sources":["../../src/tools/check_debugging_readiness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,QAAA,MAAM,WAAW;;;;;;EAEf,CAAC;AAEH,wBAAsB,0BAA0B,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAoB1G;AAED,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,SAAS,QAYpE"}
@@ -0,0 +1,38 @@
1
+ import { z } from "zod";
2
+ import path from "node:path";
3
+ import { toMcpResult } from "../core/mcp/mcpResult.js";
4
+ import { runTool } from "../core/toolRunner.js";
5
+ import { checkDebuggingReadiness } from "../core/readiness/checkReadiness.js";
6
+ import { ToolEnvelopeSchema } from "./schemas.js";
7
+ const InputSchema = z.object({
8
+ path: z.string().min(1).optional(),
9
+ });
10
+ export async function runCheckDebuggingReadiness(rawArgs) {
11
+ const rootDir = path.resolve(rawArgs.path ?? process.cwd());
12
+ const data = await checkDebuggingReadiness(rootDir);
13
+ const hasErrors = data.warnings.some((w) => w.code === "NO_PACKAGE_JSON");
14
+ return hasErrors
15
+ ? {
16
+ ok: false,
17
+ error: { code: "NOT_FOUND", message: "Project root not found or missing package.json.", details: { rootDir } },
18
+ data,
19
+ warnings: data.warnings,
20
+ nextSteps: data.suggestions,
21
+ }
22
+ : {
23
+ ok: true,
24
+ message: "Readiness check complete.",
25
+ data,
26
+ warnings: data.warnings,
27
+ nextSteps: data.suggestions,
28
+ };
29
+ }
30
+ export function registerCheckDebuggingReadinessTool(server) {
31
+ server.registerTool("check_debugging_readiness", {
32
+ title: "Check debugging readiness",
33
+ description: "Inspects a Next.js/Supabase project for basic debugging/testing readiness (scripts, runners, migrations, env example).",
34
+ inputSchema: { path: InputSchema.shape.path },
35
+ outputSchema: ToolEnvelopeSchema,
36
+ }, async (rawArgs) => toMcpResult(await runTool(() => runCheckDebuggingReadiness(rawArgs))));
37
+ }
38
+ //# sourceMappingURL=check_debugging_readiness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check_debugging_readiness.js","sourceRoot":"","sources":["../../src/tools/check_debugging_readiness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAE9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,OAAoC;IACnF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAEpD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;IAC1E,OAAO,SAAS;QACd,CAAC,CAAC;YACE,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,iDAAiD,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE;YAC9G,IAAI;YACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,WAAW;SAC5B;QACH,CAAC,CAAC;YACE,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,2BAA2B;YACpC,IAAI;YACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,WAAW;SAC5B,CAAC;AACR,CAAC;AAED,MAAM,UAAU,mCAAmC,CAAC,MAAiB;IACnE,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EACT,wHAAwH;QAC1H,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE;QAC7C,YAAY,EAAE,kBAAkB;KACjC,EACD,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC,CACzF,CAAC;AACJ,CAAC"}