mcp-code-context 2.2.0 → 2.4.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 (132) hide show
  1. package/.io/RULES.md +12 -0
  2. package/CHANGELOG.md +114 -1
  3. package/README.md +28 -1
  4. package/dist/src/ast/writers/safeRename.d.ts +14 -0
  5. package/dist/src/ast/writers/safeRename.js +258 -0
  6. package/dist/src/ast/writers/safeRename.js.map +1 -0
  7. package/dist/src/ast/writers/symbolWriter.d.ts +2 -0
  8. package/dist/src/ast/writers/symbolWriter.js +9 -14
  9. package/dist/src/ast/writers/symbolWriter.js.map +1 -1
  10. package/dist/src/cache/astCache.d.ts +33 -0
  11. package/dist/src/cache/astCache.js +113 -0
  12. package/dist/src/cache/astCache.js.map +1 -0
  13. package/dist/src/handlers/readHandlers.d.ts +70 -0
  14. package/dist/src/handlers/readHandlers.js +431 -0
  15. package/dist/src/handlers/readHandlers.js.map +1 -0
  16. package/dist/src/handlers/utilHandlers.d.ts +31 -0
  17. package/dist/src/handlers/utilHandlers.js +69 -0
  18. package/dist/src/handlers/utilHandlers.js.map +1 -0
  19. package/dist/src/handlers/writeHandlers.d.ts +57 -0
  20. package/dist/src/handlers/writeHandlers.js +475 -0
  21. package/dist/src/handlers/writeHandlers.js.map +1 -0
  22. package/dist/src/index.d.ts +6 -143
  23. package/dist/src/index.js +77 -1091
  24. package/dist/src/index.js.map +1 -1
  25. package/dist/src/tools/searchCodePattern.d.ts +7 -2
  26. package/dist/src/tools/searchCodePattern.js +68 -4
  27. package/dist/src/tools/searchCodePattern.js.map +1 -1
  28. package/dist/src/utils/arrayUtils.d.ts +12 -0
  29. package/dist/src/utils/arrayUtils.js +27 -0
  30. package/dist/src/utils/arrayUtils.js.map +1 -0
  31. package/dist/src/utils/constants.d.ts +46 -0
  32. package/dist/src/utils/constants.js +112 -0
  33. package/dist/src/utils/constants.js.map +1 -0
  34. package/dist/src/utils/ignoreManager.d.ts +8 -0
  35. package/dist/src/utils/ignoreManager.js +49 -0
  36. package/dist/src/utils/ignoreManager.js.map +1 -1
  37. package/dist/src/utils/normalization.d.ts +49 -0
  38. package/dist/src/utils/normalization.js +173 -0
  39. package/dist/src/utils/normalization.js.map +1 -0
  40. package/dist/src/utils/projectRoot.d.ts +12 -5
  41. package/dist/src/utils/projectRoot.js +22 -20
  42. package/dist/src/utils/projectRoot.js.map +1 -1
  43. package/dist/src/utils/secureValidation.d.ts +15 -0
  44. package/dist/src/utils/secureValidation.js +41 -0
  45. package/dist/src/utils/secureValidation.js.map +1 -0
  46. package/dist/src/utils/transactionManager.d.ts +45 -0
  47. package/dist/src/utils/transactionManager.js +102 -0
  48. package/dist/src/utils/transactionManager.js.map +1 -0
  49. package/dist/src/utils/validation.d.ts +87 -0
  50. package/dist/src/utils/validation.js +231 -0
  51. package/dist/src/utils/validation.js.map +1 -0
  52. package/docs/ARCHITECTURE.md +300 -0
  53. package/docs/architecture/ADR-001-modular-handlers.md +119 -0
  54. package/llms.txt +10 -1
  55. package/package.json +5 -5
  56. package/AGENT_INSTRUCTIONS.md +0 -135
  57. package/DEPLOYMENT_INSTRUCTIONS.md +0 -110
  58. package/MEJORAS_PROPUESTAS.md +0 -324
  59. package/RELEASE_NOTES_v2.1.3.md +0 -78
  60. package/RELEASE_NOTES_v2.2.0.md +0 -286
  61. package/dist/src/tests/test-confirmation-flow.d.ts +0 -1
  62. package/dist/src/tests/test-confirmation-flow.js +0 -43
  63. package/dist/src/tests/test-confirmation-flow.js.map +0 -1
  64. package/dist/tests/debug-replace.d.ts +0 -1
  65. package/dist/tests/debug-replace.js +0 -17
  66. package/dist/tests/debug-replace.js.map +0 -1
  67. package/dist/tests/test-backup-system.d.ts +0 -7
  68. package/dist/tests/test-backup-system.js +0 -152
  69. package/dist/tests/test-backup-system.js.map +0 -1
  70. package/dist/tests/test-confirmation-flow.d.ts +0 -1
  71. package/dist/tests/test-confirmation-flow.js +0 -43
  72. package/dist/tests/test-confirmation-flow.js.map +0 -1
  73. package/dist/tests/test-dart.d.ts +0 -1
  74. package/dist/tests/test-dart.js +0 -242
  75. package/dist/tests/test-dart.js.map +0 -1
  76. package/dist/tests/test-new-tools.d.ts +0 -4
  77. package/dist/tests/test-new-tools.js +0 -147
  78. package/dist/tests/test-new-tools.js.map +0 -1
  79. package/dist/tests/test-php-ast.d.ts +0 -1
  80. package/dist/tests/test-php-ast.js +0 -152
  81. package/dist/tests/test-php-ast.js.map +0 -1
  82. package/dist/tests/test-php.d.ts +0 -1
  83. package/dist/tests/test-php.js +0 -234
  84. package/dist/tests/test-php.js.map +0 -1
  85. package/dist/tests/test-smoke.d.ts +0 -5
  86. package/dist/tests/test-smoke.js +0 -83
  87. package/dist/tests/test-smoke.js.map +0 -1
  88. package/dist/tests/writers/test-crlf-handling.d.ts +0 -4
  89. package/dist/tests/writers/test-crlf-handling.js +0 -73
  90. package/dist/tests/writers/test-crlf-handling.js.map +0 -1
  91. package/dist/tests/writers/test-write-smoke.d.ts +0 -9
  92. package/dist/tests/writers/test-write-smoke.js +0 -346
  93. package/dist/tests/writers/test-write-smoke.js.map +0 -1
  94. package/src/ast/dartCompressor.ts +0 -1013
  95. package/src/ast/phpCompressor.ts +0 -814
  96. package/src/ast/semanticCompressor.ts +0 -808
  97. package/src/ast/writers/dartWriter.ts +0 -648
  98. package/src/ast/writers/phpWriter.ts +0 -508
  99. package/src/ast/writers/pyWriter.ts +0 -446
  100. package/src/ast/writers/symbolWriter.ts +0 -277
  101. package/src/ast/writers/tsWriter.ts +0 -418
  102. package/src/index.ts +0 -1784
  103. package/src/tools/readFileLines.ts +0 -104
  104. package/src/tools/searchCodePattern.ts +0 -129
  105. package/src/utils/backupManager.ts +0 -141
  106. package/src/utils/confirmationCache.ts +0 -61
  107. package/src/utils/diffEngine.ts +0 -223
  108. package/src/utils/fuzzyMatch.ts +0 -86
  109. package/src/utils/ignoreManager.ts +0 -144
  110. package/src/utils/projectRoot.ts +0 -44
  111. package/tests/test-backup-system.ts +0 -174
  112. package/tests/test-confirmation-flow.ts +0 -49
  113. package/tests/test-dart.d.ts +0 -1
  114. package/tests/test-dart.js +0 -209
  115. package/tests/test-dart.js.map +0 -1
  116. package/tests/test-dart.ts +0 -265
  117. package/tests/test-new-tools.ts +0 -165
  118. package/tests/test-php-ast.d.ts +0 -1
  119. package/tests/test-php-ast.js +0 -152
  120. package/tests/test-php-ast.js.map +0 -1
  121. package/tests/test-php-ast.ts +0 -155
  122. package/tests/test-php.d.ts +0 -1
  123. package/tests/test-php.js +0 -234
  124. package/tests/test-php.js.map +0 -1
  125. package/tests/test-php.ts +0 -261
  126. package/tests/test-smoke.d.ts +0 -5
  127. package/tests/test-smoke.js +0 -83
  128. package/tests/test-smoke.js.map +0 -1
  129. package/tests/test-smoke.ts +0 -93
  130. package/tests/writers/test-crlf-handling.ts +0 -100
  131. package/tests/writers/test-write-smoke.ts +0 -568
  132. package/tsconfig.json +0 -19
