@evolith/smart-cli 0.0.1-beta

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 (241) hide show
  1. package/ARCHITECTURE.md +121 -0
  2. package/README.es.md +425 -0
  3. package/README.md +419 -0
  4. package/dist/app.module.d.ts +2 -0
  5. package/dist/app.module.js +59 -0
  6. package/dist/app.module.js.map +1 -0
  7. package/dist/application/services/index.d.ts +54 -0
  8. package/dist/application/services/index.js +307 -0
  9. package/dist/application/services/index.js.map +1 -0
  10. package/dist/application/services/services.test.d.ts +1 -0
  11. package/dist/application/services/services.test.js +176 -0
  12. package/dist/application/services/services.test.js.map +1 -0
  13. package/dist/application/use-cases/validate-satellite.use-case.d.ts +18 -0
  14. package/dist/application/use-cases/validate-satellite.use-case.js +92 -0
  15. package/dist/application/use-cases/validate-satellite.use-case.js.map +1 -0
  16. package/dist/application/use-cases/validate-satellite.use-case.spec.d.ts +1 -0
  17. package/dist/application/use-cases/validate-satellite.use-case.spec.js +102 -0
  18. package/dist/application/use-cases/validate-satellite.use-case.spec.js.map +1 -0
  19. package/dist/commands/adr/adr.command.d.ts +28 -0
  20. package/dist/commands/adr/adr.command.js +357 -0
  21. package/dist/commands/adr/adr.command.js.map +1 -0
  22. package/dist/commands/architecture/scaffold.command.d.ts +7 -0
  23. package/dist/commands/architecture/scaffold.command.js +162 -0
  24. package/dist/commands/architecture/scaffold.command.js.map +1 -0
  25. package/dist/commands/commands.test.d.ts +1 -0
  26. package/dist/commands/commands.test.js +131 -0
  27. package/dist/commands/commands.test.js.map +1 -0
  28. package/dist/commands/completion/completion.command.d.ts +20 -0
  29. package/dist/commands/completion/completion.command.js +215 -0
  30. package/dist/commands/completion/completion.command.js.map +1 -0
  31. package/dist/commands/docs/docs.command.d.ts +9 -0
  32. package/dist/commands/docs/docs.command.js +77 -0
  33. package/dist/commands/docs/docs.command.js.map +1 -0
  34. package/dist/commands/history/history.command.d.ts +29 -0
  35. package/dist/commands/history/history.command.js +268 -0
  36. package/dist/commands/history/history.command.js.map +1 -0
  37. package/dist/commands/init/agents.command.d.ts +22 -0
  38. package/dist/commands/init/agents.command.js +502 -0
  39. package/dist/commands/init/agents.command.js.map +1 -0
  40. package/dist/commands/init/init.command.d.ts +20 -0
  41. package/dist/commands/init/init.command.js +329 -0
  42. package/dist/commands/init/init.command.js.map +1 -0
  43. package/dist/commands/init/upgrade.command.d.ts +9 -0
  44. package/dist/commands/init/upgrade.command.js +77 -0
  45. package/dist/commands/init/upgrade.command.js.map +1 -0
  46. package/dist/commands/mcp/mcp-serve.command.d.ts +15 -0
  47. package/dist/commands/mcp/mcp-serve.command.js +106 -0
  48. package/dist/commands/mcp/mcp-serve.command.js.map +1 -0
  49. package/dist/commands/sdlc/generate-domain.command.d.ts +5 -0
  50. package/dist/commands/sdlc/generate-domain.command.js +55 -0
  51. package/dist/commands/sdlc/generate-domain.command.js.map +1 -0
  52. package/dist/commands/sdlc/handoff.command.d.ts +22 -0
  53. package/dist/commands/sdlc/handoff.command.js +273 -0
  54. package/dist/commands/sdlc/handoff.command.js.map +1 -0
  55. package/dist/commands/sdlc/sdlc.command.d.ts +4 -0
  56. package/dist/commands/sdlc/sdlc.command.js +34 -0
  57. package/dist/commands/sdlc/sdlc.command.js.map +1 -0
  58. package/dist/commands/standards/standards.command.d.ts +27 -0
  59. package/dist/commands/standards/standards.command.js +308 -0
  60. package/dist/commands/standards/standards.command.js.map +1 -0
  61. package/dist/commands/validate/validate.command.d.ts +19 -0
  62. package/dist/commands/validate/validate.command.js +231 -0
  63. package/dist/commands/validate/validate.command.js.map +1 -0
  64. package/dist/config/runtimes.json +196 -0
  65. package/dist/config/tool-catalog.json +343 -0
  66. package/dist/core/abstractions/index.d.ts +6 -0
  67. package/dist/core/abstractions/index.js +23 -0
  68. package/dist/core/abstractions/index.js.map +1 -0
  69. package/dist/core/abstractions/interfaces.d.ts +60 -0
  70. package/dist/core/abstractions/interfaces.js +5 -0
  71. package/dist/core/abstractions/interfaces.js.map +1 -0
  72. package/dist/core/abstractions/providers/config-parser.provider.d.ts +15 -0
  73. package/dist/core/abstractions/providers/config-parser.provider.js +68 -0
  74. package/dist/core/abstractions/providers/config-parser.provider.js.map +1 -0
  75. package/dist/core/abstractions/providers/logger.provider.d.ts +10 -0
  76. package/dist/core/abstractions/providers/logger.provider.js +84 -0
  77. package/dist/core/abstractions/providers/logger.provider.js.map +1 -0
  78. package/dist/core/abstractions/providers/mock-filesystem.provider.d.ts +30 -0
  79. package/dist/core/abstractions/providers/mock-filesystem.provider.js +122 -0
  80. package/dist/core/abstractions/providers/mock-filesystem.provider.js.map +1 -0
  81. package/dist/core/abstractions/providers/node-filesystem.provider.d.ts +19 -0
  82. package/dist/core/abstractions/providers/node-filesystem.provider.js +104 -0
  83. package/dist/core/abstractions/providers/node-filesystem.provider.js.map +1 -0
  84. package/dist/core/architecture/nx-workspace.strategy.d.ts +11 -0
  85. package/dist/core/architecture/nx-workspace.strategy.js +107 -0
  86. package/dist/core/architecture/nx-workspace.strategy.js.map +1 -0
  87. package/dist/core/architecture/workspace-manager.strategy.d.ts +7 -0
  88. package/dist/core/architecture/workspace-manager.strategy.js +3 -0
  89. package/dist/core/architecture/workspace-manager.strategy.js.map +1 -0
  90. package/dist/core/config/config.service.d.ts +15 -0
  91. package/dist/core/config/config.service.js +55 -0
  92. package/dist/core/config/config.service.js.map +1 -0
  93. package/dist/core/config/config.service.spec.d.ts +1 -0
  94. package/dist/core/config/config.service.spec.js +43 -0
  95. package/dist/core/config/config.service.spec.js.map +1 -0
  96. package/dist/core/di/container.d.ts +25 -0
  97. package/dist/core/di/container.js +87 -0
  98. package/dist/core/di/container.js.map +1 -0
  99. package/dist/core/di/container.spec.d.ts +1 -0
  100. package/dist/core/di/container.spec.js +137 -0
  101. package/dist/core/di/container.spec.js.map +1 -0
  102. package/dist/core/errors/index.d.ts +26 -0
  103. package/dist/core/errors/index.js +67 -0
  104. package/dist/core/errors/index.js.map +1 -0
  105. package/dist/core/filesystem/file-manager.service.d.ts +4 -0
  106. package/dist/core/filesystem/file-manager.service.js +96 -0
  107. package/dist/core/filesystem/file-manager.service.js.map +1 -0
  108. package/dist/core/filesystem/file-manager.service.spec.d.ts +1 -0
  109. package/dist/core/filesystem/file-manager.service.spec.js +103 -0
  110. package/dist/core/filesystem/file-manager.service.spec.js.map +1 -0
  111. package/dist/core/mcp/mcp-server.service.d.ts +7 -0
  112. package/dist/core/mcp/mcp-server.service.js +31 -0
  113. package/dist/core/mcp/mcp-server.service.js.map +1 -0
  114. package/dist/core/mcp/metrics.service.d.ts +37 -0
  115. package/dist/core/mcp/metrics.service.js +72 -0
  116. package/dist/core/mcp/metrics.service.js.map +1 -0
  117. package/dist/core/mcp/prompts/index.d.ts +22 -0
  118. package/dist/core/mcp/prompts/index.js +175 -0
  119. package/dist/core/mcp/prompts/index.js.map +1 -0
  120. package/dist/core/mcp/resources/index.d.ts +11 -0
  121. package/dist/core/mcp/resources/index.js +193 -0
  122. package/dist/core/mcp/resources/index.js.map +1 -0
  123. package/dist/core/mcp/server.d.ts +25 -0
  124. package/dist/core/mcp/server.js +413 -0
  125. package/dist/core/mcp/server.js.map +1 -0
  126. package/dist/core/mcp/tools/agent.d.ts +41 -0
  127. package/dist/core/mcp/tools/agent.js +195 -0
  128. package/dist/core/mcp/tools/agent.js.map +1 -0
  129. package/dist/core/mcp/tools/architecture.d.ts +27 -0
  130. package/dist/core/mcp/tools/architecture.js +166 -0
  131. package/dist/core/mcp/tools/architecture.js.map +1 -0
  132. package/dist/core/mcp/tools/sdlc.d.ts +32 -0
  133. package/dist/core/mcp/tools/sdlc.js +189 -0
  134. package/dist/core/mcp/tools/sdlc.js.map +1 -0
  135. package/dist/core/mcp/tools/tool-utils.d.ts +4 -0
  136. package/dist/core/mcp/tools/tool-utils.js +18 -0
  137. package/dist/core/mcp/tools/tool-utils.js.map +1 -0
  138. package/dist/core/mcp/tools/validate.d.ts +18 -0
  139. package/dist/core/mcp/tools/validate.js +56 -0
  140. package/dist/core/mcp/tools/validate.js.map +1 -0
  141. package/dist/core/mcp/watcher.service.d.ts +8 -0
  142. package/dist/core/mcp/watcher.service.js +82 -0
  143. package/dist/core/mcp/watcher.service.js.map +1 -0
  144. package/dist/core/mcp/watcher.service.spec.d.ts +1 -0
  145. package/dist/core/mcp/watcher.service.spec.js +70 -0
  146. package/dist/core/mcp/watcher.service.spec.js.map +1 -0
  147. package/dist/core/observability/command-watcher.d.ts +45 -0
  148. package/dist/core/observability/command-watcher.js +168 -0
  149. package/dist/core/observability/command-watcher.js.map +1 -0
  150. package/dist/core/observability/error-reporter.d.ts +47 -0
  151. package/dist/core/observability/error-reporter.js +163 -0
  152. package/dist/core/observability/error-reporter.js.map +1 -0
  153. package/dist/core/observability/index.d.ts +4 -0
  154. package/dist/core/observability/index.js +24 -0
  155. package/dist/core/observability/index.js.map +1 -0
  156. package/dist/core/observability/observability.test.d.ts +1 -0
  157. package/dist/core/observability/observability.test.js +224 -0
  158. package/dist/core/observability/observability.test.js.map +1 -0
  159. package/dist/core/observability/structured-logger.d.ts +53 -0
  160. package/dist/core/observability/structured-logger.js +123 -0
  161. package/dist/core/observability/structured-logger.js.map +1 -0
  162. package/dist/core/observability/timing.d.ts +23 -0
  163. package/dist/core/observability/timing.js +140 -0
  164. package/dist/core/observability/timing.js.map +1 -0
  165. package/dist/core/services/command-executor.service.d.ts +3 -0
  166. package/dist/core/services/command-executor.service.js +12 -0
  167. package/dist/core/services/command-executor.service.js.map +1 -0
  168. package/dist/core/services/command-history.service.d.ts +38 -0
  169. package/dist/core/services/command-history.service.js +146 -0
  170. package/dist/core/services/command-history.service.js.map +1 -0
  171. package/dist/core/services/command-providers.d.ts +1 -0
  172. package/dist/core/services/command-providers.js +17 -0
  173. package/dist/core/services/command-providers.js.map +1 -0
  174. package/dist/core/services/runtime-catalog.service.d.ts +2 -0
  175. package/dist/core/services/runtime-catalog.service.js +7 -0
  176. package/dist/core/services/runtime-catalog.service.js.map +1 -0
  177. package/dist/core/sync/sync.service.d.ts +4 -0
  178. package/dist/core/sync/sync.service.js +81 -0
  179. package/dist/core/sync/sync.service.js.map +1 -0
  180. package/dist/core/sync/sync.service.spec.d.ts +1 -0
  181. package/dist/core/sync/sync.service.spec.js +63 -0
  182. package/dist/core/sync/sync.service.spec.js.map +1 -0
  183. package/dist/core/validators/ruleset-validator.service.d.ts +56 -0
  184. package/dist/core/validators/ruleset-validator.service.js +263 -0
  185. package/dist/core/validators/ruleset-validator.service.js.map +1 -0
  186. package/dist/core/validators/ruleset-validator.service.spec.d.ts +1 -0
  187. package/dist/core/validators/ruleset-validator.service.spec.js +121 -0
  188. package/dist/core/validators/ruleset-validator.service.spec.js.map +1 -0
  189. package/dist/domain/entities/index.d.ts +72 -0
  190. package/dist/domain/entities/index.js +119 -0
  191. package/dist/domain/entities/index.js.map +1 -0
  192. package/dist/domain/interfaces.d.ts +224 -0
  193. package/dist/domain/interfaces.js +3 -0
  194. package/dist/domain/interfaces.js.map +1 -0
  195. package/dist/domain/services/adr.service.d.ts +50 -0
  196. package/dist/domain/services/adr.service.js +125 -0
  197. package/dist/domain/services/adr.service.js.map +1 -0
  198. package/dist/domain/services/agent-registry.service.d.ts +26 -0
  199. package/dist/domain/services/agent-registry.service.js +152 -0
  200. package/dist/domain/services/agent-registry.service.js.map +1 -0
  201. package/dist/domain/services/index.d.ts +33 -0
  202. package/dist/domain/services/index.js +126 -0
  203. package/dist/domain/services/index.js.map +1 -0
  204. package/dist/domain/services/services.test.d.ts +1 -0
  205. package/dist/domain/services/services.test.js +236 -0
  206. package/dist/domain/services/services.test.js.map +1 -0
  207. package/dist/domain/services/standards.service.d.ts +47 -0
  208. package/dist/domain/services/standards.service.js +129 -0
  209. package/dist/domain/services/standards.service.js.map +1 -0
  210. package/dist/domain/services/tool-usage-telemetry.service.d.ts +46 -0
  211. package/dist/domain/services/tool-usage-telemetry.service.js +181 -0
  212. package/dist/domain/services/tool-usage-telemetry.service.js.map +1 -0
  213. package/dist/infrastructure/catalog/catalog-loader.d.ts +22 -0
  214. package/dist/infrastructure/catalog/catalog-loader.js +135 -0
  215. package/dist/infrastructure/catalog/catalog-loader.js.map +1 -0
  216. package/dist/infrastructure/catalog/catalog-loader.test.d.ts +1 -0
  217. package/dist/infrastructure/catalog/catalog-loader.test.js +184 -0
  218. package/dist/infrastructure/catalog/catalog-loader.test.js.map +1 -0
  219. package/dist/infrastructure/cli/command-executor.d.ts +20 -0
  220. package/dist/infrastructure/cli/command-executor.js +109 -0
  221. package/dist/infrastructure/cli/command-executor.js.map +1 -0
  222. package/dist/infrastructure/cli/command-executor.test.d.ts +1 -0
  223. package/dist/infrastructure/cli/command-executor.test.js +98 -0
  224. package/dist/infrastructure/cli/command-executor.test.js.map +1 -0
  225. package/dist/infrastructure/cli/providers/index.d.ts +52 -0
  226. package/dist/infrastructure/cli/providers/index.js +175 -0
  227. package/dist/infrastructure/cli/providers/index.js.map +1 -0
  228. package/dist/infrastructure/formatters/output-formatter.service.d.ts +28 -0
  229. package/dist/infrastructure/formatters/output-formatter.service.js +198 -0
  230. package/dist/infrastructure/formatters/output-formatter.service.js.map +1 -0
  231. package/dist/main.d.ts +2 -0
  232. package/dist/main.js +10 -0
  233. package/dist/main.js.map +1 -0
  234. package/dist/test/mocks/index.d.ts +44 -0
  235. package/dist/test/mocks/index.js +135 -0
  236. package/dist/test/mocks/index.js.map +1 -0
  237. package/package.json +80 -0
  238. package/shell/completion.bash +85 -0
  239. package/shell/completion.fish +72 -0
  240. package/shell/completion.zsh +83 -0
  241. package/templates/evolith.yaml.example +45 -0
