mcp-code-context 3.6.3 → 3.7.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 (181) hide show
  1. package/CHANGELOG.md +140 -278
  2. package/INSTRUCTIONS.md +23 -9
  3. package/README.md +217 -97
  4. package/SECURITY.md +55 -21
  5. package/dist/src/core/cacheManager.d.ts +4 -5
  6. package/dist/src/core/cacheManager.js +49 -33
  7. package/dist/src/core/cacheManager.js.map +1 -1
  8. package/dist/src/core/engine.d.ts +1 -1
  9. package/dist/src/core/engine.js +3 -3
  10. package/dist/src/core/engine.js.map +1 -1
  11. package/dist/src/core/indexManager.d.ts +58 -0
  12. package/dist/src/core/indexManager.js +252 -0
  13. package/dist/src/core/indexManager.js.map +1 -0
  14. package/dist/src/core/indexManagerQueries.d.ts +14 -0
  15. package/dist/src/core/indexManagerQueries.js +95 -0
  16. package/dist/src/core/indexManagerQueries.js.map +1 -0
  17. package/dist/src/core/sessionManager.d.ts +117 -0
  18. package/dist/src/core/sessionManager.js +231 -0
  19. package/dist/src/core/sessionManager.js.map +1 -0
  20. package/dist/src/core/validator.d.ts +1 -1
  21. package/dist/src/core/validator.js +18 -10
  22. package/dist/src/core/validator.js.map +1 -1
  23. package/dist/src/index.d.ts +1 -13
  24. package/dist/src/index.js +25 -999
  25. package/dist/src/index.js.map +1 -1
  26. package/dist/src/operations/astTransform.d.ts +38 -0
  27. package/dist/src/operations/astTransform.js +239 -0
  28. package/dist/src/operations/astTransform.js.map +1 -0
  29. package/dist/src/operations/compress.d.ts +5 -3
  30. package/dist/src/operations/compress.js +73 -7
  31. package/dist/src/operations/compress.js.map +1 -1
  32. package/dist/src/operations/confirmationStore.d.ts +35 -8
  33. package/dist/src/operations/confirmationStore.js +112 -14
  34. package/dist/src/operations/confirmationStore.js.map +1 -1
  35. package/dist/src/operations/impactAnalysis.d.ts +9 -0
  36. package/dist/src/operations/impactAnalysis.js +61 -0
  37. package/dist/src/operations/impactAnalysis.js.map +1 -0
  38. package/dist/src/operations/pendingStore.d.ts +51 -0
  39. package/dist/src/operations/pendingStore.js +201 -0
  40. package/dist/src/operations/pendingStore.js.map +1 -0
  41. package/dist/src/operations/pendingStoreInit.d.ts +6 -0
  42. package/dist/src/operations/pendingStoreInit.js +42 -0
  43. package/dist/src/operations/pendingStoreInit.js.map +1 -0
  44. package/dist/src/operations/read.d.ts +6 -92
  45. package/dist/src/operations/read.js +4 -449
  46. package/dist/src/operations/read.js.map +1 -1
  47. package/dist/src/operations/readCore.d.ts +33 -0
  48. package/dist/src/operations/readCore.js +142 -0
  49. package/dist/src/operations/readCore.js.map +1 -0
  50. package/dist/src/operations/rename.d.ts +13 -0
  51. package/dist/src/operations/rename.js +130 -0
  52. package/dist/src/operations/rename.js.map +1 -0
  53. package/dist/src/operations/searchOperation.d.ts +16 -0
  54. package/dist/src/operations/searchOperation.js +113 -0
  55. package/dist/src/operations/searchOperation.js.map +1 -0
  56. package/dist/src/operations/symbolQuery.d.ts +38 -0
  57. package/dist/src/operations/symbolQuery.js +194 -0
  58. package/dist/src/operations/symbolQuery.js.map +1 -0
  59. package/dist/src/operations/write.d.ts +11 -14
  60. package/dist/src/operations/write.js +6 -125
  61. package/dist/src/operations/write.js.map +1 -1
  62. package/dist/src/parsers/base.d.ts +1 -1
  63. package/dist/src/parsers/base.js +1 -1
  64. package/dist/src/parsers/csharp.d.ts +12 -0
  65. package/dist/src/parsers/csharp.js +67 -0
  66. package/dist/src/parsers/csharp.js.map +1 -0
  67. package/dist/src/parsers/dartTreeSitter.d.ts +1 -1
  68. package/dist/src/parsers/dartTreeSitter.js +1 -1
  69. package/dist/src/parsers/go.d.ts +11 -0
  70. package/dist/src/parsers/go.js +74 -0
  71. package/dist/src/parsers/go.js.map +1 -0
  72. package/dist/src/parsers/java.d.ts +12 -0
  73. package/dist/src/parsers/java.js +62 -0
  74. package/dist/src/parsers/java.js.map +1 -0
  75. package/dist/src/parsers/kotlin.d.ts +12 -0
  76. package/dist/src/parsers/kotlin.js +75 -0
  77. package/dist/src/parsers/kotlin.js.map +1 -0
  78. package/dist/src/parsers/php.d.ts +1 -1
  79. package/dist/src/parsers/php.js +1 -1
  80. package/dist/src/parsers/python.d.ts +1 -1
  81. package/dist/src/parsers/python.js +1 -1
  82. package/dist/src/parsers/registry.d.ts +1 -1
  83. package/dist/src/parsers/registry.js +63 -2
  84. package/dist/src/parsers/registry.js.map +1 -1
  85. package/dist/src/parsers/ruby.d.ts +12 -0
  86. package/dist/src/parsers/ruby.js +73 -0
  87. package/dist/src/parsers/ruby.js.map +1 -0
  88. package/dist/src/parsers/rust.d.ts +12 -0
  89. package/dist/src/parsers/rust.js +66 -0
  90. package/dist/src/parsers/rust.js.map +1 -0
  91. package/dist/src/parsers/typescript.d.ts +1 -1
  92. package/dist/src/parsers/typescript.js +28 -38
  93. package/dist/src/parsers/typescript.js.map +1 -1
  94. package/dist/src/tools/adminHandlers.d.ts +67 -0
  95. package/dist/src/tools/adminHandlers.js +129 -0
  96. package/dist/src/tools/adminHandlers.js.map +1 -0
  97. package/dist/src/tools/context.d.ts +9 -0
  98. package/dist/src/tools/context.js +21 -0
  99. package/dist/src/tools/context.js.map +1 -0
  100. package/dist/src/tools/handlers.d.ts +4 -0
  101. package/dist/src/tools/handlers.js +5 -0
  102. package/dist/src/tools/handlers.js.map +1 -0
  103. package/dist/src/tools/pipeline.d.ts +6 -0
  104. package/dist/src/tools/pipeline.js +100 -0
  105. package/dist/src/tools/pipeline.js.map +1 -0
  106. package/dist/src/tools/readHandlers.d.ts +55 -0
  107. package/dist/src/tools/readHandlers.js +220 -0
  108. package/dist/src/tools/readHandlers.js.map +1 -0
  109. package/dist/src/tools/toolDefinitions.d.ts +1037 -0
  110. package/dist/src/tools/toolDefinitions.js +13 -0
  111. package/dist/src/tools/toolDefinitions.js.map +1 -0
  112. package/dist/src/tools/toolDefinitionsAdmin.d.ts +89 -0
  113. package/dist/src/tools/toolDefinitionsAdmin.js +99 -0
  114. package/dist/src/tools/toolDefinitionsAdmin.js.map +1 -0
  115. package/dist/src/tools/toolDefinitionsCore.d.ts +949 -0
  116. package/dist/src/tools/toolDefinitionsCore.js +267 -0
  117. package/dist/src/tools/toolDefinitionsCore.js.map +1 -0
  118. package/dist/src/tools/writeHandlers.d.ts +37 -0
  119. package/dist/src/tools/writeHandlers.js +199 -0
  120. package/dist/src/tools/writeHandlers.js.map +1 -0
  121. package/dist/src/utils/appDir.d.ts +19 -0
  122. package/dist/src/utils/appDir.js +50 -0
  123. package/dist/src/utils/appDir.js.map +1 -0
  124. package/dist/src/utils/auditLogWriter.d.ts +9 -0
  125. package/dist/src/utils/auditLogWriter.js +49 -0
  126. package/dist/src/utils/auditLogWriter.js.map +1 -0
  127. package/dist/src/utils/auditLogger.d.ts +1 -10
  128. package/dist/src/utils/auditLogger.js +14 -109
  129. package/dist/src/utils/auditLogger.js.map +1 -1
  130. package/dist/src/utils/auditQuery.d.ts +23 -0
  131. package/dist/src/utils/auditQuery.js +67 -0
  132. package/dist/src/utils/auditQuery.js.map +1 -0
  133. package/dist/src/utils/backupManager.d.ts +2 -2
  134. package/dist/src/utils/backupManager.js +29 -12
  135. package/dist/src/utils/backupManager.js.map +1 -1
  136. package/dist/src/utils/constants.d.ts +1 -1
  137. package/dist/src/utils/constants.js +8 -1
  138. package/dist/src/utils/constants.js.map +1 -1
  139. package/dist/src/utils/diff.d.ts +12 -1
  140. package/dist/src/utils/diff.js +41 -1
  141. package/dist/src/utils/diff.js.map +1 -1
  142. package/dist/src/utils/fileLock.d.ts +7 -2
  143. package/dist/src/utils/fileLock.js +14 -11
  144. package/dist/src/utils/fileLock.js.map +1 -1
  145. package/dist/src/utils/fileWalker.d.ts +1 -1
  146. package/dist/src/utils/fileWalker.js +1 -1
  147. package/dist/src/utils/fileWatcher.d.ts +1 -1
  148. package/dist/src/utils/fileWatcher.js +1 -1
  149. package/dist/src/utils/fuzzySearch.d.ts +1 -1
  150. package/dist/src/utils/fuzzySearch.js +1 -1
  151. package/dist/src/utils/logger.d.ts +1 -1
  152. package/dist/src/utils/logger.js +2 -2
  153. package/dist/src/utils/logger.js.map +1 -1
  154. package/dist/src/utils/rateLimiter.d.ts +9 -1
  155. package/dist/src/utils/rateLimiter.js +12 -1
  156. package/dist/src/utils/rateLimiter.js.map +1 -1
  157. package/dist/src/utils/regexValidator.d.ts +12 -0
  158. package/dist/src/utils/regexValidator.js +48 -0
  159. package/dist/src/utils/regexValidator.js.map +1 -0
  160. package/dist/src/utils/safeRegex.d.ts +2 -92
  161. package/dist/src/utils/safeRegex.js +41 -222
  162. package/dist/src/utils/safeRegex.js.map +1 -1
  163. package/dist/src/utils/safeRegexApi.d.ts +56 -0
  164. package/dist/src/utils/safeRegexApi.js +99 -0
  165. package/dist/src/utils/safeRegexApi.js.map +1 -0
  166. package/dist/src/utils/safeRegexPool.d.ts +7 -0
  167. package/dist/src/utils/safeRegexPool.js +102 -0
  168. package/dist/src/utils/safeRegexPool.js.map +1 -0
  169. package/dist/src/utils/searchTools.js +6 -6
  170. package/dist/src/utils/searchTools.js.map +1 -1
  171. package/dist/src/utils/streaming.d.ts +4 -3
  172. package/dist/src/utils/streaming.js +1 -1
  173. package/dist/src/utils/streaming.js.map +1 -1
  174. package/dist/src/utils/telemetry.d.ts +1 -1
  175. package/dist/src/utils/telemetry.js +1 -1
  176. package/dist/src/utils/toctou.d.ts +7 -0
  177. package/dist/src/utils/toctou.js +24 -0
  178. package/dist/src/utils/toctou.js.map +1 -0
  179. package/llms.txt +173 -21
  180. package/package.json +2 -2
  181. package/scripts/replace-version.js +0 -59
