devsmind-mcp 1.0.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/LICENSE +21 -0
- package/README.md +280 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +105 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +1 -0
- package/dist/cli/init.js +626 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/prune.d.ts +3 -0
- package/dist/cli/prune.js +297 -0
- package/dist/cli/prune.js.map +1 -0
- package/dist/cli/rule.d.ts +3 -0
- package/dist/cli/rule.js +157 -0
- package/dist/cli/rule.js.map +1 -0
- package/dist/cli/view.d.ts +4 -0
- package/dist/cli/view.js +107 -0
- package/dist/cli/view.js.map +1 -0
- package/dist/db/database.d.ts +92 -0
- package/dist/db/database.js +479 -0
- package/dist/db/database.js.map +1 -0
- package/dist/db/indexer.d.ts +17 -0
- package/dist/db/indexer.js +103 -0
- package/dist/db/indexer.js.map +1 -0
- package/dist/db/schema.d.ts +23 -0
- package/dist/db/schema.js +38 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/mcp/server.d.ts +15 -0
- package/dist/mcp/server.js +1104 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/visualizer.d.ts +2 -0
- package/dist/mcp/visualizer.js +42 -0
- package/dist/mcp/visualizer.js.map +1 -0
- package/dist/mcp/visualizer_2d.html +635 -0
- package/dist/mcp/visualizer_3d.html +628 -0
- package/dist/utils/config.d.ts +43 -0
- package/dist/utils/config.js +91 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/scanner.d.ts +13 -0
- package/dist/utils/scanner.js +106 -0
- package/dist/utils/scanner.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.loadProjectContext = loadProjectContext;
|
|
37
|
+
exports.resolveRepoPath = resolveRepoPath;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const dotenv = __importStar(require("dotenv"));
|
|
41
|
+
/**
|
|
42
|
+
* Loads project config.json and .env from the given .devmind directory path.
|
|
43
|
+
*/
|
|
44
|
+
function loadProjectContext(devmindPath) {
|
|
45
|
+
const resolvedPath = path.resolve(devmindPath);
|
|
46
|
+
const configPath = path.join(resolvedPath, 'config.json');
|
|
47
|
+
const envPath = path.join(resolvedPath, '.env');
|
|
48
|
+
if (!fs.existsSync(configPath)) {
|
|
49
|
+
throw new Error(`DevMind config.json not found at ${configPath}. Run 'devsmind init' first.`);
|
|
50
|
+
}
|
|
51
|
+
// Load config.json
|
|
52
|
+
const configContent = fs.readFileSync(configPath, 'utf-8');
|
|
53
|
+
const config = JSON.parse(configContent);
|
|
54
|
+
// Load .env if it exists
|
|
55
|
+
const env = {};
|
|
56
|
+
if (fs.existsSync(envPath)) {
|
|
57
|
+
const envContent = fs.readFileSync(envPath, 'utf-8');
|
|
58
|
+
const parsedEnv = dotenv.parse(envContent);
|
|
59
|
+
Object.assign(env, parsedEnv);
|
|
60
|
+
}
|
|
61
|
+
// Extract developer info from .env if present
|
|
62
|
+
const developer = env['DEVELOPER_NAME']
|
|
63
|
+
? { name: env['DEVELOPER_NAME'], email: env['DEVELOPER_EMAIL'] || '' }
|
|
64
|
+
: undefined;
|
|
65
|
+
return { devmind_path: resolvedPath, config, env, developer };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Resolve absolute repo path based on mode.
|
|
69
|
+
*/
|
|
70
|
+
function resolveRepoPath(context, repoName) {
|
|
71
|
+
const repo = context.config.repos.find(r => r.name === repoName);
|
|
72
|
+
if (!repo)
|
|
73
|
+
return null;
|
|
74
|
+
if (context.config.mode === 'embedded') {
|
|
75
|
+
// In embedded mode, paths are relative to the parent of the .devmind folder (i.e. the project root)
|
|
76
|
+
if ('relative_path' in repo && repo.relative_path) {
|
|
77
|
+
const projectRoot = path.dirname(context.devmind_path);
|
|
78
|
+
return path.resolve(projectRoot, repo.relative_path);
|
|
79
|
+
}
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// In standalone mode, look up in environment variables using path_key
|
|
84
|
+
if ('path_key' in repo && repo.path_key) {
|
|
85
|
+
const localPath = context.env[repo.path_key];
|
|
86
|
+
return localPath ? path.resolve(localPath) : null;
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDA,gDA2BC;AAKD,0CAmBC;AApGD,uCAAyB;AACzB,2CAA6B;AAC7B,+CAAiC;AA4CjC;;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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface RepoFileList {
|
|
2
|
+
repo_name: string;
|
|
3
|
+
repo_path: string;
|
|
4
|
+
files: string[];
|
|
5
|
+
file_count: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Scans all configured repos and returns indexable files per repo.
|
|
9
|
+
*/
|
|
10
|
+
export declare function scanRepoFiles(devmindPath: string): {
|
|
11
|
+
repos: RepoFileList[];
|
|
12
|
+
total_files: number;
|
|
13
|
+
};
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.scanRepoFiles = scanRepoFiles;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const config_1 = require("./config");
|
|
40
|
+
/** Extensions we consider indexable source files */
|
|
41
|
+
const INDEXABLE_EXTENSIONS = new Set([
|
|
42
|
+
'.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs',
|
|
43
|
+
'.py', '.go', '.java', '.cs', '.rb', '.php',
|
|
44
|
+
'.rs', '.swift', '.kt', '.dart', '.vue', '.svelte'
|
|
45
|
+
]);
|
|
46
|
+
/** Default patterns always ignored regardless of config */
|
|
47
|
+
const ALWAYS_IGNORED = [
|
|
48
|
+
'node_modules', '.git', 'dist', 'build', 'out', '.next',
|
|
49
|
+
'__pycache__', '.venv', 'venv', 'coverage', '.turbo',
|
|
50
|
+
'.cache', '.idea', '.vscode'
|
|
51
|
+
];
|
|
52
|
+
function shouldIgnore(filePath, ignoredPaths) {
|
|
53
|
+
const normalized = filePath.replace(/\\/g, '/');
|
|
54
|
+
const allIgnored = [...ALWAYS_IGNORED, ...ignoredPaths];
|
|
55
|
+
return allIgnored.some(pattern => {
|
|
56
|
+
const p = pattern.replace(/\\/g, '/').replace(/\/$/, '');
|
|
57
|
+
return normalized.includes(`/${p}/`) || normalized.includes(`/${p}`) || normalized.endsWith(`/${p}`);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function walkDir(dir, ignoredPaths, results = []) {
|
|
61
|
+
if (!fs.existsSync(dir))
|
|
62
|
+
return results;
|
|
63
|
+
let entries;
|
|
64
|
+
try {
|
|
65
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return results;
|
|
69
|
+
}
|
|
70
|
+
for (const entry of entries) {
|
|
71
|
+
const fullPath = path.join(dir, entry.name);
|
|
72
|
+
if (shouldIgnore(fullPath, ignoredPaths))
|
|
73
|
+
continue;
|
|
74
|
+
if (entry.isDirectory()) {
|
|
75
|
+
walkDir(fullPath, ignoredPaths, results);
|
|
76
|
+
}
|
|
77
|
+
else if (entry.isFile()) {
|
|
78
|
+
const ext = path.extname(entry.name).toLowerCase();
|
|
79
|
+
if (INDEXABLE_EXTENSIONS.has(ext)) {
|
|
80
|
+
results.push(fullPath);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return results;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Scans all configured repos and returns indexable files per repo.
|
|
88
|
+
*/
|
|
89
|
+
function scanRepoFiles(devmindPath) {
|
|
90
|
+
const context = (0, config_1.loadProjectContext)(devmindPath);
|
|
91
|
+
const { config } = context;
|
|
92
|
+
const ignoredPaths = config.ignored_paths ?? [];
|
|
93
|
+
const repos = [];
|
|
94
|
+
for (const repo of config.repos) {
|
|
95
|
+
const repoPath = (0, config_1.resolveRepoPath)(context, repo.name);
|
|
96
|
+
if (!repoPath) {
|
|
97
|
+
repos.push({ repo_name: repo.name, repo_path: '(path not configured)', files: [], file_count: 0 });
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
const files = walkDir(repoPath, ignoredPaths);
|
|
101
|
+
repos.push({ repo_name: repo.name, repo_path: repoPath, files, file_count: files.length });
|
|
102
|
+
}
|
|
103
|
+
const total_files = repos.reduce((sum, r) => sum + r.file_count, 0);
|
|
104
|
+
return { repos, total_files };
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/utils/scanner.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "devsmind-mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "DevsMind — Team AI Brain",
|
|
5
|
+
"main": "dist/cli/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"devsmind": "./dist/cli/index.js"
|
|
8
|
+
},
|
|
9
|
+
"type": "commonjs",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "node node_modules/typescript/bin/tsc && node scripts/copy-assets.js",
|
|
17
|
+
"start": "tsx src/cli/index.ts start",
|
|
18
|
+
"dev": "tsx src/cli/index.ts",
|
|
19
|
+
"test": "echo \"Error: no test specified\" && exit 0",
|
|
20
|
+
"prepublishOnly": "node node_modules/typescript/bin/tsc && node scripts/copy-assets.js"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [
|
|
23
|
+
"mcp",
|
|
24
|
+
"model-context-protocol",
|
|
25
|
+
"ai",
|
|
26
|
+
"context",
|
|
27
|
+
"developer-productivity",
|
|
28
|
+
"documentation",
|
|
29
|
+
"graph",
|
|
30
|
+
"sqlite",
|
|
31
|
+
"git"
|
|
32
|
+
],
|
|
33
|
+
"author": "Abialidr",
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "git+https://github.com/Abialidr/devsmind.git"
|
|
38
|
+
},
|
|
39
|
+
"bugs": {
|
|
40
|
+
"url": "https://github.com/Abialidr/devsmind/issues"
|
|
41
|
+
},
|
|
42
|
+
"homepage": "https://github.com/Abialidr/devsmind#readme",
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@modelcontextprotocol/sdk": "^1.0.1",
|
|
45
|
+
"@types/express": "^5.0.6",
|
|
46
|
+
"better-sqlite3": "^11.1.2",
|
|
47
|
+
"commander": "^12.1.0",
|
|
48
|
+
"dotenv": "^16.4.5",
|
|
49
|
+
"express": "^5.2.1",
|
|
50
|
+
"prompts": "^2.4.2"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/better-sqlite3": "^7.6.11",
|
|
54
|
+
"@types/node": "^20.14.9",
|
|
55
|
+
"@types/prompts": "^2.4.9",
|
|
56
|
+
"tsx": "^4.16.0",
|
|
57
|
+
"typescript": "^5.5.2"
|
|
58
|
+
}
|
|
59
|
+
}
|