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.
- package/CHANGELOG.md +92 -236
- package/README.md +304 -298
- package/dist/src/core/engine.d.ts +21 -0
- package/dist/src/core/engine.js +68 -0
- package/dist/src/core/engine.js.map +1 -0
- package/dist/src/core/validator.d.ts +15 -0
- package/dist/src/core/validator.js +44 -0
- package/dist/src/core/validator.js.map +1 -0
- package/dist/src/index.d.ts +7 -11
- package/dist/src/index.js +182 -397
- package/dist/src/index.js.map +1 -1
- package/dist/src/operations/write.d.ts +51 -0
- package/dist/src/operations/write.js +169 -0
- package/dist/src/operations/write.js.map +1 -0
- package/dist/src/parsers/base.d.ts +28 -0
- package/dist/src/parsers/base.js +27 -0
- package/dist/src/parsers/base.js.map +1 -0
- package/dist/src/parsers/dartTreeSitter.d.ts +13 -0
- package/dist/src/parsers/dartTreeSitter.js +91 -0
- package/dist/src/parsers/dartTreeSitter.js.map +1 -0
- package/dist/src/parsers/php.d.ts +12 -0
- package/dist/src/parsers/php.js +86 -0
- package/dist/src/parsers/php.js.map +1 -0
- package/dist/src/parsers/python.d.ts +12 -0
- package/dist/src/parsers/python.js +86 -0
- package/dist/src/parsers/python.js.map +1 -0
- package/dist/src/parsers/registry.d.ts +15 -0
- package/dist/src/parsers/registry.js +70 -0
- package/dist/src/parsers/registry.js.map +1 -0
- package/dist/src/parsers/typescript.d.ts +13 -0
- package/dist/src/parsers/typescript.js +98 -0
- package/dist/src/parsers/typescript.js.map +1 -0
- package/llms.txt +246 -234
- package/mcp-code-context-3.0.2.tgz +0 -0
- package/package.json +59 -57
- package/tsconfig.tests.json +27 -0
- package/.io/RULES.md +0 -12
- package/CONTRIBUTING.md +0 -243
- package/PLAN_v2.5.0.md +0 -407
- package/TROUBLESHOOTING.md +0 -38
- package/dist/src/ast/dartCompressor.d.ts +0 -27
- package/dist/src/ast/dartCompressor.js +0 -859
- package/dist/src/ast/dartCompressor.js.map +0 -1
- package/dist/src/ast/phpCompressor.d.ts +0 -24
- package/dist/src/ast/phpCompressor.js +0 -634
- package/dist/src/ast/phpCompressor.js.map +0 -1
- package/dist/src/ast/semanticCompressor.d.ts +0 -22
- package/dist/src/ast/semanticCompressor.js +0 -677
- package/dist/src/ast/semanticCompressor.js.map +0 -1
- package/dist/src/ast/writers/dartWriter.d.ts +0 -37
- package/dist/src/ast/writers/dartWriter.js +0 -544
- package/dist/src/ast/writers/dartWriter.js.map +0 -1
- package/dist/src/ast/writers/phpWriter.d.ts +0 -37
- package/dist/src/ast/writers/phpWriter.js +0 -411
- package/dist/src/ast/writers/phpWriter.js.map +0 -1
- package/dist/src/ast/writers/pyWriter.d.ts +0 -37
- package/dist/src/ast/writers/pyWriter.js +0 -355
- package/dist/src/ast/writers/pyWriter.js.map +0 -1
- package/dist/src/ast/writers/safeRename.d.ts +0 -14
- package/dist/src/ast/writers/safeRename.js +0 -258
- package/dist/src/ast/writers/safeRename.js.map +0 -1
- package/dist/src/ast/writers/symbolWriter.d.ts +0 -64
- package/dist/src/ast/writers/symbolWriter.js +0 -174
- package/dist/src/ast/writers/symbolWriter.js.map +0 -1
- package/dist/src/ast/writers/tsWriter.d.ts +0 -38
- package/dist/src/ast/writers/tsWriter.js +0 -344
- package/dist/src/ast/writers/tsWriter.js.map +0 -1
- package/dist/src/cache/astCache.d.ts +0 -39
- package/dist/src/cache/astCache.js +0 -169
- package/dist/src/cache/astCache.js.map +0 -1
- package/dist/src/handlers/readHandlers.d.ts +0 -70
- package/dist/src/handlers/readHandlers.js +0 -455
- package/dist/src/handlers/readHandlers.js.map +0 -1
- package/dist/src/handlers/utilHandlers.d.ts +0 -31
- package/dist/src/handlers/utilHandlers.js +0 -69
- package/dist/src/handlers/utilHandlers.js.map +0 -1
- package/dist/src/handlers/writeHandlers.d.ts +0 -57
- package/dist/src/handlers/writeHandlers.js +0 -499
- package/dist/src/handlers/writeHandlers.js.map +0 -1
- package/dist/src/tools/readFileLines.d.ts +0 -26
- package/dist/src/tools/readFileLines.js +0 -77
- package/dist/src/tools/readFileLines.js.map +0 -1
- package/dist/src/tools/searchCodePattern.d.ts +0 -37
- package/dist/src/tools/searchCodePattern.js +0 -144
- package/dist/src/tools/searchCodePattern.js.map +0 -1
- package/dist/src/utils/arrayUtils.d.ts +0 -12
- package/dist/src/utils/arrayUtils.js +0 -27
- package/dist/src/utils/arrayUtils.js.map +0 -1
- package/dist/src/utils/backupManager.d.ts +0 -31
- package/dist/src/utils/backupManager.js +0 -124
- package/dist/src/utils/backupManager.js.map +0 -1
- package/dist/src/utils/confirmationCache.d.ts +0 -16
- package/dist/src/utils/confirmationCache.js +0 -40
- package/dist/src/utils/confirmationCache.js.map +0 -1
- package/dist/src/utils/constants.d.ts +0 -46
- package/dist/src/utils/constants.js +0 -112
- package/dist/src/utils/constants.js.map +0 -1
- package/dist/src/utils/dependencyChecker.d.ts +0 -1
- package/dist/src/utils/dependencyChecker.js +0 -55
- package/dist/src/utils/dependencyChecker.js.map +0 -1
- package/dist/src/utils/diffEngine.d.ts +0 -21
- package/dist/src/utils/diffEngine.js +0 -163
- package/dist/src/utils/diffEngine.js.map +0 -1
- package/dist/src/utils/fuzzyMatch.d.ts +0 -8
- package/dist/src/utils/fuzzyMatch.js +0 -69
- package/dist/src/utils/fuzzyMatch.js.map +0 -1
- package/dist/src/utils/ignoreManager.d.ts +0 -30
- package/dist/src/utils/ignoreManager.js +0 -186
- package/dist/src/utils/ignoreManager.js.map +0 -1
- package/dist/src/utils/normalization.d.ts +0 -49
- package/dist/src/utils/normalization.js +0 -173
- package/dist/src/utils/normalization.js.map +0 -1
- package/dist/src/utils/projectRoot.d.ts +0 -17
- package/dist/src/utils/projectRoot.js +0 -42
- package/dist/src/utils/projectRoot.js.map +0 -1
- package/dist/src/utils/secureValidation.d.ts +0 -15
- package/dist/src/utils/secureValidation.js +0 -41
- package/dist/src/utils/secureValidation.js.map +0 -1
- package/dist/src/utils/syntaxValidator.d.ts +0 -15
- package/dist/src/utils/syntaxValidator.js +0 -218
- package/dist/src/utils/syntaxValidator.js.map +0 -1
- package/dist/src/utils/transactionManager.d.ts +0 -46
- package/dist/src/utils/transactionManager.js +0 -123
- package/dist/src/utils/transactionManager.js.map +0 -1
- package/dist/src/utils/validation.d.ts +0 -87
- package/dist/src/utils/validation.js +0 -231
- package/dist/src/utils/validation.js.map +0 -1
- package/docs/ARCHITECTURE.md +0 -300
- package/docs/architecture/ADR-001-modular-handlers.md +0 -119
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python Parser - v3.0.0
|
|
3
|
+
*/
|
|
4
|
+
import { BaseParser } from "./base.js";
|
|
5
|
+
export class PythonParser extends BaseParser {
|
|
6
|
+
constructor() {
|
|
7
|
+
super("python");
|
|
8
|
+
}
|
|
9
|
+
extractSymbol(tree, symbolName, className) {
|
|
10
|
+
const cursor = tree.walk();
|
|
11
|
+
const search = () => {
|
|
12
|
+
const node = cursor.currentNode;
|
|
13
|
+
if (node.type === "function_definition" || node.type === "class_definition") {
|
|
14
|
+
const nameNode = node.childForFieldName("name");
|
|
15
|
+
if (nameNode && nameNode.text === symbolName) {
|
|
16
|
+
if (className) {
|
|
17
|
+
const classNode = this.findParentClass(node);
|
|
18
|
+
if (!classNode || classNode.childForFieldName("name")?.text !== className) {
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
return tree.rootNode.text.substring(node.startIndex, node.endIndex);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
return tree.rootNode.text.substring(node.startIndex, node.endIndex);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (cursor.gotoFirstChild()) {
|
|
30
|
+
do {
|
|
31
|
+
const result = search();
|
|
32
|
+
if (result)
|
|
33
|
+
return result;
|
|
34
|
+
} while (cursor.gotoNextSibling());
|
|
35
|
+
cursor.gotoParent();
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
};
|
|
39
|
+
return search();
|
|
40
|
+
}
|
|
41
|
+
replaceSymbol(content, tree, symbolName, newContent, className) {
|
|
42
|
+
const extracted = this.extractSymbol(tree, symbolName, className);
|
|
43
|
+
if (!extracted)
|
|
44
|
+
throw new Error(`Symbol "${symbolName}" not found`);
|
|
45
|
+
const index = content.indexOf(extracted);
|
|
46
|
+
if (index === -1)
|
|
47
|
+
throw new Error("Could not locate symbol in content");
|
|
48
|
+
return content.substring(0, index) + newContent + content.substring(index + extracted.length);
|
|
49
|
+
}
|
|
50
|
+
findSymbols(tree) {
|
|
51
|
+
const symbols = [];
|
|
52
|
+
const cursor = tree.walk();
|
|
53
|
+
const visit = () => {
|
|
54
|
+
const node = cursor.currentNode;
|
|
55
|
+
if (node.type === "function_definition" || node.type === "class_definition") {
|
|
56
|
+
const nameNode = node.childForFieldName("name");
|
|
57
|
+
if (nameNode) {
|
|
58
|
+
symbols.push({
|
|
59
|
+
name: nameNode.text,
|
|
60
|
+
type: node.type,
|
|
61
|
+
startIndex: node.startIndex,
|
|
62
|
+
endIndex: node.endIndex,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (cursor.gotoFirstChild()) {
|
|
67
|
+
do {
|
|
68
|
+
visit();
|
|
69
|
+
} while (cursor.gotoNextSibling());
|
|
70
|
+
cursor.gotoParent();
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
visit();
|
|
74
|
+
return symbols;
|
|
75
|
+
}
|
|
76
|
+
findParentClass(node) {
|
|
77
|
+
let current = node.parent;
|
|
78
|
+
while (current) {
|
|
79
|
+
if (current.type === "class_definition")
|
|
80
|
+
return current;
|
|
81
|
+
current = current.parent;
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=python.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python.js","sourceRoot":"","sources":["../../../src/parsers/python.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser Registry - v3.0.0
|
|
3
|
+
* Manages all language parsers
|
|
4
|
+
*/
|
|
5
|
+
import { BaseParser } from "./base.js";
|
|
6
|
+
import { CodeContextEngine } from "../core/engine.js";
|
|
7
|
+
export declare class ParserRegistry {
|
|
8
|
+
private parsers;
|
|
9
|
+
private engine;
|
|
10
|
+
private extensionMap;
|
|
11
|
+
constructor(engine: CodeContextEngine);
|
|
12
|
+
init(): Promise<void>;
|
|
13
|
+
getParser(fileExtension: string): BaseParser | undefined;
|
|
14
|
+
getSupportedExtensions(): string[];
|
|
15
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser Registry - v3.0.0
|
|
3
|
+
* Manages all language parsers
|
|
4
|
+
*/
|
|
5
|
+
import { TypeScriptParser } from "./typescript.js";
|
|
6
|
+
import { PythonParser } from "./python.js";
|
|
7
|
+
import { PHPParser } from "./php.js";
|
|
8
|
+
import { DartTreeSitterParser } from "./dartTreeSitter.js";
|
|
9
|
+
export class ParserRegistry {
|
|
10
|
+
parsers = new Map();
|
|
11
|
+
engine;
|
|
12
|
+
extensionMap = new Map([
|
|
13
|
+
[".ts", "typescript"],
|
|
14
|
+
[".tsx", "typescript"],
|
|
15
|
+
[".js", "typescript"],
|
|
16
|
+
[".jsx", "typescript"],
|
|
17
|
+
[".mts", "typescript"],
|
|
18
|
+
[".mjs", "typescript"],
|
|
19
|
+
[".py", "python"],
|
|
20
|
+
[".pyi", "python"],
|
|
21
|
+
[".php", "php"],
|
|
22
|
+
[".dart", "dart"],
|
|
23
|
+
]);
|
|
24
|
+
constructor(engine) {
|
|
25
|
+
this.engine = engine;
|
|
26
|
+
}
|
|
27
|
+
async init() {
|
|
28
|
+
// Load TypeScript
|
|
29
|
+
await this.engine.loadLanguage("typescript");
|
|
30
|
+
const tsLang = this.engine.getLanguage("typescript");
|
|
31
|
+
if (!tsLang)
|
|
32
|
+
throw new Error("Failed to load TypeScript language");
|
|
33
|
+
const tsParser = new TypeScriptParser();
|
|
34
|
+
await tsParser.init(this.engine.createParser(), tsLang);
|
|
35
|
+
this.parsers.set("typescript", tsParser);
|
|
36
|
+
// Load Python
|
|
37
|
+
await this.engine.loadLanguage("python");
|
|
38
|
+
const pyLang = this.engine.getLanguage("python");
|
|
39
|
+
if (!pyLang)
|
|
40
|
+
throw new Error("Failed to load Python language");
|
|
41
|
+
const pyParser = new PythonParser();
|
|
42
|
+
await pyParser.init(this.engine.createParser(), pyLang);
|
|
43
|
+
this.parsers.set("python", pyParser);
|
|
44
|
+
// Load PHP
|
|
45
|
+
await this.engine.loadLanguage("php");
|
|
46
|
+
const phpLang = this.engine.getLanguage("php");
|
|
47
|
+
if (!phpLang)
|
|
48
|
+
throw new Error("Failed to load PHP language");
|
|
49
|
+
const phpParser = new PHPParser();
|
|
50
|
+
await phpParser.init(this.engine.createParser(), phpLang);
|
|
51
|
+
this.parsers.set("php", phpParser);
|
|
52
|
+
// Load Dart (Tree-sitter WASM)
|
|
53
|
+
await this.engine.loadLanguage("dart");
|
|
54
|
+
const dartLang = this.engine.getLanguage("dart");
|
|
55
|
+
if (!dartLang)
|
|
56
|
+
throw new Error("Failed to load Dart language");
|
|
57
|
+
const dartParser = new DartTreeSitterParser();
|
|
58
|
+
await dartParser.init(this.engine.createParser(), dartLang);
|
|
59
|
+
this.parsers.set("dart", dartParser);
|
|
60
|
+
console.log("✅ Parsers loaded: TS/Python/PHP/Dart (WASM)");
|
|
61
|
+
}
|
|
62
|
+
getParser(fileExtension) {
|
|
63
|
+
const language = this.extensionMap.get(fileExtension);
|
|
64
|
+
return language ? this.parsers.get(language) : undefined;
|
|
65
|
+
}
|
|
66
|
+
getSupportedExtensions() {
|
|
67
|
+
return Array.from(this.extensionMap.keys());
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/parsers/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript Parser - v3.0.0
|
|
3
|
+
* Tree-sitter based TS/JS parser
|
|
4
|
+
*/
|
|
5
|
+
import { Tree } from "web-tree-sitter";
|
|
6
|
+
import { BaseParser, SymbolInfo } from "./base.js";
|
|
7
|
+
export declare class TypeScriptParser extends BaseParser {
|
|
8
|
+
constructor();
|
|
9
|
+
extractSymbol(tree: Tree, symbolName: string, className?: string): string | null;
|
|
10
|
+
replaceSymbol(content: string, tree: Tree, symbolName: string, newContent: string, className?: string): string;
|
|
11
|
+
findSymbols(tree: Tree): SymbolInfo[];
|
|
12
|
+
private findParentClass;
|
|
13
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript Parser - v3.0.0
|
|
3
|
+
* Tree-sitter based TS/JS parser
|
|
4
|
+
*/
|
|
5
|
+
import { BaseParser } from "./base.js";
|
|
6
|
+
export class TypeScriptParser extends BaseParser {
|
|
7
|
+
constructor() {
|
|
8
|
+
super("typescript");
|
|
9
|
+
}
|
|
10
|
+
extractSymbol(tree, symbolName, className) {
|
|
11
|
+
const cursor = tree.walk();
|
|
12
|
+
const search = () => {
|
|
13
|
+
const node = cursor.currentNode;
|
|
14
|
+
if (node.type === "function_declaration" ||
|
|
15
|
+
node.type === "class_declaration" ||
|
|
16
|
+
node.type === "interface_declaration" ||
|
|
17
|
+
node.type === "type_alias_declaration" ||
|
|
18
|
+
node.type === "method_definition") {
|
|
19
|
+
const nameNode = node.childForFieldName("name");
|
|
20
|
+
if (nameNode && nameNode.text === symbolName) {
|
|
21
|
+
if (className) {
|
|
22
|
+
const classNode = this.findParentClass(node);
|
|
23
|
+
if (!classNode || classNode.childForFieldName("name")?.text !== className) {
|
|
24
|
+
// Continue searching
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
return tree.rootNode.text.substring(node.startIndex, node.endIndex);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
return tree.rootNode.text.substring(node.startIndex, node.endIndex);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (cursor.gotoFirstChild()) {
|
|
36
|
+
do {
|
|
37
|
+
const result = search();
|
|
38
|
+
if (result)
|
|
39
|
+
return result;
|
|
40
|
+
} while (cursor.gotoNextSibling());
|
|
41
|
+
cursor.gotoParent();
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
};
|
|
45
|
+
return search();
|
|
46
|
+
}
|
|
47
|
+
replaceSymbol(content, tree, symbolName, newContent, className) {
|
|
48
|
+
const extracted = this.extractSymbol(tree, symbolName, className);
|
|
49
|
+
if (!extracted) {
|
|
50
|
+
throw new Error(`Symbol "${symbolName}" not found`);
|
|
51
|
+
}
|
|
52
|
+
const index = content.indexOf(extracted);
|
|
53
|
+
if (index === -1) {
|
|
54
|
+
throw new Error("Could not locate symbol in content");
|
|
55
|
+
}
|
|
56
|
+
return content.substring(0, index) + newContent + content.substring(index + extracted.length);
|
|
57
|
+
}
|
|
58
|
+
findSymbols(tree) {
|
|
59
|
+
const symbols = [];
|
|
60
|
+
const cursor = tree.walk();
|
|
61
|
+
const visit = () => {
|
|
62
|
+
const node = cursor.currentNode;
|
|
63
|
+
if (node.type === "function_declaration" ||
|
|
64
|
+
node.type === "class_declaration" ||
|
|
65
|
+
node.type === "interface_declaration" ||
|
|
66
|
+
node.type === "type_alias_declaration" ||
|
|
67
|
+
node.type === "method_definition") {
|
|
68
|
+
const nameNode = node.childForFieldName("name");
|
|
69
|
+
if (nameNode) {
|
|
70
|
+
symbols.push({
|
|
71
|
+
name: nameNode.text,
|
|
72
|
+
type: node.type,
|
|
73
|
+
startIndex: node.startIndex,
|
|
74
|
+
endIndex: node.endIndex,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (cursor.gotoFirstChild()) {
|
|
79
|
+
do {
|
|
80
|
+
visit();
|
|
81
|
+
} while (cursor.gotoNextSibling());
|
|
82
|
+
cursor.gotoParent();
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
visit();
|
|
86
|
+
return symbols;
|
|
87
|
+
}
|
|
88
|
+
findParentClass(node) {
|
|
89
|
+
let current = node.parent;
|
|
90
|
+
while (current) {
|
|
91
|
+
if (current.type === "class_declaration")
|
|
92
|
+
return current;
|
|
93
|
+
current = current.parent;
|
|
94
|
+
}
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=typescript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../../src/parsers/typescript.ts"],"names":[],"mappings":"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"}
|