@colbymchenry/codegraph 0.7.9 → 0.8.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 +49 -49
- package/dist/bin/codegraph.js +47 -20
- package/dist/bin/codegraph.js.map +1 -1
- package/dist/bin/node-version-check.d.ts +3 -0
- package/dist/bin/node-version-check.d.ts.map +1 -1
- package/dist/bin/node-version-check.js +5 -2
- package/dist/bin/node-version-check.js.map +1 -1
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +4 -2
- package/dist/context/index.js.map +1 -1
- package/dist/db/queries.d.ts.map +1 -1
- package/dist/db/queries.js +7 -1
- package/dist/db/queries.js.map +1 -1
- package/dist/extraction/index.d.ts.map +1 -1
- package/dist/extraction/index.js +63 -37
- package/dist/extraction/index.js.map +1 -1
- package/dist/installer/config-writer.d.ts.map +1 -1
- package/dist/installer/config-writer.js +3 -1
- package/dist/installer/config-writer.js.map +1 -1
- package/dist/installer/index.d.ts +12 -0
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +74 -5
- package/dist/installer/index.js.map +1 -1
- package/dist/installer/instructions-template.d.ts +2 -2
- package/dist/installer/instructions-template.d.ts.map +1 -1
- package/dist/installer/instructions-template.js +3 -2
- package/dist/installer/instructions-template.js.map +1 -1
- package/dist/installer/targets/claude.d.ts +10 -6
- package/dist/installer/targets/claude.d.ts.map +1 -1
- package/dist/installer/targets/claude.js +72 -10
- package/dist/installer/targets/claude.js.map +1 -1
- package/dist/mcp/index.d.ts +12 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +143 -20
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.d.ts.map +1 -1
- package/dist/mcp/server-instructions.js +14 -2
- package/dist/mcp/server-instructions.js.map +1 -1
- package/dist/mcp/tools.d.ts +75 -5
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +470 -87
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/transport.d.ts +17 -0
- package/dist/mcp/transport.d.ts.map +1 -1
- package/dist/mcp/transport.js +63 -0
- package/dist/mcp/transport.js.map +1 -1
- package/dist/resolution/frameworks/index.d.ts +1 -0
- package/dist/resolution/frameworks/index.d.ts.map +1 -1
- package/dist/resolution/frameworks/index.js +5 -1
- package/dist/resolution/frameworks/index.js.map +1 -1
- package/dist/resolution/frameworks/nestjs.d.ts +26 -0
- package/dist/resolution/frameworks/nestjs.d.ts.map +1 -0
- package/dist/resolution/frameworks/nestjs.js +374 -0
- package/dist/resolution/frameworks/nestjs.js.map +1 -0
- package/dist/search/query-utils.d.ts.map +1 -1
- package/dist/search/query-utils.js +29 -26
- package/dist/search/query-utils.js.map +1 -1
- package/dist/sync/git-hooks.d.ts +45 -0
- package/dist/sync/git-hooks.d.ts.map +1 -0
- package/dist/sync/git-hooks.js +223 -0
- package/dist/sync/git-hooks.js.map +1 -0
- package/dist/sync/index.d.ts +4 -0
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +12 -1
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/watch-policy.d.ts +48 -0
- package/dist/sync/watch-policy.d.ts.map +1 -0
- package/dist/sync/watch-policy.js +124 -0
- package/dist/sync/watch-policy.js.map +1 -0
- package/dist/sync/watcher.d.ts.map +1 -1
- package/dist/sync/watcher.js +10 -0
- package/dist/sync/watcher.js.map +1 -1
- package/dist/ui/glyphs.d.ts +42 -0
- package/dist/ui/glyphs.d.ts.map +1 -0
- package/dist/ui/glyphs.js +78 -0
- package/dist/ui/glyphs.js.map +1 -0
- package/dist/ui/shimmer-worker.js +17 -11
- package/dist/ui/shimmer-worker.js.map +1 -1
- package/package.json +3 -3
- package/scripts/agent-eval/audit.sh +68 -0
- package/scripts/agent-eval/itrun.sh +107 -0
- package/scripts/agent-eval/parse-run.mjs +45 -0
- package/scripts/agent-eval/parse-session.mjs +93 -0
- package/scripts/agent-eval/run-agent.sh +34 -0
- package/scripts/agent-eval/run-all.sh +67 -0
- package/scripts/extract-release-notes.mjs +130 -0
- package/scripts/release.sh +5 -7
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Claude Code target
|
|
3
|
+
* Claude Code target. Writes:
|
|
4
4
|
*
|
|
5
|
-
* - MCP server entry to `~/.claude.json` (global
|
|
6
|
-
* `./.
|
|
5
|
+
* - MCP server entry to `~/.claude.json` (global = user scope, loads
|
|
6
|
+
* in every project) or `./.mcp.json` (local = project scope, the
|
|
7
|
+
* file Claude Code actually reads for a single project). See the
|
|
8
|
+
* scope table at https://code.claude.com/docs/en/mcp.
|
|
7
9
|
* - Permissions to `~/.claude/settings.json` (global) or
|
|
8
10
|
* `./.claude/settings.json` (local), gated on `autoAllow`.
|
|
9
11
|
* - Instructions to `~/.claude/CLAUDE.md` (global) or
|
|
10
12
|
* `./.claude/CLAUDE.md` (local).
|
|
11
13
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
14
|
+
* Earlier versions wrote the local MCP entry to `./.claude.json` — a
|
|
15
|
+
* file Claude Code never reads — so the server silently never loaded
|
|
16
|
+
* until the user manually renamed it to `.mcp.json` (issue #207). We
|
|
17
|
+
* now write `./.mcp.json` and migrate any stale `./.claude.json` entry
|
|
18
|
+
* out of the way on install and uninstall.
|
|
15
19
|
*/
|
|
16
20
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
21
|
if (k2 === undefined) k2 = k;
|
|
@@ -62,9 +66,22 @@ function configDir(loc) {
|
|
|
62
66
|
: path.join(process.cwd(), '.claude');
|
|
63
67
|
}
|
|
64
68
|
function mcpJsonPath(loc) {
|
|
69
|
+
// global → ~/.claude.json (user scope: visible in every project).
|
|
70
|
+
// local → ./.mcp.json (project scope: the ONLY project-level MCP
|
|
71
|
+
// file Claude Code reads — NOT ./.claude.json, which it ignores).
|
|
65
72
|
return loc === 'global'
|
|
66
73
|
? path.join(os.homedir(), '.claude.json')
|
|
67
|
-
: path.join(process.cwd(), '.
|
|
74
|
+
: path.join(process.cwd(), '.mcp.json');
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Where pre-#207 installers wrote the local MCP entry. Claude Code
|
|
78
|
+
* never reads a project-level `./.claude.json`, so we migrate the
|
|
79
|
+
* codegraph entry out of it on install and strip it on uninstall.
|
|
80
|
+
* Only the project-local path is legacy — global `~/.claude.json` is
|
|
81
|
+
* the correct user-scope location and is left untouched.
|
|
82
|
+
*/
|
|
83
|
+
function legacyLocalMcpPath() {
|
|
84
|
+
return path.join(process.cwd(), '.claude.json');
|
|
68
85
|
}
|
|
69
86
|
function settingsJsonPath(loc) {
|
|
70
87
|
return path.join(configDir(loc), 'settings.json');
|
|
@@ -95,6 +112,14 @@ class ClaudeCodeTarget {
|
|
|
95
112
|
const files = [];
|
|
96
113
|
// 1. MCP server entry
|
|
97
114
|
files.push(writeMcpEntry(loc));
|
|
115
|
+
// 1b. Migrate away any stale ./.claude.json left by a pre-#207
|
|
116
|
+
// local install, so the project isn't left with two competing
|
|
117
|
+
// (one dead) MCP configs.
|
|
118
|
+
if (loc === 'local') {
|
|
119
|
+
const migrated = cleanupLegacyLocalMcp();
|
|
120
|
+
if (migrated)
|
|
121
|
+
files.push(migrated);
|
|
122
|
+
}
|
|
98
123
|
// 2. Permissions (only when autoAllow)
|
|
99
124
|
if (opts.autoAllow) {
|
|
100
125
|
files.push(writePermissionsEntry(loc));
|
|
@@ -119,6 +144,13 @@ class ClaudeCodeTarget {
|
|
|
119
144
|
else {
|
|
120
145
|
files.push({ path: mcpPath, action: 'not-found' });
|
|
121
146
|
}
|
|
147
|
+
// 1b. Also strip the codegraph entry from a legacy ./.claude.json
|
|
148
|
+
// so uninstall fully reverses a pre-#207 local install.
|
|
149
|
+
if (loc === 'local') {
|
|
150
|
+
const migrated = cleanupLegacyLocalMcp();
|
|
151
|
+
if (migrated)
|
|
152
|
+
files.push(migrated);
|
|
153
|
+
}
|
|
122
154
|
// 2. Permissions
|
|
123
155
|
const settingsPath = settingsJsonPath(loc);
|
|
124
156
|
const settings = (0, shared_1.readJsonFile)(settingsPath);
|
|
@@ -174,9 +206,10 @@ function writeMcpEntry(loc) {
|
|
|
174
206
|
return { path: file, action: 'unchanged' };
|
|
175
207
|
}
|
|
176
208
|
// 'created' here means: the file itself did not exist before this
|
|
177
|
-
// write. A pre-existing
|
|
178
|
-
//
|
|
179
|
-
//
|
|
209
|
+
// write. A pre-existing MCP JSON file (`~/.claude.json` globally,
|
|
210
|
+
// `./.mcp.json` locally) containing other MCP servers (no
|
|
211
|
+
// `codegraph` key) is 'updated', not 'created' — we're adding an
|
|
212
|
+
// entry to a file that was already there. Codex uses a different
|
|
180
213
|
// idiom (empty-content => 'created') because its config.toml is
|
|
181
214
|
// ours alone to manage.
|
|
182
215
|
const action = before ? 'updated' : (fs.existsSync(file) ? 'updated' : 'created');
|
|
@@ -186,6 +219,35 @@ function writeMcpEntry(loc) {
|
|
|
186
219
|
(0, shared_1.writeJsonFile)(file, existing);
|
|
187
220
|
return { path: file, action };
|
|
188
221
|
}
|
|
222
|
+
/**
|
|
223
|
+
* Strip the codegraph entry from a legacy project-local
|
|
224
|
+
* `./.claude.json` (written by pre-#207 installers, which Claude Code
|
|
225
|
+
* never read). Surgical: only our `codegraph` key is removed; sibling
|
|
226
|
+
* MCP servers and any unrelated keys are preserved, and the file is
|
|
227
|
+
* deleted only when removal leaves it completely empty. Returns the
|
|
228
|
+
* file action for reporting, or `null` when there's nothing to migrate.
|
|
229
|
+
*/
|
|
230
|
+
function cleanupLegacyLocalMcp() {
|
|
231
|
+
const file = legacyLocalMcpPath();
|
|
232
|
+
if (!fs.existsSync(file))
|
|
233
|
+
return null;
|
|
234
|
+
const config = (0, shared_1.readJsonFile)(file);
|
|
235
|
+
if (!config.mcpServers?.codegraph)
|
|
236
|
+
return null;
|
|
237
|
+
delete config.mcpServers.codegraph;
|
|
238
|
+
if (Object.keys(config.mcpServers).length === 0)
|
|
239
|
+
delete config.mcpServers;
|
|
240
|
+
if (Object.keys(config).length === 0) {
|
|
241
|
+
try {
|
|
242
|
+
fs.unlinkSync(file);
|
|
243
|
+
}
|
|
244
|
+
catch { /* ignore */ }
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
(0, shared_1.writeJsonFile)(file, config);
|
|
248
|
+
}
|
|
249
|
+
return { path: file, action: 'removed' };
|
|
250
|
+
}
|
|
189
251
|
function writePermissionsEntry(loc) {
|
|
190
252
|
const file = settingsJsonPath(loc);
|
|
191
253
|
const settings = (0, shared_1.readJsonFile)(file);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/installer/targets/claude.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/installer/targets/claude.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/index.d.ts
CHANGED
|
@@ -25,6 +25,9 @@ export declare class MCPServer {
|
|
|
25
25
|
private cg;
|
|
26
26
|
private toolHandler;
|
|
27
27
|
private projectPath;
|
|
28
|
+
private initPromise;
|
|
29
|
+
private clientSupportsRoots;
|
|
30
|
+
private rootsAttempted;
|
|
28
31
|
constructor(projectPath?: string);
|
|
29
32
|
/**
|
|
30
33
|
* Start the MCP server
|
|
@@ -49,8 +52,17 @@ export declare class MCPServer {
|
|
|
49
52
|
* Called lazily on tool calls that need the default project.
|
|
50
53
|
* Re-walks parent directories each time so it picks up projects
|
|
51
54
|
* initialized after the MCP server started.
|
|
55
|
+
*
|
|
56
|
+
* Awaits any in-flight background init (kicked off by handleInitialize) so
|
|
57
|
+
* we never open the SQLite file twice concurrently.
|
|
52
58
|
*/
|
|
53
59
|
private retryInitIfNeeded;
|
|
60
|
+
/**
|
|
61
|
+
* Resolve the project root via the MCP `roots/list` request and initialize
|
|
62
|
+
* from the first root the client reports. Falls back to the process cwd if
|
|
63
|
+
* the client returns no usable root or doesn't answer in time. See issue #196.
|
|
64
|
+
*/
|
|
65
|
+
private initFromRoots;
|
|
54
66
|
/**
|
|
55
67
|
* Start file watching on the active CodeGraph instance.
|
|
56
68
|
* Logs sync activity to stderr for diagnostics.
|
package/dist/mcp/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AA6DH;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAAgB;IAGnC,OAAO,CAAC,WAAW,CAA8B;IAIjD,OAAO,CAAC,mBAAmB,CAAS;IAGpC,OAAO,CAAC,cAAc,CAAS;gBAEnB,WAAW,CAAC,EAAE,MAAM;IAOhC;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5B;;;;;;;;;OASG;YACW,oBAAoB;IAyBlC;;;;;;;;OAQG;YACW,iBAAiB;IA+C/B;;;;OAIG;YACW,aAAa;IAiB3B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAsCrB;;OAEG;IACH,IAAI,IAAI,IAAI;IAYZ;;OAEG;YACW,aAAa;IA6C3B;;OAEG;YACW,gBAAgB;IA6D9B;;OAEG;YACW,eAAe;IAO7B;;OAEG;YACW,eAAe;CAqC9B;AAGD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/mcp/index.js
CHANGED
|
@@ -52,6 +52,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
52
52
|
exports.ToolHandler = exports.tools = exports.StdioTransport = exports.MCPServer = void 0;
|
|
53
53
|
const path = __importStar(require("path"));
|
|
54
54
|
const index_1 = __importStar(require("../index"));
|
|
55
|
+
const sync_1 = require("../sync");
|
|
55
56
|
const transport_1 = require("./transport");
|
|
56
57
|
const tools_1 = require("./tools");
|
|
57
58
|
const server_instructions_1 = require("./server-instructions");
|
|
@@ -85,6 +86,27 @@ const SERVER_INFO = {
|
|
|
85
86
|
* MCP Protocol Version
|
|
86
87
|
*/
|
|
87
88
|
const PROTOCOL_VERSION = '2024-11-05';
|
|
89
|
+
/**
|
|
90
|
+
* How long to wait for the client's `roots/list` response before giving up
|
|
91
|
+
* and falling back to the process cwd.
|
|
92
|
+
*/
|
|
93
|
+
const ROOTS_LIST_TIMEOUT_MS = 5000;
|
|
94
|
+
/**
|
|
95
|
+
* Extract the first usable filesystem path from a `roots/list` result.
|
|
96
|
+
* Shape per MCP spec: `{ roots: [{ uri: "file:///path", name?: string }] }`.
|
|
97
|
+
* Returns null if the result is empty or malformed.
|
|
98
|
+
*/
|
|
99
|
+
function firstRootPath(result) {
|
|
100
|
+
if (!result || typeof result !== 'object')
|
|
101
|
+
return null;
|
|
102
|
+
const roots = result.roots;
|
|
103
|
+
if (!Array.isArray(roots) || roots.length === 0)
|
|
104
|
+
return null;
|
|
105
|
+
const first = roots[0];
|
|
106
|
+
if (typeof first?.uri !== 'string')
|
|
107
|
+
return null;
|
|
108
|
+
return fileUriToPath(first.uri);
|
|
109
|
+
}
|
|
88
110
|
/**
|
|
89
111
|
* MCP Server for CodeGraph
|
|
90
112
|
*
|
|
@@ -96,6 +118,16 @@ class MCPServer {
|
|
|
96
118
|
cg = null;
|
|
97
119
|
toolHandler;
|
|
98
120
|
projectPath;
|
|
121
|
+
// In-flight background init kicked off from handleInitialize. Tracked so the
|
|
122
|
+
// sync retry path doesn't race against it (double-opening the SQLite file).
|
|
123
|
+
initPromise = null;
|
|
124
|
+
// Whether the client advertised the MCP `roots` capability during initialize.
|
|
125
|
+
// If so, and no explicit project path was given, we ask it for the workspace
|
|
126
|
+
// root via roots/list rather than guessing from the (often wrong) cwd.
|
|
127
|
+
clientSupportsRoots = false;
|
|
128
|
+
// Guards the one-shot deferred resolution (roots/list or cwd) so we don't
|
|
129
|
+
// re-issue roots/list on every tool call.
|
|
130
|
+
rootsAttempted = false;
|
|
99
131
|
constructor(projectPath) {
|
|
100
132
|
this.projectPath = projectPath || null;
|
|
101
133
|
this.transport = new transport_1.StdioTransport();
|
|
@@ -131,6 +163,8 @@ class MCPServer {
|
|
|
131
163
|
* are still possible.
|
|
132
164
|
*/
|
|
133
165
|
async tryInitializeDefault(projectPath) {
|
|
166
|
+
// Record where we searched so a later "not initialized" error can name it.
|
|
167
|
+
this.toolHandler.setDefaultProjectHint(projectPath);
|
|
134
168
|
// Walk up parent directories to find nearest .codegraph/
|
|
135
169
|
const resolvedRoot = (0, index_1.findNearestCodeGraphRoot)(projectPath);
|
|
136
170
|
if (!resolvedRoot) {
|
|
@@ -154,15 +188,43 @@ class MCPServer {
|
|
|
154
188
|
* Called lazily on tool calls that need the default project.
|
|
155
189
|
* Re-walks parent directories each time so it picks up projects
|
|
156
190
|
* initialized after the MCP server started.
|
|
191
|
+
*
|
|
192
|
+
* Awaits any in-flight background init (kicked off by handleInitialize) so
|
|
193
|
+
* we never open the SQLite file twice concurrently.
|
|
157
194
|
*/
|
|
158
|
-
retryInitIfNeeded() {
|
|
195
|
+
async retryInitIfNeeded() {
|
|
196
|
+
// Wait for the background init started during handleInitialize, if any.
|
|
197
|
+
if (this.initPromise) {
|
|
198
|
+
try {
|
|
199
|
+
await this.initPromise;
|
|
200
|
+
}
|
|
201
|
+
catch { /* errored init falls through to retry */ }
|
|
202
|
+
}
|
|
159
203
|
// Already initialized successfully
|
|
160
204
|
if (this.toolHandler.hasDefaultCodeGraph())
|
|
161
205
|
return;
|
|
162
|
-
// No
|
|
163
|
-
if
|
|
164
|
-
|
|
165
|
-
|
|
206
|
+
// No explicit path was given at initialize. Resolve it now, exactly once:
|
|
207
|
+
// ask the client via roots/list (if it advertised roots), else use cwd.
|
|
208
|
+
// Deferring to here lets a roots answer override the wrong cwd, and the
|
|
209
|
+
// one-shot guard means we never re-issue roots/list per tool call.
|
|
210
|
+
if (!this.projectPath && !this.rootsAttempted) {
|
|
211
|
+
this.rootsAttempted = true;
|
|
212
|
+
this.initPromise = (this.clientSupportsRoots
|
|
213
|
+
? this.initFromRoots()
|
|
214
|
+
: this.tryInitializeDefault(process.cwd())).finally(() => { this.initPromise = null; });
|
|
215
|
+
try {
|
|
216
|
+
await this.initPromise;
|
|
217
|
+
}
|
|
218
|
+
catch { /* fall through to last-resort below */ }
|
|
219
|
+
if (this.toolHandler.hasDefaultCodeGraph())
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
// Last resort: re-walk from the best candidate we have. Picks up projects
|
|
223
|
+
// initialized after the server started, and covers clients that sent no
|
|
224
|
+
// usable initialize signal at all.
|
|
225
|
+
const candidate = this.projectPath ?? process.cwd();
|
|
226
|
+
this.toolHandler.setDefaultProjectHint(candidate);
|
|
227
|
+
const resolvedRoot = (0, index_1.findNearestCodeGraphRoot)(candidate);
|
|
166
228
|
if (!resolvedRoot)
|
|
167
229
|
return;
|
|
168
230
|
try {
|
|
@@ -183,6 +245,29 @@ class MCPServer {
|
|
|
183
245
|
// Still failing — will retry on next tool call
|
|
184
246
|
}
|
|
185
247
|
}
|
|
248
|
+
/**
|
|
249
|
+
* Resolve the project root via the MCP `roots/list` request and initialize
|
|
250
|
+
* from the first root the client reports. Falls back to the process cwd if
|
|
251
|
+
* the client returns no usable root or doesn't answer in time. See issue #196.
|
|
252
|
+
*/
|
|
253
|
+
async initFromRoots() {
|
|
254
|
+
let target = process.cwd();
|
|
255
|
+
try {
|
|
256
|
+
const result = await this.transport.request('roots/list', undefined, ROOTS_LIST_TIMEOUT_MS);
|
|
257
|
+
const rootPath = firstRootPath(result);
|
|
258
|
+
if (rootPath) {
|
|
259
|
+
target = rootPath;
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
process.stderr.write('[CodeGraph MCP] Client returned no workspace roots; falling back to process cwd.\n');
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch (err) {
|
|
266
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
267
|
+
process.stderr.write(`[CodeGraph MCP] roots/list request failed (${msg}); falling back to process cwd.\n`);
|
|
268
|
+
}
|
|
269
|
+
await this.tryInitializeDefault(target);
|
|
270
|
+
}
|
|
186
271
|
/**
|
|
187
272
|
* Start file watching on the active CodeGraph instance.
|
|
188
273
|
* Logs sync activity to stderr for diagnostics.
|
|
@@ -190,6 +275,15 @@ class MCPServer {
|
|
|
190
275
|
startWatching() {
|
|
191
276
|
if (!this.cg)
|
|
192
277
|
return;
|
|
278
|
+
// When the watcher is intentionally disabled (e.g. WSL2 /mnt drives, or
|
|
279
|
+
// CODEGRAPH_NO_WATCH=1), say so explicitly and tell the user how to keep
|
|
280
|
+
// the graph fresh — otherwise the silent staleness is hard to diagnose.
|
|
281
|
+
const disabledReason = (0, sync_1.watchDisabledReason)(this.projectPath ?? process.cwd());
|
|
282
|
+
if (disabledReason) {
|
|
283
|
+
process.stderr.write(`[CodeGraph MCP] File watcher disabled — ${disabledReason}. ` +
|
|
284
|
+
`The graph will not auto-update; run \`codegraph sync\` (or install the git sync hooks via \`codegraph init\`) to refresh.\n`);
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
193
287
|
const started = this.cg.watch({
|
|
194
288
|
onSyncComplete: (result) => {
|
|
195
289
|
if (result.filesChanged > 0) {
|
|
@@ -203,6 +297,10 @@ class MCPServer {
|
|
|
203
297
|
if (started) {
|
|
204
298
|
process.stderr.write('[CodeGraph MCP] File watcher active — graph will auto-sync on changes\n');
|
|
205
299
|
}
|
|
300
|
+
else {
|
|
301
|
+
// start() can also return false when recursive fs.watch isn't supported.
|
|
302
|
+
process.stderr.write('[CodeGraph MCP] File watcher unavailable on this platform — run `codegraph sync` to refresh the graph after changes.\n');
|
|
303
|
+
}
|
|
206
304
|
}
|
|
207
305
|
/**
|
|
208
306
|
* Stop the server
|
|
@@ -260,24 +358,35 @@ class MCPServer {
|
|
|
260
358
|
*/
|
|
261
359
|
async handleInitialize(request) {
|
|
262
360
|
const params = request.params;
|
|
263
|
-
//
|
|
264
|
-
|
|
361
|
+
// Does the client support the MCP `roots` protocol? If so, and we have no
|
|
362
|
+
// explicit path, we ask it for the workspace root after the handshake
|
|
363
|
+
// instead of falling back to the (frequently wrong) cwd. See issue #196.
|
|
364
|
+
this.clientSupportsRoots = !!params?.capabilities?.roots;
|
|
365
|
+
// Explicit project signal, strongest first: a client-provided rootUri /
|
|
366
|
+
// workspaceFolders (LSP-style, non-standard but some clients send it), else
|
|
367
|
+
// the --path the server was launched with. cwd is NOT used here — we defer
|
|
368
|
+
// it so a roots/list answer can win over it.
|
|
369
|
+
let explicitPath = null;
|
|
265
370
|
if (params?.rootUri) {
|
|
266
|
-
|
|
371
|
+
explicitPath = fileUriToPath(params.rootUri);
|
|
267
372
|
}
|
|
268
373
|
else if (params?.workspaceFolders?.[0]?.uri) {
|
|
269
|
-
|
|
374
|
+
explicitPath = fileUriToPath(params.workspaceFolders[0].uri);
|
|
270
375
|
}
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
projectPath = process.cwd();
|
|
376
|
+
else if (this.projectPath) {
|
|
377
|
+
explicitPath = this.projectPath;
|
|
274
378
|
}
|
|
275
|
-
//
|
|
276
|
-
|
|
277
|
-
//
|
|
278
|
-
//
|
|
279
|
-
//
|
|
280
|
-
//
|
|
379
|
+
// Respond to the handshake BEFORE doing any heavy initialization. Loading
|
|
380
|
+
// the SQLite DB and the tree-sitter WASM runtime can take many seconds on
|
|
381
|
+
// slow filesystems (Docker Desktop VirtioFS on macOS, WSL2). Clients like
|
|
382
|
+
// Claude Code time out the handshake at ~30s, which manifested as
|
|
383
|
+
// "MCP tools never appear" — the child was alive and had received the
|
|
384
|
+
// initialize but was still awaiting initGrammars(). See issue #172.
|
|
385
|
+
//
|
|
386
|
+
// We accept the client's protocol version but respond with our supported
|
|
387
|
+
// version. The `instructions` field is surfaced by MCP clients in the
|
|
388
|
+
// agent's system prompt automatically — it's the right place for the
|
|
389
|
+
// universal tool-selection playbook, ahead of individual tool descriptions.
|
|
281
390
|
this.transport.sendResult(request.id, {
|
|
282
391
|
protocolVersion: PROTOCOL_VERSION,
|
|
283
392
|
capabilities: {
|
|
@@ -286,12 +395,26 @@ class MCPServer {
|
|
|
286
395
|
serverInfo: SERVER_INFO,
|
|
287
396
|
instructions: server_instructions_1.SERVER_INSTRUCTIONS,
|
|
288
397
|
});
|
|
398
|
+
// If we know the project dir, kick off init in the background now. Tool
|
|
399
|
+
// calls that arrive before it finishes fall through to `retryInitIfNeeded`,
|
|
400
|
+
// which waits for this promise rather than racing it with a second open.
|
|
401
|
+
//
|
|
402
|
+
// If we DON'T know it (no rootUri, no --path), defer: the first tool call
|
|
403
|
+
// resolves it via roots/list (when the client supports roots) or cwd. This
|
|
404
|
+
// is the fix for issue #196 — clients that launch the server outside the
|
|
405
|
+
// project and don't pass a rootUri previously got a misleading "not
|
|
406
|
+
// initialized" error on every call.
|
|
407
|
+
if (explicitPath) {
|
|
408
|
+
this.initPromise = this.tryInitializeDefault(explicitPath).finally(() => {
|
|
409
|
+
this.initPromise = null;
|
|
410
|
+
});
|
|
411
|
+
}
|
|
289
412
|
}
|
|
290
413
|
/**
|
|
291
414
|
* Handle tools/list request
|
|
292
415
|
*/
|
|
293
416
|
async handleToolsList(request) {
|
|
294
|
-
this.retryInitIfNeeded();
|
|
417
|
+
await this.retryInitIfNeeded();
|
|
295
418
|
this.transport.sendResult(request.id, {
|
|
296
419
|
tools: this.toolHandler.getTools(),
|
|
297
420
|
});
|
|
@@ -315,7 +438,7 @@ class MCPServer {
|
|
|
315
438
|
}
|
|
316
439
|
// If the default project isn't initialized yet, retry in case it was
|
|
317
440
|
// initialized after the MCP server started (e.g. user ran codegraph init)
|
|
318
|
-
this.retryInitIfNeeded();
|
|
441
|
+
await this.retryInitIfNeeded();
|
|
319
442
|
const result = await this.toolHandler.execute(toolName, toolArgs);
|
|
320
443
|
this.transport.sendResult(request.id, result);
|
|
321
444
|
}
|
package/dist/mcp/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2CAA6B;AAC7B,kDAA+D;AAC/D,2CAA8F;AAC9F,mCAA6C;AAC7C,+DAA4D;AAE5D;;;GAGG;AACH,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChD,2EAA2E;QAC3E,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClE,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;QACjC,OAAO,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,OAAO;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAEtC;;;;;GAKG;AACH,MAAa,SAAS;IACZ,SAAS,CAAiB;IAC1B,EAAE,GAAqB,IAAI,CAAC;IAC5B,WAAW,CAAc;IACzB,WAAW,CAAgB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,5 +15,5 @@
|
|
|
15
15
|
* burn tokens. Reference only tools that exist on `main`; gate any
|
|
16
16
|
* conditional tools behind feature checks if/when they ship.
|
|
17
17
|
*/
|
|
18
|
-
export declare const SERVER_INSTRUCTIONS = "# Codegraph \u2014 code intelligence over an indexed knowledge graph\n\nCodegraph is a SQLite knowledge graph of every symbol, edge, and file\nin the workspace. Reads are sub-millisecond; the index lags writes by\nabout a second through the file watcher. Consult it BEFORE writing or\nediting code, not during.\n\n## Tool selection by intent\n\n- **\"What is the symbol named X?\"** \u2192 `codegraph_search`\n- **\"What's the deal with this task / feature / area?\"** \u2192 `codegraph_context` (PRIMARY \u2014 composes search + node + callers + callees in one call)\n- **\"What calls this?\"** \u2192 `codegraph_callers`\n- **\"What does this call?\"** \u2192 `codegraph_callees`\n- **\"What would changing this break?\"** \u2192 `codegraph_impact`\n- **\"Show me this symbol's source / signature / docstring.\"** \u2192 `codegraph_node`\n- **\"
|
|
18
|
+
export declare const SERVER_INSTRUCTIONS = "# Codegraph \u2014 code intelligence over an indexed knowledge graph\n\nCodegraph is a SQLite knowledge graph of every symbol, edge, and file\nin the workspace. Reads are sub-millisecond; the index lags writes by\nabout a second through the file watcher. Consult it BEFORE writing or\nediting code, not during.\n\n## Answer directly \u2014 don't delegate exploration\n\nFor \"how does X work\", architecture, trace, or where-is-X questions,\nanswer DIRECTLY using 2-3 codegraph calls: `codegraph_context` first,\nthen ONE `codegraph_explore` for the source of the symbols it surfaces.\nCodegraph IS the pre-built search index \u2014 so delegating the lookup to a\nseparate file-reading sub-task/agent, or running your own grep + read\nloop, repeats work codegraph already did and costs more for the same\nanswer. Reach for raw Read/Grep only to confirm a specific detail\ncodegraph didn't cover. A direct codegraph answer is typically a handful\nof calls; a grep/read exploration is dozens.\n\n## Tool selection by intent\n\n- **\"What is the symbol named X?\"** \u2192 `codegraph_search`\n- **\"What's the deal with this task / feature / area?\"** \u2192 `codegraph_context` (PRIMARY \u2014 composes search + node + callers + callees in one call)\n- **\"What calls this?\"** \u2192 `codegraph_callers`\n- **\"What does this call?\"** \u2192 `codegraph_callees`\n- **\"What would changing this break?\"** \u2192 `codegraph_impact`\n- **\"Show me this symbol's source / signature / docstring.\"** \u2192 `codegraph_node`\n- **\"Show me several related symbols' source / survey an area.\"** \u2192 `codegraph_explore` (ONE capped call; prefer over many codegraph_node/Read)\n- **\"What's in directory X?\"** \u2192 `codegraph_files`\n- **\"Is the index ready / what's its size?\"** \u2192 `codegraph_status`\n\n## Common chains\n\n- **Onboarding**: `codegraph_context` first. If still unclear, `codegraph_explore` for breadth, then `codegraph_node` on specific symbols.\n- **Refactor planning**: `codegraph_search` \u2192 `codegraph_callers` \u2192 `codegraph_impact`. The blast-radius answer comes from impact, not from walking callers manually.\n- **Debugging a regression**: `codegraph_callers` of the suspected symbol; widen with `codegraph_impact` if an unexpected call appears.\n\n## Anti-patterns\n\n- **Don't grep first** when looking up a symbol by name \u2014 `codegraph_search` is faster and returns kind + location + signature.\n- **Don't chain `codegraph_search` + `codegraph_node`** when you just want context \u2014 `codegraph_context` is one round-trip.\n- **Don't loop `codegraph_node` over many symbols** \u2014 one `codegraph_explore` call returns them all grouped by file, while each separate call re-reads the whole context and costs far more. Use `codegraph_node` for a single symbol.\n- **Don't query the index immediately after editing a file** \u2014 the watcher needs ~500ms to debounce + sync. Wait for the next turn.\n\n## Limitations\n\n- Index lags file writes by ~1 second.\n- Cross-file resolution is best-effort name matching; ambiguous calls may return multiple candidates.\n- No live correctness validation \u2014 that's still the TypeScript compiler / test suite / linter's job. Codegraph supplements those with structural context they don't have.\n";
|
|
19
19
|
//# sourceMappingURL=server-instructions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-instructions.d.ts","sourceRoot":"","sources":["../../src/mcp/server-instructions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"server-instructions.d.ts","sourceRoot":"","sources":["../../src/mcp/server-instructions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,mBAAmB,wtGAiD/B,CAAC"}
|
|
@@ -25,6 +25,18 @@ in the workspace. Reads are sub-millisecond; the index lags writes by
|
|
|
25
25
|
about a second through the file watcher. Consult it BEFORE writing or
|
|
26
26
|
editing code, not during.
|
|
27
27
|
|
|
28
|
+
## Answer directly — don't delegate exploration
|
|
29
|
+
|
|
30
|
+
For "how does X work", architecture, trace, or where-is-X questions,
|
|
31
|
+
answer DIRECTLY using 2-3 codegraph calls: \`codegraph_context\` first,
|
|
32
|
+
then ONE \`codegraph_explore\` for the source of the symbols it surfaces.
|
|
33
|
+
Codegraph IS the pre-built search index — so delegating the lookup to a
|
|
34
|
+
separate file-reading sub-task/agent, or running your own grep + read
|
|
35
|
+
loop, repeats work codegraph already did and costs more for the same
|
|
36
|
+
answer. Reach for raw Read/Grep only to confirm a specific detail
|
|
37
|
+
codegraph didn't cover. A direct codegraph answer is typically a handful
|
|
38
|
+
of calls; a grep/read exploration is dozens.
|
|
39
|
+
|
|
28
40
|
## Tool selection by intent
|
|
29
41
|
|
|
30
42
|
- **"What is the symbol named X?"** → \`codegraph_search\`
|
|
@@ -33,7 +45,7 @@ editing code, not during.
|
|
|
33
45
|
- **"What does this call?"** → \`codegraph_callees\`
|
|
34
46
|
- **"What would changing this break?"** → \`codegraph_impact\`
|
|
35
47
|
- **"Show me this symbol's source / signature / docstring."** → \`codegraph_node\`
|
|
36
|
-
- **"
|
|
48
|
+
- **"Show me several related symbols' source / survey an area."** → \`codegraph_explore\` (ONE capped call; prefer over many codegraph_node/Read)
|
|
37
49
|
- **"What's in directory X?"** → \`codegraph_files\`
|
|
38
50
|
- **"Is the index ready / what's its size?"** → \`codegraph_status\`
|
|
39
51
|
|
|
@@ -47,7 +59,7 @@ editing code, not during.
|
|
|
47
59
|
|
|
48
60
|
- **Don't grep first** when looking up a symbol by name — \`codegraph_search\` is faster and returns kind + location + signature.
|
|
49
61
|
- **Don't chain \`codegraph_search\` + \`codegraph_node\`** when you just want context — \`codegraph_context\` is one round-trip.
|
|
50
|
-
- **Don't
|
|
62
|
+
- **Don't loop \`codegraph_node\` over many symbols** — one \`codegraph_explore\` call returns them all grouped by file, while each separate call re-reads the whole context and costs far more. Use \`codegraph_node\` for a single symbol.
|
|
51
63
|
- **Don't query the index immediately after editing a file** — the watcher needs ~500ms to debounce + sync. Wait for the next turn.
|
|
52
64
|
|
|
53
65
|
## Limitations
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-instructions.js","sourceRoot":"","sources":["../../src/mcp/server-instructions.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;GAgBG;AACU,QAAA,mBAAmB,GAAG
|
|
1
|
+
{"version":3,"file":"server-instructions.js","sourceRoot":"","sources":["../../src/mcp/server-instructions.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;GAgBG;AACU,QAAA,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDlC,CAAC"}
|