@@ -1,5 +1,5 @@
1
1
  /**
2
- * TypeScript Parser - v3.6.3
2
+ * TypeScript Parser - v3.7.0
3
3
  * Tree-sitter based TS/JS parser
4
4
  * CLEANUP: replaceSymbol removed (inherited from BaseParser)
5
5
  */
@@ -9,44 +9,12 @@ export class TypeScriptParser extends BaseParser {
9
9
  super("typescript");
10
10
  }
11
11
  extractSymbol(tree, symbolName, className) {
12
- const cursor = tree.walk();
13
- const search = () => {
14
- const node = cursor.currentNode;
15
- if (node.type === "function_declaration" ||
16
- node.type === "class_declaration" ||
17
- node.type === "interface_declaration" ||
18
- node.type === "type_alias_declaration" ||
19
- node.type === "method_definition" ||
20
- node.type === "lexical_declaration" ||
21
- node.type === "variable_declaration" ||
22
- node.type === "export_statement") {
23
- const nameNode = node.childForFieldName("name");
24
- if (nameNode && nameNode.text === symbolName) {
25
- if (className) {
26
- const classNode = this.findParentClass(node);
27
- if (!classNode || classNode.childForFieldName("name")?.text !== className) {
28
- // Continue searching
29
- }
30
- else {
31
- return tree.rootNode.text.substring(node.startIndex, node.endIndex);
32
- }
33
- }
34
- else {
35
- return tree.rootNode.text.substring(node.startIndex, node.endIndex);
36
- }
37
- }
38
- }
39
- if (cursor.gotoFirstChild()) {
40
- do {
41
- const result = search();
42
- if (result)
43
- return result;
44
- } while (cursor.gotoNextSibling());
45
- cursor.gotoParent();
46
- }
12
+ const src = tree.rootNode.text;
13
+ const symbols = this.findSymbols(tree);
14
+ const target = symbols.find(s => s.name === symbolName && (!className || s.className === className));
15
+ if (!target)
47
16
  return null;
48
- };
49
- return search();
17
+ return src.substring(target.startIndex, target.endIndex);
50
18
  }
