devsmind-mcp 4.0.0 → 4.1.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.
- package/README.md +22 -14
- package/dist/cli/index.js +22 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/integrations/mcp.js +22 -1
- package/dist/cli/integrations/mcp.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 +59 -25
- package/dist/cli/integrations/registry.js +54 -36
- 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/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +262 -15
- package/dist/mcp/server.js.map +1 -1
- package/dist/utils/config.d.ts +15 -0
- package/dist/utils/config.js +27 -0
- package/dist/utils/config.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/config.d.ts
CHANGED
|
@@ -44,6 +44,21 @@ export declare function findDevmindDir(startDir: string): string | null;
|
|
|
44
44
|
* up from the current working directory. Returns null when nothing is found.
|
|
45
45
|
*/
|
|
46
46
|
export declare function resolveDevmindDir(explicitPath?: string): string | null;
|
|
47
|
+
/**
|
|
48
|
+
* Rejoins a `--path` value that a shell split on spaces.
|
|
49
|
+
*
|
|
50
|
+
* An MCP client that spawns the server with `shell: true` concatenates argv WITHOUT quoting (Node
|
|
51
|
+
* warns about exactly this — DEP0190), so `--path C:\work 2\devsmind\.devmind` reaches us already
|
|
52
|
+
* torn apart: `--path` keeps `C:\work` and `2\devsmind\.devmind` lands in the leftover operands.
|
|
53
|
+
* The server then dies with "devmind_path does not exist" and the IDE just shows a dead MCP server.
|
|
54
|
+
* Any project whose path contains a space hits this, which is why `--stdio` alone works and
|
|
55
|
+
* `--stdio --path` does not.
|
|
56
|
+
*
|
|
57
|
+
* Rejoining the fragments with the spaces the shell ate recovers the real directory. Longest
|
|
58
|
+
* candidate first, and only ever returns a path that EXISTS — so a genuinely mistyped `--path`
|
|
59
|
+
* still fails loudly at the caller instead of being silently "repaired" into something else.
|
|
60
|
+
*/
|
|
61
|
+
export declare function recoverSpaceSplitPath(explicitPath: string | undefined, extraOperands: string[]): string | undefined;
|
|
47
62
|
/**
|
|
48
63
|
* Loads project config.json and .env from the given .devmind directory path.
|
|
49
64
|
*/
|
package/dist/utils/config.js
CHANGED
|
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.findDevmindDir = findDevmindDir;
|
|
37
37
|
exports.resolveDevmindDir = resolveDevmindDir;
|
|
38
|
+
exports.recoverSpaceSplitPath = recoverSpaceSplitPath;
|
|
38
39
|
exports.loadProjectContext = loadProjectContext;
|
|
39
40
|
exports.resolveRepoPath = resolveRepoPath;
|
|
40
41
|
exports.canonicalizePath = canonicalizePath;
|
|
@@ -70,6 +71,32 @@ function resolveDevmindDir(explicitPath) {
|
|
|
70
71
|
}
|
|
71
72
|
return findDevmindDir(process.cwd());
|
|
72
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Rejoins a `--path` value that a shell split on spaces.
|
|
76
|
+
*
|
|
77
|
+
* An MCP client that spawns the server with `shell: true` concatenates argv WITHOUT quoting (Node
|
|
78
|
+
* warns about exactly this — DEP0190), so `--path C:\work 2\devsmind\.devmind` reaches us already
|
|
79
|
+
* torn apart: `--path` keeps `C:\work` and `2\devsmind\.devmind` lands in the leftover operands.
|
|
80
|
+
* The server then dies with "devmind_path does not exist" and the IDE just shows a dead MCP server.
|
|
81
|
+
* Any project whose path contains a space hits this, which is why `--stdio` alone works and
|
|
82
|
+
* `--stdio --path` does not.
|
|
83
|
+
*
|
|
84
|
+
* Rejoining the fragments with the spaces the shell ate recovers the real directory. Longest
|
|
85
|
+
* candidate first, and only ever returns a path that EXISTS — so a genuinely mistyped `--path`
|
|
86
|
+
* still fails loudly at the caller instead of being silently "repaired" into something else.
|
|
87
|
+
*/
|
|
88
|
+
function recoverSpaceSplitPath(explicitPath, extraOperands) {
|
|
89
|
+
if (!explicitPath || extraOperands.length === 0)
|
|
90
|
+
return explicitPath;
|
|
91
|
+
if (fs.existsSync(explicitPath))
|
|
92
|
+
return explicitPath;
|
|
93
|
+
for (let take = extraOperands.length; take > 0; take--) {
|
|
94
|
+
const candidate = [explicitPath, ...extraOperands.slice(0, take)].join(' ');
|
|
95
|
+
if (fs.existsSync(candidate))
|
|
96
|
+
return candidate;
|
|
97
|
+
}
|
|
98
|
+
return explicitPath;
|
|
99
|
+
}
|
|
73
100
|
/**
|
|
74
101
|
* Loads project config.json and .env from the given .devmind directory path.
|
|
75
102
|
*/
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDA,wCAWC;AAOD,8CAMC;AAKD,gDA2BC;AAKD,0CAmBC;AAGD,4CAOC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDA,wCAWC;AAOD,8CAMC;AAgBD,sDAQC;AAKD,gDA2BC;AAKD,0CAmBC;AAGD,4CAOC;AApKD,uCAAyB;AACzB,2CAA6B;AAC7B,+CAAiC;AA4CjC;;;GAGG;AACH,SAAgB,cAAc,CAAC,QAAgB;IAC7C,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACjD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;YACvD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,YAAqB;IACrD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC5C,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,CAAC;IACD,OAAO,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,qBAAqB,CAAC,YAAgC,EAAE,aAAuB;IAC7F,IAAI,CAAC,YAAY,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC;IACrE,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,YAAY,CAAC;IACrD,KAAK,IAAI,IAAI,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QACvD,MAAM,SAAS,GAAG,CAAC,YAAY,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5E,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IACjD,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,WAAmB;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAEhD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,oCAAoC,UAAU,8BAA8B,CAAC,CAAC;IAChG,CAAC;IAED,mBAAmB;IACnB,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAkB,CAAC;IAE1D,yBAAyB;IACzB,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAChC,CAAC;IAED,8CAA8C;IAC9C,MAAM,SAAS,GAA0B,GAAG,CAAC,gBAAgB,CAAC;QAC5D,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE;QACtE,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,OAAuB,EAAE,QAAgB;IACvE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACjE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACvC,oGAAoG;QACpG,IAAI,eAAe,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAClD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;SAAM,CAAC;QACN,sEAAsE;QACtE,IAAI,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7C,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,wFAAwF;AACxF,SAAgB,gBAAgB,CAAC,CAAS;IACxC,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IACjB,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChE,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
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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"}
|