@mduenas/codegraph 0.4.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 +641 -0
- package/dist/bin/codegraph.d.ts +20 -0
- package/dist/bin/codegraph.d.ts.map +1 -0
- package/dist/bin/codegraph.js +704 -0
- package/dist/bin/codegraph.js.map +1 -0
- package/dist/config.d.ts +51 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +291 -0
- package/dist/config.js.map +1 -0
- package/dist/context/formatter.d.ts +30 -0
- package/dist/context/formatter.d.ts.map +1 -0
- package/dist/context/formatter.js +244 -0
- package/dist/context/formatter.js.map +1 -0
- package/dist/context/index.d.ts +86 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +402 -0
- package/dist/context/index.js.map +1 -0
- package/dist/db/index.d.ts +64 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +170 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrations.d.ts +44 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +105 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/db/queries.d.ts +148 -0
- package/dist/db/queries.d.ts.map +1 -0
- package/dist/db/queries.js +669 -0
- package/dist/db/queries.js.map +1 -0
- package/dist/directory.d.ts +45 -0
- package/dist/directory.d.ts.map +1 -0
- package/dist/directory.js +191 -0
- package/dist/directory.js.map +1 -0
- package/dist/errors.d.ts +136 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +219 -0
- package/dist/errors.js.map +1 -0
- package/dist/extraction/grammars.d.ts +36 -0
- package/dist/extraction/grammars.d.ts.map +1 -0
- package/dist/extraction/grammars.js +181 -0
- package/dist/extraction/grammars.js.map +1 -0
- package/dist/extraction/index.d.ts +91 -0
- package/dist/extraction/index.d.ts.map +1 -0
- package/dist/extraction/index.js +493 -0
- package/dist/extraction/index.js.map +1 -0
- package/dist/extraction/tree-sitter.d.ts +176 -0
- package/dist/extraction/tree-sitter.d.ts.map +1 -0
- package/dist/extraction/tree-sitter.js +1798 -0
- package/dist/extraction/tree-sitter.js.map +1 -0
- package/dist/graph/index.d.ts +8 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +13 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/queries.d.ts +106 -0
- package/dist/graph/queries.d.ts.map +1 -0
- package/dist/graph/queries.js +355 -0
- package/dist/graph/queries.js.map +1 -0
- package/dist/graph/traversal.d.ts +127 -0
- package/dist/graph/traversal.d.ts.map +1 -0
- package/dist/graph/traversal.js +465 -0
- package/dist/graph/traversal.js.map +1 -0
- package/dist/index.d.ts +496 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +818 -0
- package/dist/index.js.map +1 -0
- package/dist/installer/banner.d.ts +40 -0
- package/dist/installer/banner.d.ts.map +1 -0
- package/dist/installer/banner.js +162 -0
- package/dist/installer/banner.js.map +1 -0
- package/dist/installer/claude-md-template.d.ts +10 -0
- package/dist/installer/claude-md-template.d.ts.map +1 -0
- package/dist/installer/claude-md-template.js +46 -0
- package/dist/installer/claude-md-template.js.map +1 -0
- package/dist/installer/config-writer.d.ts +36 -0
- package/dist/installer/config-writer.d.ts.map +1 -0
- package/dist/installer/config-writer.js +282 -0
- package/dist/installer/config-writer.js.map +1 -0
- package/dist/installer/index.d.ts +13 -0
- package/dist/installer/index.d.ts.map +1 -0
- package/dist/installer/index.js +155 -0
- package/dist/installer/index.js.map +1 -0
- package/dist/installer/prompts.d.ts +18 -0
- package/dist/installer/prompts.d.ts.map +1 -0
- package/dist/installer/prompts.js +113 -0
- package/dist/installer/prompts.js.map +1 -0
- package/dist/mcp/index.d.ts +64 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +207 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/tools.d.ts +93 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +442 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/transport.d.ts +89 -0
- package/dist/mcp/transport.d.ts.map +1 -0
- package/dist/mcp/transport.js +170 -0
- package/dist/mcp/transport.js.map +1 -0
- package/dist/resolution/frameworks/csharp.d.ts +8 -0
- package/dist/resolution/frameworks/csharp.d.ts.map +1 -0
- package/dist/resolution/frameworks/csharp.js +274 -0
- package/dist/resolution/frameworks/csharp.js.map +1 -0
- package/dist/resolution/frameworks/express.d.ts +8 -0
- package/dist/resolution/frameworks/express.d.ts.map +1 -0
- package/dist/resolution/frameworks/express.js +208 -0
- package/dist/resolution/frameworks/express.js.map +1 -0
- package/dist/resolution/frameworks/go.d.ts +8 -0
- package/dist/resolution/frameworks/go.d.ts.map +1 -0
- package/dist/resolution/frameworks/go.js +225 -0
- package/dist/resolution/frameworks/go.js.map +1 -0
- package/dist/resolution/frameworks/index.d.ts +33 -0
- package/dist/resolution/frameworks/index.d.ts.map +1 -0
- package/dist/resolution/frameworks/index.js +113 -0
- package/dist/resolution/frameworks/index.js.map +1 -0
- package/dist/resolution/frameworks/java.d.ts +8 -0
- package/dist/resolution/frameworks/java.d.ts.map +1 -0
- package/dist/resolution/frameworks/java.js +239 -0
- package/dist/resolution/frameworks/java.js.map +1 -0
- package/dist/resolution/frameworks/laravel.d.ts +13 -0
- package/dist/resolution/frameworks/laravel.d.ts.map +1 -0
- package/dist/resolution/frameworks/laravel.js +198 -0
- package/dist/resolution/frameworks/laravel.js.map +1 -0
- package/dist/resolution/frameworks/python.d.ts +10 -0
- package/dist/resolution/frameworks/python.d.ts.map +1 -0
- package/dist/resolution/frameworks/python.js +331 -0
- package/dist/resolution/frameworks/python.js.map +1 -0
- package/dist/resolution/frameworks/react.d.ts +8 -0
- package/dist/resolution/frameworks/react.d.ts.map +1 -0
- package/dist/resolution/frameworks/react.js +294 -0
- package/dist/resolution/frameworks/react.js.map +1 -0
- package/dist/resolution/frameworks/ruby.d.ts +8 -0
- package/dist/resolution/frameworks/ruby.d.ts.map +1 -0
- package/dist/resolution/frameworks/ruby.js +262 -0
- package/dist/resolution/frameworks/ruby.js.map +1 -0
- package/dist/resolution/frameworks/rust.d.ts +8 -0
- package/dist/resolution/frameworks/rust.d.ts.map +1 -0
- package/dist/resolution/frameworks/rust.js +222 -0
- package/dist/resolution/frameworks/rust.js.map +1 -0
- package/dist/resolution/frameworks/swift.d.ts +10 -0
- package/dist/resolution/frameworks/swift.d.ts.map +1 -0
- package/dist/resolution/frameworks/swift.js +486 -0
- package/dist/resolution/frameworks/swift.js.map +1 -0
- package/dist/resolution/import-resolver.d.ts +20 -0
- package/dist/resolution/import-resolver.d.ts.map +1 -0
- package/dist/resolution/import-resolver.js +445 -0
- package/dist/resolution/import-resolver.js.map +1 -0
- package/dist/resolution/index.d.ts +72 -0
- package/dist/resolution/index.d.ts.map +1 -0
- package/dist/resolution/index.js +301 -0
- package/dist/resolution/index.js.map +1 -0
- package/dist/resolution/name-matcher.d.ts +27 -0
- package/dist/resolution/name-matcher.d.ts.map +1 -0
- package/dist/resolution/name-matcher.js +210 -0
- package/dist/resolution/name-matcher.js.map +1 -0
- package/dist/resolution/types.d.ts +108 -0
- package/dist/resolution/types.d.ts.map +1 -0
- package/dist/resolution/types.js +8 -0
- package/dist/resolution/types.js.map +1 -0
- package/dist/sync/git-hooks.d.ts +66 -0
- package/dist/sync/git-hooks.d.ts.map +1 -0
- package/dist/sync/git-hooks.js +281 -0
- package/dist/sync/git-hooks.js.map +1 -0
- package/dist/sync/index.d.ts +13 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +18 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/types.d.ts +410 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +165 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +116 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +295 -0
- package/dist/utils.js.map +1 -0
- package/dist/vectors/embedder.d.ts +140 -0
- package/dist/vectors/embedder.d.ts.map +1 -0
- package/dist/vectors/embedder.js +336 -0
- package/dist/vectors/embedder.js.map +1 -0
- package/dist/vectors/index.d.ts +9 -0
- package/dist/vectors/index.d.ts.map +1 -0
- package/dist/vectors/index.js +20 -0
- package/dist/vectors/index.js.map +1 -0
- package/dist/vectors/manager.d.ts +119 -0
- package/dist/vectors/manager.d.ts.map +1 -0
- package/dist/vectors/manager.js +274 -0
- package/dist/vectors/manager.js.map +1 -0
- package/dist/vectors/search.d.ts +134 -0
- package/dist/vectors/search.d.ts.map +1 -0
- package/dist/vectors/search.js +409 -0
- package/dist/vectors/search.js.map +1 -0
- package/package.json +67 -0
- package/scripts/postinstall.js +68 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CodeGraph Interactive Installer
|
|
3
|
+
*
|
|
4
|
+
* Provides a beautiful interactive CLI experience for setting up CodeGraph
|
|
5
|
+
* with Claude Code.
|
|
6
|
+
*/
|
|
7
|
+
import { InstallLocation } from './prompts';
|
|
8
|
+
/**
|
|
9
|
+
* Run the interactive installer
|
|
10
|
+
*/
|
|
11
|
+
export declare function runInstaller(): Promise<void>;
|
|
12
|
+
export { InstallLocation };
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAA0C,eAAe,EAAE,MAAM,WAAW,CAAC;AAWpF;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAoFlD;AA0DD,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CodeGraph Interactive Installer
|
|
4
|
+
*
|
|
5
|
+
* Provides a beautiful interactive CLI experience for setting up CodeGraph
|
|
6
|
+
* with Claude Code.
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.runInstaller = runInstaller;
|
|
13
|
+
const child_process_1 = require("child_process");
|
|
14
|
+
const banner_1 = require("./banner");
|
|
15
|
+
const prompts_1 = require("./prompts");
|
|
16
|
+
const config_writer_1 = require("./config-writer");
|
|
17
|
+
const index_1 = __importDefault(require("../index"));
|
|
18
|
+
/**
|
|
19
|
+
* Format a number with commas
|
|
20
|
+
*/
|
|
21
|
+
function formatNumber(n) {
|
|
22
|
+
return n.toLocaleString();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Run the interactive installer
|
|
26
|
+
*/
|
|
27
|
+
async function runInstaller() {
|
|
28
|
+
// Show the banner
|
|
29
|
+
(0, banner_1.showBanner)();
|
|
30
|
+
try {
|
|
31
|
+
// Step 1: Check if codegraph is available (skip install if already there)
|
|
32
|
+
let codegraphAvailable = false;
|
|
33
|
+
try {
|
|
34
|
+
(0, child_process_1.execSync)('which codegraph', { stdio: 'pipe' });
|
|
35
|
+
codegraphAvailable = true;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// Not installed globally yet
|
|
39
|
+
}
|
|
40
|
+
if (!codegraphAvailable) {
|
|
41
|
+
console.log(banner_1.chalk.dim(' Installing codegraph globally...'));
|
|
42
|
+
try {
|
|
43
|
+
(0, child_process_1.execSync)('npm install -g @colbymchenry/codegraph', { stdio: 'pipe' });
|
|
44
|
+
(0, banner_1.success)('Installed codegraph command globally');
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// May fail if no permissions, but that's ok - npx still works
|
|
48
|
+
(0, banner_1.info)('Could not install globally (try with sudo if needed)');
|
|
49
|
+
}
|
|
50
|
+
console.log();
|
|
51
|
+
}
|
|
52
|
+
// Step 2: Ask for installation location
|
|
53
|
+
const location = await (0, prompts_1.promptInstallLocation)();
|
|
54
|
+
console.log();
|
|
55
|
+
// Step 3: Write MCP configuration
|
|
56
|
+
const alreadyHasMcp = (0, config_writer_1.hasMcpConfig)(location);
|
|
57
|
+
(0, config_writer_1.writeMcpConfig)(location);
|
|
58
|
+
if (alreadyHasMcp) {
|
|
59
|
+
(0, banner_1.success)(`Updated MCP server in ${location === 'global' ? '~/.claude.json' : './.claude.json'}`);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
(0, banner_1.success)(`Added MCP server to ${location === 'global' ? '~/.claude.json' : './.claude.json'}`);
|
|
63
|
+
}
|
|
64
|
+
// Step 4: Ask about auto-allow permissions
|
|
65
|
+
const autoAllow = await (0, prompts_1.promptAutoAllow)();
|
|
66
|
+
console.log();
|
|
67
|
+
if (autoAllow) {
|
|
68
|
+
const alreadyHasPerms = (0, config_writer_1.hasPermissions)(location);
|
|
69
|
+
(0, config_writer_1.writePermissions)(location);
|
|
70
|
+
if (alreadyHasPerms) {
|
|
71
|
+
(0, banner_1.success)(`Updated permissions in ${location === 'global' ? '~/.claude/settings.json' : './.claude/settings.json'}`);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
(0, banner_1.success)(`Added permissions to ${location === 'global' ? '~/.claude/settings.json' : './.claude/settings.json'}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Step 5: Write CLAUDE.md instructions
|
|
78
|
+
const claudeMdResult = (0, config_writer_1.writeClaudeMd)(location);
|
|
79
|
+
const claudeMdPath = location === 'global' ? '~/.claude/CLAUDE.md' : './.claude/CLAUDE.md';
|
|
80
|
+
if (claudeMdResult.created) {
|
|
81
|
+
(0, banner_1.success)(`Created ${claudeMdPath} with CodeGraph instructions`);
|
|
82
|
+
}
|
|
83
|
+
else if (claudeMdResult.updated) {
|
|
84
|
+
(0, banner_1.success)(`Updated CodeGraph section in ${claudeMdPath}`);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
(0, banner_1.success)(`Added CodeGraph instructions to ${claudeMdPath}`);
|
|
88
|
+
}
|
|
89
|
+
// Step 6: For local install, initialize the project
|
|
90
|
+
if (location === 'local') {
|
|
91
|
+
await initializeLocalProject();
|
|
92
|
+
}
|
|
93
|
+
// Show next steps
|
|
94
|
+
(0, banner_1.showNextSteps)(location);
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
console.log();
|
|
98
|
+
if (err instanceof Error && err.message.includes('readline was closed')) {
|
|
99
|
+
// User cancelled with Ctrl+C
|
|
100
|
+
console.log(banner_1.chalk.dim(' Installation cancelled.'));
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
(0, banner_1.error)(`Installation failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
104
|
+
}
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Initialize CodeGraph in the current project (for local installs)
|
|
110
|
+
*/
|
|
111
|
+
async function initializeLocalProject() {
|
|
112
|
+
const projectPath = process.cwd();
|
|
113
|
+
// Check if already initialized
|
|
114
|
+
if (index_1.default.isInitialized(projectPath)) {
|
|
115
|
+
(0, banner_1.info)('CodeGraph already initialized in this project');
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
console.log();
|
|
119
|
+
console.log(banner_1.chalk.dim(' Initializing CodeGraph in current project...'));
|
|
120
|
+
// Initialize CodeGraph
|
|
121
|
+
const cg = await index_1.default.init(projectPath);
|
|
122
|
+
(0, banner_1.success)('Created .codegraph/ directory');
|
|
123
|
+
// Index the project
|
|
124
|
+
const result = await cg.indexAll({
|
|
125
|
+
onProgress: (progress) => {
|
|
126
|
+
// Simple progress indicator
|
|
127
|
+
const phaseNames = {
|
|
128
|
+
scanning: 'Scanning files',
|
|
129
|
+
parsing: 'Parsing code',
|
|
130
|
+
storing: 'Storing data',
|
|
131
|
+
resolving: 'Resolving refs',
|
|
132
|
+
};
|
|
133
|
+
const phaseName = phaseNames[progress.phase] || progress.phase;
|
|
134
|
+
const percent = progress.total > 0 ? Math.round((progress.current / progress.total) * 100) : 0;
|
|
135
|
+
process.stdout.write(`\r ${banner_1.chalk.dim(phaseName)}... ${percent}% `);
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
// Clear progress line
|
|
139
|
+
process.stdout.write('\r' + ' '.repeat(50) + '\r');
|
|
140
|
+
if (result.success) {
|
|
141
|
+
(0, banner_1.success)(`Indexed ${formatNumber(result.filesIndexed)} files (${formatNumber(result.nodesCreated)} symbols)`);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
(0, banner_1.success)(`Indexed ${formatNumber(result.filesIndexed)} files with ${result.errors.length} warnings`);
|
|
145
|
+
}
|
|
146
|
+
// Install git hooks if this is a git repository
|
|
147
|
+
if (cg.isGitRepository()) {
|
|
148
|
+
const hookResult = cg.installGitHooks();
|
|
149
|
+
if (hookResult.success) {
|
|
150
|
+
(0, banner_1.success)('Installed git post-commit hook');
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
cg.close();
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AAkBH,oCAoFC;AApGD,iDAAyC;AACzC,qCAAkF;AAClF,uCAAoF;AACpF,mDAAgH;AAChH,qDAAiC;AAEjC;;GAEG;AACH,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,YAAY;IAChC,kBAAkB;IAClB,IAAA,mBAAU,GAAE,CAAC;IAEb,IAAI,CAAC;QACH,0EAA0E;QAC1E,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC;YACH,IAAA,wBAAQ,EAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/C,kBAAkB,GAAG,IAAI,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAC;gBACH,IAAA,wBAAQ,EAAC,wCAAwC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBACtE,IAAA,gBAAO,EAAC,sCAAsC,CAAC,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,8DAA8D;gBAC9D,IAAA,aAAI,EAAC,sDAAsD,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,wCAAwC;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAA,+BAAqB,GAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,kCAAkC;QAClC,MAAM,aAAa,GAAG,IAAA,4BAAY,EAAC,QAAQ,CAAC,CAAC;QAC7C,IAAA,8BAAc,EAAC,QAAQ,CAAC,CAAC;QAEzB,IAAI,aAAa,EAAE,CAAC;YAClB,IAAA,gBAAO,EAAC,yBAAyB,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAClG,CAAC;aAAM,CAAC;YACN,IAAA,gBAAO,EAAC,uBAAuB,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAChG,CAAC;QAED,2CAA2C;QAC3C,MAAM,SAAS,GAAG,MAAM,IAAA,yBAAe,GAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,eAAe,GAAG,IAAA,8BAAc,EAAC,QAAQ,CAAC,CAAC;YACjD,IAAA,gCAAgB,EAAC,QAAQ,CAAC,CAAC;YAE3B,IAAI,eAAe,EAAE,CAAC;gBACpB,IAAA,gBAAO,EAAC,0BAA0B,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC,CAAC;YACrH,CAAC;iBAAM,CAAC;gBACN,IAAA,gBAAO,EAAC,wBAAwB,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC,CAAC;YACnH,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,MAAM,cAAc,GAAG,IAAA,6BAAa,EAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,qBAAqB,CAAC;QAE3F,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;YAC3B,IAAA,gBAAO,EAAC,WAAW,YAAY,8BAA8B,CAAC,CAAC;QACjE,CAAC;aAAM,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;YAClC,IAAA,gBAAO,EAAC,gCAAgC,YAAY,EAAE,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,IAAA,gBAAO,EAAC,mCAAmC,YAAY,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,oDAAoD;QACpD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,MAAM,sBAAsB,EAAE,CAAC;QACjC,CAAC;QAED,kBAAkB;QAClB,IAAA,sBAAa,EAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACxE,6BAA6B;YAC7B,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,IAAA,cAAK,EAAC,wBAAwB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,sBAAsB;IACnC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAElC,+BAA+B;IAC/B,IAAI,eAAS,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;QACzC,IAAA,aAAI,EAAC,+CAA+C,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;IAEzE,uBAAuB;IACvB,MAAM,EAAE,GAAG,MAAM,eAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7C,IAAA,gBAAO,EAAC,+BAA+B,CAAC,CAAC;IAEzC,oBAAoB;IACpB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC;QAC/B,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE;YACvB,4BAA4B;YAC5B,MAAM,UAAU,GAA2B;gBACzC,QAAQ,EAAE,gBAAgB;gBAC1B,OAAO,EAAE,cAAc;gBACvB,OAAO,EAAE,cAAc;gBACvB,SAAS,EAAE,gBAAgB;aAC5B,CAAC;YACF,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC;YAC/D,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,cAAK,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,OAAO,MAAM,CAAC,CAAC;QACxE,CAAC;KACF,CAAC,CAAC;IAEH,sBAAsB;IACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAEnD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,IAAA,gBAAO,EAAC,WAAW,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IAC/G,CAAC;SAAM,CAAC;QACN,IAAA,gBAAO,EAAC,WAAW,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,eAAe,MAAM,CAAC,MAAM,CAAC,MAAM,WAAW,CAAC,CAAC;IACtG,CAAC;IAED,gDAAgD;IAChD,IAAI,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC;QACxC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,IAAA,gBAAO,EAAC,gCAAgC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,EAAE,CAAC,KAAK,EAAE,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User prompts for the CodeGraph installer
|
|
3
|
+
* Uses built-in readline to avoid ESM issues with inquirer
|
|
4
|
+
*/
|
|
5
|
+
export type InstallLocation = 'global' | 'local';
|
|
6
|
+
/**
|
|
7
|
+
* Prompt for installation location (global or local)
|
|
8
|
+
*/
|
|
9
|
+
export declare function promptInstallLocation(): Promise<InstallLocation>;
|
|
10
|
+
/**
|
|
11
|
+
* Prompt for auto-allow permissions
|
|
12
|
+
*/
|
|
13
|
+
export declare function promptAutoAllow(): Promise<boolean>;
|
|
14
|
+
/**
|
|
15
|
+
* Prompt for confirmation (yes/no)
|
|
16
|
+
*/
|
|
17
|
+
export declare function promptConfirm(message: string, defaultYes?: boolean): Promise<boolean>;
|
|
18
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/installer/prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAC;AAuBjD;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,eAAe,CAAC,CAmBtE;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAiBxD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,GAAE,OAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAYjG"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* User prompts for the CodeGraph installer
|
|
4
|
+
* Uses built-in readline to avoid ESM issues with inquirer
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.promptInstallLocation = promptInstallLocation;
|
|
41
|
+
exports.promptAutoAllow = promptAutoAllow;
|
|
42
|
+
exports.promptConfirm = promptConfirm;
|
|
43
|
+
const readline = __importStar(require("readline"));
|
|
44
|
+
const banner_1 = require("./banner");
|
|
45
|
+
/**
|
|
46
|
+
* Create a readline interface for prompts
|
|
47
|
+
*/
|
|
48
|
+
function createInterface() {
|
|
49
|
+
return readline.createInterface({
|
|
50
|
+
input: process.stdin,
|
|
51
|
+
output: process.stdout,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Prompt the user with a question and return their answer
|
|
56
|
+
*/
|
|
57
|
+
function prompt(rl, question) {
|
|
58
|
+
return new Promise((resolve) => {
|
|
59
|
+
rl.question(question, (answer) => {
|
|
60
|
+
resolve(answer.trim());
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Prompt for installation location (global or local)
|
|
66
|
+
*/
|
|
67
|
+
async function promptInstallLocation() {
|
|
68
|
+
const rl = createInterface();
|
|
69
|
+
console.log(banner_1.chalk.bold(' Where would you like to install?'));
|
|
70
|
+
console.log();
|
|
71
|
+
console.log(' 1) Global (~/.claude) - available in all projects');
|
|
72
|
+
console.log(' 2) Local (./.claude) - this project only');
|
|
73
|
+
console.log();
|
|
74
|
+
const answer = await prompt(rl, ' Choice [1]: ');
|
|
75
|
+
rl.close();
|
|
76
|
+
// Default to '1' if empty, parse the answer
|
|
77
|
+
const choice = answer === '' ? '1' : answer;
|
|
78
|
+
if (choice === '2') {
|
|
79
|
+
return 'local';
|
|
80
|
+
}
|
|
81
|
+
return 'global';
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Prompt for auto-allow permissions
|
|
85
|
+
*/
|
|
86
|
+
async function promptAutoAllow() {
|
|
87
|
+
const rl = createInterface();
|
|
88
|
+
console.log();
|
|
89
|
+
console.log(banner_1.chalk.bold(' Auto-allow CodeGraph commands?') + banner_1.chalk.dim(' (Skips permission prompts)'));
|
|
90
|
+
console.log();
|
|
91
|
+
console.log(' 1) Yes - auto-approve all codegraph_* tools');
|
|
92
|
+
console.log(' 2) No - ask for permission each time');
|
|
93
|
+
console.log();
|
|
94
|
+
const answer = await prompt(rl, ' Choice [1]: ');
|
|
95
|
+
rl.close();
|
|
96
|
+
// Default to '1' if empty
|
|
97
|
+
const choice = answer === '' ? '1' : answer;
|
|
98
|
+
return choice !== '2';
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Prompt for confirmation (yes/no)
|
|
102
|
+
*/
|
|
103
|
+
async function promptConfirm(message, defaultYes = true) {
|
|
104
|
+
const rl = createInterface();
|
|
105
|
+
const defaultStr = defaultYes ? 'Y/n' : 'y/N';
|
|
106
|
+
const answer = await prompt(rl, ` ${message} [${defaultStr}]: `);
|
|
107
|
+
rl.close();
|
|
108
|
+
if (answer === '') {
|
|
109
|
+
return defaultYes;
|
|
110
|
+
}
|
|
111
|
+
return answer.toLowerCase().startsWith('y');
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/installer/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CodeGraph MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Model Context Protocol server that exposes CodeGraph functionality
|
|
5
|
+
* as tools for AI assistants like Claude.
|
|
6
|
+
*
|
|
7
|
+
* @module mcp
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { MCPServer } from 'codegraph';
|
|
12
|
+
*
|
|
13
|
+
* const server = new MCPServer('/path/to/project');
|
|
14
|
+
* await server.start();
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* MCP Server for CodeGraph
|
|
19
|
+
*
|
|
20
|
+
* Implements the Model Context Protocol to expose CodeGraph
|
|
21
|
+
* functionality as tools that can be called by AI assistants.
|
|
22
|
+
*/
|
|
23
|
+
export declare class MCPServer {
|
|
24
|
+
private transport;
|
|
25
|
+
private cg;
|
|
26
|
+
private toolHandler;
|
|
27
|
+
private projectPath;
|
|
28
|
+
private initError;
|
|
29
|
+
constructor(projectPath?: string);
|
|
30
|
+
/**
|
|
31
|
+
* Start the MCP server
|
|
32
|
+
*
|
|
33
|
+
* Note: CodeGraph initialization is deferred until the initialize request
|
|
34
|
+
* is received, which includes the rootUri from the client.
|
|
35
|
+
*/
|
|
36
|
+
start(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Initialize CodeGraph for the project
|
|
39
|
+
*/
|
|
40
|
+
private initializeCodeGraph;
|
|
41
|
+
/**
|
|
42
|
+
* Stop the server
|
|
43
|
+
*/
|
|
44
|
+
stop(): void;
|
|
45
|
+
/**
|
|
46
|
+
* Handle incoming JSON-RPC messages
|
|
47
|
+
*/
|
|
48
|
+
private handleMessage;
|
|
49
|
+
/**
|
|
50
|
+
* Handle initialize request
|
|
51
|
+
*/
|
|
52
|
+
private handleInitialize;
|
|
53
|
+
/**
|
|
54
|
+
* Handle tools/list request
|
|
55
|
+
*/
|
|
56
|
+
private handleToolsList;
|
|
57
|
+
/**
|
|
58
|
+
* Handle tools/call request
|
|
59
|
+
*/
|
|
60
|
+
private handleToolsCall;
|
|
61
|
+
}
|
|
62
|
+
export { StdioTransport } from './transport';
|
|
63
|
+
export { tools, ToolHandler } from './tools';
|
|
64
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAmBH;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,SAAS,CAAuB;gBAE5B,WAAW,CAAC,EAAE,MAAM;IAKhC;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B;;OAEG;YACW,mBAAmB;IAiBjC;;OAEG;IACH,IAAI,IAAI,IAAI;IASZ;;OAEG;YACW,aAAa;IA6C3B;;OAEG;YACW,gBAAgB;IAkC9B;;OAEG;YACW,eAAe;IAM7B;;OAEG;YACW,eAAe;CA+C9B;AAGD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CodeGraph MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Model Context Protocol server that exposes CodeGraph functionality
|
|
6
|
+
* as tools for AI assistants like Claude.
|
|
7
|
+
*
|
|
8
|
+
* @module mcp
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { MCPServer } from 'codegraph';
|
|
13
|
+
*
|
|
14
|
+
* const server = new MCPServer('/path/to/project');
|
|
15
|
+
* await server.start();
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
19
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.ToolHandler = exports.tools = exports.StdioTransport = exports.MCPServer = void 0;
|
|
23
|
+
const index_1 = __importDefault(require("../index"));
|
|
24
|
+
const transport_1 = require("./transport");
|
|
25
|
+
const tools_1 = require("./tools");
|
|
26
|
+
/**
|
|
27
|
+
* MCP Server Info
|
|
28
|
+
*/
|
|
29
|
+
const SERVER_INFO = {
|
|
30
|
+
name: 'codegraph',
|
|
31
|
+
version: '0.1.0',
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* MCP Protocol Version
|
|
35
|
+
*/
|
|
36
|
+
const PROTOCOL_VERSION = '2024-11-05';
|
|
37
|
+
/**
|
|
38
|
+
* MCP Server for CodeGraph
|
|
39
|
+
*
|
|
40
|
+
* Implements the Model Context Protocol to expose CodeGraph
|
|
41
|
+
* functionality as tools that can be called by AI assistants.
|
|
42
|
+
*/
|
|
43
|
+
class MCPServer {
|
|
44
|
+
transport;
|
|
45
|
+
cg = null;
|
|
46
|
+
toolHandler = null;
|
|
47
|
+
projectPath;
|
|
48
|
+
initError = null;
|
|
49
|
+
constructor(projectPath) {
|
|
50
|
+
this.projectPath = projectPath || null;
|
|
51
|
+
this.transport = new transport_1.StdioTransport();
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Start the MCP server
|
|
55
|
+
*
|
|
56
|
+
* Note: CodeGraph initialization is deferred until the initialize request
|
|
57
|
+
* is received, which includes the rootUri from the client.
|
|
58
|
+
*/
|
|
59
|
+
async start() {
|
|
60
|
+
// Start listening for messages immediately - don't check initialization yet
|
|
61
|
+
// We'll get the project path from the initialize request's rootUri
|
|
62
|
+
this.transport.start(this.handleMessage.bind(this));
|
|
63
|
+
// Keep the process running
|
|
64
|
+
process.on('SIGINT', () => this.stop());
|
|
65
|
+
process.on('SIGTERM', () => this.stop());
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Initialize CodeGraph for the project
|
|
69
|
+
*/
|
|
70
|
+
async initializeCodeGraph(projectPath) {
|
|
71
|
+
this.projectPath = projectPath;
|
|
72
|
+
if (!index_1.default.isInitialized(projectPath)) {
|
|
73
|
+
this.initError = `CodeGraph not initialized in ${projectPath}. Run 'codegraph init' first.`;
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
this.cg = await index_1.default.open(projectPath);
|
|
78
|
+
this.toolHandler = new tools_1.ToolHandler(this.cg);
|
|
79
|
+
this.initError = null;
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
this.initError = `Failed to open CodeGraph: ${err instanceof Error ? err.message : String(err)}`;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Stop the server
|
|
87
|
+
*/
|
|
88
|
+
stop() {
|
|
89
|
+
if (this.cg) {
|
|
90
|
+
this.cg.close();
|
|
91
|
+
this.cg = null;
|
|
92
|
+
}
|
|
93
|
+
this.transport.stop();
|
|
94
|
+
process.exit(0);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Handle incoming JSON-RPC messages
|
|
98
|
+
*/
|
|
99
|
+
async handleMessage(message) {
|
|
100
|
+
// Check if it's a request (has id) or notification (no id)
|
|
101
|
+
const isRequest = 'id' in message;
|
|
102
|
+
switch (message.method) {
|
|
103
|
+
case 'initialize':
|
|
104
|
+
if (isRequest) {
|
|
105
|
+
await this.handleInitialize(message);
|
|
106
|
+
}
|
|
107
|
+
break;
|
|
108
|
+
case 'initialized':
|
|
109
|
+
// Notification that client has finished initialization
|
|
110
|
+
// No action needed - the client is ready
|
|
111
|
+
break;
|
|
112
|
+
case 'tools/list':
|
|
113
|
+
if (isRequest) {
|
|
114
|
+
await this.handleToolsList(message);
|
|
115
|
+
}
|
|
116
|
+
break;
|
|
117
|
+
case 'tools/call':
|
|
118
|
+
if (isRequest) {
|
|
119
|
+
await this.handleToolsCall(message);
|
|
120
|
+
}
|
|
121
|
+
break;
|
|
122
|
+
case 'ping':
|
|
123
|
+
if (isRequest) {
|
|
124
|
+
this.transport.sendResult(message.id, {});
|
|
125
|
+
}
|
|
126
|
+
break;
|
|
127
|
+
default:
|
|
128
|
+
if (isRequest) {
|
|
129
|
+
this.transport.sendError(message.id, transport_1.ErrorCodes.MethodNotFound, `Method not found: ${message.method}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Handle initialize request
|
|
135
|
+
*/
|
|
136
|
+
async handleInitialize(request) {
|
|
137
|
+
const params = request.params;
|
|
138
|
+
// Extract project path from rootUri or workspaceFolders
|
|
139
|
+
let projectPath = this.projectPath;
|
|
140
|
+
if (params?.rootUri) {
|
|
141
|
+
// Convert file:// URI to path
|
|
142
|
+
projectPath = params.rootUri.replace(/^file:\/\//, '');
|
|
143
|
+
}
|
|
144
|
+
else if (params?.workspaceFolders?.[0]?.uri) {
|
|
145
|
+
projectPath = params.workspaceFolders[0].uri.replace(/^file:\/\//, '');
|
|
146
|
+
}
|
|
147
|
+
// Fall back to current working directory if no path provided
|
|
148
|
+
if (!projectPath) {
|
|
149
|
+
projectPath = process.cwd();
|
|
150
|
+
}
|
|
151
|
+
// Initialize CodeGraph if we have a project path
|
|
152
|
+
await this.initializeCodeGraph(projectPath);
|
|
153
|
+
// We accept the client's protocol version but respond with our supported version
|
|
154
|
+
this.transport.sendResult(request.id, {
|
|
155
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
156
|
+
capabilities: {
|
|
157
|
+
tools: {},
|
|
158
|
+
},
|
|
159
|
+
serverInfo: SERVER_INFO,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Handle tools/list request
|
|
164
|
+
*/
|
|
165
|
+
async handleToolsList(request) {
|
|
166
|
+
this.transport.sendResult(request.id, {
|
|
167
|
+
tools: tools_1.tools,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Handle tools/call request
|
|
172
|
+
*/
|
|
173
|
+
async handleToolsCall(request) {
|
|
174
|
+
const params = request.params;
|
|
175
|
+
if (!params || !params.name) {
|
|
176
|
+
this.transport.sendError(request.id, transport_1.ErrorCodes.InvalidParams, 'Missing tool name');
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const toolName = params.name;
|
|
180
|
+
const toolArgs = params.arguments || {};
|
|
181
|
+
// Validate tool exists
|
|
182
|
+
const tool = tools_1.tools.find(t => t.name === toolName);
|
|
183
|
+
if (!tool) {
|
|
184
|
+
this.transport.sendError(request.id, transport_1.ErrorCodes.InvalidParams, `Unknown tool: ${toolName}`);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
// Execute the tool
|
|
188
|
+
if (!this.toolHandler) {
|
|
189
|
+
const errorMsg = this.initError ||
|
|
190
|
+
(this.projectPath
|
|
191
|
+
? `CodeGraph not initialized in ${this.projectPath}. Run 'codegraph init' first.`
|
|
192
|
+
: 'No project path provided. Ensure Claude Code is running in a project directory.');
|
|
193
|
+
this.transport.sendError(request.id, transport_1.ErrorCodes.InternalError, errorMsg);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
const result = await this.toolHandler.execute(toolName, toolArgs);
|
|
197
|
+
this.transport.sendResult(request.id, result);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
exports.MCPServer = MCPServer;
|
|
201
|
+
// Export for use in CLI
|
|
202
|
+
var transport_2 = require("./transport");
|
|
203
|
+
Object.defineProperty(exports, "StdioTransport", { enumerable: true, get: function () { return transport_2.StdioTransport; } });
|
|
204
|
+
var tools_2 = require("./tools");
|
|
205
|
+
Object.defineProperty(exports, "tools", { enumerable: true, get: function () { return tools_2.tools; } });
|
|
206
|
+
Object.defineProperty(exports, "ToolHandler", { enumerable: true, get: function () { return tools_2.ToolHandler; } });
|
|
207
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
|