sdl-mcp 0.8.2 → 0.8.3

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 (79) hide show
  1. package/dist/code/hotpath.d.ts.map +1 -1
  2. package/dist/code/hotpath.js +49 -8
  3. package/dist/code/hotpath.js.map +1 -1
  4. package/dist/code/redact.d.ts.map +1 -1
  5. package/dist/code/redact.js +8 -4
  6. package/dist/code/redact.js.map +1 -1
  7. package/dist/code/skeleton.d.ts.map +1 -1
  8. package/dist/code/skeleton.js +259 -35
  9. package/dist/code/skeleton.js.map +1 -1
  10. package/dist/db/kuzu-metrics.d.ts +5 -0
  11. package/dist/db/kuzu-metrics.d.ts.map +1 -1
  12. package/dist/db/kuzu-metrics.js +28 -1
  13. package/dist/db/kuzu-metrics.js.map +1 -1
  14. package/dist/db/kuzu.d.ts.map +1 -1
  15. package/dist/db/kuzu.js +80 -38
  16. package/dist/db/kuzu.js.map +1 -1
  17. package/dist/graph/metrics.d.ts.map +1 -1
  18. package/dist/graph/metrics.js +48 -9
  19. package/dist/graph/metrics.js.map +1 -1
  20. package/dist/graph/prefetch.d.ts.map +1 -1
  21. package/dist/graph/prefetch.js +8 -1
  22. package/dist/graph/prefetch.js.map +1 -1
  23. package/dist/graph/process.d.ts.map +1 -1
  24. package/dist/graph/process.js +4 -5
  25. package/dist/graph/process.js.map +1 -1
  26. package/dist/graph/slice/start-node-resolver.d.ts.map +1 -1
  27. package/dist/graph/slice/start-node-resolver.js +90 -0
  28. package/dist/graph/slice/start-node-resolver.js.map +1 -1
  29. package/dist/indexer/adapter/plugin/loader.d.ts +1 -1
  30. package/dist/indexer/adapter/plugin/loader.d.ts.map +1 -1
  31. package/dist/indexer/adapter/plugin/loader.js +19 -2
  32. package/dist/indexer/adapter/plugin/loader.js.map +1 -1
  33. package/dist/indexer/edge-builder/pass2.d.ts.map +1 -1
  34. package/dist/indexer/edge-builder/pass2.js +13 -2
  35. package/dist/indexer/edge-builder/pass2.js.map +1 -1
  36. package/dist/indexer/fileScanner.d.ts.map +1 -1
  37. package/dist/indexer/fileScanner.js +1 -0
  38. package/dist/indexer/fileScanner.js.map +1 -1
  39. package/dist/indexer/indexer.d.ts +1 -1
  40. package/dist/indexer/indexer.d.ts.map +1 -1
  41. package/dist/indexer/indexer.js +50 -5
  42. package/dist/indexer/indexer.js.map +1 -1
  43. package/dist/indexer/parser/process-file.d.ts.map +1 -1
  44. package/dist/indexer/parser/process-file.js +40 -4
  45. package/dist/indexer/parser/process-file.js.map +1 -1
  46. package/dist/indexer/parser/rust-process-file.d.ts.map +1 -1
  47. package/dist/indexer/parser/rust-process-file.js +39 -4
  48. package/dist/indexer/parser/rust-process-file.js.map +1 -1
  49. package/dist/indexer/pass2/resolvers/go-pass2-resolver.d.ts.map +1 -1
  50. package/dist/indexer/pass2/resolvers/go-pass2-resolver.js +15 -5
  51. package/dist/indexer/pass2/resolvers/go-pass2-resolver.js.map +1 -1
  52. package/dist/indexer/rustIndexer.d.ts.map +1 -1
  53. package/dist/indexer/rustIndexer.js +9 -2
  54. package/dist/indexer/rustIndexer.js.map +1 -1
  55. package/dist/indexer/watcher.d.ts.map +1 -1
  56. package/dist/indexer/watcher.js +20 -11
  57. package/dist/indexer/watcher.js.map +1 -1
  58. package/dist/mcp/health.d.ts.map +1 -1
  59. package/dist/mcp/health.js +12 -2
  60. package/dist/mcp/health.js.map +1 -1
  61. package/dist/mcp/tools/policy.d.ts.map +1 -1
  62. package/dist/mcp/tools/policy.js +22 -2
  63. package/dist/mcp/tools/policy.js.map +1 -1
  64. package/dist/mcp/tools/repo.d.ts.map +1 -1
  65. package/dist/mcp/tools/repo.js +20 -9
  66. package/dist/mcp/tools/repo.js.map +1 -1
  67. package/dist/mcp/tools.d.ts.map +1 -1
  68. package/dist/mcp/tools.js +27 -13
  69. package/dist/mcp/tools.js.map +1 -1
  70. package/dist/ts/diagnostics.d.ts.map +1 -1
  71. package/dist/ts/diagnostics.js +19 -5
  72. package/dist/ts/diagnostics.js.map +1 -1
  73. package/dist/ts/mapping.d.ts.map +1 -1
  74. package/dist/ts/mapping.js +2 -1
  75. package/dist/ts/mapping.js.map +1 -1
  76. package/dist/util/safeRegex.d.ts.map +1 -1
  77. package/dist/util/safeRegex.js +19 -9
  78. package/dist/util/safeRegex.js.map +1 -1
  79. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"hotpath.d.ts","sourceRoot":"","sources":["../../src/code/hotpath.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAsBhD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,KAAK,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;CACpB;AAgOD,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAoF/B"}