@@ -1,286 +0,0 @@
1
- # 🚀 Release v2.2.0 - Centralized Backup System + New Read Tools
2
-
3
- **Release Date:** April 22, 2026
4
- **Type:** Minor Release (New Features + Improvements)
5
-
6
- ---
7
-
8
- ## 🎯 What's New
9
-
10
- ### 1. 📖 **New Read Tools** (Token Efficiency Champions)
11
-
12
- #### `read_file_lines` - Surgical Line Reading
13
- Read specific line ranges or search around patterns without loading entire files.
14
-
15
- **Use Cases:**
16
- - Debug specific code blocks
17
- - View error context from stack traces
18
- - Inspect method implementations without full file overhead
19
-
20
- **Token Savings:** ~90% compared to reading full files
21
-
22
- **Examples:**
23
- ```typescript
24
- // Read exact range
25
- read_file_lines({
26
- filePath: "/project/src/utils.ts",
27
- startLine: 120,
28
- endLine: 135
29
- })
30
-
31
- // Search around pattern
32
- read_file_lines({
33
- filePath: "/project/src/service.ts",
34
- aroundPattern: "calculateTotal",
35
- contextLines: 5
36
- })
37
- ```
38
-
39
- #### `search_code_pattern` - Repository-Wide Pattern Search
40
- Find patterns across your codebase with context, respecting `.gitignore`.
41
-
42
- **Use Cases:**
43
- - Find all usages of a function
44
- - Locate TODO comments
45
- - Search for specific patterns with context
46
-
47
- **Token Savings:** ~85% compared to manual grep workflows
48
-
49
- **Examples:**
50
- ```typescript
51
- search_code_pattern({
52
- rootDir: "/project",
53
- pattern: "widget\\.height",
54
- fileExtensions: [".dart"],
55
- showContext: true,
56
- maxResults: 20
57
- })
58
- ```
59
-
60
- ---
61
-
62
- ### 2. 🧹 **Centralized Backup System** (Major Improvement)
63
-
64
- **Problem Solved:** Backups were scattered throughout projects, polluting git status and creating multiple `.mcp-backups/` folders.
65
-
66
- **Solution:** ONE centralized backup directory at project root.
67
-
68
- #### Before (v2.1.x):
69
- ```
70
- project/
71
- ├── lib/
72
- │ ├── screens/
73
- │ │ └── .mcp-backups/ ❌
74
- │ └── services/
75
- │ └── .mcp-backups/ ❌
76
- └── src/
77
- └── .mcp-backups/ ❌
78
- ```
79
-
80
- #### After (v2.2.0):
81
- ```
82
- project/
83
- ├── .mcp-backups/ ✅ ONE directory
84
- │ ├── lib/
85
- │ │ ├── screens/
86
- │ │ └── services/
87
- │ └── src/
88
- ├── lib/
89
- ├── services/
90
- └── src/
91
- ```
92
-
93
- **Benefits:**
94
- - ✅ Clean git status
95
- - ✅ Easy to clean all backups at once
96
- - ✅ Preserves internal folder structure
97
- - ✅ Backward compatible
98
-
99
- #### `clean_backups` - New Cleanup Tool
100
- Remove all backups with a single command.
101
-
102
- ```typescript
103
- clean_backups({
104
- projectRoot: "/path/to/project"
105
- })
106
- ```
107
-
108
- ---
109
-
110
- ## 📊 Technical Improvements
111
-
112
- ### Test Coverage
113
- - **148 tests passing** (100% success rate)
114
- - 35 Dart compression tests
115
- - 33 PHP compression tests
116
- - 59 Surgical writing tests
117
- - 7 New tools tests
118
- - 7 Backup system tests
119
- - 7 Integration tests
120
-
121
- ### Performance
122
- - `read_file_lines`: 90% token reduction vs full file reads
123
- - `search_code_pattern`: 85% more efficient than manual grep
124
- - Centralized backups: 0 scattered directories
125
-
126
- ### Reliability
127
- - Comprehensive error handling
128
- - Edge case coverage (deep nesting, non-existent paths)
129
- - Backward compatible with legacy backup locations
130
-
131
- ---
132
-
133
- ## 🛠️ All Tools (11 Total)
134
-
135
- ### Read Tools (5)
136
- 1. `get_semantic_repo_map` - Repository structure overview
137
- 2. `read_file_surgical` - Extract specific symbols
138
- 3. `analyze_impact` - Find dependencies
139
- 4. **`read_file_lines`** - Read line ranges ⭐ NEW
140
- 5. **`search_code_pattern`** - Search with context ⭐ NEW
141
-
142
- ### Cleanup Tools (1)
143
- 6. **`clean_backups`** - Remove all backups ⭐ NEW
144
-
145
- ### Write Tools (5)
146
- 7. `write_file_surgical` - Replace symbols
147
- 8. `insert_symbol` - Insert code precisely
148
- 9. `rename_symbol` - Rename across repository
149
- 10. `remove_symbol` - Safe symbol removal
150
- 11. `rollback_file` - Undo changes
151
-
152
- ---
153
-
154
- ## 📦 Installation
155
-
156
- ### NPM (Recommended)
157
- ```bash
158
- npm install -g mcp-code-context@2.2.0
159
- ```
160
-
161
- ### From Source
162
- ```bash
163
- git clone https://github.com/achatainga/mcp-code-context.git
164
- cd mcp-code-context
165
- git checkout v2.2.0
166
- npm install
167
- npm run build
168
- ```
169
-
170
- ---
171
-
172
- ## ⚙️ Configuration
173
-
174
- ### Amazon Q / VS Code / Cursor
175
- Add to your MCP config:
176
-
177
- ```json
178
- {
179
- "mcpServers": {
180
- "code-context": {
181
- "command": "npx",
182
- "args": ["-y", "mcp-code-context@2.2.0"]
183
- }
184
- }
185
- }
186
- ```
187
-
188
- ### Claude Desktop
189
- Add to `claude_desktop_config.json`:
190
-
191
- ```json
192
- {
193
- "mcpServers": {
194
- "code-context": {
195
- "command": "npx",
196
- "args": ["-y", "mcp-code-context@2.2.0"]
197
- }
198
- }
199
- }
200
- ```
201
-
202
- ---
203
-
204
- ## 🔄 Migration from v2.1.x
205
-
206
- ### Automatic Migration
207
- No action needed! The new backup system:
208
- - ✅ Automatically uses centralized location for new backups
209
- - ✅ Still reads legacy backup locations
210
- - ✅ No breaking changes
211
-
212
- ### Optional Cleanup
213
- Clean old scattered backups:
214
-
215
- ```bash
216
- # Find old backup directories
217
- find . -type d -name ".mcp-backups" -not -path "./.mcp-backups"
218
-
219
- # Remove them (after verifying)
220
- find . -type d -name ".mcp-backups" -not -path "./.mcp-backups" -exec rm -rf {} +
221
- ```
222
-
223
- ---
224
-
225
- ## 🐛 Bug Fixes
226
-
227
- - Fixed backup directory pollution in git status
228
- - Improved error messages for non-existent paths
229
- - Better handling of deeply nested file structures
230
-
231
- ---
232
-
233
- ## 📚 Documentation
234
-
235
- - [README.md](README.md) - Complete tool documentation
236
- - [CHANGELOG.md](CHANGELOG.md) - Detailed change history
237
- - [CONTRIBUTING.md](CONTRIBUTING.md) - Contribution guidelines
238
- - [llms.txt](llms.txt) - AI-optimized documentation
239
-
240
- ---
241
-
242
- ## 🙏 Acknowledgments
243
-
244
- This release was built based on real-world debugging experience with:
245
- - Flutter/Dart projects (DeTodo24 mobile app)
246
- - WordPress/PHP backends (dt24-home-engine)
247
- - Complex multi-repository architectures
248
-
249
- Special thanks to the community for feedback and testing.
250
-
251
- ---
252
-
253
- ## 📈 What's Next (v2.3.0)
254
-
255
- Planned features:
256
- - `extract_json_value` - Parse JSON responses efficiently
257
- - Enhanced `get_semantic_repo_map` with file limits
258
- - Support for more languages (Go, Rust, Java)
259
- - Performance optimizations for large repositories
260
-
261
- ---
262
-
263
- ## 🔗 Links
264
-
265
- - **GitHub:** https://github.com/achatainga/mcp-code-context
266
- - **NPM:** https://www.npmjs.com/package/mcp-code-context
267
- - **Issues:** https://github.com/achatainga/mcp-code-context/issues
268
- - **Discussions:** https://github.com/achatainga/mcp-code-context/discussions
269
-
270
- ---
271
-
272
- ## 📄 License
273
-
274
- MIT License - See [LICENSE](LICENSE) for details
275
-
276
- ---
277
-
278
- **Full Changelog:** https://github.com/achatainga/mcp-code-context/compare/v2.1.3...v2.2.0
279
-
280
- ---
281
-
282
- *Built with ❤️ for the AI-assisted development community*
283
-
284
- **Version:** 2.2.0
285
- **Released:** April 22, 2026
286
- **Tested:** 148/148 tests passing ✅
@@ -1 +0,0 @@
1
- export {};
@@ -1,43 +0,0 @@
1
- import * as fs from 'node:fs';
2
- import * as path from 'node:path';
3
- import { handleWriteFileSurgical, handleRollbackFile } from '../dist/index.js';
4
- async function testWorkflow() {
5
- const testFile = path.resolve('test-artifact.ts');
6
- const initialContent = 'export class Old { build() { return 1; } }';
7
- fs.writeFileSync(testFile, initialContent, 'utf-8');
8
- console.log('--- Step 1: Preview (Dry-Run) ---');
9
- const previewArgs = {
10
- filePath: testFile,
11
- symbolName: 'build',
12
- newContent: ' build() { return "new value"; }',
13
- className: 'Old'
14
- };
15
- const p1 = await handleWriteFileSurgical(previewArgs);
16
- const p1Text = p1.content[0].text;
17
- console.log('Preview Result:', p1Text.split('\n')[0]);
18
- const tokenMatch = p1Text.match(/confirmationToken: "([^"]+)"/);
19
- if (!tokenMatch)
20
- throw new Error('No token found');
21
- const token = tokenMatch[1];
22
- console.log('Token found:', token);
23
- console.log('\n--- Step 2: Confirm ---');
24
- const confirmArgs = {
25
- ...previewArgs,
26
- confirmationToken: token,
27
- confirm: true
28
- };
29
- const p2 = await handleWriteFileSurgical(confirmArgs);
30
- console.log('Confirm Result:', p2.content[0].text.split('\n')[0]);
31
- console.log('File Content:', fs.readFileSync(testFile, 'utf-8'));
32
- console.log('\n--- Step 3: Rollback ---');
33
- await handleRollbackFile({ filePath: testFile, steps: 1 });
34
- console.log('After Rollback:', fs.readFileSync(testFile, 'utf-8'));
35
- // Clean up
36
- fs.unlinkSync(testFile);
37
- const backupDir = path.join(path.dirname(testFile), '.mcp-backups');
38
- if (fs.existsSync(backupDir)) {
39
- fs.rmSync(backupDir, { recursive: true, force: true });
40
- }
41
- }
42
- testWorkflow().catch(console.error);
43
- //# sourceMappingURL=test-confirmation-flow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-confirmation-flow.js","sourceRoot":"","sources":["../../../src/tests/test-confirmation-flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE/E,KAAK,UAAU,YAAY;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,4CAA4C,CAAC;IACpE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IAEpD,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG;QAClB,QAAQ,EAAE,QAAQ;QAClB,UAAU,EAAE,OAAO;QACnB,UAAU,EAAE,mCAAmC;QAC/C,SAAS,EAAE,KAAK;KACjB,CAAC;IAEF,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAChE,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IAEnC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG;QAClB,GAAG,WAAW;QACd,iBAAiB,EAAE,KAAK;QACxB,OAAO,EAAE,IAAI;KACd,CAAC;IACF,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAEjE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,MAAM,kBAAkB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAEnE,WAAW;IACX,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,CAAC;IACpE,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,YAAY,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,17 +0,0 @@
1
- import { replaceDartSymbol } from "../src/ast/writers/dartWriter.js";
2
- const dartCRLF = "class BadgeService {\r\n static void update({int? cart}) {\r\n if (cart != null) {\r\n print(cart);\r\n }\r\n }\r\n}\r\n";
3
- const newMethod = " static void update({int? cart}) {\r\n if (cart != null) {\r\n print('Updated: $cart');\r\n }\r\n }";
4
- console.log("=== ORIGINAL ===");
5
- console.log(dartCRLF);
6
- console.log("\n=== NEW CONTENT ===");
7
- console.log(newMethod);
8
- const result = replaceDartSymbol(dartCRLF, "update", newMethod);
9
- console.log("\n=== RESULT ===");
10
- console.log(JSON.stringify(result, null, 2));
11
- console.log("\n=== NEW FILE CONTENT ===");
12
- console.log(result.newContent);
13
- console.log("\n=== BRACE COUNT ===");
14
- const openBraces = (result.newContent.match(/{/g) || []).length;
15
- const closeBraces = (result.newContent.match(/}/g) || []).length;
16
- console.log(`Open: ${openBraces}, Close: ${closeBraces}`);
17
- //# sourceMappingURL=debug-replace.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-replace.js","sourceRoot":"","sources":["../../tests/debug-replace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,MAAM,QAAQ,GAAG,uIAAuI,CAAC;AAEzJ,MAAM,SAAS,GAAG,kHAAkH,CAAC;AAErI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAChC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACtB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AACrC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAEvB,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAEhE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAE7C,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAC1C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAE/B,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AACrC,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;AAChE,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;AACjE,OAAO,CAAC,GAAG,CAAC,SAAS,UAAU,YAAY,WAAW,EAAE,CAAC,CAAC"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Tests for Centralized Backup System
3
- * - Backup creation in project root
4
- * - Folder structure preservation
5
- * - clean_backups functionality
6
- */
7
- export {};
@@ -1,152 +0,0 @@
1
- /**
2
- * Tests for Centralized Backup System
3
- * - Backup creation in project root
4
- * - Folder structure preservation
5
- * - clean_backups functionality
6
- */
7
- import * as fs from 'fs';
8
- import * as path from 'path';
9
- import { createBackup, cleanAllBackups } from '../src/utils/backupManager.js';
10
- import { findProjectRoot } from '../src/utils/projectRoot.js';
11
- const TEST_DIR = path.join(process.cwd(), 'tests', 'fixtures', 'backup-test-project');
12
- const TEST_FILE = path.join(TEST_DIR, 'src', 'components', 'Button.tsx');
13
- function setupTestProject() {
14
- // Create test project structure
15
- if (fs.existsSync(TEST_DIR)) {
16
- fs.rmSync(TEST_DIR, { recursive: true, force: true });
17
- }
18
- fs.mkdirSync(path.join(TEST_DIR, 'src', 'components'), { recursive: true });
19
- fs.writeFileSync(TEST_FILE, 'export const Button = () => <button>Click</button>;');
20
- // Create package.json to mark as project root
21
- fs.writeFileSync(path.join(TEST_DIR, 'package.json'), JSON.stringify({ name: 'backup-test-project' }));
22
- }
23
- function cleanupTestProject() {
24
- if (fs.existsSync(TEST_DIR)) {
25
- fs.rmSync(TEST_DIR, { recursive: true, force: true });
26
- }
27
- }
28
- function runTests() {
29
- console.log('\n🧪 Testing Centralized Backup System...\n');
30
- let passed = 0;
31
- let failed = 0;
32
- // Setup
33
- setupTestProject();
34
- try {
35
- // Test 1: Find project root
36
- console.log('Test 1: Find project root');
37
- const projectRoot = findProjectRoot(TEST_FILE);
38
- if (projectRoot === TEST_DIR) {
39
- console.log('✅ PASS: Project root found correctly');
40
- passed++;
41
- }
42
- else {
43
- console.log(`❌ FAIL: Expected ${TEST_DIR}, got ${projectRoot}`);
44
- failed++;
45
- }
46
- // Test 2: Create backup in centralized location
47
- console.log('\nTest 2: Create backup in centralized location');
48
- const backupPath = createBackup(TEST_FILE);
49
- const expectedBackupDir = path.join(TEST_DIR, '.mcp-backups', 'src', 'components');
50
- const backupExists = fs.existsSync(backupPath);
51
- const inCorrectLocation = backupPath.startsWith(expectedBackupDir);
52
- if (backupExists && inCorrectLocation) {
53
- console.log('✅ PASS: Backup created in centralized location');
54
- console.log(` Location: ${backupPath}`);
55
- passed++;
56
- }
57
- else {
58
- console.log('❌ FAIL: Backup not in correct location');
59
- console.log(` Expected dir: ${expectedBackupDir}`);
60
- console.log(` Actual path: ${backupPath}`);
61
- failed++;
62
- }
63
- // Test 3: Backup preserves folder structure
64
- console.log('\nTest 3: Backup preserves folder structure');
65
- const relativePath = path.relative(TEST_DIR, TEST_FILE);
66
- const expectedStructure = path.join('.mcp-backups', relativePath);
67
- const actualStructure = path.relative(TEST_DIR, backupPath.replace(/\.\d+\.backup$/, ''));
68
- if (actualStructure.startsWith(expectedStructure)) {
69
- console.log('✅ PASS: Folder structure preserved');
70
- console.log(` Structure: ${expectedStructure}`);
71
- passed++;
72
- }
73
- else {
74
- console.log('❌ FAIL: Folder structure not preserved');
75
- console.log(` Expected: ${expectedStructure}`);
76
- console.log(` Actual: ${actualStructure}`);
77
- failed++;
78
- }
79
- // Test 4: Multiple backups in same location
80
- console.log('\nTest 4: Multiple backups (rolling system)');
81
- const backup2 = createBackup(TEST_FILE);
82
- const backup3 = createBackup(TEST_FILE);
83
- const allBackups = fs.readdirSync(expectedBackupDir)
84
- .filter(f => f.startsWith('Button.tsx.') && f.endsWith('.backup'));
85
- if (allBackups.length === 3) {
86
- console.log('✅ PASS: Multiple backups created');
87
- console.log(` Backups: ${allBackups.join(', ')}`);
88
- passed++;
89
- }
90
- else {
91
- console.log(`❌ FAIL: Expected 3 backups, found ${allBackups.length}`);
92
- failed++;
93
- }
94
- // Test 5: clean_backups removes all backups
95
- console.log('\nTest 5: clean_backups removes all backups');
96
- const result = cleanAllBackups(TEST_DIR);
97
- const backupDirExists = fs.existsSync(path.join(TEST_DIR, '.mcp-backups'));
98
- if (result && !backupDirExists) {
99
- console.log('✅ PASS: All backups cleaned');
100
- console.log(` Backup directory removed successfully`);
101
- passed++;
102
- }
103
- else {
104
- console.log('❌ FAIL: Backups not cleaned properly');
105
- console.log(` Result: ${result}, Dir exists: ${backupDirExists}`);
106
- failed++;
107
- }
108
- // Test 6: clean_backups on non-existent directory
109
- console.log('\nTest 6: clean_backups on non-existent directory');
110
- const result2 = cleanAllBackups(TEST_DIR);
111
- if (!result2) {
112
- console.log('✅ PASS: Returns false when backup directory not found');
113
- passed++;
114
- }
115
- else {
116
- console.log('❌ FAIL: Should return false when directory not found');
117
- failed++;
118
- }
119
- // Test 7: Backup in nested project structure
120
- console.log('\nTest 7: Backup in deeply nested file');
121
- const deepFile = path.join(TEST_DIR, 'src', 'features', 'auth', 'components', 'LoginForm.tsx');
122
- fs.mkdirSync(path.dirname(deepFile), { recursive: true });
123
- fs.writeFileSync(deepFile, 'export const LoginForm = () => <form />;');
124
- const deepBackup = createBackup(deepFile);
125
- const expectedDeepDir = path.join(TEST_DIR, '.mcp-backups', 'src', 'features', 'auth', 'components');
126
- if (deepBackup.startsWith(expectedDeepDir)) {
127
- console.log('✅ PASS: Deep nesting preserved');
128
- console.log(` Path: ${path.relative(TEST_DIR, deepBackup)}`);
129
- passed++;
130
- }
131
- else {
132
- console.log('❌ FAIL: Deep nesting not preserved');
133
- failed++;
134
- }
135
- }
136
- catch (error) {
137
- console.log(`❌ FAIL: Unexpected error: ${error}`);
138
- failed++;
139
- }
140
- finally {
141
- // Cleanup
142
- cleanupTestProject();
143
- }
144
- console.log('\n══════════════════════════════════════════════════');
145
- console.log(`📊 Results: ${passed} passed, ${failed} failed (${passed + failed} total)`);
146
- console.log('══════════════════════════════════════════════════\n');
147
- if (failed > 0) {
148
- process.exit(1);
149
- }
150
- }
151
- runTests();
152
- //# sourceMappingURL=test-backup-system.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-backup-system.js","sourceRoot":"","sources":["../../tests/test-backup-system.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,43 +0,0 @@
1
- import * as fs from 'node:fs';
2
- import * as path from 'node:path';
3
- import { handleWriteFileSurgical, handleRollbackFile } from '../src/index.js';
4
- async function testWorkflow() {
5
- const testFile = path.resolve('test-artifact.ts');
6
- const initialContent = 'export class Old { build() { return 1; } }';
7
- fs.writeFileSync(testFile, initialContent, 'utf-8');
8
- console.log('--- Step 1: Preview (Dry-Run) ---');
9
- const previewArgs = {
10
- filePath: testFile,
11
- symbolName: 'build',
12
- newContent: ' build() { return "new value"; }',
13
- className: 'Old'
14
- };
15
- const p1 = await handleWriteFileSurgical(previewArgs);
16
- const p1Text = p1.content[0].text;
17
- console.log('Preview Result:', p1Text.split('\n')[0]);
18
- const tokenMatch = p1Text.match(/confirmationToken: "([^"]+)"/);
19
- if (!tokenMatch)
20
- throw new Error('No token found');
21
- const token = tokenMatch[1];
22
- console.log('Token found:', token);
23
- console.log('\n--- Step 2: Confirm ---');
24
- const confirmArgs = {
25
- ...previewArgs,
26
- confirmationToken: token,
27
- confirm: true
28
- };
29
- const p2 = await handleWriteFileSurgical(confirmArgs);
30
- console.log('Confirm Result:', p2.content[0].text.split('\n')[0]);
31
- console.log('File Content:', fs.readFileSync(testFile, 'utf-8'));
32
- console.log('\n--- Step 3: Rollback ---');
33
- await handleRollbackFile({ filePath: testFile, steps: 1 });
34
- console.log('After Rollback:', fs.readFileSync(testFile, 'utf-8'));
35
- // Clean up
36
- fs.unlinkSync(testFile);
37
- const backupDir = path.join(path.dirname(testFile), '.mcp-backups');
38
- if (fs.existsSync(backupDir)) {
39
- fs.rmSync(backupDir, { recursive: true, force: true });
40
- }
41
- }
42
- testWorkflow().catch(console.error);
43
- //# sourceMappingURL=test-confirmation-flow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-confirmation-flow.js","sourceRoot":"","sources":["../../tests/test-confirmation-flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE9E,KAAK,UAAU,YAAY;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,4CAA4C,CAAC;IACpE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IAEpD,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG;QAClB,QAAQ,EAAE,QAAQ;QAClB,UAAU,EAAE,OAAO;QACnB,UAAU,EAAE,mCAAmC;QAC/C,SAAS,EAAE,KAAK;KACjB,CAAC;IAEF,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAChE,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IAEnC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG;QAClB,GAAG,WAAW;QACd,iBAAiB,EAAE,KAAK;QACxB,OAAO,EAAE,IAAI;KACd,CAAC;IACF,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAEjE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,MAAM,kBAAkB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAEnE,WAAW;IACX,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,CAAC;IACpE,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,YAAY,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};