mcp-code-context 2.2.0 → 2.3.1

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 (128) hide show
  1. package/.io/RULES.md +12 -0
  2. package/CHANGELOG.md +88 -1
  3. package/README.md +27 -0
  4. package/RELEASE_NOTES_v2.3.0.md +228 -0
  5. package/RELEASE_NOTES_v2.3.1.md +110 -0
  6. package/dist/src/ast/writers/safeRename.d.ts +14 -0
  7. package/dist/src/ast/writers/safeRename.js +258 -0
  8. package/dist/src/ast/writers/safeRename.js.map +1 -0
  9. package/dist/src/ast/writers/symbolWriter.d.ts +2 -0
  10. package/dist/src/ast/writers/symbolWriter.js +9 -14
  11. package/dist/src/ast/writers/symbolWriter.js.map +1 -1
  12. package/dist/src/cache/astCache.d.ts +33 -0
  13. package/dist/src/cache/astCache.js +113 -0
  14. package/dist/src/cache/astCache.js.map +1 -0
  15. package/dist/src/handlers/readHandlers.d.ts +70 -0
  16. package/dist/src/handlers/readHandlers.js +431 -0
  17. package/dist/src/handlers/readHandlers.js.map +1 -0
  18. package/dist/src/handlers/utilHandlers.d.ts +31 -0
  19. package/dist/src/handlers/utilHandlers.js +69 -0
  20. package/dist/src/handlers/utilHandlers.js.map +1 -0
  21. package/dist/src/handlers/writeHandlers.d.ts +57 -0
  22. package/dist/src/handlers/writeHandlers.js +475 -0
  23. package/dist/src/handlers/writeHandlers.js.map +1 -0
  24. package/dist/src/index.d.ts +6 -143
  25. package/dist/src/index.js +77 -1091
  26. package/dist/src/index.js.map +1 -1
  27. package/dist/src/utils/arrayUtils.d.ts +12 -0
  28. package/dist/src/utils/arrayUtils.js +27 -0
  29. package/dist/src/utils/arrayUtils.js.map +1 -0
  30. package/dist/src/utils/constants.d.ts +46 -0
  31. package/dist/src/utils/constants.js +112 -0
  32. package/dist/src/utils/constants.js.map +1 -0
  33. package/dist/src/utils/ignoreManager.d.ts +8 -0
  34. package/dist/src/utils/ignoreManager.js +49 -0
  35. package/dist/src/utils/ignoreManager.js.map +1 -1
  36. package/dist/src/utils/normalization.d.ts +49 -0
  37. package/dist/src/utils/normalization.js +173 -0
  38. package/dist/src/utils/normalization.js.map +1 -0
  39. package/dist/src/utils/projectRoot.d.ts +12 -5
  40. package/dist/src/utils/projectRoot.js +22 -20
  41. package/dist/src/utils/projectRoot.js.map +1 -1
  42. package/dist/src/utils/secureValidation.d.ts +15 -0
  43. package/dist/src/utils/secureValidation.js +41 -0
  44. package/dist/src/utils/secureValidation.js.map +1 -0
  45. package/dist/src/utils/transactionManager.d.ts +45 -0
  46. package/dist/src/utils/transactionManager.js +102 -0
  47. package/dist/src/utils/transactionManager.js.map +1 -0
  48. package/dist/src/utils/validation.d.ts +87 -0
  49. package/dist/src/utils/validation.js +231 -0
  50. package/dist/src/utils/validation.js.map +1 -0
  51. package/docs/ARCHITECTURE.md +300 -0
  52. package/docs/architecture/ADR-001-modular-handlers.md +119 -0
  53. package/package.json +5 -5
  54. package/AGENT_INSTRUCTIONS.md +0 -135
  55. package/DEPLOYMENT_INSTRUCTIONS.md +0 -110
  56. package/MEJORAS_PROPUESTAS.md +0 -324
  57. package/dist/src/tests/test-confirmation-flow.d.ts +0 -1
  58. package/dist/src/tests/test-confirmation-flow.js +0 -43
  59. package/dist/src/tests/test-confirmation-flow.js.map +0 -1
  60. package/dist/tests/debug-replace.d.ts +0 -1
  61. package/dist/tests/debug-replace.js +0 -17
  62. package/dist/tests/debug-replace.js.map +0 -1
  63. package/dist/tests/test-backup-system.d.ts +0 -7
  64. package/dist/tests/test-backup-system.js +0 -152
  65. package/dist/tests/test-backup-system.js.map +0 -1
  66. package/dist/tests/test-confirmation-flow.d.ts +0 -1
  67. package/dist/tests/test-confirmation-flow.js +0 -43
  68. package/dist/tests/test-confirmation-flow.js.map +0 -1
  69. package/dist/tests/test-dart.d.ts +0 -1
  70. package/dist/tests/test-dart.js +0 -242
  71. package/dist/tests/test-dart.js.map +0 -1
  72. package/dist/tests/test-new-tools.d.ts +0 -4
  73. package/dist/tests/test-new-tools.js +0 -147
  74. package/dist/tests/test-new-tools.js.map +0 -1
  75. package/dist/tests/test-php-ast.d.ts +0 -1
  76. package/dist/tests/test-php-ast.js +0 -152
  77. package/dist/tests/test-php-ast.js.map +0 -1
  78. package/dist/tests/test-php.d.ts +0 -1
  79. package/dist/tests/test-php.js +0 -234
  80. package/dist/tests/test-php.js.map +0 -1
  81. package/dist/tests/test-smoke.d.ts +0 -5
  82. package/dist/tests/test-smoke.js +0 -83
  83. package/dist/tests/test-smoke.js.map +0 -1
  84. package/dist/tests/writers/test-crlf-handling.d.ts +0 -4
  85. package/dist/tests/writers/test-crlf-handling.js +0 -73
  86. package/dist/tests/writers/test-crlf-handling.js.map +0 -1
  87. package/dist/tests/writers/test-write-smoke.d.ts +0 -9
  88. package/dist/tests/writers/test-write-smoke.js +0 -346
  89. package/dist/tests/writers/test-write-smoke.js.map +0 -1
  90. package/src/ast/dartCompressor.ts +0 -1013
  91. package/src/ast/phpCompressor.ts +0 -814
  92. package/src/ast/semanticCompressor.ts +0 -808
  93. package/src/ast/writers/dartWriter.ts +0 -648
  94. package/src/ast/writers/phpWriter.ts +0 -508
  95. package/src/ast/writers/pyWriter.ts +0 -446
  96. package/src/ast/writers/symbolWriter.ts +0 -277
  97. package/src/ast/writers/tsWriter.ts +0 -418
  98. package/src/index.ts +0 -1784
  99. package/src/tools/readFileLines.ts +0 -104
  100. package/src/tools/searchCodePattern.ts +0 -129
  101. package/src/utils/backupManager.ts +0 -141
  102. package/src/utils/confirmationCache.ts +0 -61
  103. package/src/utils/diffEngine.ts +0 -223
  104. package/src/utils/fuzzyMatch.ts +0 -86
  105. package/src/utils/ignoreManager.ts +0 -144
  106. package/src/utils/projectRoot.ts +0 -44
  107. package/tests/test-backup-system.ts +0 -174
  108. package/tests/test-confirmation-flow.ts +0 -49
  109. package/tests/test-dart.d.ts +0 -1
  110. package/tests/test-dart.js +0 -209
  111. package/tests/test-dart.js.map +0 -1
  112. package/tests/test-dart.ts +0 -265
  113. package/tests/test-new-tools.ts +0 -165
  114. package/tests/test-php-ast.d.ts +0 -1
  115. package/tests/test-php-ast.js +0 -152
  116. package/tests/test-php-ast.js.map +0 -1
  117. package/tests/test-php-ast.ts +0 -155
  118. package/tests/test-php.d.ts +0 -1
  119. package/tests/test-php.js +0 -234
  120. package/tests/test-php.js.map +0 -1
  121. package/tests/test-php.ts +0 -261
  122. package/tests/test-smoke.d.ts +0 -5
  123. package/tests/test-smoke.js +0 -83
  124. package/tests/test-smoke.js.map +0 -1
  125. package/tests/test-smoke.ts +0 -93
  126. package/tests/writers/test-crlf-handling.ts +0 -100
  127. package/tests/writers/test-write-smoke.ts +0 -568
  128. package/tsconfig.json +0 -19
