mcp-codebase-intelligence 0.1.0 → 0.3.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 +97 -16
- package/dist/graph/code-graph.d.ts +16 -0
- package/dist/graph/code-graph.js +30 -4
- package/dist/graph/code-graph.js.map +1 -1
- package/dist/graph/schema.js +1 -0
- package/dist/graph/schema.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +61 -60
- package/dist/index.js.map +1 -1
- package/dist/indexer/docstring-extractor.d.ts +7 -0
- package/dist/indexer/docstring-extractor.js +118 -0
- package/dist/indexer/docstring-extractor.js.map +1 -0
- package/dist/indexer/file-watcher.d.ts +2 -2
- package/dist/indexer/file-watcher.js +24 -15
- package/dist/indexer/file-watcher.js.map +1 -1
- package/dist/indexer/lang-cpp.d.ts +3 -0
- package/dist/indexer/lang-cpp.js +469 -0
- package/dist/indexer/lang-cpp.js.map +1 -0
- package/dist/indexer/lang-go.js +4 -0
- package/dist/indexer/lang-go.js.map +1 -1
- package/dist/indexer/lang-java.js +4 -0
- package/dist/indexer/lang-java.js.map +1 -1
- package/dist/indexer/lang-python.js +3 -0
- package/dist/indexer/lang-python.js.map +1 -1
- package/dist/indexer/lang-rust.js +5 -0
- package/dist/indexer/lang-rust.js.map +1 -1
- package/dist/indexer/tree-sitter-indexer.js +5 -0
- package/dist/indexer/tree-sitter-indexer.js.map +1 -1
- package/dist/project-manager.d.ts +63 -0
- package/dist/project-manager.js +479 -0
- package/dist/project-manager.js.map +1 -0
- package/dist/tools/find-symbol.js +2 -1
- package/dist/tools/find-symbol.js.map +1 -1
- package/dist/tools/project-tools.d.ts +38 -0
- package/dist/tools/project-tools.js +72 -0
- package/dist/tools/project-tools.js.map +1 -0
- package/dist/tools/search-codebase.d.ts +39 -0
- package/dist/tools/search-codebase.js +59 -0
- package/dist/tools/search-codebase.js.map +1 -0
- package/package.json +8 -6
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
import { existsSync, readFileSync, statSync, mkdirSync, writeFileSync } from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { initializeDatabase } from "./graph/schema.js";
|
|
4
|
+
import { CodeGraph } from "./graph/code-graph.js";
|
|
5
|
+
import { FileWatcher } from "./indexer/file-watcher.js";
|
|
6
|
+
import { LspManager } from "./lsp/lsp-manager.js";
|
|
7
|
+
import { logger } from "./utils/logger.js";
|
|
8
|
+
const CODEGRAPH_DIR = path.join(process.env.HOME || process.env.USERPROFILE || "/tmp", ".codegraph");
|
|
9
|
+
/**
|
|
10
|
+
* Detect git root by walking up from cwd
|
|
11
|
+
*/
|
|
12
|
+
function detectGitRoot(startDir) {
|
|
13
|
+
let dir = path.resolve(startDir);
|
|
14
|
+
while (true) {
|
|
15
|
+
if (existsSync(path.join(dir, ".git")))
|
|
16
|
+
return dir;
|
|
17
|
+
const parent = path.dirname(dir);
|
|
18
|
+
if (parent === dir)
|
|
19
|
+
return null;
|
|
20
|
+
dir = parent;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Detect monorepo workspace packages and return include paths
|
|
25
|
+
*/
|
|
26
|
+
function detectMonorepoIncludes(root) {
|
|
27
|
+
// pnpm-workspace.yaml
|
|
28
|
+
const pnpmPath = path.join(root, "pnpm-workspace.yaml");
|
|
29
|
+
if (existsSync(pnpmPath)) {
|
|
30
|
+
try {
|
|
31
|
+
const content = readFileSync(pnpmPath, "utf-8");
|
|
32
|
+
const packages = [];
|
|
33
|
+
// Simple YAML parsing — extract packages array entries
|
|
34
|
+
let inPackages = false;
|
|
35
|
+
for (const line of content.split("\n")) {
|
|
36
|
+
if (line.match(/^packages\s*:/)) {
|
|
37
|
+
inPackages = true;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (inPackages) {
|
|
41
|
+
const match = line.match(/^\s+-\s+['"]?([^'"]+)['"]?\s*$/);
|
|
42
|
+
if (match) {
|
|
43
|
+
packages.push(match[1].replace(/\/\*$/, ""));
|
|
44
|
+
}
|
|
45
|
+
else if (line.match(/^\S/)) {
|
|
46
|
+
break; // next top-level key
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (packages.length > 0) {
|
|
51
|
+
logger.info(`Detected pnpm workspace: ${packages.length} package patterns`);
|
|
52
|
+
return packages;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch { /* ignore parse errors */ }
|
|
56
|
+
}
|
|
57
|
+
// lerna.json
|
|
58
|
+
const lernaPath = path.join(root, "lerna.json");
|
|
59
|
+
if (existsSync(lernaPath)) {
|
|
60
|
+
try {
|
|
61
|
+
const config = JSON.parse(readFileSync(lernaPath, "utf-8"));
|
|
62
|
+
const packages = (config.packages || ["packages/*"]).map((p) => p.replace(/\/\*$/, ""));
|
|
63
|
+
logger.info(`Detected lerna workspace: ${packages.length} package patterns`);
|
|
64
|
+
return packages;
|
|
65
|
+
}
|
|
66
|
+
catch { /* ignore */ }
|
|
67
|
+
}
|
|
68
|
+
// nx.json (check for workspace layout)
|
|
69
|
+
if (existsSync(path.join(root, "nx.json"))) {
|
|
70
|
+
const pkgJson = path.join(root, "package.json");
|
|
71
|
+
if (existsSync(pkgJson)) {
|
|
72
|
+
try {
|
|
73
|
+
const pkg = JSON.parse(readFileSync(pkgJson, "utf-8"));
|
|
74
|
+
if (pkg.workspaces) {
|
|
75
|
+
const ws = Array.isArray(pkg.workspaces) ? pkg.workspaces : pkg.workspaces.packages || [];
|
|
76
|
+
const packages = ws.map((p) => p.replace(/\/\*$/, ""));
|
|
77
|
+
logger.info(`Detected nx workspace: ${packages.length} package patterns`);
|
|
78
|
+
return packages;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch { /* ignore */ }
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// go.work
|
|
85
|
+
const goWorkPath = path.join(root, "go.work");
|
|
86
|
+
if (existsSync(goWorkPath)) {
|
|
87
|
+
try {
|
|
88
|
+
const content = readFileSync(goWorkPath, "utf-8");
|
|
89
|
+
const dirs = [];
|
|
90
|
+
let inUse = false;
|
|
91
|
+
for (const line of content.split("\n")) {
|
|
92
|
+
if (line.match(/^use\s*\(/)) {
|
|
93
|
+
inUse = true;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (inUse && line.match(/^\)/)) {
|
|
97
|
+
inUse = false;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (inUse) {
|
|
101
|
+
const dir = line.trim();
|
|
102
|
+
if (dir && !dir.startsWith("//"))
|
|
103
|
+
dirs.push(dir);
|
|
104
|
+
}
|
|
105
|
+
// single-line: use ./foo
|
|
106
|
+
const single = line.match(/^use\s+(\S+)/);
|
|
107
|
+
if (single && !line.includes("("))
|
|
108
|
+
dirs.push(single[1]);
|
|
109
|
+
}
|
|
110
|
+
if (dirs.length > 0) {
|
|
111
|
+
logger.info(`Detected Go workspace: ${dirs.length} modules`);
|
|
112
|
+
return dirs;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch { /* ignore */ }
|
|
116
|
+
}
|
|
117
|
+
// Cargo.toml with [workspace]
|
|
118
|
+
const cargoPath = path.join(root, "Cargo.toml");
|
|
119
|
+
if (existsSync(cargoPath)) {
|
|
120
|
+
try {
|
|
121
|
+
const content = readFileSync(cargoPath, "utf-8");
|
|
122
|
+
if (content.includes("[workspace]")) {
|
|
123
|
+
const members = [];
|
|
124
|
+
let inMembers = false;
|
|
125
|
+
for (const line of content.split("\n")) {
|
|
126
|
+
if (line.match(/^members\s*=/)) {
|
|
127
|
+
inMembers = true;
|
|
128
|
+
// Check for inline array: members = ["foo", "bar"]
|
|
129
|
+
const inline = line.match(/\[([^\]]+)\]/);
|
|
130
|
+
if (inline) {
|
|
131
|
+
inline[1].split(",").forEach(m => {
|
|
132
|
+
const trimmed = m.trim().replace(/['"]/g, "").replace(/\/\*$/, "");
|
|
133
|
+
if (trimmed)
|
|
134
|
+
members.push(trimmed);
|
|
135
|
+
});
|
|
136
|
+
inMembers = false;
|
|
137
|
+
}
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
if (inMembers) {
|
|
141
|
+
if (line.match(/^\s*\]/)) {
|
|
142
|
+
inMembers = false;
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
const m = line.match(/['"]([^'"]+)['"]/);
|
|
146
|
+
if (m)
|
|
147
|
+
members.push(m[1].replace(/\/\*$/, ""));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (members.length > 0) {
|
|
151
|
+
logger.info(`Detected Cargo workspace: ${members.length} members`);
|
|
152
|
+
return members;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
catch { /* ignore */ }
|
|
157
|
+
}
|
|
158
|
+
// npm/yarn workspaces (package.json)
|
|
159
|
+
const pkgJsonPath = path.join(root, "package.json");
|
|
160
|
+
if (existsSync(pkgJsonPath)) {
|
|
161
|
+
try {
|
|
162
|
+
const pkg = JSON.parse(readFileSync(pkgJsonPath, "utf-8"));
|
|
163
|
+
if (pkg.workspaces) {
|
|
164
|
+
const ws = Array.isArray(pkg.workspaces) ? pkg.workspaces : pkg.workspaces.packages || [];
|
|
165
|
+
if (ws.length > 0) {
|
|
166
|
+
const packages = ws.map((p) => p.replace(/\/\*$/, ""));
|
|
167
|
+
logger.info(`Detected npm/yarn workspace: ${packages.length} package patterns`);
|
|
168
|
+
return packages;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch { /* ignore */ }
|
|
173
|
+
}
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Find .codegraph.json walking up from startDir to git root
|
|
178
|
+
*/
|
|
179
|
+
function findLocalConfig(startDir) {
|
|
180
|
+
let dir = path.resolve(startDir);
|
|
181
|
+
const gitRoot = detectGitRoot(startDir);
|
|
182
|
+
const stopAt = gitRoot ? path.dirname(gitRoot) : path.parse(dir).root;
|
|
183
|
+
while (true) {
|
|
184
|
+
const configPath = path.join(dir, ".codegraph.json");
|
|
185
|
+
if (existsSync(configPath)) {
|
|
186
|
+
try {
|
|
187
|
+
const config = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
188
|
+
logger.info(`Loaded config from ${configPath}`);
|
|
189
|
+
return { config, dir };
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
logger.warn(`Invalid .codegraph.json at ${configPath}`, err);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (dir === stopAt || dir === path.parse(dir).root)
|
|
196
|
+
break;
|
|
197
|
+
dir = path.dirname(dir);
|
|
198
|
+
}
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Load user-level config from ~/.codegraph/config.json
|
|
203
|
+
*/
|
|
204
|
+
function loadUserConfig() {
|
|
205
|
+
const configPath = path.join(CODEGRAPH_DIR, "config.json");
|
|
206
|
+
if (existsSync(configPath)) {
|
|
207
|
+
try {
|
|
208
|
+
const config = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
209
|
+
logger.info(`Loaded user config from ${configPath}`);
|
|
210
|
+
return config;
|
|
211
|
+
}
|
|
212
|
+
catch (err) {
|
|
213
|
+
logger.warn(`Invalid config at ${configPath}`, err);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Resolve a ProjectConfig into absolute root paths
|
|
220
|
+
*/
|
|
221
|
+
function resolveRoots(config, baseDir) {
|
|
222
|
+
const roots = [];
|
|
223
|
+
if (config.root) {
|
|
224
|
+
const absRoot = path.resolve(config.root);
|
|
225
|
+
if (config.include && config.include.length > 0) {
|
|
226
|
+
// Monorepo scoped — each include becomes a root
|
|
227
|
+
for (const inc of config.include) {
|
|
228
|
+
const absInc = path.resolve(absRoot, inc);
|
|
229
|
+
if (existsSync(absInc))
|
|
230
|
+
roots.push(absInc);
|
|
231
|
+
else
|
|
232
|
+
logger.warn(`Include path not found: ${absInc}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
roots.push(absRoot);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (config.roots) {
|
|
240
|
+
for (const r of config.roots) {
|
|
241
|
+
const absRoot = path.resolve(r);
|
|
242
|
+
if (existsSync(absRoot))
|
|
243
|
+
roots.push(absRoot);
|
|
244
|
+
else
|
|
245
|
+
logger.warn(`Root not found: ${absRoot}`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return [...new Set(roots)]; // deduplicate
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Get DB path for a project
|
|
252
|
+
*/
|
|
253
|
+
function getDbPath(projectName) {
|
|
254
|
+
const graphsDir = path.join(CODEGRAPH_DIR, "graphs");
|
|
255
|
+
mkdirSync(graphsDir, { recursive: true });
|
|
256
|
+
return path.join(graphsDir, `${projectName}.db`);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Initialize a resolved project (DB, graph, watcher, LSP)
|
|
260
|
+
*/
|
|
261
|
+
function initProject(name, roots) {
|
|
262
|
+
const dbPath = getDbPath(name);
|
|
263
|
+
const db = initializeDatabase(dbPath);
|
|
264
|
+
const graph = new CodeGraph(db);
|
|
265
|
+
const watcher = new FileWatcher(roots, graph);
|
|
266
|
+
// LSP uses the first root as the workspace root
|
|
267
|
+
const lspManager = new LspManager(roots[0]);
|
|
268
|
+
return { name, roots, graph, watcher, lspManager, db };
|
|
269
|
+
}
|
|
270
|
+
export class ProjectManager {
|
|
271
|
+
projects = new Map();
|
|
272
|
+
_activeProject = null;
|
|
273
|
+
/**
|
|
274
|
+
* Resolve configuration and initialize all projects
|
|
275
|
+
*/
|
|
276
|
+
async initialize() {
|
|
277
|
+
const cwd = process.cwd();
|
|
278
|
+
let projectConfigs = {};
|
|
279
|
+
// 1. Check for local .codegraph.json
|
|
280
|
+
const localConfig = findLocalConfig(cwd);
|
|
281
|
+
if (localConfig) {
|
|
282
|
+
for (const [name, config] of Object.entries(localConfig.config.projects || {})) {
|
|
283
|
+
// If root is relative or not set, resolve relative to config file location
|
|
284
|
+
if (config.root && !path.isAbsolute(config.root)) {
|
|
285
|
+
config.root = path.resolve(localConfig.dir, config.root);
|
|
286
|
+
}
|
|
287
|
+
if (!config.root && !config.roots) {
|
|
288
|
+
config.root = localConfig.dir;
|
|
289
|
+
}
|
|
290
|
+
projectConfigs[name] = config;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// 2. Check user-level config (merge, local takes precedence)
|
|
294
|
+
const userConfig = loadUserConfig();
|
|
295
|
+
if (userConfig) {
|
|
296
|
+
for (const [name, config] of Object.entries(userConfig.projects || {})) {
|
|
297
|
+
if (!projectConfigs[name]) {
|
|
298
|
+
projectConfigs[name] = config;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
// 3. Check PROJECT_ROOTS env
|
|
303
|
+
if (Object.keys(projectConfigs).length === 0 && process.env.PROJECT_ROOTS) {
|
|
304
|
+
const roots = process.env.PROJECT_ROOTS.split(",").map(r => r.trim()).filter(Boolean);
|
|
305
|
+
projectConfigs["default"] = { roots };
|
|
306
|
+
}
|
|
307
|
+
// 4. Check PROJECT_ROOT env (backwards compat)
|
|
308
|
+
if (Object.keys(projectConfigs).length === 0 && process.env.PROJECT_ROOT) {
|
|
309
|
+
projectConfigs["default"] = { root: process.env.PROJECT_ROOT };
|
|
310
|
+
}
|
|
311
|
+
// 5. Auto-detect from cwd
|
|
312
|
+
if (Object.keys(projectConfigs).length === 0) {
|
|
313
|
+
const gitRoot = detectGitRoot(cwd);
|
|
314
|
+
const root = gitRoot || cwd;
|
|
315
|
+
// Check for monorepo markers
|
|
316
|
+
const includes = detectMonorepoIncludes(root);
|
|
317
|
+
if (includes) {
|
|
318
|
+
projectConfigs["default"] = { root, include: includes };
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
projectConfigs["default"] = { root };
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
// Resolve and initialize all projects
|
|
325
|
+
for (const [name, config] of Object.entries(projectConfigs)) {
|
|
326
|
+
const roots = resolveRoots(config);
|
|
327
|
+
if (roots.length === 0) {
|
|
328
|
+
logger.warn(`Project "${name}" has no valid roots, skipping`);
|
|
329
|
+
continue;
|
|
330
|
+
}
|
|
331
|
+
// Validate all roots exist and are directories
|
|
332
|
+
for (const root of roots) {
|
|
333
|
+
if (!existsSync(root) || !statSync(root).isDirectory()) {
|
|
334
|
+
logger.warn(`Project "${name}": root is not a valid directory: ${root}`);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
const project = initProject(name, roots.filter(r => existsSync(r) && statSync(r).isDirectory()));
|
|
338
|
+
this.projects.set(name, project);
|
|
339
|
+
logger.info(`Project "${name}": ${project.roots.length} root(s) — ${project.roots.join(", ")}`);
|
|
340
|
+
}
|
|
341
|
+
// Auto-select active project
|
|
342
|
+
if (this.projects.size === 1) {
|
|
343
|
+
this._activeProject = this.projects.keys().next().value;
|
|
344
|
+
}
|
|
345
|
+
else if (this.projects.size > 1) {
|
|
346
|
+
// Match cwd against project roots
|
|
347
|
+
const cwdResolved = path.resolve(cwd);
|
|
348
|
+
let bestMatch = null;
|
|
349
|
+
let bestLen = 0;
|
|
350
|
+
for (const [name, project] of this.projects) {
|
|
351
|
+
for (const root of project.roots) {
|
|
352
|
+
if (cwdResolved.startsWith(root) && root.length > bestLen) {
|
|
353
|
+
bestMatch = name;
|
|
354
|
+
bestLen = root.length;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
this._activeProject = bestMatch || this.projects.keys().next().value;
|
|
359
|
+
}
|
|
360
|
+
if (this._activeProject) {
|
|
361
|
+
logger.info(`Active project: "${this._activeProject}"`);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Index and start watching all projects
|
|
366
|
+
*/
|
|
367
|
+
async startAll() {
|
|
368
|
+
for (const [name, project] of this.projects) {
|
|
369
|
+
logger.info(`Indexing project "${name}"...`);
|
|
370
|
+
await project.watcher.initialIndex();
|
|
371
|
+
project.watcher.startWatching();
|
|
372
|
+
// Start LSP in background
|
|
373
|
+
project.lspManager.start().then(() => {
|
|
374
|
+
const servers = project.lspManager.getActiveServers();
|
|
375
|
+
if (servers.length > 0) {
|
|
376
|
+
logger.info(`Project "${name}" LSP: ${servers.join(", ")}`);
|
|
377
|
+
}
|
|
378
|
+
}).catch((err) => {
|
|
379
|
+
logger.warn(`Project "${name}" LSP startup failed (non-fatal)`, err);
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Get the active project
|
|
385
|
+
*/
|
|
386
|
+
get active() {
|
|
387
|
+
if (!this._activeProject)
|
|
388
|
+
return null;
|
|
389
|
+
return this.projects.get(this._activeProject) || null;
|
|
390
|
+
}
|
|
391
|
+
get activeProjectName() {
|
|
392
|
+
return this._activeProject;
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Switch active project
|
|
396
|
+
*/
|
|
397
|
+
switchProject(name) {
|
|
398
|
+
if (this.projects.has(name)) {
|
|
399
|
+
this._activeProject = name;
|
|
400
|
+
logger.info(`Switched to project "${name}"`);
|
|
401
|
+
return true;
|
|
402
|
+
}
|
|
403
|
+
return false;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* List all projects with stats
|
|
407
|
+
*/
|
|
408
|
+
listProjects() {
|
|
409
|
+
const result = [];
|
|
410
|
+
for (const [name, project] of this.projects) {
|
|
411
|
+
result.push({
|
|
412
|
+
name,
|
|
413
|
+
active: name === this._activeProject,
|
|
414
|
+
roots: project.roots,
|
|
415
|
+
stats: project.graph.getStats(),
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
return result;
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Add a project at runtime and persist to user config
|
|
422
|
+
*/
|
|
423
|
+
async addProject(name, config) {
|
|
424
|
+
if (this.projects.has(name)) {
|
|
425
|
+
return `Project "${name}" already exists. Use switch_project to activate it.`;
|
|
426
|
+
}
|
|
427
|
+
const roots = resolveRoots(config);
|
|
428
|
+
if (roots.length === 0) {
|
|
429
|
+
return `No valid roots found for project "${name}".`;
|
|
430
|
+
}
|
|
431
|
+
const project = initProject(name, roots);
|
|
432
|
+
this.projects.set(name, project);
|
|
433
|
+
// Index it
|
|
434
|
+
await project.watcher.initialIndex();
|
|
435
|
+
project.watcher.startWatching();
|
|
436
|
+
project.lspManager.start().catch(() => { });
|
|
437
|
+
// Persist to user config
|
|
438
|
+
const userConfigPath = path.join(CODEGRAPH_DIR, "config.json");
|
|
439
|
+
let userConfig = { projects: {} };
|
|
440
|
+
if (existsSync(userConfigPath)) {
|
|
441
|
+
try {
|
|
442
|
+
userConfig = JSON.parse(readFileSync(userConfigPath, "utf-8"));
|
|
443
|
+
}
|
|
444
|
+
catch { /* start fresh */ }
|
|
445
|
+
}
|
|
446
|
+
userConfig.projects[name] = config;
|
|
447
|
+
mkdirSync(CODEGRAPH_DIR, { recursive: true });
|
|
448
|
+
writeFileSync(userConfigPath, JSON.stringify(userConfig, null, 2) + "\n");
|
|
449
|
+
// Auto-switch to new project
|
|
450
|
+
this._activeProject = name;
|
|
451
|
+
const stats = project.graph.getStats();
|
|
452
|
+
return `Project "${name}" added and activated. ${stats.files} files, ${stats.symbols} symbols indexed.`;
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* Get all root paths for the active project (for descriptions, etc.)
|
|
456
|
+
*/
|
|
457
|
+
getActiveRoots() {
|
|
458
|
+
return this.active?.roots || [];
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Get the primary root (first root) of the active project
|
|
462
|
+
*/
|
|
463
|
+
getPrimaryRoot() {
|
|
464
|
+
const roots = this.getActiveRoots();
|
|
465
|
+
return roots.length > 0 ? roots[0] : null;
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Shut down all projects
|
|
469
|
+
*/
|
|
470
|
+
async shutdown() {
|
|
471
|
+
for (const [name, project] of this.projects) {
|
|
472
|
+
logger.info(`Shutting down project "${name}"...`);
|
|
473
|
+
await project.watcher.stop();
|
|
474
|
+
await project.lspManager.stop();
|
|
475
|
+
project.db.close();
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
//# sourceMappingURL=project-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-manager.js","sourceRoot":"","sources":["../src/project-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,7 +38,8 @@ export function handleFindSymbol(graph, args) {
|
|
|
38
38
|
const formatted = results.map((s) => {
|
|
39
39
|
const exported = s.isExported ? " [exported]" : "";
|
|
40
40
|
const sig = s.signature ? `\n Signature: ${s.signature}` : "";
|
|
41
|
-
|
|
41
|
+
const doc = s.docstring ? `\n Docstring: ${s.docstring}` : "";
|
|
42
|
+
return `${s.kind} ${s.name}${exported}\n Location: ${s.filePath}:${s.lineStart}-${s.lineEnd}${sig}${doc}`;
|
|
42
43
|
});
|
|
43
44
|
return {
|
|
44
45
|
content: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-symbol.js","sourceRoot":"","sources":["../../src/tools/find-symbol.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,oJAAoJ;IACtJ,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uDAAuD;aACrE;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC;gBAC1F,WAAW,EAAE,iCAAiC;aAC/C;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wDAAwD;aACtE;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yCAAyC;aACvD;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;CACF,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAC9B,KAAgB,EAChB,IAAqE;IAErE,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC;QAChC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;KACxB,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,8BAA8B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC;IACpG,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,GAAG,QAAQ,iBAAiB,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"find-symbol.js","sourceRoot":"","sources":["../../src/tools/find-symbol.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,oJAAoJ;IACtJ,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uDAAuD;aACrE;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC;gBAC1F,WAAW,EAAE,iCAAiC;aAC/C;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wDAAwD;aACtE;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yCAAyC;aACvD;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;CACF,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAC9B,KAAgB,EAChB,IAAqE;IAErE,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC;QAChC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;KACxB,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,8BAA8B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC;IACpG,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,GAAG,QAAQ,iBAAiB,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;IAC7G,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,SAAS,OAAO,CAAC,MAAM,wBAAwB,IAAI,CAAC,IAAI,SAAS,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;aAChG;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ProjectManager } from "../project-manager.js";
|
|
2
|
+
export declare const listProjectsTool: {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function handleListProjects(pm: ProjectManager): {
|
|
7
|
+
content: {
|
|
8
|
+
type: "text";
|
|
9
|
+
text: string;
|
|
10
|
+
}[];
|
|
11
|
+
};
|
|
12
|
+
export declare const switchProjectTool: {
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function handleSwitchProject(pm: ProjectManager, args: {
|
|
17
|
+
project_name: string;
|
|
18
|
+
}): {
|
|
19
|
+
content: {
|
|
20
|
+
type: "text";
|
|
21
|
+
text: string;
|
|
22
|
+
}[];
|
|
23
|
+
};
|
|
24
|
+
export declare const addProjectTool: {
|
|
25
|
+
name: string;
|
|
26
|
+
description: string;
|
|
27
|
+
};
|
|
28
|
+
export declare function handleAddProject(pm: ProjectManager, args: {
|
|
29
|
+
project_name: string;
|
|
30
|
+
roots?: string;
|
|
31
|
+
root?: string;
|
|
32
|
+
include?: string;
|
|
33
|
+
}): Promise<{
|
|
34
|
+
content: {
|
|
35
|
+
type: "text";
|
|
36
|
+
text: string;
|
|
37
|
+
}[];
|
|
38
|
+
}>;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export const listProjectsTool = {
|
|
2
|
+
name: "list_projects",
|
|
3
|
+
description: "List all configured projects, their roots, and index stats. Shows which project is currently active.",
|
|
4
|
+
};
|
|
5
|
+
export function handleListProjects(pm) {
|
|
6
|
+
const projects = pm.listProjects();
|
|
7
|
+
if (projects.length === 0) {
|
|
8
|
+
return {
|
|
9
|
+
content: [{ type: "text", text: "No projects configured." }],
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
const lines = [];
|
|
13
|
+
for (const p of projects) {
|
|
14
|
+
const marker = p.active ? " (active)" : "";
|
|
15
|
+
lines.push(`## ${p.name}${marker}`);
|
|
16
|
+
lines.push(`Roots: ${p.roots.join(", ")}`);
|
|
17
|
+
lines.push(`Files: ${p.stats.files}, Symbols: ${p.stats.symbols}, References: ${p.stats.references}, Imports: ${p.stats.imports}`);
|
|
18
|
+
lines.push("");
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
content: [{ type: "text", text: lines.join("\n") }],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export const switchProjectTool = {
|
|
25
|
+
name: "switch_project",
|
|
26
|
+
description: "Switch the active project context. All subsequent tool calls will operate against the selected project's code graph.",
|
|
27
|
+
};
|
|
28
|
+
export function handleSwitchProject(pm, args) {
|
|
29
|
+
const success = pm.switchProject(args.project_name);
|
|
30
|
+
if (success) {
|
|
31
|
+
const active = pm.active;
|
|
32
|
+
const stats = active.graph.getStats();
|
|
33
|
+
return {
|
|
34
|
+
content: [{
|
|
35
|
+
type: "text",
|
|
36
|
+
text: `Switched to project "${args.project_name}".\nRoots: ${active.roots.join(", ")}\nFiles: ${stats.files}, Symbols: ${stats.symbols}, References: ${stats.references}`,
|
|
37
|
+
}],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
const available = pm.listProjects().map(p => p.name).join(", ");
|
|
41
|
+
return {
|
|
42
|
+
content: [{
|
|
43
|
+
type: "text",
|
|
44
|
+
text: `Project "${args.project_name}" not found. Available projects: ${available}`,
|
|
45
|
+
}],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export const addProjectTool = {
|
|
49
|
+
name: "add_project",
|
|
50
|
+
description: "Add a new project at runtime. Provide a name and one or more root paths. The project is indexed immediately and persisted to ~/.codegraph/config.json.",
|
|
51
|
+
};
|
|
52
|
+
export async function handleAddProject(pm, args) {
|
|
53
|
+
const roots = args.roots ? args.roots.split(",").map(r => r.trim()).filter(Boolean) : undefined;
|
|
54
|
+
const include = args.include ? args.include.split(",").map(r => r.trim()).filter(Boolean) : undefined;
|
|
55
|
+
const config = {};
|
|
56
|
+
if (args.root)
|
|
57
|
+
config.root = args.root;
|
|
58
|
+
if (roots && roots.length > 0)
|
|
59
|
+
config.roots = roots;
|
|
60
|
+
if (include && include.length > 0)
|
|
61
|
+
config.include = include;
|
|
62
|
+
if (!config.root && (!config.roots || config.roots.length === 0)) {
|
|
63
|
+
return {
|
|
64
|
+
content: [{ type: "text", text: "Please provide at least one root path (via 'root' or 'roots' parameter)." }],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const result = await pm.addProject(args.project_name, config);
|
|
68
|
+
return {
|
|
69
|
+
content: [{ type: "text", text: result }],
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=project-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-tools.js","sourceRoot":"","sources":["../../src/tools/project-tools.ts"],"names":[],"mappings":"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"}
|