1
+ {"version":3,"file":"hotpath.d.ts","sourceRoot":"","sources":["../../src/code/hotpath.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAgDhD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,KAAK,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;CACpB;AAmPD,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAoF/B"}
@@ -7,19 +7,34 @@ import { DEFAULT_CONTEXT_LINES, DEFAULT_MAX_LINES_HOTPATH, DEFAULT_MAX_TOKENS_HO
7
7
  import { logger } from "../util/logger.js";
8
8
  import { getKuzuConn } from "../db/kuzu.js";
9
9
  import * as kuzuDb from "../db/kuzu-queries.js";
10
+ import { getParser as getGrammarParser } from "../indexer/treesitter/grammarLoader.js";
10
11
  const tsParser = new Parser();
11
12
  const tsxParser = new Parser();
12
13
  tsParser.setLanguage(TypeScript.typescript);
13
14
  tsxParser.setLanguage(TypeScript.tsx);
15
+ /**
16
+ * Maps file extensions to grammarLoader language IDs for non-JS/TS languages.
17
+ */
18
+ const EXTENSION_TO_LANGUAGE = {
19
+ ".py": "python",
20
+ ".go": "go",
21
+ ".java": "java",
22
+ ".rs": "rust",
23
+ ".cs": "csharp",
24
+ ".c": "c",
25
+ ".h": "c",
26
+ ".cpp": "cpp",
27
+ ".cc": "cpp",
28
+ ".cxx": "cpp",
29
+ ".hpp": "cpp",
30
+ ".php": "php",
31
+ ".kt": "kotlin",
32
+ ".kts": "kotlin",
33
+ ".sh": "bash",
34
+ ".bash": "bash",
35
+ };
14
36
  function parseFile(content, extension) {
15
37
  try {
16
- const isTS = extension === ".ts";
17
- const isTSX = extension === ".tsx";
18
- const isJS = extension === ".js";
19
- const isJSX = extension === ".jsx";
20
- if (!isTS && !isTSX && !isJS && !isJSX) {
21
- return null;
22
- }
23
38
  // Guard: reject content exceeding the tree-sitter safety limit.
24
39
  const byteLength = Buffer.byteLength(content, "utf-8");
25
40
  if (byteLength > MAX_TREESITTER_PARSE_BYTES) {
@@ -30,7 +45,33 @@ function parseFile(content, extension) {
30
45
  });
31
46
  return null;
32
47
  }
33
- const parser = isTS ? tsParser : tsxParser;
48
+ // JS/TS: use dedicated parsers (handle JSX/TSX correctly)
49
+ const isTS = extension === ".ts";
50
+ const isTSX = extension === ".tsx";
51
+ const isJS = extension === ".js";
52
+ const isJSX = extension === ".jsx";
53
+ let parser = null;
54
+ if (isTS || isTSX || isJS || isJSX) {
55
+ parser = isTS || isJS ? tsParser : tsxParser;
56
+ }
57
+ else {
58
+ // All other languages: use the shared grammarLoader
59
+ const language = EXTENSION_TO_LANGUAGE[extension];
60
+ if (!language) {
61
+ logger.debug("No grammar available for hot path generation", {
62
+ extension,
63
+ });
64
+ return null;
65
+ }
66
+ parser = getGrammarParser(language);
67
+ if (!parser) {
68
+ logger.debug("Grammar parser not loaded for hot path generation", {
69
+ extension,
70
+ language,
71
+ });
72
+ return null;
73
+ }
74
+ }
34
75
  // Use 1MB buffer to handle files >32KB (tree-sitter default limit)
35
76
  const tree = parser.parse(content, undefined, {
36
77
  bufferSize: 1024 * 1024,
@@ -1 +1 @@
1
- {"version":3,"file":"hotpath.js","sourceRoot":"","sources":["../../src/code/hotpath.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hotpath.js","sourceRoot":"","sources":["../../src/code/hotpath.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/code/redact.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACpC;AAuDD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,qBAAqB,EAAE,GAC9B,gBAAgB,EAAE,CAepB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,CAAC,EAAE,eAAe,GACvB,gBAAgB,EAAE,CAOpB;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,gBAAgB,EAAE,GAC5B,MAAM,CAUR;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAW1D"}
1
+ {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/code/redact.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACpC;AAuDD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,qBAAqB,EAAE,GAC9B,gBAAgB,EAAE,CAkBpB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,CAAC,EAAE,eAAe,GACvB,gBAAgB,EAAE,CAOpB;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,gBAAgB,EAAE,GAC5B,MAAM,CAUR;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAW1D"}
@@ -1,5 +1,6 @@
1
1
  import path from "path";
2
2
  import { logger } from "../util/logger.js";
3
+ import { safeCompileRegex } from "../util/safeRegex.js";
3
4
  const DEFAULT_PATTERNS = [
4
5
  {
5
6
  name: "aws-access-key",
@@ -52,14 +53,17 @@ const EXCLUDED_FILES = [
52
53
  export function compilePatterns(inputs) {
53
54
  const compiled = [];
54
55
  inputs.forEach((input, index) => {
55
- try {
56
+ const compiledPattern = safeCompileRegex(input.pattern, input.flags ?? "g");
57
+ if (compiledPattern) {
56
58
  compiled.push({
57
59
  name: input.name ?? `custom-${index}`,
58
- pattern: new RegExp(input.pattern, input.flags ?? "g"),
60
+ pattern: compiledPattern,
59
61
  });
60
62
  }
61
- catch (error) {
62
- logger.warn("Invalid redaction pattern skipped", { name: input.name ?? input.pattern });
63
+ else {
64
+ logger.warn("Unsafe or invalid redaction pattern skipped", {
65
+ name: input.name ?? input.pattern,
66
+ });
63
67
  }
64
68
  });
65
69
  return compiled;
@@ -1 +1 @@
1
- {"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/code/redact.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/code/redact.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/code/skeleton.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAc,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGxE,OAAO,MAAM,MAAM,aAAa,CAAC;AAoBjC,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,KAAK,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,UAAU,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,KAAK,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAUD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,CAAC,UAAU,EACvB,OAAO,EAAE,MAAM,EACf,kBAAkB,EAAE,MAAM,EAAE,EAC5B,KAAK,GAAE,MAAU,EACjB,YAAY,GAAE,OAAe,GAC5B,MAAM,CAqIR;AAoID,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAyBtC;AAED,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAAC,IAAI,GAAG,IAAI,CAyCpB;AA6BD,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA8FhC;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,GAAE,OAAe,EAC7B,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAmEhC;AA4PD,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAmGlC"}
1
+ {"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/code/skeleton.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAc,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGxE,OAAO,MAAM,MAAM,aAAa,CAAC;AAqBjC,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,KAAK,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,UAAU,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,KAAK,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAuFD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,CAAC,UAAU,EACvB,OAAO,EAAE,MAAM,EACf,kBAAkB,EAAE,MAAM,EAAE,EAC5B,KAAK,GAAE,MAAU,EACjB,YAAY,GAAE,OAAe,GAC5B,MAAM,CAqLR;AAqMD,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAyBtC;AA4BD,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAAC,IAAI,GAAG,IAAI,CA4DpB;AA6BD,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAmGhC;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,GAAE,OAAe,EAC7B,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAuEhC;AA4PD,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAwGlC"}
@@ -8,6 +8,7 @@ import { DEFAULT_MAX_LINES_SKELETON, DEFAULT_MAX_TOKENS_SKELETON, DEFAULT_MAX_LI
8
8
  import { getKuzuConn } from "../db/kuzu.js";
9
9
  import * as kuzuDb from "../db/kuzu-queries.js";
10
10
  import { logger } from "../util/logger.js";
11
+ import { getParser as getGrammarParser } from "../indexer/treesitter/grammarLoader.js";
11
12
  const tsParser = new Parser();
12
13
  const tsxParser = new Parser();
13
14
  tsParser.setLanguage(TypeScript.typescript);
@@ -17,19 +18,94 @@ function shouldIncludeIdentifier(identifier, includeIdentifiers = []) {
17
18
  return false;
18
19
  return includeIdentifiers.includes(identifier);
19
20
  }
21
+ /**
22
+ * Node types that represent top-level containers (file/module root).
23
+ * These get their children recursively processed.
24
+ */
25
+ const ROOT_CONTAINER_TYPES = new Set([
26
+ // JS/TS
27
+ "source_file",
28
+ "program",
29
+ // Python
30
+ "module",
31
+ // Go, Rust, C/C++
32
+ "translation_unit",
33
+ ]);
34
+ /**
35
+ * Node types that are rendered verbatim (imports, type declarations).
36
+ */
37
+ const VERBATIM_TYPES = new Set([
38
+ // JS/TS
39
+ "import_statement",
40
+ "interface_declaration",
41
+ "type_alias_declaration",
42
+ "enum_declaration",
43
+ // Python
44
+ "import_from_statement",
45
+ // Go
46
+ "import_declaration",
47
+ // Rust
48
+ "use_declaration",
49
+ // Java/Kotlin/C#
50
+ "import_declaration",
51
+ // C/C++
52
+ "preproc_include",
53
+ "preproc_def",
54
+ ]);
55
+ /**
56
+ * Node types for functions/classes/methods that have a body to elide.
57
+ */
58
+ const FUNCTION_LIKE_TYPES = new Set([
59
+ // JS/TS
60
+ "function_declaration",
61
+ "class_declaration",
62
+ "method_definition",
63
+ // Python
64
+ "function_definition",
65
+ "class_definition",
66
+ // Go
67
+ "function_declaration",
68
+ "method_declaration",
69
+ // Rust
70
+ "function_item",
71
+ "impl_item",
72
+ "struct_item",
73
+ // Java/Kotlin/C#
74
+ "method_declaration",
75
+ "constructor_declaration",
76
+ // C/C++
77
+ "function_definition",
78
+ ]);
79
+ /**
80
+ * Node types that represent function/class bodies across languages.
81
+ */
82
+ const BODY_TYPES = new Set([
83
+ // JS/TS
84
+ "statement_block",
85
+ // Python
86
+ "block",
87
+ // Go, Rust, Java, C#, C/C++
88
+ "block",
89
+ "compound_statement",
90
+ "declaration_list",
91
+ "field_declaration_list",
92
+ "class_body",
93
+ ]);
20
94
  export function extractSkeletonFromNode(node, content, includeIdentifiers, depth = 0, exportedOnly = false) {
21
95
  const nodeType = node.type;
22
- if (nodeType === "source_file" || nodeType === "program") {
96
+ // Root containers: process children
97
+ if (ROOT_CONTAINER_TYPES.has(nodeType)) {
23
98
  let result = "";
99
+ // First pass: imports
24
100
  for (const child of node.children) {
25
- if (child.type === "import_statement" ||
26
- child.type === "export_statement") {
101
+ if (VERBATIM_TYPES.has(child.type) || child.type === "export_statement") {
27
102
  result += extractSkeletonFromNode(child, content, includeIdentifiers, depth, exportedOnly);
28
103
  }
29
104
  }
105
+ // Second pass: non-imports
30
106
  if (!exportedOnly) {
31
107
  for (const child of node.children) {
32
- if (child.type !== "import_statement" &&
108
+ if (!VERBATIM_TYPES.has(child.type) &&
33
109
  child.type !== "export_statement") {
34
110
  result += extractSkeletonFromNode(child, content, includeIdentifiers, depth, exportedOnly);
35
111
  }
@@ -37,12 +113,15 @@ export function extractSkeletonFromNode(node, content, includeIdentifiers, depth
37
113
  }
38
114
  return result;
39
115
  }
40
- if (nodeType === "import_statement" ||
41
- nodeType === "interface_declaration" ||
42
- nodeType === "type_alias_declaration" ||
43
- nodeType === "enum_declaration") {
116
+ // Verbatim types: render as-is
117
+ if (VERBATIM_TYPES.has(nodeType)) {
44
118
  return node.text + "\n";
45
119
  }
120
+ // Python: import_statement (different from JS import_statement handled above)
121
+ if (nodeType === "import_statement" && !node.text.startsWith("import {")) {
122
+ return node.text + "\n";
123
+ }
124
+ // Export statement (JS/TS)
46
125
  if (nodeType === "export_statement") {
47
126
  let result = "export ";
48
127
  for (const child of node.children) {
@@ -52,6 +131,7 @@ export function extractSkeletonFromNode(node, content, includeIdentifiers, depth
52
131
  }
53
132
  return result;
54
133
  }
134
+ // Variable declaration (JS/TS)
55
135
  if (nodeType === "variable_declaration") {
56
136
  const isExported = node.children.some((c) => c.type === "export_clause" || c.text === "export");
57
137
  if (isExported) {
@@ -64,23 +144,59 @@ export function extractSkeletonFromNode(node, content, includeIdentifiers, depth
64
144
  }
65
145
  return "";
66
146
  }
67
- if (nodeType === "function_declaration" ||
68
- nodeType === "class_declaration" ||
69
- nodeType === "method_definition") {
147
+ // Python: decorated_definition unwrap and process the inner definition
148
+ if (nodeType === "decorated_definition") {
149
+ let result = "";
150
+ for (const child of node.children) {
151
+ if (child.type === "decorator") {
152
+ result += child.text + "\n";
153
+ }
154
+ else {
155
+ result += extractSkeletonFromNode(child, content, includeIdentifiers, depth, exportedOnly);
156
+ }
157
+ }
158
+ return result;
159
+ }
160
+ // Rust: type declarations rendered verbatim
161
+ if (nodeType === "struct_item" ||
162
+ nodeType === "enum_item" ||
163
+ nodeType === "trait_item" ||
164
+ nodeType === "type_item") {
70
165
  const lines = node.text.split("\n");
71
- const signature = lines[0] || "";
72
- const hasBody = node.children.some((c) => c.type === "statement_block");
73
- if (!hasBody) {
74
- return node.text + "\n";
166
+ if (lines.length > 5) {
167
+ const firstLine = lines[0] || "";
168
+ return firstLine + "\n// …\n";
75
169
  }
76
- const bodyNode = node.children.find((c) => c.type === "statement_block");
170
+ return node.text + "\n";
171
+ }
172
+ // Go: type_declaration rendered verbatim
173
+ if (nodeType === "type_declaration") {
174
+ const lines = node.text.split("\n");
175
+ if (lines.length > 5) {
176
+ const firstLine = lines[0] || "";
177
+ return firstLine + "\n// …\n";
178
+ }
179
+ return node.text + "\n";
180
+ }
181
+ // Function/class/method-like types: extract signature + elide body
182
+ if (FUNCTION_LIKE_TYPES.has(nodeType)) {
183
+ const lines = node.text.split("\n");
184
+ const signature = lines[0] || "";
185
+ // Find the body node using the language-agnostic body type set
186
+ const bodyNode = node.children.find((c) => BODY_TYPES.has(c.type));
77
187
  if (!bodyNode) {
188
+ // No body (e.g., abstract method, forward declaration)
78
189
  return node.text + "\n";
79
190
  }
80
191
  const bodySkeleton = extractSkeletonFromBody(bodyNode, content, includeIdentifiers);
192
+ // Python uses indentation, not braces
193
+ if (nodeType === "function_definition" || nodeType === "class_definition") {
194
+ return signature + "\n" + bodySkeleton;
195
+ }
81
196
  const result = signature + " {\n" + bodySkeleton + "}\n";
82
197
  return result;
83
198
  }
199
+ // Arrow function (JS/TS)
84
200
  if (nodeType === "arrow_function") {
85
201
  const lines = node.text.split("\n");
86
202
  const signature = lines[0] || "";
@@ -95,11 +211,26 @@ export function extractSkeletonFromNode(node, content, includeIdentifiers, depth
95
211
  const bodySkeleton = extractSkeletonFromBody(bodyNode, content, includeIdentifiers);
96
212
  return signature + " {\n" + bodySkeleton + "}";
97
213
  }
98
- if (nodeType === "statement_block") {
214
+ // Body blocks: delegate to body extraction
215
+ if (BODY_TYPES.has(nodeType)) {
99
216
  return extractSkeletonFromBody(node, content, includeIdentifiers);
100
217
  }
101
218
  return node.text;
102
219
  }
220
+ /**
221
+ * Node types that represent return/throw/raise across languages.
222
+ */
223
+ const RETURN_LIKE_TYPES = new Set([
224
+ "return_statement",
225
+ "throw_statement",
226
+ // Python
227
+ "return_statement",
228
+ "raise_statement",
229
+ // Go
230
+ "return_statement",
231
+ // Rust
232
+ "return_expression",
233
+ ]);
103
234
  function extractSkeletonFromBody(bodyNode, content, includeIdentifiers) {
104
235
  let result = "";
105
236
  const lines = bodyNode.text.split("\n");
@@ -110,6 +241,14 @@ function extractSkeletonFromBody(bodyNode, content, includeIdentifiers) {
110
241
  for (const child of bodyNode.children) {
111
242
  const childType = child.type;
112
243
  const childText = child.text.trim();
244
+ // Skip whitespace/comment-only nodes
245
+ if (!childText ||
246
+ childType === "comment" ||
247
+ childType === "line_comment" ||
248
+ childType === "block_comment") {
249
+ continue;
250
+ }
251
+ // Lexical declarations (JS/TS: const/let/var)
113
252
  if (childType === "lexical_declaration") {
114
253
  const hasImportantIdentifier = includeIdentifiers.some((id) => childText.includes(id));
115
254
  if (hasImportantIdentifier) {
@@ -117,8 +256,9 @@ function extractSkeletonFromBody(bodyNode, content, includeIdentifiers) {
117
256
  processedStatements++;
118
257
  }
119
258
  }
259
+ // Expression statements (common across languages)
120
260
  else if (childType === "expression_statement") {
121
- const isReturn = child.children.some((c) => c.type === "return_statement");
261
+ const isReturn = child.children.some((c) => RETURN_LIKE_TYPES.has(c.type));
122
262
  const isThrow = child.children.some((c) => c.type === "throw_statement");
123
263
  const hasImportantIdentifier = includeIdentifiers.some((id) => childText.includes(id)) ||
124
264
  shouldIncludeIdentifier(childText, includeIdentifiers);
@@ -127,10 +267,17 @@ function extractSkeletonFromBody(bodyNode, content, includeIdentifiers) {
127
267
  processedStatements++;
128
268
  }
129
269
  }
130
- else if (childType === "if_statement") {
131
- const condition = child.children.find((c) => c.type === "parenthesized_expression");
270
+ // Return/raise/throw statements (when they appear directly, not inside expression_statement)
271
+ else if (RETURN_LIKE_TYPES.has(childType)) {
272
+ result += child.text.trim() + "\n";
273
+ processedStatements++;
274
+ }
275
+ // If statements (language-agnostic)
276
+ else if (childType === "if_statement" || childType === "if_expression") {
277
+ const condition = child.children.find((c) => c.type === "parenthesized_expression" ||
278
+ c.type === "condition_clause");
132
279
  const conditionText = condition ? condition.text : "";
133
- const thenBlock = child.children.find((c) => c.type === "statement_block");
280
+ const thenBlock = child.children.find((c) => BODY_TYPES.has(c.type));
134
281
  const elseBlock = child.children.find((c) => c.text.startsWith("else"));
135
282
  let ifLine = "if " + conditionText;
136
283
  if (thenBlock) {
@@ -138,7 +285,7 @@ function extractSkeletonFromBody(bodyNode, content, includeIdentifiers) {
138
285
  ifLine += " {\n" + thenSkeleton + "}";
139
286
  }
140
287
  if (elseBlock) {
141
- const elseChild = elseBlock.children.find((c) => c.type === "statement_block");
288
+ const elseChild = elseBlock.children.find((c) => BODY_TYPES.has(c.type));
142
289
  if (elseChild) {
143
290
  const elseSkeleton = extractSkeletonFromBody(elseChild, content, includeIdentifiers);
144
291
  ifLine += " else {\n" + elseSkeleton + "}";
@@ -147,14 +294,18 @@ function extractSkeletonFromBody(bodyNode, content, includeIdentifiers) {
147
294
  result += ifLine + "\n";
148
295
  processedStatements++;
149
296
  }
297
+ // Loop statements (language-agnostic)
150
298
  else if (childType === "for_statement" ||
151
299
  childType === "for_in_statement" ||
152
- childType === "while_statement") {
300
+ childType === "while_statement" ||
301
+ childType === "for_expression" ||
302
+ childType === "while_expression") {
153
303
  const condition = child.children.find((c) => c.type === "parenthesized_expression");
154
304
  const conditionText = condition ? condition.text : "";
155
- const body = child.children.find((c) => c.type === "statement_block");
305
+ const body = child.children.find((c) => BODY_TYPES.has(c.type));
156
306
  const loopKeyword = childType
157
307
  .replace("_statement", "")
308
+ .replace("_expression", "")
158
309
  .replace("_in", "");
159
310
  let loopLine = loopKeyword + " " + conditionText;
160
311
  if (body) {
@@ -164,12 +315,30 @@ function extractSkeletonFromBody(bodyNode, content, includeIdentifiers) {
164
315
  result += loopLine + "\n";
165
316
  processedStatements++;
166
317
  }
318
+ // Try/catch/finally (language-agnostic)
167
319
  else if (childType === "try_statement" ||
168
320
  childType === "catch_clause" ||
321
+ childType === "except_clause" ||
169
322
  childType === "finally_clause") {
170
323
  result += child.text.trim() + "\n";
171
324
  processedStatements++;
172
325
  }
326
+ // Nested function/class definitions (Python, Go, Rust)
327
+ else if (FUNCTION_LIKE_TYPES.has(childType) ||
328
+ childType === "decorated_definition") {
329
+ result +=
330
+ extractSkeletonFromNode(child, content, includeIdentifiers, 1) + "\n";
331
+ processedStatements++;
332
+ }
333
+ // Assignment (Python)
334
+ else if (childType === "assignment" ||
335
+ childType === "short_var_declaration") {
336
+ const hasImportantIdentifier = includeIdentifiers.some((id) => childText.includes(id));
337
+ if (hasImportantIdentifier) {
338
+ result += child.text.trim() + "\n";
339
+ processedStatements++;
340
+ }
341
+ }
173
342
  }
174
343
  if (processedStatements === 0 && lines.length > 3) {
175
344
  return "// …\n";
@@ -207,15 +376,30 @@ export function trimSkeletonToBounds(skeleton, maxLines, maxTokens) {
207
376
  const truncated = result.length < lines.length;
208
377
  return { code: result.join("\n"), truncated };
209
378
  }
379
+ /**
380
+ * Maps file extensions to grammarLoader language IDs for non-JS/TS languages.
381
+ * JS/TS uses the dedicated tsParser/tsxParser (which handle JSX/TSX correctly).
382
+ */
383
+ const EXTENSION_TO_LANGUAGE = {
384
+ ".py": "python",
385
+ ".go": "go",
386
+ ".java": "java",
387
+ ".rs": "rust",
388
+ ".cs": "csharp",
389
+ ".c": "c",
390
+ ".h": "c",
391
+ ".cpp": "cpp",
392
+ ".cc": "cpp",
393
+ ".cxx": "cpp",
394
+ ".hpp": "cpp",
395
+ ".php": "php",
396
+ ".kt": "kotlin",
397
+ ".kts": "kotlin",
398
+ ".sh": "bash",
399
+ ".bash": "bash",
400
+ };
210
401
  export function parseFile(content, extension) {
211
402
  try {
212
- const isTS = extension === ".ts";
213
- const isTSX = extension === ".tsx";
214
- const isJS = extension === ".js";
215
- const isJSX = extension === ".jsx";
216
- if (!isTS && !isTSX && !isJS && !isJSX) {
217
- return null;
218
- }
219
403
  // Guard: reject content exceeding the tree-sitter safety limit.
220
404
  // Buffer.byteLength is more accurate than .length for multi-byte chars.
221
405
  const byteLength = Buffer.byteLength(content, "utf-8");
@@ -227,7 +411,33 @@ export function parseFile(content, extension) {
227
411
  });
228
412
  return null;
229
413
  }
230
- const parser = isTS ? tsParser : tsxParser;
414
+ // JS/TS: use dedicated parsers (handle JSX/TSX correctly)
415
+ const isTS = extension === ".ts";
416
+ const isTSX = extension === ".tsx";
417
+ const isJS = extension === ".js";
418
+ const isJSX = extension === ".jsx";
419
+ let parser = null;
420
+ if (isTS || isTSX || isJS || isJSX) {
421
+ parser = isTS || isJS ? tsParser : tsxParser;
422
+ }
423
+ else {
424
+ // All other languages: use the shared grammarLoader
425
+ const language = EXTENSION_TO_LANGUAGE[extension];
426
+ if (!language) {
427
+ logger.debug("No grammar available for skeleton generation", {
428
+ extension,
429
+ });
430
+ return null;
431
+ }
432
+ parser = getGrammarParser(language);
433
+ if (!parser) {
434
+ logger.debug("Grammar parser not loaded for skeleton generation", {
435
+ extension,
436
+ language,
437
+ });
438
+ return null;
439
+ }
440
+ }
231
441
  // Use 1MB buffer to handle files >32KB (tree-sitter default limit)
232
442
  const tree = parser.parse(content, undefined, {
233
443
  bufferSize: 1024 * 1024,
@@ -285,7 +495,12 @@ export async function generateSymbolSkeleton(repoId, symbolId, options = {}) {
285
495
  return null;
286
496
  }
287
497
  }
288
- catch {
498
+ catch (error) {
499
+ logger.debug("Failed to stat file during symbol skeleton generation", {
500
+ file: file.relPath,
501
+ symbolId,
502
+ error: error instanceof Error ? error.message : String(error),
503
+ });
289
504
  return null;
290
505
  }
291
506
  const content = await readFile(filePath, "utf-8");
@@ -348,7 +563,11 @@ export async function generateFileSkeleton(repoId, filePath, exportedOnly = fals
348
563
  return null;
349
564
  }
350
565
  }
351
- catch {
566
+ catch (error) {
567
+ logger.debug("Failed to stat file during file skeleton generation", {
568
+ file: filePath,
569
+ error: error instanceof Error ? error.message : String(error),
570
+ });
352
571
  return null;
353
572
  }
354
573
  const content = await readFile(absPath, "utf-8");
@@ -617,7 +836,12 @@ export async function generateSkeletonIR(repoId, symbolId, options = {}) {
617
836
  return null;
618
837
  }
619
838
  }
620
- catch {
839
+ catch (error) {
840
+ logger.debug("Failed to stat file during skeleton IR generation", {
841
+ file: file.relPath,
842
+ symbolId,
843
+ error: error instanceof Error ? error.message : String(error),
844
+ });
621
845
  return null;
622
846
  }
623
847
  const content = await readFile(filePath, "utf-8");