@@ -0,0 +1,413 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.EvolithMcpServer = void 0;
37
+ exports.startMcpServer = startMcpServer;
38
+ const common_1 = require("@nestjs/common");
39
+ const ruleset_validator_service_1 = require("../validators/ruleset-validator.service");
40
+ const validate_1 = require("./tools/validate");
41
+ const agent_1 = require("./tools/agent");
42
+ const architecture_1 = require("./tools/architecture");
43
+ const sdlc_1 = require("./tools/sdlc");
44
+ const resources_1 = require("./resources");
45
+ const prompts_1 = require("./prompts");
46
+ const metrics_service_1 = require("./metrics.service");
47
+ let ServerClass;
48
+ let StdioTransportClass;
49
+ let StreamableHttpTransportClass;
50
+ async function loadMcpSdk() {
51
+ if (ServerClass)
52
+ return;
53
+ try {
54
+ const mcp = await Promise.resolve().then(() => __importStar(require('@modelcontextprotocol/sdk')));
55
+ ServerClass = mcp.Server;
56
+ StdioTransportClass = mcp.StdioServerTransport;
57
+ const httpTransport = await Promise.resolve().then(() => __importStar(require('@modelcontextprotocol/sdk/server/streamableHttp')));
58
+ if (httpTransport.StreamableHTTPServerTransport) {
59
+ StreamableHttpTransportClass = httpTransport.StreamableHTTPServerTransport;
60
+ }
61
+ }
62
+ catch (error) {
63
+ const msg = error instanceof Error ? error.message : String(error);
64
+ throw new Error(`Failed to load @modelcontextprotocol/sdk: ${msg}. Install with: npm install @modelcontextprotocol/sdk`);
65
+ }
66
+ }
67
+ function validateApiKey(apiKey, validKey) {
68
+ if (!validKey)
69
+ return true;
70
+ if (!apiKey)
71
+ return false;
72
+ return apiKey === validKey;
73
+ }
74
+ const LIST_TOOLS_REQUEST_SCHEMA = {
75
+ name: 'tools/list',
76
+ description: 'List available tools',
77
+ };
78
+ const CALL_TOOL_REQUEST_SCHEMA = {
79
+ name: 'tools/call',
80
+ description: 'Call a tool by name',
81
+ };
82
+ const LIST_RESOURCES_REQUEST_SCHEMA = {
83
+ name: 'resources/list',
84
+ description: 'List available resources',
85
+ };
86
+ const READ_RESOURCE_REQUEST_SCHEMA = {
87
+ name: 'resources/read',
88
+ description: 'Read a resource',
89
+ };
90
+ const LIST_PROMPTS_REQUEST_SCHEMA = {
91
+ name: 'prompts/list',
92
+ description: 'List available prompts',
93
+ };
94
+ const GET_PROMPT_REQUEST_SCHEMA = {
95
+ name: 'prompts/get',
96
+ description: 'Get a prompt template',
97
+ };
98
+ class EvolithMcpServer {
99
+ constructor(options = {}) {
100
+ this.logger = new common_1.Logger(EvolithMcpServer.name);
101
+ this.serverInstance = null;
102
+ this.rulesetValidator = options.rulesetValidator || new ruleset_validator_service_1.RulesetValidatorService();
103
+ this.metricsService = options.metricsService || new metrics_service_1.McpMetricsService();
104
+ this.apiKey = options.apiKey || process.env.EVOLITH_API_KEY;
105
+ this.port = options.port || parseInt(process.env.PORT || '3000', 10);
106
+ }
107
+ async initialize() {
108
+ await loadMcpSdk();
109
+ this.serverInstance = new ServerClass({
110
+ name: 'evolith-mcp-server',
111
+ version: '1.0.0',
112
+ });
113
+ this.serverInstance.setRequestHandler(LIST_TOOLS_REQUEST_SCHEMA, async () => {
114
+ return this.handleListTools();
115
+ });
116
+ this.serverInstance.setRequestHandler(CALL_TOOL_REQUEST_SCHEMA, async (request) => {
117
+ const req = request;
118
+ if (!validateApiKey(req.arguments?.apiKey, this.apiKey)) {
119
+ return {
120
+ content: [{ type: 'text', text: JSON.stringify({ error: true, message: 'Invalid API key' }) }],
121
+ isError: true,
122
+ };
123
+ }
124
+ const args = { ...req.arguments };
125
+ delete args.apiKey;
126
+ return this.handleCallTool(req.name, args);
127
+ });
128
+ this.serverInstance.setRequestHandler(LIST_RESOURCES_REQUEST_SCHEMA, async () => {
129
+ return (0, resources_1.listResources)();
130
+ });
131
+ this.serverInstance.setRequestHandler(READ_RESOURCE_REQUEST_SCHEMA, async (request) => {
132
+ return (0, resources_1.readResource)(request);
133
+ });
134
+ this.serverInstance.setRequestHandler(LIST_PROMPTS_REQUEST_SCHEMA, async () => {
135
+ return (0, prompts_1.listPrompts)();
136
+ });
137
+ this.serverInstance.setRequestHandler(GET_PROMPT_REQUEST_SCHEMA, async (request) => {
138
+ return (0, prompts_1.getPrompt)(request);
139
+ });
140
+ this.logger.log('Evolith MCP Server initialized');
141
+ }
142
+ async connect(transport = 'stdio') {
143
+ if (!this.serverInstance) {
144
+ await this.initialize();
145
+ }
146
+ if (transport === 'http') {
147
+ await this.startHttpServer();
148
+ }
149
+ else {
150
+ const stdioTransport = new StdioTransportClass();
151
+ await this.serverInstance.connect(stdioTransport);
152
+ }
153
+ }
154
+ async startHttpServer() {
155
+ if (!StreamableHttpTransportClass) {
156
+ this.logger.warn('Streamable HTTP transport not available, falling back to stdio');
157
+ const stdioTransport = new StdioTransportClass();
158
+ await this.serverInstance.connect(stdioTransport);
159
+ return;
160
+ }
161
+ this.logger.log(`Starting HTTP MCP server on port ${this.port}`);
162
+ const httpTransport = new StreamableHttpTransportClass({
163
+ port: this.port,
164
+ host: '0.0.0.0',
165
+ });
166
+ await this.serverInstance.connect(httpTransport);
167
+ }
168
+ async handleListTools() {
169
+ return {
170
+ tools: [
171
+ {
172
+ name: 'evolith-validate',
173
+ description: 'Validate a repository against Evolith governance rules. Returns validation status, rules checked, and any issues found.',
174
+ inputSchema: {
175
+ type: 'object',
176
+ properties: {
177
+ path: { type: 'string', description: 'Path to the repository to validate' },
178
+ format: { type: 'string', description: 'Output format: json, summary, table', default: 'json' },
179
+ ruleset: { type: 'string', description: 'Specific ruleset to validate (acl, open-core, inheritance, adr-XXXX)' },
180
+ corePath: { type: 'string', description: 'Path to Evolith Core (optional, auto-detected)' },
181
+ },
182
+ required: ['path'],
183
+ },
184
+ },
185
+ {
186
+ name: 'evolith-agent-install',
187
+ description: 'Install a new Evolith agent with specified name and template',
188
+ inputSchema: {
189
+ type: 'object',
190
+ properties: {
191
+ name: { type: 'string', description: 'Name of the agent to install' },
192
+ template: { type: 'string', description: 'Template to use: standard, minimal, enterprise', default: 'standard' },
193
+ dir: { type: 'string', description: 'Directory to install into (defaults to current working directory)' },
194
+ },
195
+ required: ['name'],
196
+ },
197
+ },
198
+ {
199
+ name: 'evolith-agent-list',
200
+ description: 'List all installed Evolith agents in a repository',
201
+ inputSchema: {
202
+ type: 'object',
203
+ properties: {
204
+ dir: { type: 'string', description: 'Directory to search for agents (defaults to current working directory)' },
205
+ },
206
+ },
207
+ },
208
+ {
209
+ name: 'evolith-agent-validate',
210
+ description: 'Validate a specific agent ruleset',
211
+ inputSchema: {
212
+ type: 'object',
213
+ properties: {
214
+ name: { type: 'string', description: 'Name of the agent to validate' },
215
+ dir: { type: 'string', description: 'Directory containing the agent (defaults to current working directory)' },
216
+ },
217
+ required: ['name'],
218
+ },
219
+ },
220
+ {
221
+ name: 'evolith-agent-upgrade',
222
+ description: 'Upgrade an existing Evolith agent to the latest version',
223
+ inputSchema: {
224
+ type: 'object',
225
+ properties: {
226
+ name: { type: 'string', description: 'Name of the agent to upgrade' },
227
+ dir: { type: 'string', description: 'Directory containing the agent (defaults to current working directory)' },
228
+ },
229
+ required: ['name'],
230
+ },
231
+ },
232
+ {
233
+ name: 'evolith-agent-remove',
234
+ description: 'Remove an Evolith agent and its ruleset',
235
+ inputSchema: {
236
+ type: 'object',
237
+ properties: {
238
+ name: { type: 'string', description: 'Name of the agent to remove' },
239
+ dir: { type: 'string', description: 'Directory containing the agent (defaults to current working directory)' },
240
+ },
241
+ required: ['name'],
242
+ },
243
+ },
244
+ {
245
+ name: 'evolith-architecture-validate',
246
+ description: 'Validate repository architecture against F1/F2/F3 rules',
247
+ inputSchema: {
248
+ type: 'object',
249
+ properties: {
250
+ path: { type: 'string', description: 'Path to the repository to validate' },
251
+ level: { type: 'string', description: 'Architecture level: F1 (modular), F2 (contracts), F3 (extraction)', default: 'F1' },
252
+ },
253
+ required: ['path'],
254
+ },
255
+ },
256
+ {
257
+ name: 'evolith-sdlc-handoff',
258
+ description: 'Generate SDLC phase handoff artifact manifest',
259
+ inputSchema: {
260
+ type: 'object',
261
+ properties: {
262
+ path: { type: 'string', description: 'Path to the repository' },
263
+ fromPhase: { type: 'string', description: 'Source phase: phase-0, phase-1, phase-2, phase-3, phase-4' },
264
+ toPhase: { type: 'string', description: 'Target phase: phase-0, phase-1, phase-2, phase-3, phase-4' },
265
+ },
266
+ required: ['path', 'fromPhase', 'toPhase'],
267
+ },
268
+ },
269
+ {
270
+ name: 'evolith-sdlc-status',
271
+ description: 'Show current SDLC phase gate status for a repository',
272
+ inputSchema: {
273
+ type: 'object',
274
+ properties: {
275
+ path: { type: 'string', description: 'Path to the repository' },
276
+ },
277
+ required: ['path'],
278
+ },
279
+ },
280
+ {
281
+ name: 'evolith-config-get',
282
+ description: 'Get Evolith configuration value',
283
+ inputSchema: {
284
+ type: 'object',
285
+ properties: {
286
+ key: { type: 'string', description: 'Configuration key to retrieve' },
287
+ dir: { type: 'string', description: 'Directory containing evolith.yaml' },
288
+ },
289
+ required: ['key'],
290
+ },
291
+ },
292
+ {
293
+ name: 'evolith-config-set',
294
+ description: 'Set Evolith configuration value',
295
+ inputSchema: {
296
+ type: 'object',
297
+ properties: {
298
+ key: { type: 'string', description: 'Configuration key to set' },
299
+ value: { type: 'string', description: 'Value to set' },
300
+ dir: { type: 'string', description: 'Directory containing evolith.yaml' },
301
+ },
302
+ required: ['key', 'value'],
303
+ },
304
+ },
305
+ {
306
+ name: 'evolith-metrics',
307
+ description: 'Get MCP server metrics including tool usage statistics, latency, and error rates',
308
+ inputSchema: {
309
+ type: 'object',
310
+ properties: {},
311
+ },
312
+ },
313
+ ],
314
+ };
315
+ }
316
+ async handleCallTool(name, args) {
317
+ this.logger.debug(`Tool call: ${name} with args: ${JSON.stringify(args)}`);
318
+ const startTime = Date.now();
319
+ try {
320
+ let result;
321
+ if (name === 'evolith-validate') {
322
+ result = await (0, validate_1.handleValidateTool)(args, this.rulesetValidator);
323
+ }
324
+ else if (name.startsWith('evolith-agent')) {
325
+ result = await (0, agent_1.handleAgentTools)(name, args);
326
+ }
327
+ else if (name === 'evolith-architecture-validate') {
328
+ result = await (0, architecture_1.handleArchitectureTools)(args);
329
+ }
330
+ else if (name.startsWith('evolith-sdlc')) {
331
+ result = await (0, sdlc_1.handleSdlcTools)(name, args);
332
+ }
333
+ else if (name === 'evolith-config-get' || name === 'evolith-config-set') {
334
+ result = await handleConfigTools(name, args);
335
+ }
336
+ else if (name === 'evolith-metrics') {
337
+ result = this.metricsService.getMetrics();
338
+ }
339
+ else {
340
+ throw new Error(`Unknown tool: ${name}`);
341
+ }
342
+ const latencyMs = Date.now() - startTime;
343
+ this.metricsService.recordToolCall(name, latencyMs, true);
344
+ return {
345
+ content: [
346
+ {
347
+ type: 'text',
348
+ text: typeof result === 'string' ? result : JSON.stringify(result, null, 2),
349
+ },
350
+ ],
351
+ };
352
+ }
353
+ catch (error) {
354
+ const latencyMs = Date.now() - startTime;
355
+ const message = error instanceof Error ? error.message : String(error);
356
+ this.logger.error(`Tool ${name} failed: ${message}`);
357
+ this.metricsService.recordToolCall(name, latencyMs, false);
358
+ this.metricsService.recordError(message.substring(0, 50));
359
+ return {
360
+ content: [
361
+ {
362
+ type: 'text',
363
+ text: JSON.stringify({ error: true, message }),
364
+ },
365
+ ],
366
+ isError: true,
367
+ };
368
+ }
369
+ }
370
+ }
371
+ exports.EvolithMcpServer = EvolithMcpServer;
372
+ async function handleConfigTools(name, args) {
373
+ const fs = await Promise.resolve().then(() => __importStar(require('fs-extra')));
374
+ const path = await Promise.resolve().then(() => __importStar(require('path')));
375
+ const yaml = await Promise.resolve().then(() => __importStar(require('yaml')));
376
+ const dir = args.dir || process.cwd();
377
+ const configPath = path.join(dir, 'evolith.yaml');
378
+ if (!(await fs.pathExists(configPath))) {
379
+ throw new Error('evolith.yaml not found');
380
+ }
381
+ const config = yaml.parse(await fs.readFile(configPath, 'utf-8'));
382
+ if (name === 'evolith-config-get') {
383
+ const key = args.key;
384
+ const keys = key.split('.');
385
+ let value = config;
386
+ for (const k of keys) {
387
+ value = value?.[k];
388
+ }
389
+ return { key, value: value ?? null };
390
+ }
391
+ else {
392
+ const key = args.key;
393
+ const value = args.value;
394
+ const keys = key.split('.');
395
+ let target = config;
396
+ for (let i = 0; i < keys.length - 1; i++) {
397
+ if (!target[keys[i]]) {
398
+ target[keys[i]] = {};
399
+ }
400
+ target = target[keys[i]];
401
+ }
402
+ target[keys[keys.length - 1]] = value;
403
+ await fs.writeFile(configPath, yaml.stringify(config));
404
+ return { key, value, updated: true };
405
+ }
406
+ }
407
+ async function startMcpServer(options = {}) {
408
+ const server = new EvolithMcpServer(options);
409
+ const transport = options.transport || 'stdio';
410
+ await server.connect(transport);
411
+ return server;
412
+ }
413
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/core/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ interface AgentInfo {
2
+ name: string;
3
+ version: string;
4
+ template: string;
5
+ installedAt: string;
6
+ rulesetPath: string;
7
+ }
8
+ export declare function handleAgentTools(toolName: string, args: Record<string, unknown>): Promise<{
9
+ agents: any[];
10
+ message: string;
11
+ count?: undefined;
12
+ } | {
13
+ agents: AgentInfo[];
14
+ count: number;
15
+ message?: undefined;
16
+ } | {
17
+ valid: boolean;
18
+ error: string;
19
+ agent?: undefined;
20
+ issues?: undefined;
21
+ timestamp?: undefined;
22
+ } | {
23
+ valid: boolean;
24
+ agent: string;
25
+ issues: {
26
+ field: string;
27
+ message: string;
28
+ }[];
29
+ timestamp: string;
30
+ error?: undefined;
31
+ } | {
32
+ success: boolean;
33
+ agent: string;
34
+ fromVersion: string;
35
+ toVersion: string;
36
+ } | {
37
+ success: boolean;
38
+ agent: string;
39
+ message: string;
40
+ }>;
41
+ export {};
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.handleAgentTools = handleAgentTools;
37
+ const path = __importStar(require("path"));
38
+ const tool_utils_1 = require("./tool-utils");
39
+ async function handleAgentTools(toolName, args) {
40
+ const fs = (0, tool_utils_1.getFileSystem)();
41
+ const dir = args.dir || process.cwd();
42
+ const name = args.name;
43
+ switch (toolName) {
44
+ case 'evolith-agent-install':
45
+ return agentInstall(name, args.template || 'standard', dir, fs);
46
+ case 'evolith-agent-list':
47
+ return agentList(dir, fs);
48
+ case 'evolith-agent-validate':
49
+ return agentValidate(name, dir, fs);
50
+ case 'evolith-agent-upgrade':
51
+ return agentUpgrade(name, dir, fs);
52
+ case 'evolith-agent-remove':
53
+ return agentRemove(name, dir, fs);
54
+ default:
55
+ throw new Error(`Unknown agent tool: ${toolName}`);
56
+ }
57
+ }
58
+ async function agentInstall(name, template, dir, fs) {
59
+ const rulesetDir = path.join(dir, 'rulesets', 'agents', name);
60
+ const rulesetPath = path.join(rulesetDir, 'agent.rules.json');
61
+ await fs.ensureDir(rulesetDir);
62
+ const templateContent = getAgentTemplate(name, template);
63
+ await fs.writeJson(rulesetPath, templateContent);
64
+ return {
65
+ success: true,
66
+ agent: name,
67
+ template,
68
+ rulesetPath,
69
+ message: `Agent '${name}' installed successfully using '${template}' template`,
70
+ };
71
+ }
72
+ async function agentList(dir, fs) {
73
+ const agentsDir = path.join(dir, 'rulesets', 'agents');
74
+ if (!(await fs.exists(agentsDir))) {
75
+ return { agents: [], message: 'No agents directory found' };
76
+ }
77
+ const names = await fs.readdirNames(agentsDir);
78
+ const agents = [];
79
+ for (const entry of names) {
80
+ const agentDir = path.join(agentsDir, entry);
81
+ const stat = await fs.stat(agentDir);
82
+ if (stat.isDirectory()) {
83
+ const rulesetPath = path.join(agentDir, 'agent.rules.json');
84
+ if (await fs.exists(rulesetPath)) {
85
+ const ruleset = await fs.readJson(rulesetPath);
86
+ agents.push({
87
+ name: entry,
88
+ version: ruleset.agent?.version || '1.0.0',
89
+ template: ruleset.agent?.template || 'standard',
90
+ installedAt: ruleset.agent?.installedAt || new Date().toISOString(),
91
+ rulesetPath,
92
+ });
93
+ }
94
+ }
95
+ }
96
+ return { agents, count: agents.length };
97
+ }
98
+ async function agentValidate(name, dir, fs) {
99
+ const rulesetPath = path.join(dir, 'rulesets', 'agents', name, 'agent.rules.json');
100
+ if (!(await fs.exists(rulesetPath))) {
101
+ return { valid: false, error: `Agent '${name}' not found` };
102
+ }
103
+ const ruleset = await fs.readJson(rulesetPath);
104
+ const issues = [];
105
+ if (!ruleset.agent?.name) {
106
+ issues.push({ field: 'agent.name', message: 'Agent name is required' });
107
+ }
108
+ if (!ruleset.ruleset?.version) {
109
+ issues.push({ field: 'ruleset.version', message: 'Ruleset version is required' });
110
+ }
111
+ if (!ruleset.principles || ruleset.principles.length === 0) {
112
+ issues.push({ field: 'principles', message: 'At least one principle is required' });
113
+ }
114
+ return {
115
+ valid: issues.length === 0,
116
+ agent: name,
117
+ issues,
118
+ timestamp: new Date().toISOString(),
119
+ };
120
+ }
121
+ async function agentUpgrade(name, dir, fs) {
122
+ const rulesetPath = path.join(dir, 'rulesets', 'agents', name, 'agent.rules.json');
123
+ if (!(await fs.exists(rulesetPath))) {
124
+ throw new Error(`Agent '${name}' not found`);
125
+ }
126
+ const ruleset = await fs.readJson(rulesetPath);
127
+ const currentVersion = ruleset.agent?.version || '1.0.0';
128
+ const newVersion = incrementVersion(currentVersion);
129
+ ruleset.agent.version = newVersion;
130
+ await fs.writeJson(rulesetPath, ruleset);
131
+ return {
132
+ success: true,
133
+ agent: name,
134
+ fromVersion: currentVersion,
135
+ toVersion: newVersion,
136
+ };
137
+ }
138
+ async function agentRemove(name, dir, fs) {
139
+ const agentDir = path.join(dir, 'rulesets', 'agents', name);
140
+ if (!(await fs.exists(agentDir))) {
141
+ throw new Error(`Agent '${name}' not found`);
142
+ }
143
+ await fs.remove(agentDir);
144
+ return {
145
+ success: true,
146
+ agent: name,
147
+ message: `Agent '${name}' removed successfully`,
148
+ };
149
+ }
150
+ function getAgentTemplate(name, template) {
151
+ const base = {
152
+ agent: {
153
+ name,
154
+ template,
155
+ version: '1.0.0',
156
+ installedAt: new Date().toISOString(),
157
+ },
158
+ ruleset: {
159
+ version: '1.0',
160
+ type: 'agent',
161
+ },
162
+ principles: [],
163
+ };
164
+ if (template === 'minimal') {
165
+ return {
166
+ ...base,
167
+ principles: [
168
+ { id: 'AGT-01', principle: 'Minimal Agent Principle', statement: 'This agent follows minimal governance rules.', severity: 'SHOULD', blocking: false },
169
+ ],
170
+ };
171
+ }
172
+ else if (template === 'enterprise') {
173
+ return {
174
+ ...base,
175
+ principles: [
176
+ { id: 'AGT-01', principle: 'Enterprise Agent Principle', statement: 'This agent enforces full enterprise governance.', severity: 'MUST', blocking: true },
177
+ { id: 'AGT-02', principle: 'Audit Trail Principle', statement: 'All agent actions must be logged.', severity: 'MUST', blocking: true },
178
+ { id: 'AGT-03', principle: 'Approval Chain Principle', statement: 'Critical actions require approval.', severity: 'SHOULD', blocking: false },
179
+ ],
180
+ };
181
+ }
182
+ return {
183
+ ...base,
184
+ principles: [
185
+ { id: 'AGT-01', principle: 'Standard Agent Principle', statement: 'This agent follows standard Evolith governance rules.', severity: 'MUST', blocking: true },
186
+ { id: 'AGT-02', principle: 'Bilingual Support Principle', statement: 'Agent must support both EN and ES documentation.', severity: 'SHOULD', blocking: false },
187
+ ],
188
+ };
189
+ }
190
+ function incrementVersion(version) {
191
+ const parts = version.split('.').map(Number);
192
+ parts[2]++;
193
+ return parts.join('.');
194
+ }
195
+ //# sourceMappingURL=agent.js.map