@nxuss/lemma 1.30.1 → 1.31.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 (187) hide show
  1. package/README.md +34 -0
  2. package/dist/cjs/cloud/scrub/StatelessScrubber.d.ts.map +1 -1
  3. package/dist/cjs/cloud/scrub/StatelessScrubber.js +2 -1
  4. package/dist/cjs/cloud/scrub/StatelessScrubber.js.map +1 -1
  5. package/dist/cjs/mcp/staleBuild.d.ts +13 -0
  6. package/dist/cjs/mcp/staleBuild.d.ts.map +1 -0
  7. package/dist/cjs/mcp/staleBuild.js +55 -0
  8. package/dist/cjs/mcp/staleBuild.js.map +1 -0
  9. package/dist/cjs/mcp/tools/analysis.d.ts.map +1 -1
  10. package/dist/cjs/mcp/tools/analysis.js +8 -4
  11. package/dist/cjs/mcp/tools/analysis.js.map +1 -1
  12. package/dist/cjs/mcp/tools/codenav.d.ts.map +1 -1
  13. package/dist/cjs/mcp/tools/codenav.js +144 -47
  14. package/dist/cjs/mcp/tools/codenav.js.map +1 -1
  15. package/dist/cjs/mcp/tools/context-tools.d.ts.map +1 -1
  16. package/dist/cjs/mcp/tools/context-tools.js +52 -36
  17. package/dist/cjs/mcp/tools/context-tools.js.map +1 -1
  18. package/dist/cjs/mcp/tools/devtools.d.ts.map +1 -1
  19. package/dist/cjs/mcp/tools/devtools.js +124 -33
  20. package/dist/cjs/mcp/tools/devtools.js.map +1 -1
  21. package/dist/cjs/mcp/tools/memory.d.ts.map +1 -1
  22. package/dist/cjs/mcp/tools/memory.js +11 -1
  23. package/dist/cjs/mcp/tools/memory.js.map +1 -1
  24. package/dist/cjs/mcp/tools/misc.d.ts.map +1 -1
  25. package/dist/cjs/mcp/tools/misc.js +20 -2
  26. package/dist/cjs/mcp/tools/misc.js.map +1 -1
  27. package/dist/cjs/mcp/tools/refactor.d.ts.map +1 -1
  28. package/dist/cjs/mcp/tools/refactor.js +234 -104
  29. package/dist/cjs/mcp/tools/refactor.js.map +1 -1
  30. package/dist/cjs/mcp/tools/workspace.d.ts.map +1 -1
  31. package/dist/cjs/mcp/tools/workspace.js +32 -7
  32. package/dist/cjs/mcp/tools/workspace.js.map +1 -1
  33. package/dist/cjs/mcp/tools.d.ts.map +1 -1
  34. package/dist/cjs/mcp/tools.js +21 -0
  35. package/dist/cjs/mcp/tools.js.map +1 -1
  36. package/dist/cjs/mcp/unknownArgs.d.ts +12 -0
  37. package/dist/cjs/mcp/unknownArgs.d.ts.map +1 -0
  38. package/dist/cjs/mcp/unknownArgs.js +24 -0
  39. package/dist/cjs/mcp/unknownArgs.js.map +1 -0
  40. package/dist/cjs/mcp/utils.d.ts +1 -0
  41. package/dist/cjs/mcp/utils.d.ts.map +1 -1
  42. package/dist/cjs/mcp/utils.js +142 -34
  43. package/dist/cjs/mcp/utils.js.map +1 -1
  44. package/dist/cjs/mcp/workspaceShared.d.ts +2 -0
  45. package/dist/cjs/mcp/workspaceShared.d.ts.map +1 -1
  46. package/dist/cjs/mcp/workspaceShared.js +14 -3
  47. package/dist/cjs/mcp/workspaceShared.js.map +1 -1
  48. package/dist/cjs/pr-review/analyzers/QualityGrader.d.ts.map +1 -1
  49. package/dist/cjs/pr-review/analyzers/QualityGrader.js +25 -1
  50. package/dist/cjs/pr-review/analyzers/QualityGrader.js.map +1 -1
  51. package/dist/cjs/security/SemanticScrubber.d.ts.map +1 -1
  52. package/dist/cjs/security/SemanticScrubber.js +54 -1
  53. package/dist/cjs/security/SemanticScrubber.js.map +1 -1
  54. package/dist/cjs/utils/AffectedTests.d.ts.map +1 -1
  55. package/dist/cjs/utils/AffectedTests.js +48 -3
  56. package/dist/cjs/utils/AffectedTests.js.map +1 -1
  57. package/dist/cjs/utils/ContextSqueezer.d.ts +7 -1
  58. package/dist/cjs/utils/ContextSqueezer.d.ts.map +1 -1
  59. package/dist/cjs/utils/ContextSqueezer.js +186 -35
  60. package/dist/cjs/utils/ContextSqueezer.js.map +1 -1
  61. package/dist/cjs/utils/DepGraph.d.ts.map +1 -1
  62. package/dist/cjs/utils/DepGraph.js +52 -21
  63. package/dist/cjs/utils/DepGraph.js.map +1 -1
  64. package/dist/cjs/utils/Eol.d.ts +10 -0
  65. package/dist/cjs/utils/Eol.d.ts.map +1 -0
  66. package/dist/cjs/utils/Eol.js +20 -0
  67. package/dist/cjs/utils/Eol.js.map +1 -0
  68. package/dist/cjs/utils/ImportTreeContext.d.ts.map +1 -1
  69. package/dist/cjs/utils/ImportTreeContext.js +18 -4
  70. package/dist/cjs/utils/ImportTreeContext.js.map +1 -1
  71. package/dist/cjs/utils/PatchMatcher.d.ts +1 -1
  72. package/dist/cjs/utils/PatchMatcher.d.ts.map +1 -1
  73. package/dist/cjs/utils/PatchMatcher.js +47 -1
  74. package/dist/cjs/utils/PatchMatcher.js.map +1 -1
  75. package/dist/cjs/utils/SurgicalASTInsert.d.ts.map +1 -1
  76. package/dist/cjs/utils/SurgicalASTInsert.js +74 -28
  77. package/dist/cjs/utils/SurgicalASTInsert.js.map +1 -1
  78. package/dist/cjs/utils/SymbolSurgicalContext.d.ts.map +1 -1
  79. package/dist/cjs/utils/SymbolSurgicalContext.js +35 -0
  80. package/dist/cjs/utils/SymbolSurgicalContext.js.map +1 -1
  81. package/dist/cjs/utils/TokenBudgetedReader.d.ts.map +1 -1
  82. package/dist/cjs/utils/TokenBudgetedReader.js +51 -37
  83. package/dist/cjs/utils/TokenBudgetedReader.js.map +1 -1
  84. package/dist/cjs/utils/TypeCoverage.d.ts.map +1 -1
  85. package/dist/cjs/utils/TypeCoverage.js +31 -3
  86. package/dist/cjs/utils/TypeCoverage.js.map +1 -1
  87. package/dist/cjs/utils/WorkspaceSearch.d.ts.map +1 -1
  88. package/dist/cjs/utils/WorkspaceSearch.js +0 -0
  89. package/dist/cjs/utils/WorkspaceSearch.js.map +1 -1
  90. package/dist/cjs/utils/churnNoise.d.ts +2 -0
  91. package/dist/cjs/utils/churnNoise.d.ts.map +1 -0
  92. package/dist/cjs/utils/churnNoise.js +23 -0
  93. package/dist/cjs/utils/churnNoise.js.map +1 -0
  94. package/dist/esm/cloud/scrub/StatelessScrubber.d.ts.map +1 -1
  95. package/dist/esm/cloud/scrub/StatelessScrubber.js +2 -1
  96. package/dist/esm/cloud/scrub/StatelessScrubber.js.map +1 -1
  97. package/dist/esm/mcp/staleBuild.d.ts +13 -0
  98. package/dist/esm/mcp/staleBuild.d.ts.map +1 -0
  99. package/dist/esm/mcp/staleBuild.js +48 -0
  100. package/dist/esm/mcp/staleBuild.js.map +1 -0
  101. package/dist/esm/mcp/tools/analysis.d.ts.map +1 -1
  102. package/dist/esm/mcp/tools/analysis.js +8 -4
  103. package/dist/esm/mcp/tools/analysis.js.map +1 -1
  104. package/dist/esm/mcp/tools/codenav.d.ts.map +1 -1
  105. package/dist/esm/mcp/tools/codenav.js +144 -47
  106. package/dist/esm/mcp/tools/codenav.js.map +1 -1
  107. package/dist/esm/mcp/tools/context-tools.d.ts.map +1 -1
  108. package/dist/esm/mcp/tools/context-tools.js +53 -37
  109. package/dist/esm/mcp/tools/context-tools.js.map +1 -1
  110. package/dist/esm/mcp/tools/devtools.d.ts.map +1 -1
  111. package/dist/esm/mcp/tools/devtools.js +124 -33
  112. package/dist/esm/mcp/tools/devtools.js.map +1 -1
  113. package/dist/esm/mcp/tools/memory.d.ts.map +1 -1
  114. package/dist/esm/mcp/tools/memory.js +11 -1
  115. package/dist/esm/mcp/tools/memory.js.map +1 -1
  116. package/dist/esm/mcp/tools/misc.d.ts.map +1 -1
  117. package/dist/esm/mcp/tools/misc.js +20 -2
  118. package/dist/esm/mcp/tools/misc.js.map +1 -1
  119. package/dist/esm/mcp/tools/refactor.d.ts.map +1 -1
  120. package/dist/esm/mcp/tools/refactor.js +234 -104
  121. package/dist/esm/mcp/tools/refactor.js.map +1 -1
  122. package/dist/esm/mcp/tools/workspace.d.ts.map +1 -1
  123. package/dist/esm/mcp/tools/workspace.js +32 -7
  124. package/dist/esm/mcp/tools/workspace.js.map +1 -1
  125. package/dist/esm/mcp/tools.d.ts.map +1 -1
  126. package/dist/esm/mcp/tools.js +21 -0
  127. package/dist/esm/mcp/tools.js.map +1 -1
  128. package/dist/esm/mcp/unknownArgs.d.ts +12 -0
  129. package/dist/esm/mcp/unknownArgs.d.ts.map +1 -0
  130. package/dist/esm/mcp/unknownArgs.js +21 -0
  131. package/dist/esm/mcp/unknownArgs.js.map +1 -0
  132. package/dist/esm/mcp/utils.d.ts +1 -0
  133. package/dist/esm/mcp/utils.d.ts.map +1 -1
  134. package/dist/esm/mcp/utils.js +141 -34
  135. package/dist/esm/mcp/utils.js.map +1 -1
  136. package/dist/esm/mcp/workspaceShared.d.ts +2 -0
  137. package/dist/esm/mcp/workspaceShared.d.ts.map +1 -1
  138. package/dist/esm/mcp/workspaceShared.js +13 -3
  139. package/dist/esm/mcp/workspaceShared.js.map +1 -1
  140. package/dist/esm/pr-review/analyzers/QualityGrader.d.ts.map +1 -1
  141. package/dist/esm/pr-review/analyzers/QualityGrader.js +22 -1
  142. package/dist/esm/pr-review/analyzers/QualityGrader.js.map +1 -1
  143. package/dist/esm/security/SemanticScrubber.d.ts.map +1 -1
  144. package/dist/esm/security/SemanticScrubber.js +54 -1
  145. package/dist/esm/security/SemanticScrubber.js.map +1 -1
  146. package/dist/esm/utils/AffectedTests.d.ts.map +1 -1
  147. package/dist/esm/utils/AffectedTests.js +48 -3
  148. package/dist/esm/utils/AffectedTests.js.map +1 -1
  149. package/dist/esm/utils/ContextSqueezer.d.ts +7 -1
  150. package/dist/esm/utils/ContextSqueezer.d.ts.map +1 -1
  151. package/dist/esm/utils/ContextSqueezer.js +186 -35
  152. package/dist/esm/utils/ContextSqueezer.js.map +1 -1
  153. package/dist/esm/utils/DepGraph.d.ts.map +1 -1
  154. package/dist/esm/utils/DepGraph.js +52 -21
  155. package/dist/esm/utils/DepGraph.js.map +1 -1
  156. package/dist/esm/utils/Eol.d.ts +10 -0
  157. package/dist/esm/utils/Eol.d.ts.map +1 -0
  158. package/dist/esm/utils/Eol.js +16 -0
  159. package/dist/esm/utils/Eol.js.map +1 -0
  160. package/dist/esm/utils/ImportTreeContext.d.ts.map +1 -1
  161. package/dist/esm/utils/ImportTreeContext.js +18 -4
  162. package/dist/esm/utils/ImportTreeContext.js.map +1 -1
  163. package/dist/esm/utils/PatchMatcher.d.ts +1 -1
  164. package/dist/esm/utils/PatchMatcher.d.ts.map +1 -1
  165. package/dist/esm/utils/PatchMatcher.js +47 -1
  166. package/dist/esm/utils/PatchMatcher.js.map +1 -1
  167. package/dist/esm/utils/SurgicalASTInsert.d.ts.map +1 -1
  168. package/dist/esm/utils/SurgicalASTInsert.js +74 -28
  169. package/dist/esm/utils/SurgicalASTInsert.js.map +1 -1
  170. package/dist/esm/utils/SymbolSurgicalContext.d.ts.map +1 -1
  171. package/dist/esm/utils/SymbolSurgicalContext.js +35 -0
  172. package/dist/esm/utils/SymbolSurgicalContext.js.map +1 -1
  173. package/dist/esm/utils/TokenBudgetedReader.d.ts.map +1 -1
  174. package/dist/esm/utils/TokenBudgetedReader.js +51 -37
  175. package/dist/esm/utils/TokenBudgetedReader.js.map +1 -1
  176. package/dist/esm/utils/TypeCoverage.d.ts.map +1 -1
  177. package/dist/esm/utils/TypeCoverage.js +31 -3
  178. package/dist/esm/utils/TypeCoverage.js.map +1 -1
  179. package/dist/esm/utils/WorkspaceSearch.d.ts.map +1 -1
  180. package/dist/esm/utils/WorkspaceSearch.js +0 -0
  181. package/dist/esm/utils/WorkspaceSearch.js.map +1 -1
  182. package/dist/esm/utils/churnNoise.d.ts +2 -0
  183. package/dist/esm/utils/churnNoise.d.ts.map +1 -0
  184. package/dist/esm/utils/churnNoise.js +20 -0
  185. package/dist/esm/utils/churnNoise.js.map +1 -0
  186. package/mcp-server.js +15 -12
  187. package/package.json +1 -1
