codexia 0.2.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 (224) hide show
  1. package/CHANGELOG.md +111 -0
  2. package/LICENSE +663 -0
  3. package/README.md +392 -0
  4. package/dist/adapters/github/index.d.ts +66 -0
  5. package/dist/adapters/github/index.d.ts.map +1 -0
  6. package/dist/adapters/github/index.js +84 -0
  7. package/dist/adapters/github/index.js.map +1 -0
  8. package/dist/adapters/index.d.ts +5 -0
  9. package/dist/adapters/index.d.ts.map +1 -0
  10. package/dist/adapters/index.js +5 -0
  11. package/dist/adapters/index.js.map +1 -0
  12. package/dist/cli/commands/changelog.d.ts +3 -0
  13. package/dist/cli/commands/changelog.d.ts.map +1 -0
  14. package/dist/cli/commands/changelog.js +221 -0
  15. package/dist/cli/commands/changelog.js.map +1 -0
  16. package/dist/cli/commands/check.d.ts +3 -0
  17. package/dist/cli/commands/check.d.ts.map +1 -0
  18. package/dist/cli/commands/check.js +35 -0
  19. package/dist/cli/commands/check.js.map +1 -0
  20. package/dist/cli/commands/complexity.d.ts +3 -0
  21. package/dist/cli/commands/complexity.d.ts.map +1 -0
  22. package/dist/cli/commands/complexity.js +103 -0
  23. package/dist/cli/commands/complexity.js.map +1 -0
  24. package/dist/cli/commands/graph.d.ts +3 -0
  25. package/dist/cli/commands/graph.d.ts.map +1 -0
  26. package/dist/cli/commands/graph.js +46 -0
  27. package/dist/cli/commands/graph.js.map +1 -0
  28. package/dist/cli/commands/history.d.ts +3 -0
  29. package/dist/cli/commands/history.d.ts.map +1 -0
  30. package/dist/cli/commands/history.js +127 -0
  31. package/dist/cli/commands/history.js.map +1 -0
  32. package/dist/cli/commands/hotpaths.d.ts +3 -0
  33. package/dist/cli/commands/hotpaths.d.ts.map +1 -0
  34. package/dist/cli/commands/hotpaths.js +153 -0
  35. package/dist/cli/commands/hotpaths.js.map +1 -0
  36. package/dist/cli/commands/impact.d.ts +3 -0
  37. package/dist/cli/commands/impact.d.ts.map +1 -0
  38. package/dist/cli/commands/impact.js +37 -0
  39. package/dist/cli/commands/impact.js.map +1 -0
  40. package/dist/cli/commands/init.d.ts +3 -0
  41. package/dist/cli/commands/init.d.ts.map +1 -0
  42. package/dist/cli/commands/init.js +167 -0
  43. package/dist/cli/commands/init.js.map +1 -0
  44. package/dist/cli/commands/invariants.d.ts +3 -0
  45. package/dist/cli/commands/invariants.d.ts.map +1 -0
  46. package/dist/cli/commands/invariants.js +176 -0
  47. package/dist/cli/commands/invariants.js.map +1 -0
  48. package/dist/cli/commands/mcp-server.d.ts +3 -0
  49. package/dist/cli/commands/mcp-server.d.ts.map +1 -0
  50. package/dist/cli/commands/mcp-server.js +64 -0
  51. package/dist/cli/commands/mcp-server.js.map +1 -0
  52. package/dist/cli/commands/monorepo.d.ts +3 -0
  53. package/dist/cli/commands/monorepo.d.ts.map +1 -0
  54. package/dist/cli/commands/monorepo.js +156 -0
  55. package/dist/cli/commands/monorepo.js.map +1 -0
  56. package/dist/cli/commands/pr-report.d.ts +3 -0
  57. package/dist/cli/commands/pr-report.d.ts.map +1 -0
  58. package/dist/cli/commands/pr-report.js +32 -0
  59. package/dist/cli/commands/pr-report.js.map +1 -0
  60. package/dist/cli/commands/scan.d.ts +3 -0
  61. package/dist/cli/commands/scan.d.ts.map +1 -0
  62. package/dist/cli/commands/scan.js +25 -0
  63. package/dist/cli/commands/scan.js.map +1 -0
  64. package/dist/cli/commands/signals.d.ts +3 -0
  65. package/dist/cli/commands/signals.d.ts.map +1 -0
  66. package/dist/cli/commands/signals.js +34 -0
  67. package/dist/cli/commands/signals.js.map +1 -0
  68. package/dist/cli/commands/tests.d.ts +3 -0
  69. package/dist/cli/commands/tests.d.ts.map +1 -0
  70. package/dist/cli/commands/tests.js +30 -0
  71. package/dist/cli/commands/tests.js.map +1 -0
  72. package/dist/cli/commands/watch.d.ts +3 -0
  73. package/dist/cli/commands/watch.d.ts.map +1 -0
  74. package/dist/cli/commands/watch.js +131 -0
  75. package/dist/cli/commands/watch.js.map +1 -0
  76. package/dist/cli/engine.d.ts +162 -0
  77. package/dist/cli/engine.d.ts.map +1 -0
  78. package/dist/cli/engine.js +564 -0
  79. package/dist/cli/engine.js.map +1 -0
  80. package/dist/cli/formatter.d.ts +39 -0
  81. package/dist/cli/formatter.d.ts.map +1 -0
  82. package/dist/cli/formatter.js +444 -0
  83. package/dist/cli/formatter.js.map +1 -0
  84. package/dist/cli/index.d.ts +2 -0
  85. package/dist/cli/index.d.ts.map +1 -0
  86. package/dist/cli/index.js +63 -0
  87. package/dist/cli/index.js.map +1 -0
  88. package/dist/cli/interactive.d.ts +7 -0
  89. package/dist/cli/interactive.d.ts.map +1 -0
  90. package/dist/cli/interactive.js +644 -0
  91. package/dist/cli/interactive.js.map +1 -0
  92. package/dist/core/dependency-graph.d.ts +54 -0
  93. package/dist/core/dependency-graph.d.ts.map +1 -0
  94. package/dist/core/dependency-graph.js +190 -0
  95. package/dist/core/dependency-graph.js.map +1 -0
  96. package/dist/core/dependency-graph.test.d.ts +2 -0
  97. package/dist/core/dependency-graph.test.d.ts.map +1 -0
  98. package/dist/core/dependency-graph.test.js +106 -0
  99. package/dist/core/dependency-graph.test.js.map +1 -0
  100. package/dist/core/git-analyzer.d.ts +52 -0
  101. package/dist/core/git-analyzer.d.ts.map +1 -0
  102. package/dist/core/git-analyzer.js +250 -0
  103. package/dist/core/git-analyzer.js.map +1 -0
  104. package/dist/core/git-analyzer.test.d.ts +2 -0
  105. package/dist/core/git-analyzer.test.d.ts.map +1 -0
  106. package/dist/core/git-analyzer.test.js +71 -0
  107. package/dist/core/git-analyzer.test.js.map +1 -0
  108. package/dist/core/index.d.ts +7 -0
  109. package/dist/core/index.d.ts.map +1 -0
  110. package/dist/core/index.js +7 -0
  111. package/dist/core/index.js.map +1 -0
  112. package/dist/core/repo-indexer.d.ts +57 -0
  113. package/dist/core/repo-indexer.d.ts.map +1 -0
  114. package/dist/core/repo-indexer.js +356 -0
  115. package/dist/core/repo-indexer.js.map +1 -0
  116. package/dist/core/repo-indexer.test.d.ts +2 -0
  117. package/dist/core/repo-indexer.test.d.ts.map +1 -0
  118. package/dist/core/repo-indexer.test.js +89 -0
  119. package/dist/core/repo-indexer.test.js.map +1 -0
  120. package/dist/core/signals-engine.d.ts +38 -0
  121. package/dist/core/signals-engine.d.ts.map +1 -0
  122. package/dist/core/signals-engine.js +142 -0
  123. package/dist/core/signals-engine.js.map +1 -0
  124. package/dist/core/signals-engine.test.d.ts +2 -0
  125. package/dist/core/signals-engine.test.d.ts.map +1 -0
  126. package/dist/core/signals-engine.test.js +129 -0
  127. package/dist/core/signals-engine.test.js.map +1 -0
  128. package/dist/core/symbol-map.d.ts +45 -0
  129. package/dist/core/symbol-map.d.ts.map +1 -0
  130. package/dist/core/symbol-map.js +187 -0
  131. package/dist/core/symbol-map.js.map +1 -0
  132. package/dist/core/types.d.ts +514 -0
  133. package/dist/core/types.d.ts.map +1 -0
  134. package/dist/core/types.js +5 -0
  135. package/dist/core/types.js.map +1 -0
  136. package/dist/core/types.test.d.ts +2 -0
  137. package/dist/core/types.test.d.ts.map +1 -0
  138. package/dist/core/types.test.js +20 -0
  139. package/dist/core/types.test.js.map +1 -0
  140. package/dist/index.d.ts +5 -0
  141. package/dist/index.d.ts.map +1 -0
  142. package/dist/index.js +9 -0
  143. package/dist/index.js.map +1 -0
  144. package/dist/mcp/index.d.ts +3 -0
  145. package/dist/mcp/index.d.ts.map +1 -0
  146. package/dist/mcp/index.js +2 -0
  147. package/dist/mcp/index.js.map +1 -0
  148. package/dist/mcp/server.d.ts +89 -0
  149. package/dist/mcp/server.d.ts.map +1 -0
  150. package/dist/mcp/server.js +549 -0
  151. package/dist/mcp/server.js.map +1 -0
  152. package/dist/modules/changelog-generator.d.ts +82 -0
  153. package/dist/modules/changelog-generator.d.ts.map +1 -0
  154. package/dist/modules/changelog-generator.js +350 -0
  155. package/dist/modules/changelog-generator.js.map +1 -0
  156. package/dist/modules/complexity-engine.d.ts +86 -0
  157. package/dist/modules/complexity-engine.d.ts.map +1 -0
  158. package/dist/modules/complexity-engine.js +355 -0
  159. package/dist/modules/complexity-engine.js.map +1 -0
  160. package/dist/modules/convention-checker.d.ts +24 -0
  161. package/dist/modules/convention-checker.d.ts.map +1 -0
  162. package/dist/modules/convention-checker.js +181 -0
  163. package/dist/modules/convention-checker.js.map +1 -0
  164. package/dist/modules/graph-utils.d.ts +38 -0
  165. package/dist/modules/graph-utils.d.ts.map +1 -0
  166. package/dist/modules/graph-utils.js +40 -0
  167. package/dist/modules/graph-utils.js.map +1 -0
  168. package/dist/modules/hot-path-detector.d.ts +105 -0
  169. package/dist/modules/hot-path-detector.d.ts.map +1 -0
  170. package/dist/modules/hot-path-detector.js +332 -0
  171. package/dist/modules/hot-path-detector.js.map +1 -0
  172. package/dist/modules/impact-analyzer.d.ts +40 -0
  173. package/dist/modules/impact-analyzer.d.ts.map +1 -0
  174. package/dist/modules/impact-analyzer.js +218 -0
  175. package/dist/modules/impact-analyzer.js.map +1 -0
  176. package/dist/modules/impact-analyzer.test.d.ts +2 -0
  177. package/dist/modules/impact-analyzer.test.d.ts.map +1 -0
  178. package/dist/modules/impact-analyzer.test.js +308 -0
  179. package/dist/modules/impact-analyzer.test.js.map +1 -0
  180. package/dist/modules/index.d.ts +14 -0
  181. package/dist/modules/index.d.ts.map +1 -0
  182. package/dist/modules/index.js +20 -0
  183. package/dist/modules/index.js.map +1 -0
  184. package/dist/modules/invariant-engine.d.ts +119 -0
  185. package/dist/modules/invariant-engine.d.ts.map +1 -0
  186. package/dist/modules/invariant-engine.js +457 -0
  187. package/dist/modules/invariant-engine.js.map +1 -0
  188. package/dist/modules/memory-loader.d.ts +34 -0
  189. package/dist/modules/memory-loader.d.ts.map +1 -0
  190. package/dist/modules/memory-loader.js +313 -0
  191. package/dist/modules/memory-loader.js.map +1 -0
  192. package/dist/modules/memory-loader.test.d.ts +2 -0
  193. package/dist/modules/memory-loader.test.d.ts.map +1 -0
  194. package/dist/modules/memory-loader.test.js +120 -0
  195. package/dist/modules/memory-loader.test.js.map +1 -0
  196. package/dist/modules/monorepo-analyzer.d.ts +141 -0
  197. package/dist/modules/monorepo-analyzer.d.ts.map +1 -0
  198. package/dist/modules/monorepo-analyzer.js +453 -0
  199. package/dist/modules/monorepo-analyzer.js.map +1 -0
  200. package/dist/modules/plugin-system.d.ts +144 -0
  201. package/dist/modules/plugin-system.d.ts.map +1 -0
  202. package/dist/modules/plugin-system.js +428 -0
  203. package/dist/modules/plugin-system.js.map +1 -0
  204. package/dist/modules/smart-test-prioritizer.d.ts +95 -0
  205. package/dist/modules/smart-test-prioritizer.d.ts.map +1 -0
  206. package/dist/modules/smart-test-prioritizer.js +328 -0
  207. package/dist/modules/smart-test-prioritizer.js.map +1 -0
  208. package/dist/modules/temporal-analyzer.d.ts +71 -0
  209. package/dist/modules/temporal-analyzer.d.ts.map +1 -0
  210. package/dist/modules/temporal-analyzer.js +301 -0
  211. package/dist/modules/temporal-analyzer.js.map +1 -0
  212. package/dist/modules/test-suggester.d.ts +22 -0
  213. package/dist/modules/test-suggester.d.ts.map +1 -0
  214. package/dist/modules/test-suggester.js +145 -0
  215. package/dist/modules/test-suggester.js.map +1 -0
  216. package/dist/modules/visualizer.d.ts +49 -0
  217. package/dist/modules/visualizer.d.ts.map +1 -0
  218. package/dist/modules/visualizer.js +302 -0
  219. package/dist/modules/visualizer.js.map +1 -0
  220. package/dist/modules/watcher.d.ts +82 -0
  221. package/dist/modules/watcher.d.ts.map +1 -0
  222. package/dist/modules/watcher.js +298 -0
  223. package/dist/modules/watcher.js.map +1 -0
  224. package/package.json +70 -0
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Codexia MCP Server
4
+ *
5
+ * Model Context Protocol server that exposes Codexia's analysis capabilities
6
+ * to AI assistants like Claude, GPT, and other MCP-compatible tools.
7
+ *
8
+ * Run with: npx codexia mcp-server
9
+ */
10
+ export interface MCPTool {
11
+ name: string;
12
+ description: string;
13
+ inputSchema: {
14
+ type: 'object';
15
+ properties: Record<string, MCPPropertySchema>;
16
+ required?: string[];
17
+ };
18
+ }
19
+ export interface MCPPropertySchema {
20
+ type: string;
21
+ description: string;
22
+ items?: {
23
+ type: string;
24
+ };
25
+ enum?: string[];
26
+ }
27
+ export interface MCPRequest {
28
+ jsonrpc: '2.0';
29
+ id: string | number;
30
+ method: string;
31
+ params?: Record<string, unknown>;
32
+ }
33
+ export interface MCPResponse {
34
+ jsonrpc: '2.0';
35
+ id: string | number;
36
+ result?: unknown;
37
+ error?: {
38
+ code: number;
39
+ message: string;
40
+ data?: unknown;
41
+ };
42
+ }
43
+ export interface MCPToolResult {
44
+ content: Array<{
45
+ type: 'text' | 'json';
46
+ text?: string;
47
+ json?: unknown;
48
+ }>;
49
+ }
50
+ export declare class CodexiaMCPServer {
51
+ private engine;
52
+ private initialized;
53
+ constructor(repoRoot?: string);
54
+ /**
55
+ * Get available tools
56
+ */
57
+ getTools(): MCPTool[];
58
+ /**
59
+ * Execute a tool
60
+ */
61
+ executeTool(name: string, params: Record<string, unknown>): Promise<MCPToolResult>;
62
+ private handleScan;
63
+ private handleImpact;
64
+ private handleContext;
65
+ private handleValidate;
66
+ private handleSignals;
67
+ private handleTests;
68
+ private handleDependencies;
69
+ private handleHotPaths;
70
+ private handleComplexity;
71
+ private handleMemory;
72
+ /**
73
+ * Handle JSON-RPC request
74
+ */
75
+ handleRequest(request: MCPRequest): Promise<MCPResponse>;
76
+ /**
77
+ * Start HTTP server for MCP
78
+ */
79
+ startHttpServer(port?: number): void;
80
+ /**
81
+ * Run in stdio mode (for direct MCP integration)
82
+ */
83
+ runStdio(): Promise<void>;
84
+ }
85
+ /**
86
+ * Start MCP server based on mode
87
+ */
88
+ export declare function startMCPServer(mode?: 'http' | 'stdio', port?: number): Promise<void>;
89
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AASH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAC9C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC,CAAC;CACJ;AAMD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,WAAW,CAAS;gBAEhB,QAAQ,CAAC,EAAE,MAAM;IAI7B;;OAEG;IACH,QAAQ,IAAI,OAAO,EAAE;IAuLrB;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;YA0C1E,UAAU;YAgBV,YAAY;YA6BZ,aAAa;YA2Bb,cAAc;YAuBd,aAAa;YAmBb,WAAW;YAsBX,kBAAkB;YAYlB,cAAc;YAWd,gBAAgB;YAWhB,YAAY;IAW1B;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IA+D9D;;OAEG;IACH,eAAe,CAAC,IAAI,GAAE,MAAa,GAAG,IAAI;IAwC1C;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CA0BhC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,IAAI,GAAE,MAAM,GAAG,OAAiB,EAChC,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAQf"}
@@ -0,0 +1,549 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Codexia MCP Server
4
+ *
5
+ * Model Context Protocol server that exposes Codexia's analysis capabilities
6
+ * to AI assistants like Claude, GPT, and other MCP-compatible tools.
7
+ *
8
+ * Run with: npx codexia mcp-server
9
+ */
10
+ import { createServer } from 'node:http';
11
+ import { CodexiaEngine } from '../cli/engine.js';
12
+ // ============================================================================
13
+ // MCP Server
14
+ // ============================================================================
15
+ export class CodexiaMCPServer {
16
+ engine;
17
+ initialized = false;
18
+ constructor(repoRoot) {
19
+ this.engine = new CodexiaEngine({ repoRoot });
20
+ }
21
+ /**
22
+ * Get available tools
23
+ */
24
+ getTools() {
25
+ return [
26
+ {
27
+ name: 'codexia/scan',
28
+ description: 'Scan and index the repository to understand its structure, symbols, and dependencies',
29
+ inputSchema: {
30
+ type: 'object',
31
+ properties: {
32
+ force: {
33
+ type: 'boolean',
34
+ description: 'Force re-indexing even if cache exists',
35
+ },
36
+ },
37
+ },
38
+ },
39
+ {
40
+ name: 'codexia/impact',
41
+ description: 'Analyze the impact of code changes - what modules are affected, risk score, breaking changes',
42
+ inputSchema: {
43
+ type: 'object',
44
+ properties: {
45
+ files: {
46
+ type: 'array',
47
+ description: 'Specific files to analyze (optional - analyzes staged/uncommitted if not provided)',
48
+ items: { type: 'string' },
49
+ },
50
+ staged: {
51
+ type: 'boolean',
52
+ description: 'Analyze only staged changes',
53
+ },
54
+ base: {
55
+ type: 'string',
56
+ description: 'Base ref for comparison (default: HEAD)',
57
+ },
58
+ },
59
+ },
60
+ },
61
+ {
62
+ name: 'codexia/context',
63
+ description: 'Get rich context about a symbol, file, or code area - useful for understanding before making changes',
64
+ inputSchema: {
65
+ type: 'object',
66
+ properties: {
67
+ symbol: {
68
+ type: 'string',
69
+ description: 'Symbol name to get context for',
70
+ },
71
+ file: {
72
+ type: 'string',
73
+ description: 'File path to get context for',
74
+ },
75
+ includeHistory: {
76
+ type: 'boolean',
77
+ description: 'Include git history and temporal insights',
78
+ },
79
+ },
80
+ },
81
+ },
82
+ {
83
+ name: 'codexia/validate',
84
+ description: 'Validate code changes against conventions, invariants, and architectural rules',
85
+ inputSchema: {
86
+ type: 'object',
87
+ properties: {
88
+ staged: {
89
+ type: 'boolean',
90
+ description: 'Validate only staged changes',
91
+ },
92
+ checkInvariants: {
93
+ type: 'boolean',
94
+ description: 'Check architectural invariants',
95
+ },
96
+ checkConventions: {
97
+ type: 'boolean',
98
+ description: 'Check naming and code conventions',
99
+ },
100
+ },
101
+ },
102
+ },
103
+ {
104
+ name: 'codexia/signals',
105
+ description: 'Get code quality signals - orphan code, god classes, circular dependencies, complexity issues',
106
+ inputSchema: {
107
+ type: 'object',
108
+ properties: {
109
+ types: {
110
+ type: 'array',
111
+ description: 'Signal types to check: orphans, god-classes, cycles, complexity',
112
+ items: { type: 'string' },
113
+ },
114
+ file: {
115
+ type: 'string',
116
+ description: 'Check signals for a specific file',
117
+ },
118
+ },
119
+ },
120
+ },
121
+ {
122
+ name: 'codexia/tests',
123
+ description: 'Get test suggestions and prioritization for code changes',
124
+ inputSchema: {
125
+ type: 'object',
126
+ properties: {
127
+ staged: {
128
+ type: 'boolean',
129
+ description: 'Suggest tests for staged changes',
130
+ },
131
+ prioritize: {
132
+ type: 'boolean',
133
+ description: 'Return tests in priority order',
134
+ },
135
+ },
136
+ },
137
+ },
138
+ {
139
+ name: 'codexia/dependencies',
140
+ description: 'Get dependency information - what depends on what, import/export relationships',
141
+ inputSchema: {
142
+ type: 'object',
143
+ properties: {
144
+ file: {
145
+ type: 'string',
146
+ description: 'Get dependencies for a specific file',
147
+ },
148
+ direction: {
149
+ type: 'string',
150
+ description: 'Direction: "imports" (what this file imports) or "importedBy" (what imports this file)',
151
+ enum: ['imports', 'importedBy', 'both'],
152
+ },
153
+ depth: {
154
+ type: 'number',
155
+ description: 'Depth for transitive dependencies',
156
+ },
157
+ },
158
+ },
159
+ },
160
+ {
161
+ name: 'codexia/hotpaths',
162
+ description: 'Get hot paths - critical code paths that are high-risk to modify',
163
+ inputSchema: {
164
+ type: 'object',
165
+ properties: {
166
+ checkImpact: {
167
+ type: 'boolean',
168
+ description: 'Check if current changes affect hot paths',
169
+ },
170
+ },
171
+ },
172
+ },
173
+ {
174
+ name: 'codexia/complexity',
175
+ description: 'Get complexity analysis for files - cyclomatic, cognitive, maintainability scores',
176
+ inputSchema: {
177
+ type: 'object',
178
+ properties: {
179
+ file: {
180
+ type: 'string',
181
+ description: 'File to analyze',
182
+ },
183
+ threshold: {
184
+ type: 'number',
185
+ description: 'Only return files above this complexity threshold',
186
+ },
187
+ },
188
+ },
189
+ },
190
+ {
191
+ name: 'codexia/memory',
192
+ description: 'Access project memory - architecture, conventions, invariants, ADRs',
193
+ inputSchema: {
194
+ type: 'object',
195
+ properties: {
196
+ section: {
197
+ type: 'string',
198
+ description: 'Which memory section to retrieve',
199
+ enum: ['architecture', 'conventions', 'invariants', 'adrs', 'all'],
200
+ },
201
+ },
202
+ },
203
+ },
204
+ ];
205
+ }
206
+ /**
207
+ * Execute a tool
208
+ */
209
+ async executeTool(name, params) {
210
+ // Ensure engine is initialized
211
+ if (!this.initialized) {
212
+ await this.engine.initialize();
213
+ this.initialized = true;
214
+ }
215
+ try {
216
+ switch (name) {
217
+ case 'codexia/scan':
218
+ return this.handleScan(params);
219
+ case 'codexia/impact':
220
+ return this.handleImpact(params);
221
+ case 'codexia/context':
222
+ return this.handleContext(params);
223
+ case 'codexia/validate':
224
+ return this.handleValidate(params);
225
+ case 'codexia/signals':
226
+ return this.handleSignals(params);
227
+ case 'codexia/tests':
228
+ return this.handleTests(params);
229
+ case 'codexia/dependencies':
230
+ return this.handleDependencies(params);
231
+ case 'codexia/hotpaths':
232
+ return this.handleHotPaths(params);
233
+ case 'codexia/complexity':
234
+ return this.handleComplexity(params);
235
+ case 'codexia/memory':
236
+ return this.handleMemory(params);
237
+ default:
238
+ throw new Error(`Unknown tool: ${name}`);
239
+ }
240
+ }
241
+ catch (error) {
242
+ return {
243
+ content: [{
244
+ type: 'text',
245
+ text: `Error executing ${name}: ${error instanceof Error ? error.message : 'Unknown error'}`,
246
+ }],
247
+ };
248
+ }
249
+ }
250
+ async handleScan(_params) {
251
+ const result = await this.engine.scan();
252
+ return {
253
+ content: [{
254
+ type: 'json',
255
+ json: {
256
+ status: 'success',
257
+ stats: result.stats,
258
+ hasMemory: result.hasMemory,
259
+ duration: result.duration,
260
+ },
261
+ }],
262
+ };
263
+ }
264
+ async handleImpact(params) {
265
+ const impact = await this.engine.analyzeImpact({
266
+ staged: params.staged,
267
+ base: params.base,
268
+ });
269
+ return {
270
+ content: [{
271
+ type: 'json',
272
+ json: {
273
+ riskScore: impact.riskScore,
274
+ directlyChanged: impact.directlyChanged.map(c => ({
275
+ symbol: c.symbol.name,
276
+ file: c.symbol.filePath,
277
+ type: c.changeType,
278
+ kind: c.symbol.kind,
279
+ })),
280
+ affectedModules: impact.affectedModules.map(m => ({
281
+ path: m.path,
282
+ reason: m.reason,
283
+ distance: m.distance,
284
+ })),
285
+ publicApiChanges: impact.publicApiChanges,
286
+ boundaryViolations: impact.boundaryViolations,
287
+ },
288
+ }],
289
+ };
290
+ }
291
+ async handleContext(params) {
292
+ const context = {};
293
+ // Basic context about the file or symbol
294
+ if (params.file) {
295
+ const analysis = await this.engine.analyzeComplexity(params.file);
296
+ context.file = {
297
+ path: params.file,
298
+ complexity: analysis.files?.[0]?.metrics,
299
+ };
300
+ }
301
+ if (params.symbol) {
302
+ context.symbol = {
303
+ name: params.symbol,
304
+ note: 'Symbol lookup - use scan for full symbol information',
305
+ };
306
+ }
307
+ return {
308
+ content: [{
309
+ type: 'json',
310
+ json: context,
311
+ }],
312
+ };
313
+ }
314
+ async handleValidate(params) {
315
+ const violations = await this.engine.checkConventions({
316
+ staged: params.staged,
317
+ });
318
+ return {
319
+ content: [{
320
+ type: 'json',
321
+ json: {
322
+ passed: violations.length === 0,
323
+ violations: violations.map(v => ({
324
+ file: v.filePath,
325
+ line: v.line,
326
+ rule: v.convention.id,
327
+ message: v.message,
328
+ severity: v.convention.severity,
329
+ suggestion: v.suggestion,
330
+ })),
331
+ },
332
+ }],
333
+ };
334
+ }
335
+ async handleSignals(_params) {
336
+ const signals = await this.engine.analyzeSignals({});
337
+ return {
338
+ content: [{
339
+ type: 'json',
340
+ json: {
341
+ signals: signals.map(s => ({
342
+ type: s.type,
343
+ severity: s.severity,
344
+ message: s.message,
345
+ file: s.filePath,
346
+ evidence: s.evidence,
347
+ })),
348
+ },
349
+ }],
350
+ };
351
+ }
352
+ async handleTests(params) {
353
+ const suggestions = await this.engine.suggestTests({
354
+ staged: params.staged,
355
+ });
356
+ return {
357
+ content: [{
358
+ type: 'json',
359
+ json: {
360
+ suggestions: suggestions.map(s => ({
361
+ targetFile: s.targetFile,
362
+ targetSymbol: s.targetSymbol,
363
+ testFile: s.testFile,
364
+ testType: s.testType,
365
+ priority: s.priority,
366
+ reason: s.reason,
367
+ })),
368
+ },
369
+ }],
370
+ };
371
+ }
372
+ async handleDependencies(params) {
373
+ // Use the graph data method to get dependency information
374
+ const graphData = await this.engine.getGraphData(params.file);
375
+ return {
376
+ content: [{
377
+ type: 'json',
378
+ json: graphData,
379
+ }],
380
+ };
381
+ }
382
+ async handleHotPaths(_params) {
383
+ const paths = await this.engine.analyzeHotPaths({ autoDetect: true });
384
+ return {
385
+ content: [{
386
+ type: 'json',
387
+ json: paths,
388
+ }],
389
+ };
390
+ }
391
+ async handleComplexity(params) {
392
+ const complexity = await this.engine.analyzeComplexity(params.file);
393
+ return {
394
+ content: [{
395
+ type: 'json',
396
+ json: complexity,
397
+ }],
398
+ };
399
+ }
400
+ async handleMemory(_params) {
401
+ const memory = await this.engine.getMemory();
402
+ return {
403
+ content: [{
404
+ type: 'json',
405
+ json: memory,
406
+ }],
407
+ };
408
+ }
409
+ /**
410
+ * Handle JSON-RPC request
411
+ */
412
+ async handleRequest(request) {
413
+ const { id, method, params } = request;
414
+ try {
415
+ switch (method) {
416
+ case 'initialize':
417
+ return {
418
+ jsonrpc: '2.0',
419
+ id,
420
+ result: {
421
+ protocolVersion: '2024-11-05',
422
+ serverInfo: {
423
+ name: 'codexia',
424
+ version: '0.2.0',
425
+ },
426
+ capabilities: {
427
+ tools: {},
428
+ },
429
+ },
430
+ };
431
+ case 'tools/list':
432
+ return {
433
+ jsonrpc: '2.0',
434
+ id,
435
+ result: {
436
+ tools: this.getTools(),
437
+ },
438
+ };
439
+ case 'tools/call':
440
+ const toolResult = await this.executeTool(params?.name, params?.arguments || {});
441
+ return {
442
+ jsonrpc: '2.0',
443
+ id,
444
+ result: toolResult,
445
+ };
446
+ default:
447
+ return {
448
+ jsonrpc: '2.0',
449
+ id,
450
+ error: {
451
+ code: -32601,
452
+ message: `Method not found: ${method}`,
453
+ },
454
+ };
455
+ }
456
+ }
457
+ catch (error) {
458
+ return {
459
+ jsonrpc: '2.0',
460
+ id,
461
+ error: {
462
+ code: -32603,
463
+ message: error instanceof Error ? error.message : 'Internal error',
464
+ },
465
+ };
466
+ }
467
+ }
468
+ /**
469
+ * Start HTTP server for MCP
470
+ */
471
+ startHttpServer(port = 3100) {
472
+ const server = createServer(async (req, res) => {
473
+ if (req.method !== 'POST') {
474
+ res.writeHead(405);
475
+ res.end('Method Not Allowed');
476
+ return;
477
+ }
478
+ let body = '';
479
+ req.on('data', chunk => { body += chunk; });
480
+ req.on('end', async () => {
481
+ try {
482
+ const request = JSON.parse(body);
483
+ const response = await this.handleRequest(request);
484
+ res.writeHead(200, { 'Content-Type': 'application/json' });
485
+ res.end(JSON.stringify(response));
486
+ }
487
+ catch (error) {
488
+ res.writeHead(400, { 'Content-Type': 'application/json' });
489
+ res.end(JSON.stringify({
490
+ jsonrpc: '2.0',
491
+ id: null,
492
+ error: {
493
+ code: -32700,
494
+ message: 'Parse error',
495
+ },
496
+ }));
497
+ }
498
+ });
499
+ });
500
+ server.listen(port, () => {
501
+ console.log(`Codexia MCP Server running on http://localhost:${port}`);
502
+ console.log('Available tools:');
503
+ for (const tool of this.getTools()) {
504
+ console.log(` - ${tool.name}: ${tool.description}`);
505
+ }
506
+ });
507
+ }
508
+ /**
509
+ * Run in stdio mode (for direct MCP integration)
510
+ */
511
+ async runStdio() {
512
+ const readline = await import('node:readline');
513
+ const rl = readline.createInterface({
514
+ input: process.stdin,
515
+ output: process.stdout,
516
+ terminal: false,
517
+ });
518
+ rl.on('line', async (line) => {
519
+ try {
520
+ const request = JSON.parse(line);
521
+ const response = await this.handleRequest(request);
522
+ console.log(JSON.stringify(response));
523
+ }
524
+ catch (error) {
525
+ console.log(JSON.stringify({
526
+ jsonrpc: '2.0',
527
+ id: null,
528
+ error: {
529
+ code: -32700,
530
+ message: 'Parse error',
531
+ },
532
+ }));
533
+ }
534
+ });
535
+ }
536
+ }
537
+ /**
538
+ * Start MCP server based on mode
539
+ */
540
+ export async function startMCPServer(mode = 'stdio', port) {
541
+ const server = new CodexiaMCPServer();
542
+ if (mode === 'http') {
543
+ server.startHttpServer(port);
544
+ }
545
+ else {
546
+ await server.runStdio();
547
+ }
548
+ }
549
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}