51
19
  findSymbols(tree) {
52
20
  const symbols = [];
@@ -55,6 +23,7 @@ export class TypeScriptParser extends BaseParser {
55
23
  const offsetToLine = (offset) => src.substring(0, offset).split('\n').length;
56
24
  const visit = () => {
57
25
  const node = cursor.currentNode;
26
+ // Standard declarations: function, class, interface, type, method
58
27
  if (node.type === "function_declaration" ||
59
28
  node.type === "class_declaration" ||
60
29
  node.type === "interface_declaration" ||
@@ -77,6 +46,27 @@ export class TypeScriptParser extends BaseParser {
77
46
  });
78
47
  }
79
48
  }
49
+ // Arrow functions and function expressions: const Foo = () => {} / const Foo = function() {}
50
+ if (node.type === "variable_declarator") {
51
+ const nameNode = node.childForFieldName("name");
52
+ const valueNode = node.childForFieldName("value");
53
+ if (nameNode && valueNode &&
54
+ (valueNode.type === "arrow_function" || valueNode.type === "function_expression")) {
55
+ // Walk up to lexical_declaration or variable_declaration to include const/let/var + export
56
+ const declNode = node.parent; // lexical_declaration or variable_declaration
57
+ const exportParent = declNode?.parent?.type === "export_statement" ? declNode.parent : null;
58
+ const startIndex = exportParent ? exportParent.startIndex : (declNode?.startIndex ?? node.startIndex);
59
+ const endIndex = exportParent ? exportParent.endIndex : (declNode?.endIndex ?? node.endIndex);
60
+ symbols.push({
61
+ name: nameNode.text,
62
+ type: "variable_declarator",
63
+ startIndex,
64
+ endIndex,
65
+ startLine: offsetToLine(startIndex),
66
+ endLine: offsetToLine(endIndex),
67
+ });
68
+ }
69
+ }
80
70
  if (cursor.gotoFirstChild()) {
81
71
  do {
82
72
  visit();
@@ -1 +1 @@
1
- {"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../../src/parsers/typescript.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../../src/parsers/typescript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /** Tool handlers */
2
+ export declare function handleRollbackFile(args: Record<string, unknown>): Promise<{
3
+ content: {
4
+ type: string;
5
+ text: string;
6
+ }[];
7
+ }>;
8
+ export declare function handleCleanBackups(args: Record<string, unknown>): Promise<{
9
+ content: {
10
+ type: string;
11
+ text: string;
12
+ }[];
13
+ }>;
14
+ export declare function handleGetServerStats(): Promise<{
15
+ content: {
16
+ type: string;
17
+ text: string;
18
+ }[];
19
+ }>;
20
+ export declare function handleGetCacheStats(args: Record<string, unknown>): Promise<{
21
+ content: {
22
+ type: string;
23
+ text: string;
24
+ }[];
25
+ }>;
26
+ export declare function handleClearCache(args: Record<string, unknown>): Promise<{
27
+ content: {
28
+ type: string;
29
+ text: string;
30
+ }[];
31
+ }>;
32
+ export declare function handleConfigureFileWatcher(args: Record<string, unknown>): Promise<{
33
+ content: {
34
+ type: string;
35
+ text: string;
36
+ }[];
37
+ }>;
38
+ export declare function handleGetFileWatcherStatus(args: Record<string, unknown>): Promise<{
39
+ content: {
40
+ type: string;
41
+ text: string;
42
+ }[];
43
+ }>;
44
+ export declare function handleGetRateLimitStatus(): Promise<{
45
+ content: {
46
+ type: string;
47
+ text: string;
48
+ }[];
49
+ }>;
50
+ export declare function handleGetSessionStats(): Promise<{
51
+ content: {
52
+ type: string;
53
+ text: string;
54
+ }[];
55
+ }>;
56
+ export declare function handleClearSessionCache(args: Record<string, unknown>): Promise<{
57
+ content: {
58
+ type: string;
59
+ text: string;
60
+ }[];
61
+ }>;
62
+ export declare function handleListPendingOperations(): Promise<{
63
+ content: {
64
+ type: string;
65
+ text: string;
66
+ }[];
67
+ }>;
@@ -0,0 +1,129 @@
1
+ /** Tool handlers */
2
+ import * as path from "node:path";
3
+ import { SecurityValidator } from "../core/validator.js";
4
+ import { globalAuditLogger } from "../utils/auditLogger.js";
5
+ import { globalTelemetry } from "../utils/telemetry.js";
6
+ import { OPERATION_COSTS } from "../utils/rateLimiter.js";
7
+ import { BackupManager } from "../utils/backupManager.js";
8
+ import { globalSessionManager } from "../core/sessionManager.js";
9
+ import { getSession, getCacheManager, SESSION_ID } from "./context.js";
10
+ export async function handleRollbackFile(args) {
11
+ const filePath = String(args.filePath);
12
+ const projectRoot = String(args.projectRoot);
13
+ const steps = args.steps ? Number(args.steps) : 1;
14
+ const validator = new SecurityValidator(projectRoot);
15
+ const validation = await validator.validateFilePath(filePath);
16
+ if (!validation.valid)
17
+ throw new Error(validation.error);
18
+ const result = await BackupManager.rollback(validation.resolvedPath, projectRoot, steps);
19
+ if (!result.success)
20
+ throw new Error(result.error);
21
+ return { content: [{ type: "text", text: `Successfully rolled back ${path.basename(filePath)} from backup: ${result.restoredFrom}` }] };
22
+ }
23
+ export async function handleCleanBackups(args) {
24
+ const projectRoot = String(args.projectRoot);
25
+ const validator = new SecurityValidator(projectRoot);
26
+ // Just validate projectRoot is a valid directory
27
+ const validation = await validator.validateFilePath(projectRoot);
28
+ if (!validation.valid)
29
+ throw new Error(validation.error);
30
+ const result = await BackupManager.clean(projectRoot);
31
+ if (!result.success)
32
+ throw new Error(result.error);
33
+ return { content: [{ type: "text", text: `Successfully cleaned backups. Deleted ${result.deletedCount} backup files.` }] };
34
+ }
35
+ export async function handleGetServerStats() {
36
+ const telemetry = globalTelemetry.getSummary();
37
+ const audit = globalAuditLogger.getStats();
38
+ const session = getSession();
39
+ const tokensAvailable = session.rateLimiter.getTokens(SESSION_ID);
40
+ const stats = {
41
+ pendingConfirmations: session.confirmationStore.getPendingCount(),
42
+ rateLimiter: {
43
+ tokensAvailable,
44
+ maxTokens: 100,
45
+ refillRate: "10 tokens/second",
46
+ operationCosts: OPERATION_COSTS,
47
+ },
48
+ telemetry,
49
+ audit,
50
+ };
51
+ return {
52
+ content: [{ type: "text", text: JSON.stringify(stats, null, 2) }],
53
+ };
54
+ }
55
+ export async function handleGetCacheStats(args) {
56
+ const projectRoot = String(args.projectRoot);
57
+ const cache = getCacheManager(projectRoot);
58
+ const stats = await cache.getStats();
59
+ return {
60
+ content: [{ type: "text", text: JSON.stringify(stats, null, 2) }],
61
+ };
62
+ }
63
+ export async function handleClearCache(args) {
64
+ const projectRoot = String(args.projectRoot);
65
+ const cache = getCacheManager(projectRoot);
66
+ await cache.clear();
67
+ return {
68
+ content: [{ type: "text", text: "Cache cleared successfully" }],
69
+ };
70
+ }
71
+ export async function handleConfigureFileWatcher(args) {
72
+ const projectRoot = String(args.projectRoot);
73
+ const action = String(args.action);
74
+ const debounceMs = args.debounceMs ? Number(args.debounceMs) : 500;
75
+ const validator = new SecurityValidator(projectRoot);
76
+ const validation = await validator.validateFilePath(projectRoot);
77
+ if (!validation.valid)
78
+ throw new Error(validation.error);
79
+ const cache = getCacheManager(projectRoot);
80
+ if (action === "start") {
81
+ cache.startWatcher(debounceMs);
82
+ return {
83
+ content: [{ type: "text", text: `File watcher started with ${debounceMs}ms debounce` }],
84
+ };
85
+ }
86
+ else if (action === "stop") {
87
+ cache.stopWatcher();
88
+ return {
89
+ content: [{ type: "text", text: "File watcher stopped" }],
90
+ };
91
+ }
92
+ else {
93
+ throw new Error(`Invalid action: ${action}`);
94
+ }
95
+ }
96
+ export async function handleGetFileWatcherStatus(args) {
97
+ const projectRoot = String(args.projectRoot);
98
+ const cache = getCacheManager(projectRoot);
99
+ const status = cache.getWatcherStatus();
100
+ return {
101
+ content: [{ type: "text", text: JSON.stringify(status, null, 2) }],
102
+ };
103
+ }
104
+ export async function handleGetRateLimitStatus() {
105
+ const session = getSession();
106
+ const tokensAvailable = session.rateLimiter.getTokens(SESSION_ID);
107
+ const result = {
108
+ tokensAvailable,
109
+ maxTokens: 100,
110
+ refillRate: "10 tokens/second",
111
+ canAfford: Object.fromEntries(Object.entries(OPERATION_COSTS).map(([op, cost]) => [op, tokensAvailable >= cost])),
112
+ operationCosts: OPERATION_COSTS,
113
+ };
114
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
115
+ }
116
+ export async function handleGetSessionStats() {
117
+ const stats = globalSessionManager.getSessionStats(SESSION_ID);
118
+ return { content: [{ type: "text", text: JSON.stringify(stats, null, 2) }] };
119
+ }
120
+ export async function handleClearSessionCache(args) {
121
+ const projectRoot = args.projectRoot ? String(args.projectRoot) : undefined;
122
+ const cleared = await globalSessionManager.clearSessionCache(SESSION_ID, projectRoot);
123
+ return { content: [{ type: "text", text: JSON.stringify({ cacheEntriesCleared: cleared }, null, 2) }] };
124
+ }
125
+ export async function handleListPendingOperations() {
126
+ const ops = globalSessionManager.listPendingOperations(SESSION_ID);
127
+ return { content: [{ type: "text", text: JSON.stringify({ pendingOperations: ops, count: ops.length }, null, 2) }] };
128
+ }
129
+ //# sourceMappingURL=adminHandlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adminHandlers.js","sourceRoot":"","sources":["../../../src/tools/adminHandlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { CodeContextEngine } from "../core/engine.js";
2
+ import { ParserRegistry } from "../parsers/registry.js";
3
+ import { globalSessionManager } from "../core/sessionManager.js";
4
+ export declare const SESSION_ID: string;
5
+ export declare function setServerInstances(e: CodeContextEngine, r: ParserRegistry): void;
6
+ export declare function getEngine(): CodeContextEngine;
7
+ export declare function getRegistry(): ParserRegistry;
8
+ export declare function getSession(): ReturnType<typeof globalSessionManager.getOrCreate>;
9
+ export declare function getCacheManager(projectRoot: string): import("../core/cacheManager.js").CacheManager;
@@ -0,0 +1,21 @@
1
+ import { globalSessionManager } from "../core/sessionManager.js";
2
+ export const SESSION_ID = `pid-${process.pid}`;
3
+ let engine;
4
+ let registry;
5
+ export function setServerInstances(e, r) {
6
+ engine = e;
7
+ registry = r;
8
+ }
9
+ export function getEngine() {
10
+ return engine;
11
+ }
12
+ export function getRegistry() {
13
+ return registry;
14
+ }
15
+ export function getSession() {
16
+ return globalSessionManager.getOrCreate(SESSION_ID);
17
+ }
18
+ export function getCacheManager(projectRoot) {
19
+ return globalSessionManager.getCacheManager(SESSION_ID, projectRoot);
20
+ }
21
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/tools/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;AAE/C,IAAI,MAAyB,CAAC;AAC9B,IAAI,QAAwB,CAAC;AAE7B,MAAM,UAAU,kBAAkB,CAAC,CAAoB,EAAE,CAAiB;IACxE,MAAM,GAAG,CAAC,CAAC;IACX,QAAQ,GAAG,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,oBAAoB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,OAAO,oBAAoB,CAAC,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACvE,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Tool handlers — barrel re-exports */
2
+ export * from "./readHandlers.js";
3
+ export * from "./writeHandlers.js";
4
+ export * from "./adminHandlers.js";
@@ -0,0 +1,5 @@
1
+ /** Tool handlers — barrel re-exports */
2
+ export * from "./readHandlers.js";
3
+ export * from "./writeHandlers.js";
4
+ export * from "./adminHandlers.js";
5
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../../src/tools/handlers.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
+ type ToolHandler = (args: Record<string, unknown>) => Promise<any>;
3
+ /** Register a new tool handler at runtime */
4
+ export declare function registerTool(name: string, handler: ToolHandler): void;
5
+ export declare function registerPipeline(server: Server): void;
6
+ export {};
@@ -0,0 +1,100 @@
1
+ import { CallToolRequestSchema } from "@modelcontextprotocol/sdk/types.js";
2
+ import { globalTelemetry } from "../utils/telemetry.js";
3
+ import { globalAuditLogger } from "../utils/auditLogger.js";
4
+ import { OPERATION_COSTS } from "../utils/rateLimiter.js";
5
+ import { WRITE_OPS } from "./toolDefinitions.js";
6
+ import { getSession, SESSION_ID } from "./context.js";
7
+ import * as handlers from "./handlers.js";
8
+ /** Tool registry — replaces switch-case for O(1) dispatch and easy extensibility */
9
+ const TOOL_REGISTRY = new Map([
10
+ // Read operations
11
+ ["get_semantic_repo_map", handlers.handleGetSemanticRepoMap],
12
+ ["read_file_surgical", handlers.handleReadFileSurgical],
13
+ ["analyze_impact", handlers.handleAnalyzeImpact],
14
+ ["read_file_lines", handlers.handleReadFileLines],
15
+ ["search_code_pattern", handlers.handleSearchCodePattern],
16
+ ["parse_file", handlers.handleParseFile],
17
+ ["search_symbols", handlers.handleSearchSymbols],
18
+ ["explain_symbol", handlers.handleExplainSymbol],
19
+ ["batch_read", handlers.handleBatchRead],
20
+ // Write operations
21
+ ["write_file_surgical", handlers.handleWriteFileSurgical],
22
+ ["insert_symbol", handlers.handleInsertSymbol],
23
+ ["remove_symbol", handlers.handleRemoveSymbol],
24
+ ["rename_symbol", handlers.handleRenameSymbol],
25
+ ["ast_transform", handlers.handleAstTransform],
26
+ // Admin operations
27
+ ["rollback_file", handlers.handleRollbackFile],
28
+ ["clean_backups", handlers.handleCleanBackups],
29
+ ["get_server_stats", () => handlers.handleGetServerStats()],
30
+ ["get_cache_stats", handlers.handleGetCacheStats],
31
+ ["clear_cache", handlers.handleClearCache],
32
+ ["configure_file_watcher", handlers.handleConfigureFileWatcher],
33
+ ["get_file_watcher_status", handlers.handleGetFileWatcherStatus],
34
+ ["get_rate_limit_status", () => handlers.handleGetRateLimitStatus()],
35
+ ["get_session_stats", () => handlers.handleGetSessionStats()],
36
+ ["clear_session_cache", handlers.handleClearSessionCache],
37
+ ["list_pending_operations", () => handlers.handleListPendingOperations()],
38
+ ]);
39
+ function redactSensitiveFields(args) {
40
+ const SENSITIVE_KEYS = ["newContent", "code", "content"];
41
+ const safe = { ...args };
42
+ for (const key of SENSITIVE_KEYS) {
43
+ if (key in safe && typeof safe[key] === "string") {
44
+ safe[key] = `[REDACTED: ${safe[key].length} chars]`;
45
+ }
46
+ }
47
+ return safe;
48
+ }
49
+ /** Register a new tool handler at runtime */
50
+ export function registerTool(name, handler) {
51
+ TOOL_REGISTRY.set(name, handler);
52
+ }
53
+ export function registerPipeline(server) {
54
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
55
+ const { name, arguments: args } = request.params;
56
+ const startTime = Date.now();
57
+ let success = false;
58
+ let lockReleased = false;
59
+ let lockRelease = null;
60
+ try {
61
+ const session = getSession();
62
+ const cost = OPERATION_COSTS[name] ?? 1;
63
+ const rateCheck = await session.rateLimiter.checkLimit(SESSION_ID, cost);
64
+ if (!rateCheck.allowed) {
65
+ throw new Error(`Rate limit exceeded for tool: ${name}. Retry after ${rateCheck.retryAfter}ms`);
66
+ }
67
+ if (WRITE_OPS.has(name) && args && args.filePath) {
68
+ lockRelease = await session.lockManager.acquireLock(String(args.filePath));
69
+ }
70
+ const handler = TOOL_REGISTRY.get(name);
71
+ if (!handler)
72
+ throw new Error(`Unknown tool: ${name}`);
73
+ const result = await handler(args);
74
+ success = true;
75
+ return result;
76
+ }
77
+ catch (error) {
78
+ return {
79
+ content: [{ type: "text", text: `Error executing ${name}: ${error instanceof Error ? error.message : String(error)}` }],
80
+ isError: true,
81
+ };
82
+ }
83
+ finally {
84
+ const duration = Date.now() - startTime;
85
+ if (lockRelease && !lockReleased) {
86
+ await lockRelease();
87
+ lockReleased = true;
88
+ }
89
+ globalTelemetry.recordOperation({ toolName: name, duration, success });
90
+ const safeDetails = args ? redactSensitiveFields(args) : {};
91
+ globalAuditLogger.log({
92
+ level: success ? "info" : "error",
93
+ operation: name,
94
+ details: safeDetails,
95
+ result: success ? "success" : "failure",
96
+ });
97
+ }
98
+ });
99
+ }
100
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/tools/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /** Tool handlers */
2
+ export declare function handleGetSemanticRepoMap(args: Record<string, unknown>): Promise<{
3
+ content: {
4
+ type: string;
5
+ text: string;
6
+ }[];
7
+ }>;
8
+ export declare function handleReadFileSurgical(args: Record<string, unknown>): Promise<{
9
+ content: {
10
+ type: string;
11
+ text: string;
12
+ }[];
13
+ }>;
14
+ export declare function handleAnalyzeImpact(args: Record<string, unknown>): Promise<{
15
+ content: {
16
+ type: string;
17
+ text: string;
18
+ }[];
19
+ }>;
20
+ export declare function handleReadFileLines(args: Record<string, unknown>): Promise<{
21
+ content: {
22
+ type: string;
23
+ text: string;
24
+ }[];
25
+ }>;
26
+ export declare function handleSearchCodePattern(args: Record<string, unknown>): Promise<{
27
+ content: {
28
+ type: string;
29
+ text: string;
30
+ }[];
31
+ }>;
32
+ export declare function handleParseFile(args: Record<string, unknown>): Promise<{
33
+ content: {
34
+ type: string;
35
+ text: string;
36
+ }[];
37
+ }>;
38
+ export declare function handleSearchSymbols(args: Record<string, unknown>): Promise<{
39
+ content: {
40
+ type: string;
41
+ text: string;
42
+ }[];
43
+ }>;
44
+ export declare function handleExplainSymbol(args: Record<string, unknown>): Promise<{
45
+ content: {
46
+ type: string;
47
+ text: string;
48
+ }[];
49
+ }>;
50
+ export declare function handleBatchRead(args: Record<string, unknown>): Promise<{
51
+ content: {
52
+ type: string;
53
+ text: string;
54
+ }[];
55
+ }>;