@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.
Files changed (192) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +641 -0
  3. package/dist/bin/codegraph.d.ts +20 -0
  4. package/dist/bin/codegraph.d.ts.map +1 -0
  5. package/dist/bin/codegraph.js +704 -0
  6. package/dist/bin/codegraph.js.map +1 -0
  7. package/dist/config.d.ts +51 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +291 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/context/formatter.d.ts +30 -0
  12. package/dist/context/formatter.d.ts.map +1 -0
  13. package/dist/context/formatter.js +244 -0
  14. package/dist/context/formatter.js.map +1 -0
  15. package/dist/context/index.d.ts +86 -0
  16. package/dist/context/index.d.ts.map +1 -0
  17. package/dist/context/index.js +402 -0
  18. package/dist/context/index.js.map +1 -0
  19. package/dist/db/index.d.ts +64 -0
  20. package/dist/db/index.d.ts.map +1 -0
  21. package/dist/db/index.js +170 -0
  22. package/dist/db/index.js.map +1 -0
  23. package/dist/db/migrations.d.ts +44 -0
  24. package/dist/db/migrations.d.ts.map +1 -0
  25. package/dist/db/migrations.js +105 -0
  26. package/dist/db/migrations.js.map +1 -0
  27. package/dist/db/queries.d.ts +148 -0
  28. package/dist/db/queries.d.ts.map +1 -0
  29. package/dist/db/queries.js +669 -0
  30. package/dist/db/queries.js.map +1 -0
  31. package/dist/directory.d.ts +45 -0
  32. package/dist/directory.d.ts.map +1 -0
  33. package/dist/directory.js +191 -0
  34. package/dist/directory.js.map +1 -0
  35. package/dist/errors.d.ts +136 -0
  36. package/dist/errors.d.ts.map +1 -0
  37. package/dist/errors.js +219 -0
  38. package/dist/errors.js.map +1 -0
  39. package/dist/extraction/grammars.d.ts +36 -0
  40. package/dist/extraction/grammars.d.ts.map +1 -0
  41. package/dist/extraction/grammars.js +181 -0
  42. package/dist/extraction/grammars.js.map +1 -0
  43. package/dist/extraction/index.d.ts +91 -0
  44. package/dist/extraction/index.d.ts.map +1 -0
  45. package/dist/extraction/index.js +493 -0
  46. package/dist/extraction/index.js.map +1 -0
  47. package/dist/extraction/tree-sitter.d.ts +176 -0
  48. package/dist/extraction/tree-sitter.d.ts.map +1 -0
  49. package/dist/extraction/tree-sitter.js +1798 -0
  50. package/dist/extraction/tree-sitter.js.map +1 -0
  51. package/dist/graph/index.d.ts +8 -0
  52. package/dist/graph/index.d.ts.map +1 -0
  53. package/dist/graph/index.js +13 -0
  54. package/dist/graph/index.js.map +1 -0
  55. package/dist/graph/queries.d.ts +106 -0
  56. package/dist/graph/queries.d.ts.map +1 -0
  57. package/dist/graph/queries.js +355 -0
  58. package/dist/graph/queries.js.map +1 -0
  59. package/dist/graph/traversal.d.ts +127 -0
  60. package/dist/graph/traversal.d.ts.map +1 -0
  61. package/dist/graph/traversal.js +465 -0
  62. package/dist/graph/traversal.js.map +1 -0
  63. package/dist/index.d.ts +496 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +818 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/installer/banner.d.ts +40 -0
  68. package/dist/installer/banner.d.ts.map +1 -0
  69. package/dist/installer/banner.js +162 -0
  70. package/dist/installer/banner.js.map +1 -0
  71. package/dist/installer/claude-md-template.d.ts +10 -0
  72. package/dist/installer/claude-md-template.d.ts.map +1 -0
  73. package/dist/installer/claude-md-template.js +46 -0
  74. package/dist/installer/claude-md-template.js.map +1 -0
  75. package/dist/installer/config-writer.d.ts +36 -0
  76. package/dist/installer/config-writer.d.ts.map +1 -0
  77. package/dist/installer/config-writer.js +282 -0
  78. package/dist/installer/config-writer.js.map +1 -0
  79. package/dist/installer/index.d.ts +13 -0
  80. package/dist/installer/index.d.ts.map +1 -0
  81. package/dist/installer/index.js +155 -0
  82. package/dist/installer/index.js.map +1 -0
  83. package/dist/installer/prompts.d.ts +18 -0
  84. package/dist/installer/prompts.d.ts.map +1 -0
  85. package/dist/installer/prompts.js +113 -0
  86. package/dist/installer/prompts.js.map +1 -0
  87. package/dist/mcp/index.d.ts +64 -0
  88. package/dist/mcp/index.d.ts.map +1 -0
  89. package/dist/mcp/index.js +207 -0
  90. package/dist/mcp/index.js.map +1 -0
  91. package/dist/mcp/tools.d.ts +93 -0
  92. package/dist/mcp/tools.d.ts.map +1 -0
  93. package/dist/mcp/tools.js +442 -0
  94. package/dist/mcp/tools.js.map +1 -0
  95. package/dist/mcp/transport.d.ts +89 -0
  96. package/dist/mcp/transport.d.ts.map +1 -0
  97. package/dist/mcp/transport.js +170 -0
  98. package/dist/mcp/transport.js.map +1 -0
  99. package/dist/resolution/frameworks/csharp.d.ts +8 -0
  100. package/dist/resolution/frameworks/csharp.d.ts.map +1 -0
  101. package/dist/resolution/frameworks/csharp.js +274 -0
  102. package/dist/resolution/frameworks/csharp.js.map +1 -0
  103. package/dist/resolution/frameworks/express.d.ts +8 -0
  104. package/dist/resolution/frameworks/express.d.ts.map +1 -0
  105. package/dist/resolution/frameworks/express.js +208 -0
  106. package/dist/resolution/frameworks/express.js.map +1 -0
  107. package/dist/resolution/frameworks/go.d.ts +8 -0
  108. package/dist/resolution/frameworks/go.d.ts.map +1 -0
  109. package/dist/resolution/frameworks/go.js +225 -0
  110. package/dist/resolution/frameworks/go.js.map +1 -0
  111. package/dist/resolution/frameworks/index.d.ts +33 -0
  112. package/dist/resolution/frameworks/index.d.ts.map +1 -0
  113. package/dist/resolution/frameworks/index.js +113 -0
  114. package/dist/resolution/frameworks/index.js.map +1 -0
  115. package/dist/resolution/frameworks/java.d.ts +8 -0
  116. package/dist/resolution/frameworks/java.d.ts.map +1 -0
  117. package/dist/resolution/frameworks/java.js +239 -0
  118. package/dist/resolution/frameworks/java.js.map +1 -0
  119. package/dist/resolution/frameworks/laravel.d.ts +13 -0
  120. package/dist/resolution/frameworks/laravel.d.ts.map +1 -0
  121. package/dist/resolution/frameworks/laravel.js +198 -0
  122. package/dist/resolution/frameworks/laravel.js.map +1 -0
  123. package/dist/resolution/frameworks/python.d.ts +10 -0
  124. package/dist/resolution/frameworks/python.d.ts.map +1 -0
  125. package/dist/resolution/frameworks/python.js +331 -0
  126. package/dist/resolution/frameworks/python.js.map +1 -0
  127. package/dist/resolution/frameworks/react.d.ts +8 -0
  128. package/dist/resolution/frameworks/react.d.ts.map +1 -0
  129. package/dist/resolution/frameworks/react.js +294 -0
  130. package/dist/resolution/frameworks/react.js.map +1 -0
  131. package/dist/resolution/frameworks/ruby.d.ts +8 -0
  132. package/dist/resolution/frameworks/ruby.d.ts.map +1 -0
  133. package/dist/resolution/frameworks/ruby.js +262 -0
  134. package/dist/resolution/frameworks/ruby.js.map +1 -0
  135. package/dist/resolution/frameworks/rust.d.ts +8 -0
  136. package/dist/resolution/frameworks/rust.d.ts.map +1 -0
  137. package/dist/resolution/frameworks/rust.js +222 -0
  138. package/dist/resolution/frameworks/rust.js.map +1 -0
  139. package/dist/resolution/frameworks/swift.d.ts +10 -0
  140. package/dist/resolution/frameworks/swift.d.ts.map +1 -0
  141. package/dist/resolution/frameworks/swift.js +486 -0
  142. package/dist/resolution/frameworks/swift.js.map +1 -0
  143. package/dist/resolution/import-resolver.d.ts +20 -0
  144. package/dist/resolution/import-resolver.d.ts.map +1 -0
  145. package/dist/resolution/import-resolver.js +445 -0
  146. package/dist/resolution/import-resolver.js.map +1 -0
  147. package/dist/resolution/index.d.ts +72 -0
  148. package/dist/resolution/index.d.ts.map +1 -0
  149. package/dist/resolution/index.js +301 -0
  150. package/dist/resolution/index.js.map +1 -0
  151. package/dist/resolution/name-matcher.d.ts +27 -0
  152. package/dist/resolution/name-matcher.d.ts.map +1 -0
  153. package/dist/resolution/name-matcher.js +210 -0
  154. package/dist/resolution/name-matcher.js.map +1 -0
  155. package/dist/resolution/types.d.ts +108 -0
  156. package/dist/resolution/types.d.ts.map +1 -0
  157. package/dist/resolution/types.js +8 -0
  158. package/dist/resolution/types.js.map +1 -0
  159. package/dist/sync/git-hooks.d.ts +66 -0
  160. package/dist/sync/git-hooks.d.ts.map +1 -0
  161. package/dist/sync/git-hooks.js +281 -0
  162. package/dist/sync/git-hooks.js.map +1 -0
  163. package/dist/sync/index.d.ts +13 -0
  164. package/dist/sync/index.d.ts.map +1 -0
  165. package/dist/sync/index.js +18 -0
  166. package/dist/sync/index.js.map +1 -0
  167. package/dist/types.d.ts +410 -0
  168. package/dist/types.d.ts.map +1 -0
  169. package/dist/types.js +165 -0
  170. package/dist/types.js.map +1 -0
  171. package/dist/utils.d.ts +116 -0
  172. package/dist/utils.d.ts.map +1 -0
  173. package/dist/utils.js +295 -0
  174. package/dist/utils.js.map +1 -0
  175. package/dist/vectors/embedder.d.ts +140 -0
  176. package/dist/vectors/embedder.d.ts.map +1 -0
  177. package/dist/vectors/embedder.js +336 -0
  178. package/dist/vectors/embedder.js.map +1 -0
  179. package/dist/vectors/index.d.ts +9 -0
  180. package/dist/vectors/index.d.ts.map +1 -0
  181. package/dist/vectors/index.js +20 -0
  182. package/dist/vectors/index.js.map +1 -0
  183. package/dist/vectors/manager.d.ts +119 -0
  184. package/dist/vectors/manager.d.ts.map +1 -0
  185. package/dist/vectors/manager.js +274 -0
  186. package/dist/vectors/manager.js.map +1 -0
  187. package/dist/vectors/search.d.ts +134 -0
  188. package/dist/vectors/search.d.ts.map +1 -0
  189. package/dist/vectors/search.js +409 -0
  190. package/dist/vectors/search.js.map +1 -0
  191. package/package.json +67 -0
  192. package/scripts/postinstall.js +68 -0