@@ -1,346 +0,0 @@
1
- /**
2
- * test-write-smoke.ts — Smoke Tests for Surgical Writing Tools
3
- *
4
- * Tests all 4 write operations (replace, insert, rename, remove)
5
- * across all 4 supported languages (TypeScript, PHP, Dart, Python).
6
- *
7
- * Run: npm run build && node dist/tests/writers/test-write-smoke.js
8
- */
9
- import { replaceSymbol, insertCode, renameInFile, removeSymbolFromFile, } from "../../src/ast/writers/symbolWriter.js";
10
- import { generateDiff } from "../../src/utils/diffEngine.js";
11
- // ─── Test Harness ───────────────────────────────────────────────────
12
- let passed = 0;
13
- let failed = 0;
14
- function assert(condition, label, detail) {
15
- if (condition) {
16
- passed++;
17
- console.log(` ✅ ${label}`);
18
- }
19
- else {
20
- failed++;
21
- console.error(` ❌ ${label}`);
22
- if (detail)
23
- console.error(` ${detail}`);
24
- }
25
- }
26
- function section(title) {
27
- console.log(`\n━━━ ${title} ━━━`);
28
- }
29
- // ─── Test Fixtures ──────────────────────────────────────────────────
30
- const TS_FIXTURE = `
31
- import { Something } from "./something.js";
32
-
33
- const API_URL = "https://example.com";
34
-
35
- export interface UserConfig {
36
- name: string;
37
- email: string;
38
- }
39
-
40
- export class UserService {
41
- private users: Map<string, UserConfig> = new Map();
42
-
43
- getUser(id: string): UserConfig | undefined {
44
- return this.users.get(id);
45
- }
46
-
47
- addUser(id: string, config: UserConfig): void {
48
- this.users.set(id, config);
49
- }
50
-
51
- deleteUser(id: string): boolean {
52
- return this.users.delete(id);
53
- }
54
- }
55
-
56
- export function formatUser(user: UserConfig): string {
57
- return \`\${user.name} <\${user.email}>\`;
58
- }
59
- `.trim();
60
- const PHP_FIXTURE = `<?php
61
-
62
- namespace App\\Services;
63
-
64
- use App\\Models\\User;
65
- use App\\Contracts\\UserRepositoryInterface;
66
-
67
- /**
68
- * Manages user operations.
69
- */
70
- class UserService
71
- {
72
- private UserRepositoryInterface $repository;
73
-
74
- public function __construct(UserRepositoryInterface $repository)
75
- {
76
- $this->repository = $repository;
77
- }
78
-
79
- /**
80
- * Find a user by ID.
81
- */
82
- public function findUser(int $id): ?User
83
- {
84
- return $this->repository->find($id);
85
- }
86
-
87
- /**
88
- * Create a new user.
89
- */
90
- public function createUser(array $data): User
91
- {
92
- return $this->repository->create($data);
93
- }
94
-
95
- public function deleteUser(int $id): bool
96
- {
97
- return $this->repository->delete($id);
98
- }
99
- }
100
-
101
- function helperFunction(): string
102
- {
103
- return 'hello';
104
- }
105
- `;
106
- const DART_FIXTURE = `
107
- import 'package:flutter/material.dart';
108
-
109
- /// A service for managing user data.
110
- class UserService {
111
- final Map<String, dynamic> _cache = {};
112
-
113
- /// Gets a user by ID.
114
- Future<Map<String, dynamic>?> getUser(String id) async {
115
- if (_cache.containsKey(id)) {
116
- return _cache[id];
117
- }
118
- return null;
119
- }
120
-
121
- /// Adds a user to the cache.
122
- void addUser(String id, Map<String, dynamic> data) {
123
- _cache[id] = data;
124
- }
125
-
126
- /// Removes a user from the cache.
127
- bool removeUser(String id) {
128
- return _cache.remove(id) != null;
129
- }
130
- }
131
-
132
- /// Formats a user name for display.
133
- String formatUserName(String first, String last) {
134
- return '\$first \$last';
135
- }
136
- `.trim();
137
- const PY_FIXTURE = `
138
- from typing import Optional, Dict
139
-
140
- class UserService:
141
- """Manages user operations."""
142
-
143
- def __init__(self):
144
- self._users: Dict[str, dict] = {}
145
-
146
- def get_user(self, user_id: str) -> Optional[dict]:
147
- """Get a user by ID."""
148
- return self._users.get(user_id)
149
-
150
- def add_user(self, user_id: str, data: dict) -> None:
151
- """Add a user."""
152
- self._users[user_id] = data
153
-
154
- def delete_user(self, user_id: str) -> bool:
155
- """Delete a user."""
156
- if user_id in self._users:
157
- del self._users[user_id]
158
- return True
159
- return False
160
-
161
-
162
- def format_user(user: dict) -> str:
163
- """Format a user for display."""
164
- return f"{user['name']} <{user['email']}>"
165
- `.trim();
166
- // ─── TypeScript Tests ───────────────────────────────────────────────
167
- function testTypeScript() {
168
- section("TypeScript / JavaScript");
169
- // Replace
170
- const replaceResult = replaceSymbol("test.ts", TS_FIXTURE, "formatUser", `export function formatUser(user: UserConfig): string {\n return \`User: \${user.name} (\${user.email})\`;\n}`);
171
- assert(replaceResult.success, "Replace: formatUser");
172
- assert(replaceResult.newContent.includes("User: ${user.name}"), "Replace: new content is present");
173
- assert(replaceResult.newContent.includes("class UserService"), "Replace: other symbols preserved");
174
- // Insert
175
- const insertResult = insertCode("test.ts", TS_FIXTURE, `export function greetUser(user: UserConfig): string {\n return \`Hello, \${user.name}!\`;\n}`, "formatUser", "after");
176
- assert(insertResult.success, "Insert: after formatUser");
177
- assert(insertResult.newContent.includes("greetUser"), "Insert: new function is present");
178
- // Insert inside class
179
- const insertClassResult = insertCode("test.ts", TS_FIXTURE, `getUserCount(): number {\n return this.users.size;\n}`, "UserService", "inside_end");
180
- assert(insertClassResult.success, "Insert: inside_end of UserService");
181
- assert(insertClassResult.newContent.includes("getUserCount"), "Insert: method added to class");
182
- // Rename
183
- const renameResult = renameInFile("test.ts", TS_FIXTURE, "UserService", "AccountService");
184
- assert(renameResult.success, "Rename: UserService → AccountService");
185
- assert(renameResult.newContent.includes("class AccountService"), "Rename: class declaration updated");
186
- assert(!renameResult.newContent.includes("class UserService"), "Rename: old name removed");
187
- // Remove
188
- const removeResult = removeSymbolFromFile("test.ts", TS_FIXTURE, "formatUser");
189
- assert(removeResult.success, "Remove: formatUser");
190
- assert(!removeResult.newContent.includes("function formatUser"), "Remove: function is gone");
191
- assert(removeResult.newContent.includes("class UserService"), "Remove: other symbols still exist");
192
- // Remove interface
193
- const removeIfaceResult = removeSymbolFromFile("test.ts", TS_FIXTURE, "UserConfig");
194
- assert(removeIfaceResult.success, "Remove: UserConfig interface");
195
- assert(!removeIfaceResult.newContent.includes("interface UserConfig"), "Remove: interface is gone");
196
- }
197
- // ─── PHP Tests ──────────────────────────────────────────────────────
198
- function testPHP() {
199
- section("PHP");
200
- // Replace
201
- const replaceResult = replaceSymbol("test.php", PHP_FIXTURE, "findUser", ` public function findUser(int $id): ?User\n {\n $cached = $this->cache->get($id);\n return $cached ?? $this->repository->find($id);\n }`);
202
- assert(replaceResult.success, "Replace: findUser method");
203
- assert(replaceResult.newContent.includes("$cached"), "Replace: new content present");
204
- // Insert
205
- const insertResult = insertCode("test.php", PHP_FIXTURE, ` public function updateUser(int $id, array $data): User\n {\n return $this->repository->update($id, $data);\n }`, "createUser", "after");
206
- assert(insertResult.success, "Insert: after createUser");
207
- assert(insertResult.newContent.includes("updateUser"), "Insert: method present");
208
- // Rename
209
- const renameResult = renameInFile("test.php", PHP_FIXTURE, "UserService", "AccountService");
210
- assert(renameResult.success, "Rename: UserService → AccountService");
211
- assert(renameResult.newContent.includes("class AccountService"), "Rename: class updated");
212
- // Remove
213
- const removeResult = removeSymbolFromFile("test.php", PHP_FIXTURE, "helperFunction");
214
- assert(removeResult.success, "Remove: helperFunction");
215
- assert(!removeResult.newContent.includes("function helperFunction"), "Remove: function gone");
216
- assert(removeResult.newContent.includes("class UserService"), "Remove: class preserved");
217
- }
218
- // ─── Dart Tests ─────────────────────────────────────────────────────
219
- function testDart() {
220
- section("Dart");
221
- // Replace
222
- const replaceResult = replaceSymbol("test.dart", DART_FIXTURE, "formatUserName", `String formatUserName(String first, String last) {\n return '\${last.toUpperCase()}, \$first';\n}`);
223
- assert(replaceResult.success, "Replace: formatUserName");
224
- assert(replaceResult.newContent.includes("toUpperCase"), "Replace: new content present");
225
- // Insert
226
- const insertResult = insertCode("test.dart", DART_FIXTURE, `/// Checks if a user exists.\nbool userExists(String id) {\n return false;\n}`, "formatUserName", "after");
227
- assert(insertResult.success, "Insert: after formatUserName");
228
- assert(insertResult.newContent.includes("userExists"), "Insert: function present");
229
- // Insert inside class
230
- const insertClassResult = insertCode("test.dart", DART_FIXTURE, ` /// Clears the entire cache.\n void clearCache() {\n _cache.clear();\n }`, "UserService", "inside_end");
231
- assert(insertClassResult.success, "Insert: inside_end of UserService");
232
- assert(insertClassResult.newContent.includes("clearCache"), "Insert: method in class");
233
- // Rename
234
- const renameResult = renameInFile("test.dart", DART_FIXTURE, "UserService", "ProfileService");
235
- assert(renameResult.success, "Rename: UserService → ProfileService");
236
- assert(renameResult.newContent.includes("class ProfileService"), "Rename: class updated");
237
- // Remove
238
- const removeResult = removeSymbolFromFile("test.dart", DART_FIXTURE, "formatUserName");
239
- assert(removeResult.success, "Remove: formatUserName");
240
- assert(!removeResult.newContent.includes("formatUserName"), "Remove: function gone");
241
- assert(removeResult.newContent.includes("class UserService"), "Remove: class preserved");
242
- }
243
- // ─── Python Tests ───────────────────────────────────────────────────
244
- function testPython() {
245
- section("Python");
246
- // Replace
247
- const replaceResult = replaceSymbol("test.py", PY_FIXTURE, "format_user", `def format_user(user: dict) -> str:\n """Format a user for display with title."""\n name = user['name'].title()\n return f"{name} <{user['email']}>"`);
248
- assert(replaceResult.success, "Replace: format_user");
249
- assert(replaceResult.newContent.includes(".title()"), "Replace: new content present");
250
- // Insert
251
- const insertResult = insertCode("test.py", PY_FIXTURE, `def validate_email(email: str) -> bool:\n """Check if email is valid."""\n return "@" in email and "." in email`, "format_user", "after");
252
- assert(insertResult.success, "Insert: after format_user");
253
- assert(insertResult.newContent.includes("validate_email"), "Insert: function present");
254
- // Rename
255
- const renameResult = renameInFile("test.py", PY_FIXTURE, "UserService", "AccountService");
256
- assert(renameResult.success, "Rename: UserService → AccountService");
257
- assert(renameResult.newContent.includes("class AccountService"), "Rename: class updated");
258
- // Remove
259
- const removeResult = removeSymbolFromFile("test.py", PY_FIXTURE, "format_user");
260
- assert(removeResult.success, "Remove: format_user");
261
- assert(!removeResult.newContent.includes("def format_user"), "Remove: function gone");
262
- assert(removeResult.newContent.includes("class UserService"), "Remove: class preserved");
263
- }
264
- // ─── Class Name Filtering Tests ───────────────────────────────────────
265
- function testClassName() {
266
- section("ClassName Disambiguation");
267
- const DART_MULTI_CLASS = `
268
- class ClassA {
269
- void build() {
270
- print('A');
271
- }
272
- }
273
-
274
- class ClassB {
275
- void build() {
276
- print('B');
277
- }
278
- }
279
- `;
280
- // Try to remove "build" from ClassB
281
- const removeResult = removeSymbolFromFile("test_multi.dart", DART_MULTI_CLASS, "build", "ClassB");
282
- assert(removeResult.success, "ClassName Remove: build from ClassB");
283
- assert(removeResult.newContent.includes("print('A');"), "ClassName Remove: ClassA build preserved");
284
- assert(!removeResult.newContent.includes("print('B');"), "ClassName Remove: ClassB build removed");
285
- const PY_MULTI_CLASS = `
286
- class ClassA:
287
- def execute(self):
288
- return 'A'
289
-
290
- class ClassB:
291
- def execute(self):
292
- return 'B'
293
- `;
294
- const replaceResult = replaceSymbol("test_multi.py", PY_MULTI_CLASS, "execute", " def execute(self):\n return 'C'", "ClassB");
295
- assert(replaceResult.success, "ClassName Replace: execute in ClassB");
296
- assert(replaceResult.newContent.includes("return 'A'"), "ClassName Replace: ClassA execute preserved");
297
- assert(replaceResult.newContent.includes("return 'C'"), "ClassName Replace: ClassB execute updated");
298
- assert(!replaceResult.newContent.includes("return 'B'"), "ClassName Replace: ClassB execute old content removed");
299
- }
300
- // ─── Diff Engine Tests ──────────────────────────────────────────────
301
- function testDiffEngine() {
302
- section("Diff Engine");
303
- const oldContent = "line1\nline2\nline3\nline4\nline5";
304
- const newContent = "line1\nline2_modified\nline3\nline4\nline5\nline6_added";
305
- const diff = generateDiff(oldContent, newContent, "test.txt");
306
- assert(diff.includes("---"), "Diff: has header");
307
- assert(diff.includes("+++"), "Diff: has header (new)");
308
- assert(diff.includes("-line2"), "Diff: shows removal");
309
- assert(diff.includes("+line2_modified"), "Diff: shows addition");
310
- assert(diff.includes("+line6_added"), "Diff: shows appended line");
311
- // No-change diff
312
- const noDiff = generateDiff("same", "same", "noop.txt");
313
- assert(noDiff.includes("no changes"), "Diff: no-change case handled");
314
- }
315
- // ─── Unsupported Language Tests ─────────────────────────────────────
316
- function testUnsupported() {
317
- section("Unsupported Languages (Graceful Failures)");
318
- const result = replaceSymbol("test.rs", "fn main() {}", "main", "fn main() { println!(\"hi\"); }");
319
- assert(!result.success, "Unsupported: Rust returns failure");
320
- assert(result.error?.includes("Unsupported") ?? false, "Unsupported: error message is descriptive");
321
- }
322
- // ─── Run All ────────────────────────────────────────────────────────
323
- async function main() {
324
- console.log("🔬 Surgical Writing Tools — Smoke Tests\n");
325
- testTypeScript();
326
- testPHP();
327
- testDart();
328
- testPython();
329
- testClassName();
330
- testDiffEngine();
331
- testUnsupported();
332
- console.log(`\n${"═".repeat(50)}`);
333
- console.log(`📊 Results: ${passed} passed, ${failed} failed (${passed + failed} total)`);
334
- if (failed > 0) {
335
- console.error(`\n❌ ${failed} test(s) FAILED`);
336
- process.exit(1);
337
- }
338
- else {
339
- console.log(`\n✅ All tests passed!`);
340
- }
341
- }
342
- main().catch((err) => {
343
- console.error("Fatal error:", err);
344
- process.exit(1);
345
- });
346
- //# sourceMappingURL=test-write-smoke.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-write-smoke.js","sourceRoot":"","sources":["../../../tests/writers/test-write-smoke.ts"],"names":[],"mappings":"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"}