devsmind-mcp 4.0.1 → 4.1.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.
- package/README.md +22 -14
- package/dist/cli/index.js +17 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/integrations/memory-topics.d.ts +12 -7
- package/dist/cli/integrations/memory-topics.js +21 -14
- package/dist/cli/integrations/memory-topics.js.map +1 -1
- package/dist/cli/integrations/memory.d.ts +20 -13
- package/dist/cli/integrations/memory.js +27 -14
- package/dist/cli/integrations/memory.js.map +1 -1
- package/dist/cli/integrations/prompt.d.ts +3 -1
- package/dist/cli/integrations/prompt.js +3 -1
- package/dist/cli/integrations/prompt.js.map +1 -1
- package/dist/cli/integrations/registry.d.ts +39 -13
- package/dist/cli/integrations/registry.js +27 -20
- package/dist/cli/integrations/registry.js.map +1 -1
- package/dist/cli/integrations/skill.d.ts +17 -0
- package/dist/cli/integrations/skill.js +103 -0
- package/dist/cli/integrations/skill.js.map +1 -0
- package/dist/cli/rule.js +7 -1
- package/dist/cli/rule.js.map +1 -1
- package/dist/cli/sync.d.ts +7 -2
- package/dist/cli/sync.js +15 -4
- package/dist/cli/sync.js.map +1 -1
- package/dist/db/database.d.ts +34 -1
- package/dist/db/database.js +70 -5
- package/dist/db/database.js.map +1 -1
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +234 -10
- package/dist/mcp/server.js.map +1 -1
- package/dist/utils/edit.d.ts +14 -0
- package/dist/utils/edit.js +64 -0
- package/dist/utils/edit.js.map +1 -1
- package/package.json +1 -1
package/dist/utils/edit.d.ts
CHANGED
|
@@ -45,3 +45,17 @@ export interface TextEditResult {
|
|
|
45
45
|
* including indentation, must still match exactly.
|
|
46
46
|
*/
|
|
47
47
|
export declare function replaceTextInFile(filePath: string, oldString: string, newString: string, replaceAll?: boolean): TextEditResult;
|
|
48
|
+
/**
|
|
49
|
+
* Locate an edit that was already applied to the file by some OTHER tool (the caller's own
|
|
50
|
+
* editor, not DevsMind) — the read-only counterpart to {@link replaceTextInFile}, used by
|
|
51
|
+
* `stage_change` to catch up on a write `edit_node` never saw. Nothing is written here; `newString`
|
|
52
|
+
* is expected to already be sitting on disk, and `oldString` exists only to reconstruct what came
|
|
53
|
+
* before it, the same way `replaceTextInFile`'s `before` does.
|
|
54
|
+
*
|
|
55
|
+
* Semantics mirror `replaceTextInFile` with the roles of old/new reversed: `newString` is what
|
|
56
|
+
* must be found in the CURRENT file content, byte-for-byte except EOL style, exactly once unless
|
|
57
|
+
* `replaceAll`. `oldString` is substituted back into each matched span to reconstruct the
|
|
58
|
+
* pre-edit content, which is what makes the change traceable and diffable exactly like a real
|
|
59
|
+
* `edit_node` write.
|
|
60
|
+
*/
|
|
61
|
+
export declare function locateAppliedEdit(filePath: string, oldString: string, newString: string, replaceAll?: boolean): TextEditResult;
|
package/dist/utils/edit.js
CHANGED
|
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.writeFileAtomic = writeFileAtomic;
|
|
37
37
|
exports.createFileWithContent = createFileWithContent;
|
|
38
38
|
exports.replaceTextInFile = replaceTextInFile;
|
|
39
|
+
exports.locateAppliedEdit = locateAppliedEdit;
|
|
39
40
|
const fs = __importStar(require("fs"));
|
|
40
41
|
const path = __importStar(require("path"));
|
|
41
42
|
/**
|
|
@@ -193,4 +194,67 @@ function replaceTextInFile(filePath, oldString, newString, replaceAll = false) {
|
|
|
193
194
|
}
|
|
194
195
|
return { ok: true, replacements: ranges.length, ranges, before: original };
|
|
195
196
|
}
|
|
197
|
+
/**
|
|
198
|
+
* Locate an edit that was already applied to the file by some OTHER tool (the caller's own
|
|
199
|
+
* editor, not DevsMind) — the read-only counterpart to {@link replaceTextInFile}, used by
|
|
200
|
+
* `stage_change` to catch up on a write `edit_node` never saw. Nothing is written here; `newString`
|
|
201
|
+
* is expected to already be sitting on disk, and `oldString` exists only to reconstruct what came
|
|
202
|
+
* before it, the same way `replaceTextInFile`'s `before` does.
|
|
203
|
+
*
|
|
204
|
+
* Semantics mirror `replaceTextInFile` with the roles of old/new reversed: `newString` is what
|
|
205
|
+
* must be found in the CURRENT file content, byte-for-byte except EOL style, exactly once unless
|
|
206
|
+
* `replaceAll`. `oldString` is substituted back into each matched span to reconstruct the
|
|
207
|
+
* pre-edit content, which is what makes the change traceable and diffable exactly like a real
|
|
208
|
+
* `edit_node` write.
|
|
209
|
+
*/
|
|
210
|
+
function locateAppliedEdit(filePath, oldString, newString, replaceAll = false) {
|
|
211
|
+
if (oldString === newString) {
|
|
212
|
+
return { ok: false, error: 'old_string and new_string are identical — nothing to record.' };
|
|
213
|
+
}
|
|
214
|
+
let current;
|
|
215
|
+
try {
|
|
216
|
+
current = fs.readFileSync(filePath, 'utf-8');
|
|
217
|
+
}
|
|
218
|
+
catch (e) {
|
|
219
|
+
return { ok: false, error: `could not read ${filePath}: ${e?.message || e}` };
|
|
220
|
+
}
|
|
221
|
+
// An empty old_string means "this file did not exist before" — some other tool just created
|
|
222
|
+
// it. There is nothing to search for: the whole current content IS the new state, and
|
|
223
|
+
// whatever came before it is, by definition, nothing.
|
|
224
|
+
if (oldString === '') {
|
|
225
|
+
return { ok: true, replacements: 1, ranges: [{ start: 0, end: current.length }], before: '' };
|
|
226
|
+
}
|
|
227
|
+
const pattern = buildEolTolerantPattern(normalizeEol(newString));
|
|
228
|
+
const matches = [];
|
|
229
|
+
for (let m = pattern.exec(current); m !== null; m = pattern.exec(current)) {
|
|
230
|
+
matches.push(m);
|
|
231
|
+
if (!replaceAll && matches.length > 1)
|
|
232
|
+
break;
|
|
233
|
+
}
|
|
234
|
+
if (matches.length === 0) {
|
|
235
|
+
return {
|
|
236
|
+
ok: false,
|
|
237
|
+
error: 'new_string was not found in the file. stage_change records an edit that has ALREADY landed on disk — if you have not made this change yet, call edit_node instead. Line-ending differences (CRLF vs LF) are tolerated, but every other character, including indentation, must match exactly.'
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
if (matches.length > 1 && !replaceAll) {
|
|
241
|
+
return {
|
|
242
|
+
ok: false,
|
|
243
|
+
error: `new_string matches more than one place in the file — nothing was recorded. Include surrounding lines to make it unique, or pass replace_all: true if every occurrence should be staged.`
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
// Reconstruct the pre-edit content by substituting old_string back into each matched span —
|
|
247
|
+
// the mirror image of how replaceTextInFile builds the NEW content from the old one.
|
|
248
|
+
const ranges = [];
|
|
249
|
+
let before = '';
|
|
250
|
+
let cursor = 0;
|
|
251
|
+
for (const match of matches) {
|
|
252
|
+
ranges.push({ start: match.index, end: match.index + match[0].length });
|
|
253
|
+
before += current.slice(cursor, match.index);
|
|
254
|
+
before += adaptEol(oldString, match[0]);
|
|
255
|
+
cursor = match.index + match[0].length;
|
|
256
|
+
}
|
|
257
|
+
before += current.slice(cursor);
|
|
258
|
+
return { ok: true, replacements: ranges.length, ranges, before };
|
|
259
|
+
}
|
|
196
260
|
//# sourceMappingURL=edit.js.map
|
package/dist/utils/edit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/utils/edit.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,0CASC;AAUD,sDAWC;AA+DD,8CAiFC;
|
|
1
|
+
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/utils/edit.ts"],"names":[],"mappings":"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"}
|