@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,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.commandExecutor = exports.CommandExecutor = exports.CommandResult = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const util_1 = require("util");
6
+ const errors_1 = require("../../core/errors");
7
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
8
+ class CommandResult {
9
+ constructor(success, stdout, stderr, exitCode) {
10
+ this.success = success;
11
+ this.stdout = stdout;
12
+ this.stderr = stderr;
13
+ this.exitCode = exitCode;
14
+ }
15
+ static ok(stdout) {
16
+ return new CommandResult(true, stdout, '', 0);
17
+ }
18
+ static err(stderr, exitCode) {
19
+ return new CommandResult(false, '', stderr, exitCode);
20
+ }
21
+ }
22
+ exports.CommandResult = CommandResult;
23
+ class CommandExecutor {
24
+ constructor() {
25
+ this.toolCache = new Map();
26
+ this.versionCache = new Map();
27
+ }
28
+ async execute(command, cwd) {
29
+ try {
30
+ const options = cwd
31
+ ? { cwd, env: { ...process.env }, timeout: 120000 }
32
+ : { env: { ...process.env }, timeout: 120000 };
33
+ const { stdout, stderr } = await execAsync(command, options);
34
+ return CommandResult.ok(stdout);
35
+ }
36
+ catch (error) {
37
+ const err = error;
38
+ return CommandResult.err(err.stderr || err.message || 'Unknown error', err.code || 1);
39
+ }
40
+ }
41
+ async checkTool(name, versionCommand) {
42
+ if (this.toolCache.has(name)) {
43
+ return {
44
+ name,
45
+ command: versionCommand,
46
+ available: this.toolCache.get(name),
47
+ version: this.versionCache.get(name),
48
+ };
49
+ }
50
+ try {
51
+ const result = await this.execute(versionCommand);
52
+ if (result.success) {
53
+ const versionMatch = result.stdout.match(/\d+\.\d+\.\d+/);
54
+ const version = versionMatch ? versionMatch[0] : undefined;
55
+ this.toolCache.set(name, true);
56
+ if (version) {
57
+ this.versionCache.set(name, version);
58
+ }
59
+ return { name, command: versionCommand, available: true, version };
60
+ }
61
+ }
62
+ catch {
63
+ }
64
+ this.toolCache.set(name, false);
65
+ return {
66
+ name,
67
+ command: versionCommand,
68
+ available: false,
69
+ installHint: this.getInstallHint(name),
70
+ };
71
+ }
72
+ async executeOrThrow(command, cwd) {
73
+ const result = await this.execute(command, cwd);
74
+ if (!result.success) {
75
+ throw new errors_1.CommandExecutionError(command, result.exitCode, result.stderr);
76
+ }
77
+ return result.stdout;
78
+ }
79
+ getInstallHint(tool) {
80
+ const hints = {
81
+ npm: 'Install Node.js from https://nodejs.org/',
82
+ node: 'Install Node.js from https://nodejs.org/',
83
+ npx: 'Install Node.js from https://nodejs.org/',
84
+ nx: 'npm install -D nx @nx/node',
85
+ dotnet: 'Install .NET from https://dotnet.microsoft.com/download',
86
+ python: 'Install Python from https://python.org/',
87
+ pip: 'Install Python from https://python.org/',
88
+ docker: 'Install from https://docs.docker.com/get-docker/',
89
+ 'docker-compose': 'Install from https://docs.docker.com/compose/install/',
90
+ kubectl: 'Install from https://kubernetes.io/docs/tasks/tools/install-kubectl/',
91
+ helm: 'Install from https://helm.sh/docs/intro/install/',
92
+ vault: 'Install from https://www.vaultproject.io/downloads',
93
+ rush: 'npm install -g @microsoft/rush',
94
+ aws: 'Install AWS CLI from https://aws.amazon.com/cli/',
95
+ terraform: 'Install from https://www.terraform.io/downloads',
96
+ java: 'Install from https://adoptium.net/',
97
+ go: 'Install from https://go.dev/dl/',
98
+ rust: 'Install from https://rustup.rs/',
99
+ };
100
+ return hints[tool] || `Install ${tool} and ensure it's in your PATH`;
101
+ }
102
+ clearCache() {
103
+ this.toolCache.clear();
104
+ this.versionCache.clear();
105
+ }
106
+ }
107
+ exports.CommandExecutor = CommandExecutor;
108
+ exports.commandExecutor = new CommandExecutor();
109
+ //# sourceMappingURL=command-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-executor.js","sourceRoot":"","sources":["../../../src/infrastructure/cli/command-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const command_executor_1 = require("./command-executor");
4
+ describe('CommandResult', () => {
5
+ describe('ok', () => {
6
+ it('should create successful result', () => {
7
+ const result = command_executor_1.CommandResult.ok('output');
8
+ expect(result.success).toBe(true);
9
+ expect(result.stdout).toBe('output');
10
+ expect(result.stderr).toBe('');
11
+ expect(result.exitCode).toBe(0);
12
+ });
13
+ });
14
+ describe('err', () => {
15
+ it('should create error result', () => {
16
+ const result = command_executor_1.CommandResult.err('error message', 1);
17
+ expect(result.success).toBe(false);
18
+ expect(result.stdout).toBe('');
19
+ expect(result.stderr).toBe('error message');
20
+ expect(result.exitCode).toBe(1);
21
+ });
22
+ it('should handle different exit codes', () => {
23
+ const result = command_executor_1.CommandResult.err('failed', 127);
24
+ expect(result.exitCode).toBe(127);
25
+ });
26
+ });
27
+ });
28
+ describe('CommandExecutor', () => {
29
+ let executor;
30
+ beforeEach(() => {
31
+ executor = new command_executor_1.CommandExecutor();
32
+ });
33
+ afterEach(() => {
34
+ executor.clearCache();
35
+ });
36
+ describe('execute', () => {
37
+ it('should execute simple echo command', async () => {
38
+ const result = await executor.execute('echo "hello"');
39
+ expect(result.success).toBe(true);
40
+ expect(result.stdout).toContain('hello');
41
+ });
42
+ it('should return error for invalid command', async () => {
43
+ const result = await executor.execute('nonexistent-command-xyz');
44
+ expect(result.success).toBe(false);
45
+ expect(result.exitCode).toBeGreaterThan(0);
46
+ });
47
+ it('should handle command with working directory', async () => {
48
+ const result = await executor.execute('pwd', process.cwd());
49
+ expect(result.success).toBe(true);
50
+ });
51
+ });
52
+ describe('checkTool', () => {
53
+ it('should return available true for node', async () => {
54
+ const check = await executor.checkTool('node', 'node --version');
55
+ expect(check.name).toBe('node');
56
+ expect(check.available).toBe(true);
57
+ });
58
+ it('should return available true for npm', async () => {
59
+ const check = await executor.checkTool('npm', 'npm --version');
60
+ expect(check.name).toBe('npm');
61
+ expect(check.available).toBe(true);
62
+ expect(check.version).toBeDefined();
63
+ });
64
+ it('should return available false for nonexistent tool', async () => {
65
+ const check = await executor.checkTool('nonexistent-tool-xyz', 'nonexistent-tool-xyz --version');
66
+ expect(check.name).toBe('nonexistent-tool-xyz');
67
+ expect(check.available).toBe(false);
68
+ expect(check.installHint).toBeDefined();
69
+ });
70
+ it('should cache tool check results', async () => {
71
+ const firstCheck = await executor.checkTool('node', 'node --version');
72
+ const secondCheck = await executor.checkTool('node', 'node --version');
73
+ expect(firstCheck.available).toBe(secondCheck.available);
74
+ });
75
+ it('should parse version from output', async () => {
76
+ const check = await executor.checkTool('node', 'node --version');
77
+ expect(check.version).toMatch(/\d+\.\d+\.\d+/);
78
+ });
79
+ });
80
+ describe('executeOrThrow', () => {
81
+ it('should return stdout for successful command', async () => {
82
+ const stdout = await executor.executeOrThrow('echo "test"');
83
+ expect(stdout).toContain('test');
84
+ });
85
+ it('should throw CommandExecutionError for failed command', async () => {
86
+ await expect(executor.executeOrThrow('exit 1')).rejects.toThrow();
87
+ });
88
+ });
89
+ describe('clearCache', () => {
90
+ it('should clear cached tool checks', async () => {
91
+ await executor.checkTool('node', 'node --version');
92
+ executor.clearCache();
93
+ const check = await executor.checkTool('node', 'node --version');
94
+ expect(check.version).toBeDefined();
95
+ });
96
+ });
97
+ });
98
+ //# sourceMappingURL=command-executor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-executor.test.js","sourceRoot":"","sources":["../../../src/infrastructure/cli/command-executor.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { CommandResult } from '../command-executor';
2
+ export declare class NpmProvider {
3
+ init(cwd: string): Promise<CommandResult>;
4
+ install(cwd: string, flags?: string): Promise<CommandResult>;
5
+ installDev(deps: string[], cwd: string): Promise<CommandResult>;
6
+ run(script: string, cwd: string): Promise<CommandResult>;
7
+ exec(cmd: string, cwd: string): Promise<CommandResult>;
8
+ isAvailable(): Promise<boolean>;
9
+ }
10
+ export declare class DotnetProvider {
11
+ new(template: string, name: string, cwd: string): Promise<CommandResult>;
12
+ build(cwd: string, config?: string): Promise<CommandResult>;
13
+ test(cwd: string): Promise<CommandResult>;
14
+ run(cwd: string): Promise<CommandResult>;
15
+ addPackage(packageName: string, cwd: string): Promise<CommandResult>;
16
+ restore(cwd: string): Promise<CommandResult>;
17
+ isAvailable(): Promise<boolean>;
18
+ }
19
+ export declare class PythonProvider {
20
+ install(packages: string[], cwd: string): Promise<CommandResult>;
21
+ installRequirements(cwd: string): Promise<CommandResult>;
22
+ runModule(module: string, cwd: string): Promise<CommandResult>;
23
+ runPytest(cwd: string, flags?: string): Promise<CommandResult>;
24
+ formatBlack(cwd: string): Promise<CommandResult>;
25
+ lintRuff(cwd: string): Promise<CommandResult>;
26
+ typeCheckMypy(cwd: string): Promise<CommandResult>;
27
+ isAvailable(): Promise<boolean>;
28
+ }
29
+ export declare class DockerProvider {
30
+ build(imageName: string, dockerfile: string, cwd: string): Promise<CommandResult>;
31
+ run(containerName: string, imageName: string, ports: string): Promise<CommandResult>;
32
+ composeUp(cwd: string, detached?: boolean): Promise<CommandResult>;
33
+ composeDown(cwd: string): Promise<CommandResult>;
34
+ isAvailable(): Promise<boolean>;
35
+ isComposeAvailable(): Promise<boolean>;
36
+ }
37
+ export declare class NxProvider {
38
+ generate(appName: string, template: string, cwd: string): Promise<CommandResult>;
39
+ build(cwd: string, target?: string): Promise<CommandResult>;
40
+ serve(cwd: string, target?: string): Promise<CommandResult>;
41
+ affectedBuild(cwd: string): Promise<CommandResult>;
42
+ isAvailable(): Promise<boolean>;
43
+ }
44
+ export declare class GitHubActionsProvider {
45
+ createWorkflowFile(name: string, content: string, repoPath: string): Promise<void>;
46
+ }
47
+ export declare const npmProvider: NpmProvider;
48
+ export declare const dotnetProvider: DotnetProvider;
49
+ export declare const pythonProvider: PythonProvider;
50
+ export declare const dockerProvider: DockerProvider;
51
+ export declare const nxProvider: NxProvider;
52
+ export declare const githubActionsProvider: GitHubActionsProvider;
@@ -0,0 +1,175 @@
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.githubActionsProvider = exports.nxProvider = exports.dockerProvider = exports.pythonProvider = exports.dotnetProvider = exports.npmProvider = exports.GitHubActionsProvider = exports.NxProvider = exports.DockerProvider = exports.PythonProvider = exports.DotnetProvider = exports.NpmProvider = void 0;
37
+ const path = __importStar(require("path"));
38
+ const fs_1 = require("fs");
39
+ const command_executor_1 = require("../command-executor");
40
+ class NpmProvider {
41
+ async init(cwd) {
42
+ return command_executor_1.commandExecutor.execute('npm init -y', cwd);
43
+ }
44
+ async install(cwd, flags) {
45
+ return command_executor_1.commandExecutor.execute(`npm install ${flags || ''}`, cwd);
46
+ }
47
+ async installDev(deps, cwd) {
48
+ return command_executor_1.commandExecutor.execute(`npm install -D ${deps.join(' ')}`, cwd);
49
+ }
50
+ async run(script, cwd) {
51
+ return command_executor_1.commandExecutor.execute(`npm run ${script}`, cwd);
52
+ }
53
+ async exec(cmd, cwd) {
54
+ return command_executor_1.commandExecutor.execute(cmd, cwd);
55
+ }
56
+ async isAvailable() {
57
+ const check = await command_executor_1.commandExecutor.checkTool('npm', 'npm --version');
58
+ return check.available;
59
+ }
60
+ }
61
+ exports.NpmProvider = NpmProvider;
62
+ class DotnetProvider {
63
+ async new(template, name, cwd) {
64
+ return command_executor_1.commandExecutor.execute(`dotnet new ${template} -n ${name} -o .`, cwd);
65
+ }
66
+ async build(cwd, config) {
67
+ const cmd = config ? `dotnet build -c ${config}` : 'dotnet build';
68
+ return command_executor_1.commandExecutor.execute(cmd, cwd);
69
+ }
70
+ async test(cwd) {
71
+ return command_executor_1.commandExecutor.execute('dotnet test', cwd);
72
+ }
73
+ async run(cwd) {
74
+ return command_executor_1.commandExecutor.execute('dotnet run', cwd);
75
+ }
76
+ async addPackage(packageName, cwd) {
77
+ return command_executor_1.commandExecutor.execute(`dotnet add package ${packageName}`, cwd);
78
+ }
79
+ async restore(cwd) {
80
+ return command_executor_1.commandExecutor.execute('dotnet restore', cwd);
81
+ }
82
+ async isAvailable() {
83
+ const check = await command_executor_1.commandExecutor.checkTool('dotnet', 'dotnet --version');
84
+ return check.available;
85
+ }
86
+ }
87
+ exports.DotnetProvider = DotnetProvider;
88
+ class PythonProvider {
89
+ async install(packages, cwd) {
90
+ return command_executor_1.commandExecutor.execute(`pip install ${packages.join(' ')}`, cwd);
91
+ }
92
+ async installRequirements(cwd) {
93
+ return command_executor_1.commandExecutor.execute('pip install -r requirements.txt', cwd);
94
+ }
95
+ async runModule(module, cwd) {
96
+ return command_executor_1.commandExecutor.execute(`python -m ${module}`, cwd);
97
+ }
98
+ async runPytest(cwd, flags) {
99
+ return command_executor_1.commandExecutor.execute(`pytest ${flags || ''}`, cwd);
100
+ }
101
+ async formatBlack(cwd) {
102
+ return command_executor_1.commandExecutor.execute('black .', cwd);
103
+ }
104
+ async lintRuff(cwd) {
105
+ return command_executor_1.commandExecutor.execute('ruff check .', cwd);
106
+ }
107
+ async typeCheckMypy(cwd) {
108
+ return command_executor_1.commandExecutor.execute('mypy .', cwd);
109
+ }
110
+ async isAvailable() {
111
+ const check = await command_executor_1.commandExecutor.checkTool('python', 'python --version');
112
+ return check.available;
113
+ }
114
+ }
115
+ exports.PythonProvider = PythonProvider;
116
+ class DockerProvider {
117
+ async build(imageName, dockerfile, cwd) {
118
+ return command_executor_1.commandExecutor.execute(`docker build -t ${imageName} -f ${dockerfile} .`, cwd);
119
+ }
120
+ async run(containerName, imageName, ports) {
121
+ return command_executor_1.commandExecutor.execute(`docker run --name ${containerName} -p ${ports} ${imageName}`);
122
+ }
123
+ async composeUp(cwd, detached = false) {
124
+ const cmd = detached ? 'docker-compose up -d' : 'docker-compose up';
125
+ return command_executor_1.commandExecutor.execute(cmd, cwd);
126
+ }
127
+ async composeDown(cwd) {
128
+ return command_executor_1.commandExecutor.execute('docker-compose down', cwd);
129
+ }
130
+ async isAvailable() {
131
+ const check = await command_executor_1.commandExecutor.checkTool('docker', 'docker --version');
132
+ return check.available;
133
+ }
134
+ async isComposeAvailable() {
135
+ const check = await command_executor_1.commandExecutor.checkTool('docker-compose', 'docker-compose --version');
136
+ return check.available;
137
+ }
138
+ }
139
+ exports.DockerProvider = DockerProvider;
140
+ class NxProvider {
141
+ async generate(appName, template, cwd) {
142
+ return command_executor_1.commandExecutor.execute(`npx nx generate ${template} ${appName}`, cwd);
143
+ }
144
+ async build(cwd, target) {
145
+ const cmd = target ? `npx nx build ${target}` : 'npx nx build';
146
+ return command_executor_1.commandExecutor.execute(cmd, cwd);
147
+ }
148
+ async serve(cwd, target) {
149
+ const cmd = target ? `npx nx serve ${target}` : 'npx nx serve';
150
+ return command_executor_1.commandExecutor.execute(cmd, cwd);
151
+ }
152
+ async affectedBuild(cwd) {
153
+ return command_executor_1.commandExecutor.execute('npx nx affected:build', cwd);
154
+ }
155
+ async isAvailable() {
156
+ const check = await command_executor_1.commandExecutor.checkTool('nx', 'npx nx --version');
157
+ return check.available;
158
+ }
159
+ }
160
+ exports.NxProvider = NxProvider;
161
+ class GitHubActionsProvider {
162
+ async createWorkflowFile(name, content, repoPath) {
163
+ const workflowDir = path.join(repoPath, '.github', 'workflows');
164
+ await fs_1.promises.mkdir(workflowDir, { recursive: true });
165
+ await fs_1.promises.writeFile(path.join(workflowDir, `${name}.yml`), content);
166
+ }
167
+ }
168
+ exports.GitHubActionsProvider = GitHubActionsProvider;
169
+ exports.npmProvider = new NpmProvider();
170
+ exports.dotnetProvider = new DotnetProvider();
171
+ exports.pythonProvider = new PythonProvider();
172
+ exports.dockerProvider = new DockerProvider();
173
+ exports.nxProvider = new NxProvider();
174
+ exports.githubActionsProvider = new GitHubActionsProvider();
175
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/infrastructure/cli/providers/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export type OutputFormat = 'json' | 'table' | 'yaml' | 'markdown';
2
+ export interface TableColumn {
3
+ header: string;
4
+ key: string;
5
+ width?: number;
6
+ align?: 'left' | 'center' | 'right';
7
+ }
8
+ export interface FormatterOptions {
9
+ format: OutputFormat;
10
+ colors?: boolean;
11
+ indent?: number;
12
+ }
13
+ export declare class OutputFormatterService {
14
+ format(data: unknown, options: FormatterOptions): string;
15
+ formatJson(data: unknown, _options: FormatterOptions): string;
16
+ formatYaml(data: unknown, _options: FormatterOptions): string;
17
+ formatMarkdown(data: unknown, _options: FormatterOptions): string;
18
+ formatTable(data: unknown, options: FormatterOptions): string;
19
+ private arrayToTable;
20
+ private objectToTable;
21
+ private renderTable;
22
+ private humanizeKey;
23
+ private formatValue;
24
+ private tableToMarkdown;
25
+ private objectToMarkdown;
26
+ private formatMarkdownValue;
27
+ private toYaml;
28
+ }