mcp-code-context 2.5.1 → 3.0.4

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 (129) hide show
  1. package/CHANGELOG.md +92 -236
  2. package/README.md +304 -298
  3. package/dist/src/core/engine.d.ts +21 -0
  4. package/dist/src/core/engine.js +68 -0
  5. package/dist/src/core/engine.js.map +1 -0
  6. package/dist/src/core/validator.d.ts +15 -0
  7. package/dist/src/core/validator.js +44 -0
  8. package/dist/src/core/validator.js.map +1 -0
  9. package/dist/src/index.d.ts +7 -11
  10. package/dist/src/index.js +182 -397
  11. package/dist/src/index.js.map +1 -1
  12. package/dist/src/operations/write.d.ts +51 -0
  13. package/dist/src/operations/write.js +169 -0
  14. package/dist/src/operations/write.js.map +1 -0
  15. package/dist/src/parsers/base.d.ts +28 -0
  16. package/dist/src/parsers/base.js +27 -0
  17. package/dist/src/parsers/base.js.map +1 -0
  18. package/dist/src/parsers/dartTreeSitter.d.ts +13 -0
  19. package/dist/src/parsers/dartTreeSitter.js +91 -0
  20. package/dist/src/parsers/dartTreeSitter.js.map +1 -0
  21. package/dist/src/parsers/php.d.ts +12 -0
  22. package/dist/src/parsers/php.js +86 -0
  23. package/dist/src/parsers/php.js.map +1 -0
  24. package/dist/src/parsers/python.d.ts +12 -0
  25. package/dist/src/parsers/python.js +86 -0
  26. package/dist/src/parsers/python.js.map +1 -0
  27. package/dist/src/parsers/registry.d.ts +15 -0
  28. package/dist/src/parsers/registry.js +70 -0
  29. package/dist/src/parsers/registry.js.map +1 -0
  30. package/dist/src/parsers/typescript.d.ts +13 -0
  31. package/dist/src/parsers/typescript.js +98 -0
  32. package/dist/src/parsers/typescript.js.map +1 -0
  33. package/llms.txt +246 -234
  34. package/mcp-code-context-3.0.2.tgz +0 -0
  35. package/package.json +59 -57
  36. package/tsconfig.tests.json +27 -0
  37. package/.io/RULES.md +0 -12
  38. package/CONTRIBUTING.md +0 -243
  39. package/PLAN_v2.5.0.md +0 -407
  40. package/TROUBLESHOOTING.md +0 -38
  41. package/dist/src/ast/dartCompressor.d.ts +0 -27
  42. package/dist/src/ast/dartCompressor.js +0 -859
  43. package/dist/src/ast/dartCompressor.js.map +0 -1
  44. package/dist/src/ast/phpCompressor.d.ts +0 -24
  45. package/dist/src/ast/phpCompressor.js +0 -634
  46. package/dist/src/ast/phpCompressor.js.map +0 -1
  47. package/dist/src/ast/semanticCompressor.d.ts +0 -22
  48. package/dist/src/ast/semanticCompressor.js +0 -677
  49. package/dist/src/ast/semanticCompressor.js.map +0 -1
  50. package/dist/src/ast/writers/dartWriter.d.ts +0 -37
  51. package/dist/src/ast/writers/dartWriter.js +0 -544
  52. package/dist/src/ast/writers/dartWriter.js.map +0 -1
  53. package/dist/src/ast/writers/phpWriter.d.ts +0 -37
  54. package/dist/src/ast/writers/phpWriter.js +0 -411
  55. package/dist/src/ast/writers/phpWriter.js.map +0 -1
  56. package/dist/src/ast/writers/pyWriter.d.ts +0 -37
  57. package/dist/src/ast/writers/pyWriter.js +0 -355
  58. package/dist/src/ast/writers/pyWriter.js.map +0 -1
  59. package/dist/src/ast/writers/safeRename.d.ts +0 -14
  60. package/dist/src/ast/writers/safeRename.js +0 -258
  61. package/dist/src/ast/writers/safeRename.js.map +0 -1
  62. package/dist/src/ast/writers/symbolWriter.d.ts +0 -64
  63. package/dist/src/ast/writers/symbolWriter.js +0 -174
  64. package/dist/src/ast/writers/symbolWriter.js.map +0 -1
  65. package/dist/src/ast/writers/tsWriter.d.ts +0 -38
  66. package/dist/src/ast/writers/tsWriter.js +0 -344
  67. package/dist/src/ast/writers/tsWriter.js.map +0 -1
  68. package/dist/src/cache/astCache.d.ts +0 -39
  69. package/dist/src/cache/astCache.js +0 -169
  70. package/dist/src/cache/astCache.js.map +0 -1
  71. package/dist/src/handlers/readHandlers.d.ts +0 -70
  72. package/dist/src/handlers/readHandlers.js +0 -455
  73. package/dist/src/handlers/readHandlers.js.map +0 -1
  74. package/dist/src/handlers/utilHandlers.d.ts +0 -31
  75. package/dist/src/handlers/utilHandlers.js +0 -69
  76. package/dist/src/handlers/utilHandlers.js.map +0 -1
  77. package/dist/src/handlers/writeHandlers.d.ts +0 -57
  78. package/dist/src/handlers/writeHandlers.js +0 -499
  79. package/dist/src/handlers/writeHandlers.js.map +0 -1
  80. package/dist/src/tools/readFileLines.d.ts +0 -26
  81. package/dist/src/tools/readFileLines.js +0 -77
  82. package/dist/src/tools/readFileLines.js.map +0 -1
  83. package/dist/src/tools/searchCodePattern.d.ts +0 -37
  84. package/dist/src/tools/searchCodePattern.js +0 -144
  85. package/dist/src/tools/searchCodePattern.js.map +0 -1
  86. package/dist/src/utils/arrayUtils.d.ts +0 -12
  87. package/dist/src/utils/arrayUtils.js +0 -27
  88. package/dist/src/utils/arrayUtils.js.map +0 -1
  89. package/dist/src/utils/backupManager.d.ts +0 -31
  90. package/dist/src/utils/backupManager.js +0 -124
  91. package/dist/src/utils/backupManager.js.map +0 -1
  92. package/dist/src/utils/confirmationCache.d.ts +0 -16
  93. package/dist/src/utils/confirmationCache.js +0 -40
  94. package/dist/src/utils/confirmationCache.js.map +0 -1
  95. package/dist/src/utils/constants.d.ts +0 -46
  96. package/dist/src/utils/constants.js +0 -112
  97. package/dist/src/utils/constants.js.map +0 -1
  98. package/dist/src/utils/dependencyChecker.d.ts +0 -1
  99. package/dist/src/utils/dependencyChecker.js +0 -55
  100. package/dist/src/utils/dependencyChecker.js.map +0 -1
  101. package/dist/src/utils/diffEngine.d.ts +0 -21
  102. package/dist/src/utils/diffEngine.js +0 -163
  103. package/dist/src/utils/diffEngine.js.map +0 -1
  104. package/dist/src/utils/fuzzyMatch.d.ts +0 -8
  105. package/dist/src/utils/fuzzyMatch.js +0 -69
  106. package/dist/src/utils/fuzzyMatch.js.map +0 -1
  107. package/dist/src/utils/ignoreManager.d.ts +0 -30
  108. package/dist/src/utils/ignoreManager.js +0 -186
  109. package/dist/src/utils/ignoreManager.js.map +0 -1
  110. package/dist/src/utils/normalization.d.ts +0 -49
  111. package/dist/src/utils/normalization.js +0 -173
  112. package/dist/src/utils/normalization.js.map +0 -1
  113. package/dist/src/utils/projectRoot.d.ts +0 -17
  114. package/dist/src/utils/projectRoot.js +0 -42
  115. package/dist/src/utils/projectRoot.js.map +0 -1
  116. package/dist/src/utils/secureValidation.d.ts +0 -15
  117. package/dist/src/utils/secureValidation.js +0 -41
  118. package/dist/src/utils/secureValidation.js.map +0 -1
  119. package/dist/src/utils/syntaxValidator.d.ts +0 -15
  120. package/dist/src/utils/syntaxValidator.js +0 -218
  121. package/dist/src/utils/syntaxValidator.js.map +0 -1
  122. package/dist/src/utils/transactionManager.d.ts +0 -46
  123. package/dist/src/utils/transactionManager.js +0 -123
  124. package/dist/src/utils/transactionManager.js.map +0 -1
  125. package/dist/src/utils/validation.d.ts +0 -87
  126. package/dist/src/utils/validation.js +0 -231
  127. package/dist/src/utils/validation.js.map +0 -1
  128. package/docs/ARCHITECTURE.md +0 -300
  129. package/docs/architecture/ADR-001-modular-handlers.md +0 -119