@@ -0,0 +1,93 @@
1
+ /**
2
+ * MCP Tool Definitions
3
+ *
4
+ * Defines the tools exposed by the CodeGraph MCP server.
5
+ */
6
+ import CodeGraph from '../index';
7
+ /**
8
+ * MCP Tool definition
9
+ */
10
+ export interface ToolDefinition {
11
+ name: string;
12
+ description: string;
13
+ inputSchema: {
14
+ type: 'object';
15
+ properties: Record<string, PropertySchema>;
16
+ required?: string[];
17
+ };
18
+ }
19
+ interface PropertySchema {
20
+ type: string;
21
+ description: string;
22
+ enum?: string[];
23
+ default?: unknown;
24
+ }
25
+ /**
26
+ * Tool execution result
27
+ */
28
+ export interface ToolResult {
29
+ content: Array<{
30
+ type: 'text';
31
+ text: string;
32
+ }>;
33
+ isError?: boolean;
34
+ }
35
+ /**
36
+ * All CodeGraph MCP tools
37
+ *
38
+ * Designed for minimal context usage - use codegraph_context as the primary tool,
39
+ * and only use other tools for targeted follow-up queries.
40
+ */
41
+ export declare const tools: ToolDefinition[];
42
+ /**
43
+ * Tool handler that executes tools against a CodeGraph instance
44
+ */
45
+ export declare class ToolHandler {
46
+ private cg;
47
+ constructor(cg: CodeGraph);
48
+ /**
49
+ * Execute a tool by name
50
+ */
51
+ execute(toolName: string, args: Record<string, unknown>): Promise<ToolResult>;
52
+ /**
53
+ * Handle codegraph_search
54
+ */
55
+ private handleSearch;
56
+ /**
57
+ * Handle codegraph_context
58
+ */
59
+ private handleContext;
60
+ /**
61
+ * Heuristic to detect if a query looks like a feature request
62
+ */
63
+ private looksLikeFeatureRequest;
64
+ /**
65
+ * Handle codegraph_callers
66
+ */
67
+ private handleCallers;
68
+ /**
69
+ * Handle codegraph_callees
70
+ */
71
+ private handleCallees;
72
+ /**
73
+ * Handle codegraph_impact
74
+ */
75
+ private handleImpact;
76
+ /**
77
+ * Handle codegraph_node
78
+ */
79
+ private handleNode;
80
+ /**
81
+ * Handle codegraph_status
82
+ */
83
+ private handleStatus;
84
+ private formatSearchResults;
85
+ private formatNodeList;
86
+ private formatImpact;
87
+ private formatNodeDetails;
88
+ private formatTaskContext;
89
+ private textResult;
90
+ private errorResult;
91
+ }
92
+ export {};
93
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,SAAS,MAAM,UAAU,CAAC;AAGjC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC3C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,eAAO,MAAM,KAAK,EAAE,cAAc,EAqIjC,CAAC;AAEF;;GAEG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,SAAS;IAEjC;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAyBnF;;OAEG;YACW,YAAY;IAkB1B;;OAEG;YACW,aAAa;IA0B3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAyB/B;;OAEG;YACW,aAAa;IAuB3B;;OAEG;YACW,aAAa;IAuB3B;;OAEG;YACW,YAAY;IAiB1B;;OAEG;YACW,UAAU;IAsBxB;;OAEG;YACW,YAAY;IAkC1B,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,YAAY;IA4BpB,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,WAAW;CAMpB"}
@@ -0,0 +1,442 @@
1
+ "use strict";
2
+ /**
3
+ * MCP Tool Definitions
4
+ *
5
+ * Defines the tools exposed by the CodeGraph MCP server.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.ToolHandler = exports.tools = void 0;
9
+ /**
10
+ * All CodeGraph MCP tools
11
+ *
12
+ * Designed for minimal context usage - use codegraph_context as the primary tool,
13
+ * and only use other tools for targeted follow-up queries.
14
+ */
15
+ exports.tools = [
16
+ {
17
+ name: 'codegraph_search',
18
+ description: 'Quick symbol search by name. Returns locations only (no code). Use codegraph_context instead for comprehensive task context.',
19
+ inputSchema: {
20
+ type: 'object',
21
+ properties: {
22
+ query: {
23
+ type: 'string',
24
+ description: 'Symbol name or partial name (e.g., "auth", "signIn", "UserService")',
25
+ },
26
+ kind: {
27
+ type: 'string',
28
+ description: 'Filter by node kind',
29
+ enum: ['function', 'method', 'class', 'interface', 'type', 'variable', 'route', 'component'],
30
+ },
31
+ limit: {
32
+ type: 'number',
33
+ description: 'Maximum results (default: 10)',
34
+ default: 10,
35
+ },
36
+ },
37
+ required: ['query'],
38
+ },
39
+ },
40
+ {
41
+ name: 'codegraph_context',
42
+ description: 'PRIMARY TOOL: Build comprehensive context for a task. Returns entry points, related symbols, and key code - often enough to understand the codebase without additional tool calls. NOTE: This provides CODE context, not product requirements. For new features, still clarify UX/behavior questions with the user before implementing.',
43
+ inputSchema: {
44
+ type: 'object',
45
+ properties: {
46
+ task: {
47
+ type: 'string',
48
+ description: 'Description of the task, bug, or feature to build context for',
49
+ },
50
+ maxNodes: {
51
+ type: 'number',
52
+ description: 'Maximum symbols to include (default: 20)',
53
+ default: 20,
54
+ },
55
+ includeCode: {
56
+ type: 'boolean',
57
+ description: 'Include code snippets for key symbols (default: true)',
58
+ default: true,
59
+ },
60
+ },
61
+ required: ['task'],
62
+ },
63
+ },
64
+ {
65
+ name: 'codegraph_callers',
66
+ description: 'Find all functions/methods that call a specific symbol. Useful for understanding usage patterns and impact of changes.',
67
+ inputSchema: {
68
+ type: 'object',
69
+ properties: {
70
+ symbol: {
71
+ type: 'string',
72
+ description: 'Name of the function, method, or class to find callers for',
73
+ },
74
+ limit: {
75
+ type: 'number',
76
+ description: 'Maximum number of callers to return (default: 20)',
77
+ default: 20,
78
+ },
79
+ },
80
+ required: ['symbol'],
81
+ },
82
+ },
83
+ {
84
+ name: 'codegraph_callees',
85
+ description: 'Find all functions/methods that a specific symbol calls. Useful for understanding dependencies and code flow.',
86
+ inputSchema: {
87
+ type: 'object',
88
+ properties: {
89
+ symbol: {
90
+ type: 'string',
91
+ description: 'Name of the function, method, or class to find callees for',
92
+ },
93
+ limit: {
94
+ type: 'number',
95
+ description: 'Maximum number of callees to return (default: 20)',
96
+ default: 20,
97
+ },
98
+ },
99
+ required: ['symbol'],
100
+ },
101
+ },
102
+ {
103
+ name: 'codegraph_impact',
104
+ description: 'Analyze the impact radius of changing a symbol. Shows what code could be affected by modifications.',
105
+ inputSchema: {
106
+ type: 'object',
107
+ properties: {
108
+ symbol: {
109
+ type: 'string',
110
+ description: 'Name of the symbol to analyze impact for',
111
+ },
112
+ depth: {
113
+ type: 'number',
114
+ description: 'How many levels of dependencies to traverse (default: 2)',
115
+ default: 2,
116
+ },
117
+ },
118
+ required: ['symbol'],
119
+ },
120
+ },
121
+ {
122
+ name: 'codegraph_node',
123
+ description: 'Get detailed information about a specific code symbol. Use includeCode=true only when you need the full source code - otherwise just get location and signature to minimize context usage.',
124
+ inputSchema: {
125
+ type: 'object',
126
+ properties: {
127
+ symbol: {
128
+ type: 'string',
129
+ description: 'Name of the symbol to get details for',
130
+ },
131
+ includeCode: {
132
+ type: 'boolean',
133
+ description: 'Include full source code (default: false to minimize context)',
134
+ default: false,
135
+ },
136
+ },
137
+ required: ['symbol'],
138
+ },
139
+ },
140
+ {
141
+ name: 'codegraph_status',
142
+ description: 'Get the status of the CodeGraph index, including statistics about indexed files, nodes, and edges.',
143
+ inputSchema: {
144
+ type: 'object',
145
+ properties: {},
146
+ },
147
+ },
148
+ ];
149
+ /**
150
+ * Tool handler that executes tools against a CodeGraph instance
151
+ */
152
+ class ToolHandler {
153
+ cg;
154
+ constructor(cg) {
155
+ this.cg = cg;
156
+ }
157
+ /**
158
+ * Execute a tool by name
159
+ */
160
+ async execute(toolName, args) {
161
+ try {
162
+ switch (toolName) {
163
+ case 'codegraph_search':
164
+ return await this.handleSearch(args);
165
+ case 'codegraph_context':
166
+ return await this.handleContext(args);
167
+ case 'codegraph_callers':
168
+ return await this.handleCallers(args);
169
+ case 'codegraph_callees':
170
+ return await this.handleCallees(args);
171
+ case 'codegraph_impact':
172
+ return await this.handleImpact(args);
173
+ case 'codegraph_node':
174
+ return await this.handleNode(args);
175
+ case 'codegraph_status':
176
+ return await this.handleStatus();
177
+ default:
178
+ return this.errorResult(`Unknown tool: ${toolName}`);
179
+ }
180
+ }
181
+ catch (err) {
182
+ return this.errorResult(`Tool execution failed: ${err instanceof Error ? err.message : String(err)}`);
183
+ }
184
+ }
185
+ /**
186
+ * Handle codegraph_search
187
+ */
188
+ async handleSearch(args) {
189
+ const query = args.query;
190
+ const kind = args.kind;
191
+ const limit = args.limit || 10;
192
+ const results = this.cg.searchNodes(query, {
193
+ limit,
194
+ kinds: kind ? [kind] : undefined,
195
+ });
196
+ if (results.length === 0) {
197
+ return this.textResult(`No results found for "${query}"`);
198
+ }
199
+ const formatted = this.formatSearchResults(results);
200
+ return this.textResult(formatted);
201
+ }
202
+ /**
203
+ * Handle codegraph_context
204
+ */
205
+ async handleContext(args) {
206
+ const task = args.task;
207
+ const maxNodes = args.maxNodes || 20;
208
+ const includeCode = args.includeCode !== false;
209
+ const context = await this.cg.buildContext(task, {
210
+ maxNodes,
211
+ includeCode,
212
+ format: 'markdown',
213
+ });
214
+ // Detect if this looks like a feature request (vs bug fix or exploration)
215
+ const isFeatureQuery = this.looksLikeFeatureRequest(task);
216
+ const reminder = isFeatureQuery
217
+ ? '\n\n⚠️ **Ask user:** UX preferences, edge cases, acceptance criteria'
218
+ : '';
219
+ // buildContext returns string when format is 'markdown'
220
+ if (typeof context === 'string') {
221
+ return this.textResult(context + reminder);
222
+ }
223
+ // If it returns TaskContext, format it
224
+ return this.textResult(this.formatTaskContext(context) + reminder);
225
+ }
226
+ /**
227
+ * Heuristic to detect if a query looks like a feature request
228
+ */
229
+ looksLikeFeatureRequest(task) {
230
+ const featureKeywords = [
231
+ 'add', 'create', 'implement', 'build', 'enable', 'allow',
232
+ 'new feature', 'support for', 'ability to', 'want to',
233
+ 'should be able', 'need to add', 'swap', 'edit', 'modify'
234
+ ];
235
+ const bugKeywords = [
236
+ 'fix', 'bug', 'error', 'broken', 'crash', 'issue', 'problem',
237
+ 'not working', 'fails', 'undefined', 'null'
238
+ ];
239
+ const explorationKeywords = [
240
+ 'how does', 'where is', 'what is', 'find', 'show me',
241
+ 'explain', 'understand', 'explore'
242
+ ];
243
+ const lowerTask = task.toLowerCase();
244
+ // If it's clearly a bug or exploration, not a feature
245
+ if (bugKeywords.some(k => lowerTask.includes(k)))
246
+ return false;
247
+ if (explorationKeywords.some(k => lowerTask.includes(k)))
248
+ return false;
249
+ // If it matches feature keywords, it's likely a feature request
250
+ return featureKeywords.some(k => lowerTask.includes(k));
251
+ }
252
+ /**
253
+ * Handle codegraph_callers
254
+ */
255
+ async handleCallers(args) {
256
+ const symbol = args.symbol;
257
+ const limit = args.limit || 20;
258
+ // First find the node by name
259
+ const results = this.cg.searchNodes(symbol, { limit: 1 });
260
+ if (results.length === 0 || !results[0]) {
261
+ return this.textResult(`Symbol "${symbol}" not found in the codebase`);
262
+ }
263
+ const node = results[0].node;
264
+ const callers = this.cg.getCallers(node.id);
265
+ if (callers.length === 0) {
266
+ return this.textResult(`No callers found for "${symbol}"`);
267
+ }
268
+ // Extract just the nodes from the { node, edge } tuples
269
+ const callerNodes = callers.slice(0, limit).map(c => c.node);
270
+ const formatted = this.formatNodeList(callerNodes, `Callers of ${symbol}`);
271
+ return this.textResult(formatted);
272
+ }
273
+ /**
274
+ * Handle codegraph_callees
275
+ */
276
+ async handleCallees(args) {
277
+ const symbol = args.symbol;
278
+ const limit = args.limit || 20;
279
+ // First find the node by name
280
+ const results = this.cg.searchNodes(symbol, { limit: 1 });
281
+ if (results.length === 0 || !results[0]) {
282
+ return this.textResult(`Symbol "${symbol}" not found in the codebase`);
283
+ }
284
+ const node = results[0].node;
285
+ const callees = this.cg.getCallees(node.id);
286
+ if (callees.length === 0) {
287
+ return this.textResult(`No callees found for "${symbol}"`);
288
+ }
289
+ // Extract just the nodes from the { node, edge } tuples
290
+ const calleeNodes = callees.slice(0, limit).map(c => c.node);
291
+ const formatted = this.formatNodeList(calleeNodes, `Callees of ${symbol}`);
292
+ return this.textResult(formatted);
293
+ }
294
+ /**
295
+ * Handle codegraph_impact
296
+ */
297
+ async handleImpact(args) {
298
+ const symbol = args.symbol;
299
+ const depth = args.depth || 2;
300
+ // First find the node by name
301
+ const results = this.cg.searchNodes(symbol, { limit: 1 });
302
+ if (results.length === 0 || !results[0]) {
303
+ return this.textResult(`Symbol "${symbol}" not found in the codebase`);
304
+ }
305
+ const node = results[0].node;
306
+ const impact = this.cg.getImpactRadius(node.id, depth);
307
+ const formatted = this.formatImpact(symbol, impact);
308
+ return this.textResult(formatted);
309
+ }
310
+ /**
311
+ * Handle codegraph_node
312
+ */
313
+ async handleNode(args) {
314
+ const symbol = args.symbol;
315
+ // Default to false to minimize context usage
316
+ const includeCode = args.includeCode === true;
317
+ // Find the node by name
318
+ const results = this.cg.searchNodes(symbol, { limit: 1 });
319
+ if (results.length === 0 || !results[0]) {
320
+ return this.textResult(`Symbol "${symbol}" not found in the codebase`);
321
+ }
322
+ const node = results[0].node;
323
+ let code = null;
324
+ if (includeCode) {
325
+ code = await this.cg.getCode(node.id);
326
+ }
327
+ const formatted = this.formatNodeDetails(node, code);
328
+ return this.textResult(formatted);
329
+ }
330
+ /**
331
+ * Handle codegraph_status
332
+ */
333
+ async handleStatus() {
334
+ const stats = this.cg.getStats();
335
+ const lines = [
336
+ '## CodeGraph Status',
337
+ '',
338
+ `**Files indexed:** ${stats.fileCount}`,
339
+ `**Total nodes:** ${stats.nodeCount}`,
340
+ `**Total edges:** ${stats.edgeCount}`,
341
+ `**Database size:** ${(stats.dbSizeBytes / 1024 / 1024).toFixed(2)} MB`,
342
+ '',
343
+ '### Nodes by Kind:',
344
+ ];
345
+ for (const [kind, count] of Object.entries(stats.nodesByKind)) {
346
+ if (count > 0) {
347
+ lines.push(`- ${kind}: ${count}`);
348
+ }
349
+ }
350
+ lines.push('', '### Languages:');
351
+ for (const [lang, count] of Object.entries(stats.filesByLanguage)) {
352
+ if (count > 0) {
353
+ lines.push(`- ${lang}: ${count}`);
354
+ }
355
+ }
356
+ return this.textResult(lines.join('\n'));
357
+ }
358
+ // =========================================================================
359
+ // Formatting helpers (compact by default to reduce context usage)
360
+ // =========================================================================
361
+ formatSearchResults(results) {
362
+ const lines = [`## Search Results (${results.length} found)`, ''];
363
+ for (const result of results) {
364
+ const { node } = result;
365
+ const location = node.startLine ? `:${node.startLine}` : '';
366
+ // Compact format: one line per result with key info
367
+ lines.push(`### ${node.name} (${node.kind})`);
368
+ lines.push(`${node.filePath}${location}`);
369
+ if (node.signature)
370
+ lines.push(`\`${node.signature}\``);
371
+ lines.push('');
372
+ }
373
+ return lines.join('\n');
374
+ }
375
+ formatNodeList(nodes, title) {
376
+ const lines = [`## ${title} (${nodes.length} found)`, ''];
377
+ for (const node of nodes) {
378
+ const location = node.startLine ? `:${node.startLine}` : '';
379
+ // Compact: just name, kind, location
380
+ lines.push(`- ${node.name} (${node.kind}) - ${node.filePath}${location}`);
381
+ }
382
+ return lines.join('\n');
383
+ }
384
+ formatImpact(symbol, impact) {
385
+ const nodeCount = impact.nodes.size;
386
+ // Compact format: just list affected symbols grouped by file
387
+ const lines = [
388
+ `## Impact: "${symbol}" affects ${nodeCount} symbols`,
389
+ '',
390
+ ];
391
+ // Group by file
392
+ const byFile = new Map();
393
+ for (const node of impact.nodes.values()) {
394
+ const existing = byFile.get(node.filePath) || [];
395
+ existing.push(node);
396
+ byFile.set(node.filePath, existing);
397
+ }
398
+ for (const [file, nodes] of byFile) {
399
+ lines.push(`**${file}:**`);
400
+ // Compact: inline list
401
+ const nodeList = nodes.map(n => `${n.name}:${n.startLine}`).join(', ');
402
+ lines.push(nodeList);
403
+ lines.push('');
404
+ }
405
+ return lines.join('\n');
406
+ }
407
+ formatNodeDetails(node, code) {
408
+ const location = node.startLine ? `:${node.startLine}` : '';
409
+ const lines = [
410
+ `## ${node.name} (${node.kind})`,
411
+ '',
412
+ `**Location:** ${node.filePath}${location}`,
413
+ ];
414
+ if (node.signature) {
415
+ lines.push(`**Signature:** \`${node.signature}\``);
416
+ }
417
+ // Only include docstring if it's short and useful
418
+ if (node.docstring && node.docstring.length < 200) {
419
+ lines.push('', node.docstring);
420
+ }
421
+ if (code) {
422
+ lines.push('', '```' + node.language, code, '```');
423
+ }
424
+ return lines.join('\n');
425
+ }
426
+ formatTaskContext(context) {
427
+ return context.summary || 'No context found';
428
+ }
429
+ textResult(text) {
430
+ return {
431
+ content: [{ type: 'text', text }],
432
+ };
433
+ }
434
+ errorResult(message) {
435
+ return {
436
+ content: [{ type: 'text', text: `Error: ${message}` }],
437
+ isError: true,
438
+ };
439
+ }
440
+ }
441
+ exports.ToolHandler = ToolHandler;
442
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * MCP Stdio Transport
3
+ *
4
+ * Handles JSON-RPC 2.0 communication over stdin/stdout for MCP protocol.
5
+ */
6
+ /**
7
+ * JSON-RPC 2.0 Request
8
+ */
9
+ export interface JsonRpcRequest {
10
+ jsonrpc: '2.0';
11
+ id: string | number;
12
+ method: string;
13
+ params?: unknown;
14
+ }
15
+ /**
16
+ * JSON-RPC 2.0 Response
17
+ */
18
+ export interface JsonRpcResponse {
19
+ jsonrpc: '2.0';
20
+ id: string | number | null;
21
+ result?: unknown;
22
+ error?: JsonRpcError;
23
+ }
24
+ /**
25
+ * JSON-RPC 2.0 Error
26
+ */
27
+ export interface JsonRpcError {
28
+ code: number;
29
+ message: string;
30
+ data?: unknown;
31
+ }
32
+ /**
33
+ * JSON-RPC 2.0 Notification (no id, no response expected)
34
+ */
35
+ export interface JsonRpcNotification {
36
+ jsonrpc: '2.0';
37
+ method: string;
38
+ params?: unknown;
39
+ }
40
+ export declare const ErrorCodes: {
41
+ readonly ParseError: -32700;
42
+ readonly InvalidRequest: -32600;
43
+ readonly MethodNotFound: -32601;
44
+ readonly InvalidParams: -32602;
45
+ readonly InternalError: -32603;
46
+ };
47
+ export type MessageHandler = (message: JsonRpcRequest | JsonRpcNotification) => Promise<void>;
48
+ /**
49
+ * Stdio Transport for MCP
50
+ *
51
+ * Reads JSON-RPC messages from stdin and writes responses to stdout.
52
+ */
53
+ export declare class StdioTransport {
54
+ private rl;
55
+ private messageHandler;
56
+ /**
57
+ * Start listening for messages on stdin
58
+ */
59
+ start(handler: MessageHandler): void;
60
+ /**
61
+ * Stop listening
62
+ */
63
+ stop(): void;
64
+ /**
65
+ * Send a response
66
+ */
67
+ send(response: JsonRpcResponse): void;
68
+ /**
69
+ * Send a notification (no id)
70
+ */
71
+ notify(method: string, params?: unknown): void;
72
+ /**
73
+ * Send a success response
74
+ */
75
+ sendResult(id: string | number, result: unknown): void;
76
+ /**
77
+ * Send an error response
78
+ */
79
+ sendError(id: string | number | null, code: number, message: string, data?: unknown): void;
80
+ /**
81
+ * Handle an incoming line of JSON
82
+ */
83
+ private handleLine;
84
+ /**
85
+ * Check if message is a valid JSON-RPC 2.0 message
86
+ */
87
+ private isValidMessage;
88
+ }
89
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/mcp/transport.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAGD,eAAO,MAAM,UAAU;;;;;;CAMb,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9F;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,cAAc,CAA+B;IAErD;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAkBpC;;OAEG;IACH,IAAI,IAAI,IAAI;IAOZ;;OAEG;IACH,IAAI,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAKrC;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAS9C;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAQtD;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAQ1F;;OAEG;YACW,UAAU;IAkCxB;;OAEG;IACH,OAAO,CAAC,cAAc;CAOvB"}