@@ -30,56 +30,6 @@ export const REFACTOR_TOOL_DEFINITIONS = [
30
30
  function escapeRegexStr(s) {
31
31
  return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
32
32
  }
33
- function findSymbolRefs(workspaceRoot, symbolName) {
34
- const results = [];
35
- const IGNORE_RF = new Set(["node_modules", ".git", "dist", "chroma_data", ".lemma", "build", "coverage", ".next"]);
36
- function walkRF(dir) {
37
- let entries = [];
38
- try {
39
- entries = fs.readdirSync(dir, { withFileTypes: true });
40
- }
41
- catch {
42
- return;
43
- }
44
- for (const e of entries) {
45
- if (IGNORE_RF.has(e.name))
46
- continue;
47
- const abs = path.join(dir, e.name);
48
- if (e.isDirectory()) {
49
- walkRF(abs);
50
- }
51
- else if (/\.(ts|tsx|js|jsx)$/.test(e.name) && !e.name.endsWith(".d.ts")) {
52
- const rel = path.relative(workspaceRoot, abs).replace(/\\/g, "/");
53
- try {
54
- const content = fs.readFileSync(abs, "utf8");
55
- if (!content.includes(symbolName))
56
- continue;
57
- const sf = ts.createSourceFile(abs, content, ts.ScriptTarget.Latest, true);
58
- const contentLines = content.split("\n");
59
- const identifierLines = new Set();
60
- function collectIdents(node) {
61
- if (ts.isIdentifier(node) && node.text === symbolName) {
62
- const { line } = sf.getLineAndCharacterOfPosition(node.getStart());
63
- identifierLines.add(line);
64
- }
65
- ts.forEachChild(node, collectIdents);
66
- }
67
- collectIdents(sf);
68
- const matchingLines = [...identifierLines].map(li => ({ lineIndex: li, lineContent: contentLines[li] ?? "" }));
69
- if (matchingLines.length > 0)
70
- results.push({ abs, rel, lines: matchingLines });
71
- }
72
- catch { /* skip */ }
73
- }
74
- }
75
- }
76
- walkRF(workspaceRoot);
77
- return results;
78
- }
79
- function applySymbolRenameInContent(content, fromName, toName) {
80
- const regex = new RegExp(`(?<![a-zA-Z0-9_$])${escapeRegexStr(fromName)}(?![a-zA-Z0-9_$])`, "g");
81
- return content.replace(regex, toName);
82
- }
83
33
  function buildUnifiedDiff(filePath, before, after) {
84
34
  if (before === after)
85
35
  return "";
@@ -124,6 +74,113 @@ function buildUnifiedDiff(filePath, before, after) {
124
74
  }
125
75
  return diffLines.join("\n");
126
76
  }
77
+ const RENAME_IGNORE = new Set(["node_modules", ".git", "dist", "chroma_data", ".lemma", "build", "coverage", ".next"]);
78
+ function collectWorkspaceScriptFiles(dir, out = []) {
79
+ let entries = [];
80
+ try {
81
+ entries = fs.readdirSync(dir, { withFileTypes: true });
82
+ }
83
+ catch {
84
+ return out;
85
+ }
86
+ for (const e of entries) {
87
+ if (RENAME_IGNORE.has(e.name))
88
+ continue;
89
+ const abs = path.join(dir, e.name);
90
+ if (e.isDirectory())
91
+ collectWorkspaceScriptFiles(abs, out);
92
+ else if (/\.(ts|tsx|js|jsx)$/.test(e.name) && !e.name.endsWith(".d.ts"))
93
+ out.push(abs);
94
+ }
95
+ return out;
96
+ }
97
+ /**
98
+ * Semantic rename: ask the TypeScript language service for every reference to the symbol DECLARED
99
+ * in `declFileRel`. The previous implementation ignored that file and rewrote every textual
100
+ * occurrence of the name in every file (comments, strings, property names, unrelated locals and
101
+ * other modules' same-named symbols), which is not what "rename a symbol" means and is dangerous
102
+ * in a tool marked destructive.
103
+ */
104
+ function planSemanticRename(workspaceRoot, declFileRel, fromName, toName) {
105
+ if (!/^[A-Za-z_$][\w$]*$/.test(toName))
106
+ return { error: `"${toName}" is not a valid identifier.` };
107
+ const declAbs = safeResolvePath(workspaceRoot, declFileRel).resolved;
108
+ if (!fs.existsSync(declAbs))
109
+ return { error: `File not found: ${declFileRel}` };
110
+ const rootFiles = collectWorkspaceScriptFiles(workspaceRoot);
111
+ if (!rootFiles.includes(declAbs))
112
+ rootFiles.push(declAbs);
113
+ let options = { allowJs: true, target: ts.ScriptTarget.ES2020, module: ts.ModuleKind.ESNext, skipLibCheck: true, noEmit: true };
114
+ const cfgPath = path.join(workspaceRoot, "tsconfig.json");
115
+ if (fs.existsSync(cfgPath)) {
116
+ const cfg = ts.readConfigFile(cfgPath, ts.sys.readFile);
117
+ if (!cfg.error) {
118
+ options = { ...ts.parseJsonConfigFileContent(cfg.config, ts.sys, workspaceRoot).options, allowJs: true, noEmit: true, skipLibCheck: true };
119
+ }
120
+ }
121
+ const host = {
122
+ getScriptFileNames: () => rootFiles,
123
+ getScriptVersion: () => "1",
124
+ getScriptSnapshot: (f) => (fs.existsSync(f) ? ts.ScriptSnapshot.fromString(fs.readFileSync(f, "utf8")) : undefined),
125
+ getCurrentDirectory: () => workspaceRoot,
126
+ getCompilationSettings: () => options,
127
+ getDefaultLibFileName: (o) => ts.getDefaultLibFilePath(o),
128
+ fileExists: ts.sys.fileExists,
129
+ readFile: ts.sys.readFile,
130
+ readDirectory: ts.sys.readDirectory,
131
+ directoryExists: ts.sys.directoryExists,
132
+ getDirectories: ts.sys.getDirectories,
133
+ };
134
+ const service = ts.createLanguageService(host, ts.createDocumentRegistry());
135
+ const text = fs.readFileSync(declAbs, "utf8");
136
+ const sf = ts.createSourceFile(declAbs, text, ts.ScriptTarget.Latest, true);
137
+ let position = -1;
138
+ (function find(n) {
139
+ if (position >= 0)
140
+ return;
141
+ const parent = n.parent;
142
+ if (ts.isIdentifier(n) && n.text === fromName && parent && parent.name === n &&
143
+ (ts.isFunctionDeclaration(parent) || ts.isClassDeclaration(parent) || ts.isInterfaceDeclaration(parent) ||
144
+ ts.isTypeAliasDeclaration(parent) || ts.isEnumDeclaration(parent) || ts.isVariableDeclaration(parent) ||
145
+ ts.isMethodDeclaration(parent) || ts.isPropertyDeclaration(parent) || ts.isPropertySignature(parent) ||
146
+ ts.isMethodSignature(parent) || ts.isParameter(parent) || ts.isEnumMember(parent))) {
147
+ position = n.getStart(sf);
148
+ return;
149
+ }
150
+ ts.forEachChild(n, find);
151
+ })(sf);
152
+ if (position < 0)
153
+ return { error: `"${fromName}" is not declared in ${declFileRel}. Pass the file that declares the symbol.` };
154
+ const locations = service.findRenameLocations(declAbs, position, false, false);
155
+ if (!locations || locations.length === 0)
156
+ return { error: `The compiler found nothing to rename for "${fromName}" in ${declFileRel}.` };
157
+ const byFile = new Map();
158
+ for (const loc of locations) {
159
+ const abs = path.resolve(loc.fileName);
160
+ if (abs.includes(`${path.sep}node_modules${path.sep}`) || !abs.startsWith(path.resolve(workspaceRoot) + path.sep))
161
+ continue;
162
+ // A workspace file that is a symlink to somewhere outside would be rewritten through the link.
163
+ try {
164
+ safeResolvePath(workspaceRoot, abs);
165
+ }
166
+ catch {
167
+ continue;
168
+ }
169
+ const list = byFile.get(abs) ?? [];
170
+ list.push({ start: loc.textSpan.start, length: loc.textSpan.length });
171
+ byFile.set(abs, list);
172
+ }
173
+ const files = [];
174
+ for (const [abs, spans] of byFile) {
175
+ const before = fs.readFileSync(abs, "utf8");
176
+ let after = before;
177
+ for (const s of [...spans].sort((a, b) => b.start - a.start)) {
178
+ after = after.slice(0, s.start) + toName + after.slice(s.start + s.length);
179
+ }
180
+ files.push({ abs, rel: path.relative(workspaceRoot, abs).replace(/\\/g, "/"), before, after, count: spans.length });
181
+ }
182
+ return { files };
183
+ }
127
184
  async function handleRefactorRename(args, workspaceRoot) {
128
185
  const fromName = args.from;
129
186
  const toName = args.to;
@@ -132,20 +189,22 @@ async function handleRefactorRename(args, workspaceRoot) {
132
189
  const backup = !!(args.backup);
133
190
  if (!fromName || !toName)
134
191
  throw new Error("'from' and 'to' are required for rename");
135
- const refs = findSymbolRefs(workspaceRoot, fromName);
136
- if (refs.length === 0) {
137
- return { content: [{ type: "text", text: `No references found to symbol "${fromName}" in the workspace.` }] };
138
- }
192
+ const declFile = args.file;
193
+ if (!declFile)
194
+ throw new Error("'file' (the file that declares the symbol) is required for rename");
195
+ const plan = planSemanticRename(workspaceRoot, declFile, fromName, toName);
196
+ if ("error" in plan)
197
+ return { content: [{ type: "text", text: plan.error }] };
139
198
  let filesModified = 0;
140
199
  let totalRefs = 0;
141
200
  const report = [];
142
201
  const diffs = [];
143
- for (const ref of refs) {
144
- const before = fs.readFileSync(ref.abs, "utf8");
145
- const after = applySymbolRenameInContent(before, fromName, toName);
202
+ for (const ref of plan.files) {
203
+ const before = ref.before;
204
+ const after = ref.after;
146
205
  if (before === after)
147
206
  continue;
148
- const count = (before.match(new RegExp(`(?<![a-zA-Z0-9_$])${escapeRegexStr(fromName)}(?![a-zA-Z0-9_$])`, "g")) || []).length;
207
+ const count = ref.count;
149
208
  totalRefs += count;
150
209
  filesModified++;
151
210
  if (dryRun) {
@@ -176,6 +235,85 @@ async function handleRefactorRename(args, workspaceRoot) {
176
235
  }
177
236
  return { content: [{ type: "text", text: [`✅ Rename: "${fromName}" → "${toName}"`, ``, `📁 ${filesModified} archivos | 🔗 ${totalRefs} refs`, ``, ...report].join("\n") + tscOutput }] };
178
237
  }
238
+ const MOVE_IGNORE = new Set(["node_modules", ".git", "dist", "chroma_data", ".lemma", "build", "coverage", ".next"]);
239
+ /** abs path a relative specifier points at: exact file, +extension, ESM `./a.js` → a.ts, or dir/index.*; null if none exists. */
240
+ function resolveRelativeFile(fromFileAbs, spec) {
241
+ const base = path.resolve(path.dirname(fromFileAbs), spec);
242
+ const isFile = (p) => fs.existsSync(p) && fs.statSync(p).isFile();
243
+ if (isFile(base))
244
+ return base;
245
+ for (const ext of [".ts", ".tsx", ".js", ".jsx"])
246
+ if (isFile(base + ext))
247
+ return base + ext;
248
+ const js = base.match(/^(.*)\.(?:js|jsx|mjs|cjs)$/);
249
+ if (js)
250
+ for (const ext of [".ts", ".tsx"])
251
+ if (isFile(js[1] + ext))
252
+ return js[1] + ext;
253
+ for (const ext of [".ts", ".tsx", ".js", ".jsx"])
254
+ if (isFile(path.join(base, "index" + ext)))
255
+ return path.join(base, "index" + ext);
256
+ return null;
257
+ }
258
+ /** String literals that are module specifiers: import/export-from, require(), import(), at any depth. */
259
+ function moduleSpecifierLiterals(sf) {
260
+ const out = [];
261
+ (function walk(n) {
262
+ if ((ts.isImportDeclaration(n) || ts.isExportDeclaration(n)) && n.moduleSpecifier && ts.isStringLiteral(n.moduleSpecifier)) {
263
+ out.push(n.moduleSpecifier);
264
+ }
265
+ else if (ts.isCallExpression(n) && n.arguments.length >= 1 && ts.isStringLiteralLike(n.arguments[0])) {
266
+ const callee = n.expression;
267
+ if ((ts.isIdentifier(callee) && callee.text === "require") || callee.kind === ts.SyntaxKind.ImportKeyword) {
268
+ out.push(n.arguments[0]);
269
+ }
270
+ }
271
+ ts.forEachChild(n, walk);
272
+ })(sf);
273
+ return out;
274
+ }
275
+ /** The specifier to write from `fromDirAbs` to `targetAbs`, keeping the style of the original (extension, ESM .js, directory import). */
276
+ function specifierFor(fromDirAbs, targetAbs, originalSpec) {
277
+ let rel = path.relative(fromDirAbs, targetAbs).replace(/\\/g, "/");
278
+ const origExt = originalSpec.match(/\.(ts|tsx|js|jsx|mjs|cjs)$/);
279
+ if (origExt) {
280
+ // `./a.js` for a TypeScript source stays `.js` (ESM convention); an explicit `.ts` stays `.ts`.
281
+ if (/^(?:js|jsx|mjs|cjs)$/.test(origExt[1]) && /\.tsx?$/.test(targetAbs))
282
+ rel = rel.replace(/\.(tsx?)$/, (_m, t) => (t === "tsx" ? ".jsx" : ".js"));
283
+ }
284
+ else {
285
+ rel = rel.replace(/\.(ts|tsx|js|jsx)$/, "");
286
+ if (/(^|\/)index$/.test(rel) && !/index$/.test(originalSpec))
287
+ rel = rel.replace(/\/?index$/, "") || ".";
288
+ }
289
+ return rel.startsWith(".") ? rel : `./${rel}`;
290
+ }
291
+ /**
292
+ * Rewrite the relative specifiers of `content` (a file living at `fileAbs`, to be written at
293
+ * `fileNewAbs`). A specifier changes only if its target moves or the file itself changes directory.
294
+ */
295
+ function rewriteSpecifiers(content, fileAbs, fileNewAbs, mapTarget) {
296
+ const sf = ts.createSourceFile(fileAbs, content, ts.ScriptTarget.Latest, true);
297
+ const edits = [];
298
+ for (const lit of moduleSpecifierLiterals(sf)) {
299
+ const spec = lit.text;
300
+ if (!spec.startsWith("."))
301
+ continue;
302
+ const target = resolveRelativeFile(fileAbs, spec);
303
+ if (!target)
304
+ continue;
305
+ const newTarget = mapTarget(target);
306
+ if (newTarget === target && path.dirname(fileNewAbs) === path.dirname(fileAbs))
307
+ continue;
308
+ const next = specifierFor(path.dirname(fileNewAbs), newTarget, spec);
309
+ if (next !== spec)
310
+ edits.push({ start: lit.getStart(sf) + 1, end: lit.getEnd() - 1, text: next });
311
+ }
312
+ let out = content;
313
+ for (const e of edits.sort((a, b) => b.start - a.start))
314
+ out = out.slice(0, e.start) + e.text + out.slice(e.end);
315
+ return out;
316
+ }
179
317
  async function handleRefactorMove(args, workspaceRoot) {
180
318
  const fromRel = args.from;
181
319
  const toRel = args.to;
@@ -183,15 +321,23 @@ async function handleRefactorMove(args, workspaceRoot) {
183
321
  const tscCheck = !!(args.tscCheck);
184
322
  const backup = !!(args.backup);
185
323
  const { resolved: fromAbs } = safeResolvePath(workspaceRoot, fromRel);
186
- const toAbs = path.resolve(workspaceRoot, toRel);
324
+ const { resolved: toAbs } = safeResolvePath(workspaceRoot, toRel);
187
325
  const fromRelNorm = path.relative(workspaceRoot, fromAbs).replace(/\\/g, "/");
188
326
  const toRelNorm = path.relative(workspaceRoot, toAbs).replace(/\\/g, "/");
189
327
  if (!fs.existsSync(fromAbs)) {
190
328
  return { content: [{ type: "text", text: `Source file not found: ${fromRelNorm}` }] };
191
329
  }
192
- const IGNORE_MV = new Set(["node_modules", ".git", "dist", "chroma_data", ".lemma", "build", "coverage", ".next"]);
193
- const importers = [];
194
- function walkMV(dir) {
330
+ if (fromAbs === toAbs)
331
+ return { content: [{ type: "text", text: "Source and destination are the same file." }] };
332
+ if (fs.existsSync(toAbs))
333
+ return { content: [{ type: "text", text: `Destination already exists: ${toRelNorm}. Nothing was changed.` }] };
334
+ const mapTarget = (t) => (t === fromAbs ? toAbs : t);
335
+ // Importers: any file with a relative specifier (import, export-from, require, import()) that
336
+ // resolves to the moved file. Matching on the resolved path, not on the text of the specifier,
337
+ // is what lets `./a.js` and `./a.ts` importers be found AND rewritten (the old regex only knew
338
+ // the extensionless form and silently left those importers broken).
339
+ const patches = [];
340
+ const walk = (dir) => {
195
341
  let entries = [];
196
342
  try {
197
343
  entries = fs.readdirSync(dir, { withFileTypes: true });
@@ -200,59 +346,43 @@ async function handleRefactorMove(args, workspaceRoot) {
200
346
  return;
201
347
  }
202
348
  for (const e of entries) {
203
- if (IGNORE_MV.has(e.name))
349
+ if (MOVE_IGNORE.has(e.name))
204
350
  continue;
205
351
  const abs = path.join(dir, e.name);
206
352
  if (e.isDirectory()) {
207
- walkMV(abs);
353
+ walk(abs);
354
+ continue;
355
+ }
356
+ if (!/\.(ts|tsx|js|jsx)$/.test(e.name) || e.name.endsWith(".d.ts") || abs === fromAbs)
357
+ continue;
358
+ try {
359
+ safeResolvePath(workspaceRoot, abs);
208
360
  }
209
- else if (/\.(ts|tsx|js|jsx)$/.test(e.name) && !e.name.endsWith(".d.ts")) {
210
- const rel = path.relative(workspaceRoot, abs).replace(/\\/g, "/");
211
- if (rel === fromRelNorm)
212
- return;
213
- try {
214
- const content = fs.readFileSync(abs, "utf8");
215
- const sf = ts.createSourceFile(abs, content, ts.ScriptTarget.Latest, true);
216
- let found = false;
217
- ts.forEachChild(sf, (n) => {
218
- if (!found && ts.isImportDeclaration(n) && ts.isStringLiteral(n.moduleSpecifier)) {
219
- const spec = n.moduleSpecifier.text;
220
- if (spec.startsWith(".")) {
221
- const res = path.resolve(path.dirname(abs), spec).replace(/\\/g, "/");
222
- const fromN = fromAbs.replace(/\\/g, "/");
223
- const fromNoExt = fromN.replace(/\.(ts|tsx|js|jsx)$/, "");
224
- if (res === fromN || res === fromNoExt)
225
- found = true;
226
- }
227
- }
228
- });
229
- if (found)
230
- importers.push({ abs, rel, content });
231
- }
232
- catch { /* skip */ }
361
+ catch {
362
+ continue;
363
+ } // symlink to outside: never rewrite through it
364
+ try {
365
+ const before = fs.readFileSync(abs, "utf8");
366
+ const after = rewriteSpecifiers(before, abs, abs, mapTarget);
367
+ if (after !== before)
368
+ patches.push({ rel: path.relative(workspaceRoot, abs).replace(/\\/g, "/"), abs, before, after });
233
369
  }
370
+ catch { /* unreadable or unparseable: skip */ }
234
371
  }
235
- }
236
- walkMV(workspaceRoot);
237
- const addDot = (p) => p.startsWith(".") ? p : `./${p}`;
238
- const patches = [];
239
- for (const imp of importers) {
240
- const oldRelImport = path.relative(path.dirname(imp.abs), fromAbs).replace(/\\/g, "/");
241
- const newRelImport = path.relative(path.dirname(imp.abs), toAbs).replace(/\\/g, "/");
242
- const oldSpec = addDot(oldRelImport.replace(/\.(ts|tsx|js|jsx)$/, ""));
243
- const newSpec = addDot(newRelImport.replace(/\.(ts|tsx|js|jsx)$/, ""));
244
- const after = imp.content.replace(new RegExp(`(['"])${escapeRegexStr(oldSpec)}(['"])`, "g"), `$1${newSpec}$2`);
245
- if (after !== imp.content)
246
- patches.push({ rel: imp.rel, abs: imp.abs, before: imp.content, after });
247
- }
372
+ };
373
+ walk(workspaceRoot);
374
+ // The moved file's own relative imports must follow it to its new directory.
375
+ const movedBefore = fs.readFileSync(fromAbs, "utf8");
376
+ const movedAfter = rewriteSpecifiers(movedBefore, fromAbs, toAbs, (t) => t);
248
377
  if (dryRun) {
249
378
  const diffs = patches.map(p => buildUnifiedDiff(p.rel, p.before, p.after)).filter(Boolean);
250
- return { content: [{ type: "text", text: [`🔍 DRY RUN — Move "${fromRelNorm}" → "${toRelNorm}"`, ``, `Importadores que se actualizarían: ${patches.length}`, ``, `=== DIFF PREVIEW ===`, ...diffs].join("\n") }] };
379
+ const own = buildUnifiedDiff(fromRelNorm, movedBefore, movedAfter);
380
+ return { content: [{ type: "text", text: [`🔍 DRY RUN — Move "${fromRelNorm}" → "${toRelNorm}"`, ``, `Importadores que se actualizarían: ${patches.length}${own ? " (+ los imports del propio archivo movido)" : ""}`, ``, `=== DIFF PREVIEW ===`, ...diffs, ...(own ? [own] : [])].join("\n") }] };
251
381
  }
252
382
  fs.mkdirSync(path.dirname(toAbs), { recursive: true });
253
383
  if (backup)
254
384
  fs.copyFileSync(fromAbs, fromAbs + ".bak");
255
- fs.copyFileSync(fromAbs, toAbs);
385
+ fs.writeFileSync(toAbs, movedAfter, "utf8");
256
386
  fs.unlinkSync(fromAbs);
257
387
  for (const p of patches) {
258
388
  if (backup)
@@ -270,7 +400,7 @@ async function handleRefactorMove(args, workspaceRoot) {
270
400
  tscOutput = `\n\n⚠️ tsc check falló: ${e.message}`;
271
401
  }
272
402
  }
273
- return { content: [{ type: "text", text: [`✅ Move: "${fromRelNorm}" → "${toRelNorm}"`, ``, `📁 ${patches.length} importadores actualizados:`, ...patches.map(p => ` ✅ ${p.rel}`)].join("\n") + tscOutput }] };
403
+ return { content: [{ type: "text", text: [`✅ Move: "${fromRelNorm}" → "${toRelNorm}"`, ``, `📁 ${patches.length} importadores actualizados${movedAfter !== movedBefore ? " (+ imports del archivo movido)" : ""}:`, ...patches.map(p => ` ✅ ${p.rel}`)].join("\n") + tscOutput }] };
274
404
  }
275
405
  async function handleRefactor(args) {
276
406
  const operation = args?.operation;
@@ -1 +1 @@
1
- {"version":3,"file":"refactor.js","sourceRoot":"","sources":["../../../../src/mcp/tools/refactor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"refactor.js","sourceRoot":"","sources":["../../../../src/mcp/tools/refactor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/workspace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgCH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhE,eAAO,MAAM,0BAA0B,EAAE,cAAc,EA+GtD,CAAC;AAklBF,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAQ/D,CAAC"}
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/workspace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiCH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhE,eAAO,MAAM,0BAA0B,EAAE,cAAc,EA+GtD,CAAC;AA+mBF,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAQ/D,CAAC"}
@@ -12,6 +12,7 @@ import { getBrain } from "../../subconscious/TheBrainV2.js";
12
12
  import { squeezeCode } from "../../utils/ContextSqueezer.js";
13
13
  import { reportSavings } from "../../utils/reportSavings.js";
14
14
  import { safeResolvePath, logError, logWarn, isCommandAllowed, loadAllowedCommands, tryElicitConfirmation, tryElicitChoice, } from "../utils.js";
15
+ import { usesCrlf, withFileEol as fileEol } from "../../utils/Eol.js";
15
16
  import { recordReceiptEvent } from "../../utils/TokenReceipt.js";
16
17
  import { recordExecAudit } from "../../utils/ExecAuditLog.js";
17
18
  import { distillCommandOutput, buildDistillFooter, readRegion } from "../../utils/CommandOutputDistiller.js";
@@ -340,16 +341,22 @@ function stripLineNumberGutter(text) {
340
341
  // single-match path and the ambiguous-match-resolved-via-elicitation path below.
341
342
  async function applyMatch(match, filePath, resolved, originalContent, searchContent, replaceContent) {
342
343
  let updatedContent;
344
+ // A patch built from a read arrives with \n. Written as-is into a CRLF file it left mixed line
345
+ // endings; the file's own convention wins. (Detected by majority, so one stray line does not flip it.)
346
+ const crlf = usesCrlf(originalContent);
343
347
  if (match.strategy === "exact" && match.charStart !== undefined && match.charEnd !== undefined) {
344
348
  // Splice by character offset — the search block may be a mid-line fragment, and
345
349
  // a whole-line splice would discard everything else sharing that line.
346
- updatedContent = originalContent.slice(0, match.charStart) + replaceContent + originalContent.slice(match.charEnd);
350
+ updatedContent = originalContent.slice(0, match.charStart) + fileEol(originalContent, replaceContent) + originalContent.slice(match.charEnd);
347
351
  }
348
352
  else {
349
353
  const contentLines = originalContent.split("\n");
350
- const finalReplace = reindentReplacement(replaceContent, searchContent, contentLines[match.startLine]);
351
- const updatedLines = [...contentLines.slice(0, match.startLine), ...finalReplace.split("\n"), ...contentLines.slice(match.endLine + 1)];
352
- updatedContent = updatedLines.join("\n");
354
+ const finalReplace = reindentReplacement(replaceContent.replace(/\r\n/g, "\n"), searchContent.replace(/\r\n/g, "\n"), contentLines[match.startLine], contentLines.slice(match.startLine, match.endLine + 1).map((l) => l.replace(/\r$/, "")));
355
+ // Lines keep their own "\r" when the file is CRLF; the block's last line only gets one if the
356
+ // line it replaces had one (the file's final line may have no newline at all).
357
+ const lastHadCr = contentLines[match.endLine].endsWith("\r");
358
+ const inserted = finalReplace === "" ? [] : finalReplace.split("\n").map((l, i, all) => (crlf && (i < all.length - 1 || lastHadCr) ? l + "\r" : l));
359
+ updatedContent = [...contentLines.slice(0, match.startLine), ...inserted, ...contentLines.slice(match.endLine + 1)].join("\n");
353
360
  }
354
361
  const elicited = await tryElicitConfirmation(`Apply a patch to ${filePath}? This replaces ${searchContent.length} char(s) with ${replaceContent.length} char(s) ` +
355
362
  `starting at line ${match.startLine + 1}.`);
@@ -548,7 +555,17 @@ async function handleRunWorkspaceCommand(args) {
548
555
  }
549
556
  const stdout = result.stdout || "";
550
557
  const stderr = result.stderr || "";
551
- const combined = [stdout, stderr].filter((s) => s.trim().length > 0).join("\n");
558
+ const rawCombined = [stdout, stderr].filter((s) => s.trim().length > 0).join("\n");
559
+ // `cat .env` or `grep -r PASSWORD .` would otherwise hand secrets to the model in clear,
560
+ // which read_workspace_file never does. If the scrubber fails, withhold rather than leak.
561
+ let combined;
562
+ try {
563
+ combined = new SemanticScrubber().mask(rawCombined).maskedPrompt;
564
+ }
565
+ catch {
566
+ logWarn("run_workspace_command", "SemanticScrubber failed, withholding output");
567
+ combined = "(output withheld: secret scrubbing failed)";
568
+ }
552
569
  const status = result.status ?? 0;
553
570
  // Before the empty-output early return: a passing `tsc --noEmit` prints nothing at all,
554
571
  // and that silent run is exactly the green half of a red → green fix. A timed-out run is
@@ -661,12 +678,20 @@ async function handleListWorkspaceDir(args) {
661
678
  const workspaceRoot = process.cwd();
662
679
  try {
663
680
  const { resolved } = safeResolvePath(workspaceRoot, dirPath);
664
- const list = listDirRecursive(resolved, dirPath, 1, maxDepth);
681
+ const all = listDirRecursive(resolved, dirPath, 1, maxDepth);
682
+ // A directory with thousands of entries (a generated assets folder, a vendored tree) used
683
+ // to be dumped whole into the context. Show a bounded head and say how to narrow the call.
684
+ const MAX_ENTRIES = 1000;
685
+ const list = all.slice(0, MAX_ENTRIES);
686
+ const omitted = all.length - list.length;
687
+ const note = omitted > 0
688
+ ? `\n\n… ${omitted} more entries not shown (${all.length} total). Pass a deeper dirPath or a smaller maxDepth to narrow the listing.`
689
+ : "";
665
690
  return {
666
691
  content: [
667
692
  {
668
693
  type: "text",
669
- text: list.length > 0 ? list.join("\n") : "(Directory is empty or inaccessible)",
694
+ text: list.length > 0 ? list.join("\n") + note : "(Directory is empty or inaccessible)",
670
695
  },
671
696
  ],
672
697
  };