@@ -1,55 +0,0 @@
1
- import * as ts from "typescript";
2
- import * as path from "node:path";
3
- export async function checkSymbolUsage(filePath, content, symbolName) {
4
- const ext = path.extname(filePath).toLowerCase();
5
- if ([".ts", ".tsx", ".js", ".jsx", ".mts", ".mjs"].includes(ext)) {
6
- return checkTSSymbolUsage(content, symbolName);
7
- }
8
- if ([".php", ".phtml"].includes(ext)) {
9
- return await checkPHPSymbolUsage(content, symbolName);
10
- }
11
- const escaped = symbolName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
12
- const regex = new RegExp(`(?<=^|[^a-zA-Z0-9_$])(${escaped})(?=[^a-zA-Z0-9_$]|$)`);
13
- return regex.test(content);
14
- }
15
- function checkTSSymbolUsage(content, symbolName) {
16
- try {
17
- const sourceFile = ts.createSourceFile("temp.ts", content, ts.ScriptTarget.Latest, true);
18
- let found = false;
19
- function visit(node) {
20
- if (ts.isIdentifier(node) && node.text === symbolName) {
21
- found = true;
22
- }
23
- if (!found)
24
- ts.forEachChild(node, visit);
25
- }
26
- visit(sourceFile);
27
- return found;
28
- }
29
- catch {
30
- return false;
31
- }
32
- }
33
- async function checkPHPSymbolUsage(content, symbolName) {
34
- try {
35
- const phpParserModule = await import("php-parser");
36
- const phpParser = phpParserModule.default || phpParserModule;
37
- const parser = new phpParser.Engine({});
38
- const ast = parser.parseCode(content, "temp.php");
39
- let found = false;
40
- function visit(node) {
41
- if (node?.kind === "identifier" && node.name === symbolName)
42
- found = true;
43
- if (!found && node?.children) {
44
- for (const child of node.children)
45
- visit(child);
46
- }
47
- }
48
- visit(ast);
49
- return found;
50
- }
51
- catch {
52
- return false;
53
- }
54
- }
55
- //# sourceMappingURL=dependencyChecker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dependencyChecker.js","sourceRoot":"","sources":["../../../src/utils/dependencyChecker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB,EAAE,OAAe,EAAE,UAAkB;IAC1F,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAEjD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACjE,OAAO,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,MAAM,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,yBAAyB,OAAO,uBAAuB,CAAC,CAAC;IAClF,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe,EAAE,UAAkB;IAC7D,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzF,IAAI,KAAK,GAAG,KAAK,CAAC;QAElB,SAAS,KAAK,CAAC,IAAa;YAC1B,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACtD,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;YACD,IAAI,CAAC,KAAK;gBAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,CAAC;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,OAAe,EAAE,UAAkB;IACpE,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,IAAI,eAAe,CAAC;QAC7D,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAElD,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,SAAS,KAAK,CAAC,IAAS;YACtB,IAAI,IAAI,EAAE,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;gBAAE,KAAK,GAAG,IAAI,CAAC;YAC1E,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC7B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;oBAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,21 +0,0 @@
1
- /**
2
- * diffEngine.ts — Unified Diff Generator
3
- *
4
- * Generates human-readable unified diffs (like `git diff`) for dry-run reports
5
- * and post-write summaries. Uses a simple Myers-style diff algorithm.
6
- * No external dependencies.
7
- */
8
- /**
9
- * Generate a unified diff between two versions of a single file.
10
- * Returns a string formatted like `git diff --unified=3`.
11
- */
12
- export declare function generateDiff(oldContent: string, newContent: string, filePath: string, contextLines?: number): string;
13
- /**
14
- * Generate a combined diff across multiple files.
15
- * Returns a single string with all file diffs separated by blank lines.
16
- */
17
- export declare function generateMultiFileDiff(changes: Array<{
18
- filePath: string;
19
- oldContent: string;
20
- newContent: string;
21
- }>): string;
@@ -1,163 +0,0 @@
1
- /**
2
- * diffEngine.ts — Unified Diff Generator
3
- *
4
- * Generates human-readable unified diffs (like `git diff`) for dry-run reports
5
- * and post-write summaries. Uses a simple Myers-style diff algorithm.
6
- * No external dependencies.
7
- */
8
- // ─── Public API ─────────────────────────────────────────────────────
9
- /**
10
- * Generate a unified diff between two versions of a single file.
11
- * Returns a string formatted like `git diff --unified=3`.
12
- */
13
- export function generateDiff(oldContent, newContent, filePath, contextLines = 3) {
14
- const oldLines = oldContent.split("\n");
15
- const newLines = newContent.split("\n");
16
- const hunks = computeHunks(oldLines, newLines, contextLines);
17
- if (hunks.length === 0) {
18
- return `--- ${filePath}\n+++ ${filePath}\n(no changes)\n`;
19
- }
20
- const header = [
21
- `--- a/${normalizedPath(filePath)}`,
22
- `+++ b/${normalizedPath(filePath)}`,
23
- ];
24
- const hunkTexts = hunks.map((hunk) => {
25
- const hunkHeader = `@@ -${hunk.oldStart},${hunk.oldCount} +${hunk.newStart},${hunk.newCount} @@`;
26
- return [hunkHeader, ...hunk.lines].join("\n");
27
- });
28
- return [...header, ...hunkTexts].join("\n") + "\n";
29
- }
30
- /**
31
- * Generate a combined diff across multiple files.
32
- * Returns a single string with all file diffs separated by blank lines.
33
- */
34
- export function generateMultiFileDiff(changes) {
35
- const diffs = [];
36
- for (const change of changes) {
37
- const diff = generateDiff(change.oldContent, change.newContent, change.filePath);
38
- diffs.push(diff);
39
- }
40
- return diffs.join("\n");
41
- }
42
- // ─── Diff Algorithm ─────────────────────────────────────────────────
43
- /**
44
- * Compute the Longest Common Subsequence table for two arrays of strings.
45
- */
46
- function computeLCS(a, b) {
47
- const m = a.length;
48
- const n = b.length;
49
- // Use a 2D array for the LCS table
50
- const dp = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
51
- for (let i = 1; i <= m; i++) {
52
- for (let j = 1; j <= n; j++) {
53
- if (a[i - 1] === b[j - 1]) {
54
- dp[i][j] = dp[i - 1][j - 1] + 1;
55
- }
56
- else {
57
- dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
58
- }
59
- }
60
- }
61
- return dp;
62
- }
63
- /**
64
- * Backtrack through the LCS table to produce a list of diff operations.
65
- */
66
- function backtrackDiff(dp, a, b) {
67
- const result = [];
68
- let i = a.length;
69
- let j = b.length;
70
- while (i > 0 || j > 0) {
71
- if (i > 0 && j > 0 && a[i - 1] === b[j - 1]) {
72
- result.unshift({ type: "keep", line: a[i - 1] });
73
- i--;
74
- j--;
75
- }
76
- else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {
77
- result.unshift({ type: "add", line: b[j - 1] });
78
- j--;
79
- }
80
- else if (i > 0) {
81
- result.unshift({ type: "remove", line: a[i - 1] });
82
- i--;
83
- }
84
- }
85
- return result;
86
- }
87
- /**
88
- * Group diff operations into hunks with surrounding context.
89
- */
90
- function computeHunks(oldLines, newLines, contextLines) {
91
- const dp = computeLCS(oldLines, newLines);
92
- const ops = backtrackDiff(dp, oldLines, newLines);
93
- // Find ranges of changes (non-"keep" operations)
94
- const changeIndices = [];
95
- for (let i = 0; i < ops.length; i++) {
96
- if (ops[i].type !== "keep") {
97
- changeIndices.push(i);
98
- }
99
- }
100
- if (changeIndices.length === 0)
101
- return [];
102
- // Group nearby changes into hunks
103
- const groups = [];
104
- let groupStart = changeIndices[0];
105
- let groupEnd = changeIndices[0];
106
- for (let k = 1; k < changeIndices.length; k++) {
107
- if (changeIndices[k] - groupEnd <= contextLines * 2 + 1) {
108
- // Merge into current group
109
- groupEnd = changeIndices[k];
110
- }
111
- else {
112
- groups.push({ start: groupStart, end: groupEnd });
113
- groupStart = changeIndices[k];
114
- groupEnd = changeIndices[k];
115
- }
116
- }
117
- groups.push({ start: groupStart, end: groupEnd });
118
- // Build hunks with context
119
- const hunks = [];
120
- for (const group of groups) {
121
- const hunkStart = Math.max(0, group.start - contextLines);
122
- const hunkEnd = Math.min(ops.length - 1, group.end + contextLines);
123
- const lines = [];
124
- let oldLineNum = 0;
125
- let newLineNum = 0;
126
- // Count lines before hunk start to get correct line numbers
127
- for (let i = 0; i < hunkStart; i++) {
128
- if (ops[i].type === "keep" || ops[i].type === "remove")
129
- oldLineNum++;
130
- if (ops[i].type === "keep" || ops[i].type === "add")
131
- newLineNum++;
132
- }
133
- const oldStart = oldLineNum + 1;
134
- const newStart = newLineNum + 1;
135
- let oldCount = 0;
136
- let newCount = 0;
137
- for (let i = hunkStart; i <= hunkEnd; i++) {
138
- const op = ops[i];
139
- switch (op.type) {
140
- case "keep":
141
- lines.push(` ${op.line}`);
142
- oldCount++;
143
- newCount++;
144
- break;
145
- case "remove":
146
- lines.push(`-${op.line}`);
147
- oldCount++;
148
- break;
149
- case "add":
150
- lines.push(`+${op.line}`);
151
- newCount++;
152
- break;
153
- }
154
- }
155
- hunks.push({ oldStart, oldCount, newStart, newCount, lines });
156
- }
157
- return hunks;
158
- }
159
- // ─── Utilities ──────────────────────────────────────────────────────
160
- function normalizedPath(filePath) {
161
- return filePath.replace(/\\/g, "/");
162
- }
163
- //# sourceMappingURL=diffEngine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diffEngine.js","sourceRoot":"","sources":["../../../src/utils/diffEngine.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- export interface SymbolInfo {
2
- name: string;
3
- type: string;
4
- className?: string;
5
- }
6
- export declare function levenshteinDistance(a: string, b: string): number;
7
- export declare function findClosestSymbols(target: string, symbols: SymbolInfo[], limit?: number): SymbolInfo[];
8
- export declare function extractFallbackSymbols(content: string): SymbolInfo[];
@@ -1,69 +0,0 @@
1
- export function levenshteinDistance(a, b) {
2
- const matrix = [];
3
- let i, j;
4
- if (a.length === 0)
5
- return b.length;
6
- if (b.length === 0)
7
- return a.length;
8
- for (i = 0; i <= b.length; i++) {
9
- matrix[i] = [i];
10
- }
11
- for (j = 0; j <= a.length; j++) {
12
- matrix[0][j] = j;
13
- }
14
- for (i = 1; i <= b.length; i++) {
15
- for (j = 1; j <= a.length; j++) {
16
- if (b.charAt(i - 1) === a.charAt(j - 1)) {
17
- matrix[i][j] = matrix[i - 1][j - 1];
18
- }
19
- else {
20
- matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, Math.min(matrix[i][j - 1] + 1, matrix[i - 1][j] + 1));
21
- }
22
- }
23
- }
24
- return matrix[b.length][a.length];
25
- }
26
- export function findClosestSymbols(target, symbols, limit = 5) {
27
- return symbols
28
- .map((sym) => ({
29
- ...sym,
30
- distance: levenshteinDistance(target.toLowerCase(), sym.name.toLowerCase()),
31
- }))
32
- .sort((a, b) => a.distance - b.distance)
33
- .slice(0, limit);
34
- }
35
- // A simple regex-based extractor to get available symbols when the AST parsing fails
36
- export function extractFallbackSymbols(content) {
37
- const symbols = [];
38
- const lines = content.split('\\n');
39
- let currentClass = undefined;
40
- for (let i = 0; i < lines.length; i++) {
41
- const line = lines[i].trim();
42
- // Check for class definitions (multi-language approx)
43
- const classMatch = line.match(/^\s*(?:export\s+|abstract\s+|final\s+)?class\s+([_a-zA-Z0-9]+)/);
44
- if (classMatch) {
45
- currentClass = classMatch[1];
46
- symbols.push({ name: currentClass, type: 'class' });
47
- continue;
48
- }
49
- // Check for function / method definitions
50
- // JS/TS: function foo() | foo() { | async foo()
51
- // Python: def foo()
52
- // PHP: function foo()
53
- // Dart: type foo()
54
- const funcMatch = line.match(/^\s*(?:export\s+|async\s+|public\s+|private\s+|protected\s+|static\s+|def\s+|function\s+)*([_a-zA-Z0-9]+)\s*\(/);
55
- if (funcMatch && !['if', 'else', 'for', 'while', 'switch', 'catch'].includes(funcMatch[1])) {
56
- symbols.push({
57
- name: funcMatch[1],
58
- type: currentClass ? 'method' : 'function',
59
- className: currentClass,
60
- });
61
- }
62
- // Basic assumption: closing brace at start of line might end a class
63
- if (line === '}') {
64
- currentClass = undefined;
65
- }
66
- }
67
- return symbols;
68
- }
69
- //# sourceMappingURL=fuzzyMatch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fuzzyMatch.js","sourceRoot":"","sources":["../../../src/utils/fuzzyMatch.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- /**
2
- * IgnoreManager — Reads .gitignore / .repomixignore and walks directories
3
- * filtering out ignored paths. Always excludes common heavy directories.
4
- */
5
- export declare class IgnoreManager {
6
- private ig;
7
- private rootDir;
8
- constructor(rootDir: string);
9
- /**
10
- * Reads an ignore-pattern file and adds its rules to the filter.
11
- * Silently skips if the file doesn't exist or is unreadable.
12
- */
13
- private loadIgnoreFile;
14
- /** Check if a relative path should be ignored. */
15
- isIgnored(relativePath: string): boolean;
16
- /**
17
- * Recursively walk a directory, returning absolute paths to all
18
- * non-ignored files.
19
- */
20
- walkDirectory(dir?: string): string[];
21
- /**
22
- * Async version of walkDirectory - non-blocking for large repos
23
- */
24
- walkDirectoryAsync(dir?: string, signal?: AbortSignal): Promise<string[]>;
25
- /**
26
- * Async recursive walk implementation
27
- */
28
- private walkAsync;
29
- private walk;
30
- }
@@ -1,186 +0,0 @@
1
- /**
2
- * IgnoreManager — Reads .gitignore / .repomixignore and walks directories
3
- * filtering out ignored paths. Always excludes common heavy directories.
4
- */
5
- import * as fs from "node:fs";
6
- import * as path from "node:path";
7
- import { createRequire } from "node:module";
8
- // CJS interop: 'ignore' uses module.exports which doesn't resolve
9
- // as a callable default export under Node16 module resolution.
10
- const require = createRequire(import.meta.url);
11
- const ignore = require("ignore");
12
- /** Directories and patterns that are ALWAYS excluded regardless of .gitignore */
13
- const ALWAYS_IGNORE = [
14
- "node_modules",
15
- ".git",
16
- "dist",
17
- "build",
18
- "vendor",
19
- ".next",
20
- ".nuxt",
21
- ".output",
22
- "__pycache__",
23
- ".pytest_cache",
24
- "coverage",
25
- ".nyc_output",
26
- ".turbo",
27
- ".cache",
28
- ".parcel-cache",
29
- ".venv",
30
- "venv",
31
- "env",
32
- ".env.local",
33
- ".tsbuildinfo",
34
- "*.lock",
35
- "package-lock.json",
36
- "yarn.lock",
37
- "pnpm-lock.yaml",
38
- "bun.lockb",
39
- "*.min.js",
40
- "*.min.css",
41
- "*.map",
42
- "*.chunk.js",
43
- "*.bundle.js",
44
- ];
45
- /** Max file size to read (512 KB). Files larger than this are skipped. */
46
- const MAX_FILE_SIZE_BYTES = 512 * 1024;
47
- export class IgnoreManager {
48
- ig;
49
- rootDir;
50
- constructor(rootDir) {
51
- this.rootDir = path.resolve(rootDir);
52
- this.ig = ignore();
53
- // Load hardcoded ignores first
54
- this.ig.add(ALWAYS_IGNORE);
55
- // Load .gitignore
56
- this.loadIgnoreFile(path.join(this.rootDir, ".gitignore"));
57
- // Load .repomixignore (Repomix-style overrides)
58
- this.loadIgnoreFile(path.join(this.rootDir, ".repomixignore"));
59
- }
60
- /**
61
- * Reads an ignore-pattern file and adds its rules to the filter.
62
- * Silently skips if the file doesn't exist or is unreadable.
63
- */
64
- loadIgnoreFile(filePath) {
65
- try {
66
- if (!fs.existsSync(filePath))
67
- return;
68
- const content = fs.readFileSync(filePath, "utf-8");
69
- const patterns = content
70
- .split("\n")
71
- .map((line) => line.trim())
72
- .filter((line) => line.length > 0 && !line.startsWith("#"));
73
- if (patterns.length > 0) {
74
- this.ig.add(patterns);
75
- }
76
- }
77
- catch {
78
- // File unreadable — skip silently
79
- }
80
- }
81
- /** Check if a relative path should be ignored. */
82
- isIgnored(relativePath) {
83
- if (!relativePath)
84
- return false;
85
- return this.ig.ignores(relativePath);
86
- }
87
- /**
88
- * Recursively walk a directory, returning absolute paths to all
89
- * non-ignored files.
90
- */
91
- walkDirectory(dir) {
92
- const baseDir = dir ? path.resolve(dir) : this.rootDir;
93
- const files = [];
94
- this.walk(baseDir, files);
95
- return files;
96
- }
97
- /**
98
- * Async version of walkDirectory - non-blocking for large repos
99
- */
100
- async walkDirectoryAsync(dir, signal) {
101
- const baseDir = dir ? path.resolve(dir) : this.rootDir;
102
- const files = [];
103
- await this.walkAsync(baseDir, files, signal);
104
- return files;
105
- }
106
- /**
107
- * Async recursive walk implementation
108
- */
109
- async walkAsync(currentDir, collected, signal) {
110
- if (signal?.aborted)
111
- throw new Error("Operation cancelled");
112
- let entries;
113
- try {
114
- entries = await fs.promises.readdir(currentDir, { withFileTypes: true });
115
- }
116
- catch {
117
- return; // Permission denied, broken symlink, etc.
118
- }
119
- for (const entry of entries) {
120
- const fullPath = path.join(currentDir, entry.name);
121
- const relativePath = path
122
- .relative(this.rootDir, fullPath)
123
- .replace(/\\/g, "/");
124
- // Check ignore rules
125
- if (this.isIgnored(relativePath))
126
- continue;
127
- if (entry.isDirectory()) {
128
- // Also test with trailing slash for directory-level patterns
129
- if (this.isIgnored(relativePath + "/"))
130
- continue;
131
- await this.walkAsync(fullPath, collected, signal);
132
- }
133
- else if (entry.isFile()) {
134
- // Skip files that are too large
135
- try {
136
- const stat = await fs.promises.stat(fullPath);
137
- if (stat.size > MAX_FILE_SIZE_BYTES)
138
- continue;
139
- }
140
- catch {
141
- continue;
142
- }
143
- collected.push(fullPath);
144
- }
145
- // Symlinks and other entries are silently skipped
146
- }
147
- }
148
- walk(currentDir, collected) {
149
- let entries;
150
- try {
151
- entries = fs.readdirSync(currentDir, { withFileTypes: true });
152
- }
153
- catch {
154
- return; // Permission denied, broken symlink, etc.
155
- }
156
- for (const entry of entries) {
157
- const fullPath = path.join(currentDir, entry.name);
158
- const relativePath = path
159
- .relative(this.rootDir, fullPath)
160
- .replace(/\\/g, "/");
161
- // Check ignore rules
162
- if (this.isIgnored(relativePath))
163
- continue;
164
- if (entry.isDirectory()) {
165
- // Also test with trailing slash for directory-level patterns
166
- if (this.isIgnored(relativePath + "/"))
167
- continue;
168
- this.walk(fullPath, collected);
169
- }
170
- else if (entry.isFile()) {
171
- // Skip files that are too large
172
- try {
173
- const stat = fs.statSync(fullPath);
174
- if (stat.size > MAX_FILE_SIZE_BYTES)
175
- continue;
176
- }
177
- catch {
178
- continue;
179
- }
180
- collected.push(fullPath);
181
- }
182
- // Symlinks and other entries are silently skipped
183
- }
184
- }
185
- }
186
- //# sourceMappingURL=ignoreManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ignoreManager.js","sourceRoot":"","sources":["../../../src/utils/ignoreManager.ts"],"names":[],"mappings":"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"}
@@ -1,49 +0,0 @@
1
- /**
2
- * normalization.ts — Code Normalization Utilities
3
- *
4
- * Centralizes line ending normalization and indentation logic
5
- * to eliminate duplication across writer modules.
6
- */
7
- /**
8
- * Normalize line endings to LF (\n) for consistent processing.
9
- * Handles CRLF (\r\n), CR (\r), and mixed line endings.
10
- *
11
- * Why: Windows files use CRLF, which breaks brace-counting and line-based
12
- * operations. Normalizing to LF ensures consistent behavior across platforms.
13
- */
14
- export declare function normalizeLineEndings(content: string): string;
15
- /**
16
- * Extract the leading whitespace from a line.
17
- */
18
- export declare function getIndent(line: string): string;
19
- /**
20
- * Measure the indentation level of a line (number of spaces/tabs).
21
- */
22
- export declare function measureIndent(line: string): number;
23
- /**
24
- * Detect the predominant indentation style in a file.
25
- * Returns the most common indentation string (e.g., " ", " ", "\t").
26
- */
27
- export declare function detectIndentStyle(content: string): string;
28
- /**
29
- * Reindent code to match a target indentation level.
30
- * Preserves relative indentation between lines.
31
- *
32
- * @param code - The code to reindent
33
- * @param targetIndent - The base indentation to apply
34
- * @param language - Optional language hint for default indent style
35
- */
36
- export declare function reindentCode(code: string, targetIndent: string, language?: "dart" | "typescript" | "php" | "python"): string;
37
- /**
38
- * Reindent code for Python (indentation-aware language).
39
- * Handles Python's strict indentation requirements.
40
- */
41
- export declare function reindentPython(code: string, targetIndent: string): string;
42
- /**
43
- * Remove excessive blank lines (more than 2 consecutive).
44
- */
45
- export declare function normalizeBlankLines(content: string): string;
46
- /**
47
- * Ensure file ends with a single newline (POSIX standard).
48
- */
49
- export declare function ensureTrailingNewline(content: string): string;