@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,198 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OutputFormatterService = void 0;
7
+ class OutputFormatterService {
8
+ format(data, options) {
9
+ switch (options.format) {
10
+ case 'table':
11
+ return this.formatTable(data, options);
12
+ case 'yaml':
13
+ return this.formatYaml(data, options);
14
+ case 'markdown':
15
+ return this.formatMarkdown(data, options);
16
+ case 'json':
17
+ default:
18
+ return this.formatJson(data, options);
19
+ }
20
+ }
21
+ formatJson(data, _options) {
22
+ return JSON.stringify(data, null, 2);
23
+ }
24
+ formatYaml(data, _options) {
25
+ try {
26
+ return this.toYaml(data);
27
+ }
28
+ catch {
29
+ return this.formatJson(data, _options);
30
+ }
31
+ }
32
+ formatMarkdown(data, _options) {
33
+ if (Array.isArray(data)) {
34
+ return this.tableToMarkdown(data);
35
+ }
36
+ if (typeof data === 'object' && data !== null) {
37
+ return this.objectToMarkdown(data);
38
+ }
39
+ return String(data);
40
+ }
41
+ formatTable(data, options) {
42
+ if (Array.isArray(data)) {
43
+ return this.arrayToTable(data, options);
44
+ }
45
+ if (typeof data === 'object' && data !== null) {
46
+ return this.objectToTable(data, options);
47
+ }
48
+ return String(data);
49
+ }
50
+ arrayToTable(data, options) {
51
+ if (data.length === 0)
52
+ return '(empty)';
53
+ const firstItem = data[0];
54
+ if (typeof firstItem !== 'object' || firstItem === null) {
55
+ return data.map(item => String(item)).join('\n');
56
+ }
57
+ const keys = Object.keys(firstItem);
58
+ const columns = keys.map(key => ({
59
+ header: this.humanizeKey(key),
60
+ key,
61
+ }));
62
+ return this.renderTable(data, columns, options);
63
+ }
64
+ objectToTable(data, options) {
65
+ const entries = Object.entries(data);
66
+ if (entries.length === 0)
67
+ return '(empty)';
68
+ const maxKeyLength = Math.max(...entries.map(([k]) => k.length));
69
+ const lines = [];
70
+ for (const [key, value] of entries) {
71
+ const valueStr = this.formatValue(value);
72
+ const paddedKey = key.padEnd(maxKeyLength);
73
+ lines.push(` ${paddedKey} ${valueStr}`);
74
+ }
75
+ return lines.join('\n');
76
+ }
77
+ renderTable(data, columns, options) {
78
+ if (data.length === 0)
79
+ return '(empty)';
80
+ const colWidths = columns.map(col => {
81
+ const maxData = Math.max(col.header.length, ...data.map(row => String(row[col.key] || '').length));
82
+ return Math.min(col.width || maxData + 2, 50);
83
+ });
84
+ const headerRow = columns.map((col, i) => col.header.padEnd(colWidths[i]).substring(0, colWidths[i])).join(' | ');
85
+ const separator = colWidths.map(w => '─'.repeat(w)).join('─┼─');
86
+ const rows = data.map(item => columns.map((col, i) => {
87
+ const value = String(item[col.key] ?? '');
88
+ return value.padEnd(colWidths[i]).substring(0, colWidths[i]);
89
+ }).join(' | '));
90
+ return [headerRow, separator, ...rows].join('\n');
91
+ }
92
+ humanizeKey(key) {
93
+ return key
94
+ .replace(/([A-Z])/g, ' $1')
95
+ .replace(/([a-z])([A-Z])/g, '$1 $2')
96
+ .replace(/_/g, ' ')
97
+ .replace(/^./, str => str.toUpperCase())
98
+ .trim();
99
+ }
100
+ formatValue(value) {
101
+ if (value === null || value === undefined)
102
+ return chalk_1.default.gray('(none)');
103
+ if (typeof value === 'boolean')
104
+ return value ? chalk_1.default.green('✓') : chalk_1.default.red('✗');
105
+ if (typeof value === 'object') {
106
+ if (Array.isArray(value))
107
+ return `[${value.length} items]`;
108
+ return JSON.stringify(value);
109
+ }
110
+ return String(value);
111
+ }
112
+ tableToMarkdown(data) {
113
+ if (data.length === 0)
114
+ return '(empty)';
115
+ const firstItem = data[0];
116
+ if (typeof firstItem !== 'object' || firstItem === null) {
117
+ return data.map(item => `- ${item}`).join('\n');
118
+ }
119
+ const keys = Object.keys(firstItem);
120
+ const header = `| ${keys.map(k => this.humanizeKey(k)).join(' | ')} |`;
121
+ const separator = `| ${keys.map(() => '---').join(' | ')} |`;
122
+ const rows = data.map(item => `| ${keys.map(k => {
123
+ const val = item[k];
124
+ return String(val ?? '');
125
+ }).join(' | ')} |`);
126
+ return [header, separator, ...rows].join('\n');
127
+ }
128
+ objectToMarkdown(data) {
129
+ const lines = [];
130
+ for (const [key, value] of Object.entries(data)) {
131
+ if (value === null || value === undefined)
132
+ continue;
133
+ const formattedValue = this.formatMarkdownValue(value);
134
+ if (Array.isArray(value) && value.length > 0 && typeof value[0] === 'object') {
135
+ lines.push(`\n### ${this.humanizeKey(key)}`);
136
+ lines.push(this.tableToMarkdown(value));
137
+ }
138
+ else {
139
+ lines.push(`**${this.humanizeKey(key)}:** ${formattedValue}`);
140
+ }
141
+ }
142
+ return lines.join('\n');
143
+ }
144
+ formatMarkdownValue(value) {
145
+ if (value === null || value === undefined)
146
+ return '(none)';
147
+ if (typeof value === 'boolean')
148
+ return value ? 'Yes' : 'No';
149
+ if (typeof value === 'object') {
150
+ if (Array.isArray(value))
151
+ return value.join(', ');
152
+ return JSON.stringify(value);
153
+ }
154
+ return String(value);
155
+ }
156
+ toYaml(obj, indent = 0) {
157
+ const spaces = ' '.repeat(indent);
158
+ if (obj === null || obj === undefined) {
159
+ return 'null';
160
+ }
161
+ if (typeof obj === 'string') {
162
+ if (obj.includes('\n') || obj.includes(':') || obj.includes('#')) {
163
+ return `|-\n${obj.split('\n').map(line => spaces + ' ' + line).join('\n')}`;
164
+ }
165
+ return obj;
166
+ }
167
+ if (typeof obj === 'number' || typeof obj === 'boolean') {
168
+ return String(obj);
169
+ }
170
+ if (Array.isArray(obj)) {
171
+ if (obj.length === 0)
172
+ return '[]';
173
+ return obj.map(item => {
174
+ const itemYaml = this.toYaml(item, indent + 1);
175
+ if (itemYaml.includes('\n')) {
176
+ return `\n${obj.map(i => spaces + '- ' + this.toYaml(i, indent + 1)).join('\n')}`;
177
+ }
178
+ return `${spaces}- ${itemYaml}`;
179
+ }).join('\n');
180
+ }
181
+ if (typeof obj === 'object') {
182
+ const entries = Object.entries(obj);
183
+ if (entries.length === 0)
184
+ return '{}';
185
+ return entries.map(([key, value]) => {
186
+ const valueYaml = this.toYaml(value, indent + 1);
187
+ if (valueYaml.includes('\n') && !valueYaml.startsWith('- ')) {
188
+ return `${spaces}${key}:\n${valueYaml}`;
189
+ }
190
+ return `${spaces}${key}: ${valueYaml}`;
191
+ }).join('\n');
192
+ }
193
+ return String(obj);
194
+ }
195
+ }
196
+ exports.OutputFormatterService = OutputFormatterService;
197
+ const chalk_1 = __importDefault(require("chalk"));
198
+ //# sourceMappingURL=output-formatter.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-formatter.service.js","sourceRoot":"","sources":["../../../src/infrastructure/formatters/output-formatter.service.ts"],"names":[],"mappings":";;;;;;AAeA,MAAa,sBAAsB;IACjC,MAAM,CAAC,IAAa,EAAE,OAAyB;QAC7C,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;YACvB,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACzC,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACxC,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC5C,KAAK,MAAM,CAAC;YACZ;gBACE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,UAAU,CAAC,IAAa,EAAE,QAA0B;QAClD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,UAAU,CAAC,IAAa,EAAE,QAA0B;QAClD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,cAAc,CAAC,IAAa,EAAE,QAA0B;QACtD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAA+B,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,WAAW,CAAC,IAAa,EAAE,OAAyB;QAClD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,aAAa,CAAC,IAA+B,EAAE,OAAO,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAEO,YAAY,CAAC,IAAe,EAAE,OAAyB;QAC7D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAExC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAoC,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAkB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;YAC7B,GAAG;SACJ,CAAC,CAAC,CAAC;QAEJ,OAAO,IAAI,CAAC,WAAW,CAAC,IAAiC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/E,CAAC;IAEO,aAAa,CAAC,IAA6B,EAAE,OAAyB;QAC5E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAE3C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACjE,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,KAAK,QAAQ,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,WAAW,CACjB,IAA+B,EAC/B,OAAsB,EACtB,OAAyB;QAEzB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAExC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CACtB,GAAG,CAAC,MAAM,CAAC,MAAM,EACjB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CACtD,CAAC;YACF,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CACvC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAC3D,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEd,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEhE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAC3B,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YACrB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1C,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CACf,CAAC;QAEF,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IAEO,WAAW,CAAC,GAAW;QAC7B,OAAO,GAAG;aACP,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;aAC1B,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;aACnC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;aAClB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;aACvC,IAAI,EAAE,CAAC;IACZ,CAAC;IAEO,WAAW,CAAC,KAAc;QAChC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvE,IAAI,OAAO,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,KAAK,CAAC,MAAM,SAAS,CAAC;YAC3D,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAEO,eAAe,CAAC,IAAe;QACrC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAExC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAoC,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACvE,MAAM,SAAS,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAE7D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAChB,MAAM,GAAG,GAAI,IAAgC,CAAC,CAAC,CAAC,CAAC;YACjD,OAAO,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACnB,CAAC;QAEF,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAEO,gBAAgB,CAAC,IAA6B;QACpD,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAEpD,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACvD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC7E,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,cAAc,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,mBAAmB,CAAC,KAAc;QACxC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;QAC3D,IAAI,OAAO,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAEO,MAAM,CAAC,GAAY,EAAE,MAAM,GAAG,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEnC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjE,OAAO,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/E,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;YACxD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAClC,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC/C,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5B,OAAO,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpF,CAAC;gBACD,OAAO,GAAG,MAAM,KAAK,QAAQ,EAAE,CAAC;YAClC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAA8B,CAAC,CAAC;YAC/D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEtC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBAClC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;gBACjD,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5D,OAAO,GAAG,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;gBAC1C,CAAC;gBACD,OAAO,GAAG,MAAM,GAAG,GAAG,KAAK,SAAS,EAAE,CAAC;YACzC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QAED,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;CACF;AAhOD,wDAgOC;AAED,kDAA0B"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/main.js ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const nest_commander_1 = require("nest-commander");
5
+ const app_module_1 = require("./app.module");
6
+ async function bootstrap() {
7
+ await nest_commander_1.CommandFactory.run(app_module_1.AppModule, ['warn', 'error']);
8
+ }
9
+ bootstrap();
10
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;AACA,mDAAgD;AAChD,6CAAyC;AAEzC,KAAK,UAAU,SAAS;IACtB,MAAM,+BAAc,CAAC,GAAG,CAAC,sBAAS,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,EAAE,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { IFileSystem, IConfigParser, ILogger } from '../../../domain/interfaces';
2
+ export declare class MockFileSystem implements IFileSystem {
3
+ private files;
4
+ private directories;
5
+ exists(path: string): Promise<boolean>;
6
+ readFile(path: string): Promise<string>;
7
+ writeFile(path: string, content: string): Promise<void>;
8
+ readJson<T>(path: string): Promise<T>;
9
+ writeJson(path: string, data: unknown): Promise<void>;
10
+ ensureDir(path: string): Promise<void>;
11
+ readdirNames(path: string): Promise<string[]>;
12
+ remove(path: string): Promise<void>;
13
+ setFile(path: string, content: string): void;
14
+ setJsonFile(path: string, data: unknown): void;
15
+ setDirectory(path: string): void;
16
+ clear(): void;
17
+ getFilePaths(): string[];
18
+ getDirectoryPaths(): string[];
19
+ }
20
+ export declare class MockConfigParser implements IConfigParser {
21
+ parse(content: string): unknown;
22
+ stringify(data: unknown): string;
23
+ }
24
+ export declare class MockLogger implements ILogger {
25
+ private logs;
26
+ info(message: string, context?: Record<string, unknown>): void;
27
+ warn(message: string, context?: Record<string, unknown>): void;
28
+ error(message: string, context?: Record<string, unknown>): void;
29
+ debug(message: string, context?: Record<string, unknown>): void;
30
+ getLogs(): Array<{
31
+ level: string;
32
+ message: string;
33
+ context?: Record<string, unknown>;
34
+ }>;
35
+ clear(): void;
36
+ getLogsByLevel(level: string): Array<{
37
+ level: string;
38
+ message: string;
39
+ context?: Record<string, unknown>;
40
+ }>;
41
+ }
42
+ export declare function createMockFileSystem(): MockFileSystem;
43
+ export declare function createMockConfigParser(): MockConfigParser;
44
+ export declare function createMockLogger(): MockLogger;
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockLogger = exports.MockConfigParser = exports.MockFileSystem = void 0;
4
+ exports.createMockFileSystem = createMockFileSystem;
5
+ exports.createMockConfigParser = createMockConfigParser;
6
+ exports.createMockLogger = createMockLogger;
7
+ class MockFileSystem {
8
+ constructor() {
9
+ this.files = new Map();
10
+ this.directories = new Set();
11
+ }
12
+ async exists(path) {
13
+ return this.files.has(path) || this.directories.has(path);
14
+ }
15
+ async readFile(path) {
16
+ const content = this.files.get(path);
17
+ if (content === undefined) {
18
+ throw new Error(`File not found: ${path}`);
19
+ }
20
+ return content;
21
+ }
22
+ async writeFile(path, content) {
23
+ this.files.set(path, content);
24
+ }
25
+ async readJson(path) {
26
+ const content = await this.readFile(path);
27
+ return JSON.parse(content);
28
+ }
29
+ async writeJson(path, data) {
30
+ await this.writeFile(path, JSON.stringify(data, null, 2));
31
+ }
32
+ async ensureDir(path) {
33
+ this.directories.add(path);
34
+ }
35
+ async readdirNames(path) {
36
+ const prefix = path.endsWith('/') ? path : path + '/';
37
+ const entries = [];
38
+ for (const key of this.files.keys()) {
39
+ if (key.startsWith(prefix) && key !== path) {
40
+ const remainder = key.slice(prefix.length);
41
+ const firstSlash = remainder.indexOf('/');
42
+ const entry = firstSlash === -1 ? remainder : remainder.slice(0, firstSlash);
43
+ if (!entries.includes(entry)) {
44
+ entries.push(entry);
45
+ }
46
+ }
47
+ }
48
+ for (const dir of this.directories) {
49
+ if (dir.startsWith(prefix) && dir !== path) {
50
+ const remainder = dir.slice(prefix.length);
51
+ const firstSlash = remainder.indexOf('/');
52
+ const entry = firstSlash === -1 ? remainder : remainder.slice(0, firstSlash);
53
+ if (!entries.includes(entry)) {
54
+ entries.push(entry);
55
+ }
56
+ }
57
+ }
58
+ return entries;
59
+ }
60
+ async remove(path) {
61
+ this.files.delete(path);
62
+ this.directories.delete(path);
63
+ }
64
+ setFile(path, content) {
65
+ this.files.set(path, content);
66
+ }
67
+ setJsonFile(path, data) {
68
+ this.files.set(path, JSON.stringify(data, null, 2));
69
+ }
70
+ setDirectory(path) {
71
+ this.directories.add(path);
72
+ }
73
+ clear() {
74
+ this.files.clear();
75
+ this.directories.clear();
76
+ }
77
+ getFilePaths() {
78
+ return Array.from(this.files.keys());
79
+ }
80
+ getDirectoryPaths() {
81
+ return Array.from(this.directories);
82
+ }
83
+ }
84
+ exports.MockFileSystem = MockFileSystem;
85
+ class MockConfigParser {
86
+ parse(content) {
87
+ try {
88
+ return JSON.parse(content);
89
+ }
90
+ catch {
91
+ return content;
92
+ }
93
+ }
94
+ stringify(data) {
95
+ return JSON.stringify(data);
96
+ }
97
+ }
98
+ exports.MockConfigParser = MockConfigParser;
99
+ class MockLogger {
100
+ constructor() {
101
+ this.logs = [];
102
+ }
103
+ info(message, context) {
104
+ this.logs.push({ level: 'INFO', message, context });
105
+ }
106
+ warn(message, context) {
107
+ this.logs.push({ level: 'WARN', message, context });
108
+ }
109
+ error(message, context) {
110
+ this.logs.push({ level: 'ERROR', message, context });
111
+ }
112
+ debug(message, context) {
113
+ this.logs.push({ level: 'DEBUG', message, context });
114
+ }
115
+ getLogs() {
116
+ return [...this.logs];
117
+ }
118
+ clear() {
119
+ this.logs = [];
120
+ }
121
+ getLogsByLevel(level) {
122
+ return this.logs.filter(l => l.level === level);
123
+ }
124
+ }
125
+ exports.MockLogger = MockLogger;
126
+ function createMockFileSystem() {
127
+ return new MockFileSystem();
128
+ }
129
+ function createMockConfigParser() {
130
+ return new MockConfigParser();
131
+ }
132
+ function createMockLogger() {
133
+ return new MockLogger();
134
+ }
135
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/test/mocks/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "@evolith/smart-cli",
3
+ "version": "0.0.1-beta",
4
+ "description": "Evolith Smart CLI - Governance, standards validation, and AI agent integration for satellite repositories",
5
+ "main": "dist/main.js",
6
+ "bin": {
7
+ "smart-cli": "./dist/main.js"
8
+ },
9
+ "directories": {
10
+ "doc": "docs"
11
+ },
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "start": "node dist/main.js",
15
+ "start:dev": "tsc -w & node dist/main.js",
16
+ "test": "jest",
17
+ "test:watch": "jest --watch",
18
+ "test:cov": "jest --coverage",
19
+ "test:e2e": "jest --config ./test/jest-e2e.json",
20
+ "prepublishOnly": "npm run build"
21
+ },
22
+ "keywords": [
23
+ "evolith",
24
+ "sdk",
25
+ "cli",
26
+ "governance",
27
+ "standards",
28
+ "validation",
29
+ "adr",
30
+ "architecture-decision-records",
31
+ "mcp",
32
+ "model-context-protocol",
33
+ "ai-agents",
34
+ "satellite-repository",
35
+ "clean-architecture"
36
+ ],
37
+ "homepage": "https://github.com/beyondnetcode/evolith_arch32#readme",
38
+ "author": "Beyondnet <dev@beyondnetcode.com>",
39
+ "license": "ISC",
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "https://github.com/beyondnetcode/evolith_arch32.git",
43
+ "directory": "sdk/cli"
44
+ },
45
+ "engines": {
46
+ "node": ">=18.0.0"
47
+ },
48
+ "files": [
49
+ "dist/",
50
+ "shell/",
51
+ "templates/",
52
+ "README.md",
53
+ "ARCHITECTURE.md"
54
+ ],
55
+ "dependencies": {
56
+ "@clack/prompts": "^1.5.1",
57
+ "@modelcontextprotocol/sdk": "^1.29.0",
58
+ "@nestjs/common": "^11.1.24",
59
+ "@nestjs/core": "^11.1.24",
60
+ "chalk": "^4.1.2",
61
+ "chokidar": "^5.0.0",
62
+ "conf": "^15.1.0",
63
+ "fs-extra": "^11.3.5",
64
+ "nest-commander": "^3.20.1",
65
+ "ora": "^9.4.0",
66
+ "yaml": "^2.9.0"
67
+ },
68
+ "devDependencies": {
69
+ "@nestjs/testing": "^11.1.24",
70
+ "@types/conf": "^2.1.0",
71
+ "@types/fs-extra": "^11.0.4",
72
+ "@types/jest": "^30.0.0",
73
+ "@types/node": "^25.9.1",
74
+ "@types/yaml": "^1.9.6",
75
+ "jest": "^30.4.2",
76
+ "nest-commander-testing": "^3.5.1",
77
+ "ts-jest": "^29.4.11",
78
+ "typescript": "^6.0.3"
79
+ }
80
+ }
@@ -0,0 +1,85 @@
1
+ #!/bin/bash
2
+ # Evolith Smart CLI Bash Completion
3
+ # Install: source this file or add to ~/.bashrc
4
+ # Also: smart-cli completion --install to auto-install
5
+
6
+ _smart_cli_completions() {
7
+ local cur prev words cword
8
+ COMPREPLY=()
9
+ cur="${COMP_WORDS[COMP_CWORD]}"
10
+ prev="${COMP_WORDS[COMP_CWORD-1]}"
11
+
12
+ # Top-level commands
13
+ COMMANDS="validate adr standards agents init mcp sdlc docs upgrade config completion help"
14
+
15
+ # Subcommands for each command
16
+ declare -A SUBCOMMANDS
17
+ SUBCOMMANDS[validate]="--format --output --satellite --core --ruleset"
18
+ SUBCOMMANDS[adr]="create list get update matrix"
19
+ SUBCOMMANDS[standards]="init list get validate export"
20
+ SUBCOMMANDS[agents]="install remove list validate upgrade menu"
21
+ SUBCOMMANDS[mcp]="serve version"
22
+ SUBCOMMANDS[sdlc]="handoff status list phases"
23
+ SUBCOMMANDS[config]="get set list delete"
24
+ SUBCOMMANDS[init]="--runtime --template --path"
25
+ SUBCOMMANDS[docs]="validate serve --serve"
26
+
27
+ # Global options
28
+ GLOBAL_OPTS="--help --version --verbose --debug --json --quiet"
29
+
30
+ # If we're completing a command (cur is a command name)
31
+ if [[ $cword -eq 1 ]]; then
32
+ COMPREPLY=($(compgen -W "$COMMANDS" -- "$cur"))
33
+ return 0
34
+ fi
35
+
36
+ # If prev is a command, show its subcommands/options
37
+ if [[ -n "${SUBCOMMANDS[$prev]}" ]]; then
38
+ COMPREPLY=($(compgen -W "${SUBCOMMANDS[$prev]}" -- "$cur"))
39
+ return 0
40
+ fi
41
+
42
+ # Check if we're past the command word
43
+ local cmd=""
44
+ for word in "${COMP_WORDS[@]:1}"; do
45
+ if [[ " ${COMMANDS} " == *" $word "* ]] && [[ -z "$cmd" ]]; then
46
+ cmd="$word"
47
+ fi
48
+ done
49
+
50
+ # Show options for the current command
51
+ if [[ -n "$cmd" ]] && [[ -n "${SUBCOMMANDS[$cmd]}" ]]; then
52
+ COMPREPLY=($(compgen -W "${SUBCOMMANDS[$cmd]}" -- "$cur"))
53
+ else
54
+ # Show global options
55
+ COMPREPLY=($(compgen -W "$GLOBAL_OPTS" -- "$cur"))
56
+ fi
57
+
58
+ return 0
59
+ }
60
+
61
+ complete -F _smart_cli_completions smart-cli
62
+
63
+ # Auto-install function
64
+ _smart_cli_install() {
65
+ local shell="$1"
66
+ if [[ "$shell" == "bash" ]]; then
67
+ local profile="${HOME}/.bashrc"
68
+ local line="source $(pwd)/shell/completion.bash"
69
+ if ! grep -q "$line" "$profile" 2>/dev/null; then
70
+ echo "Adding completion to $profile"
71
+ echo "$line" >> "$profile"
72
+ fi
73
+ echo "Bash completion installed. Reload shell or run: source $profile"
74
+ elif [[ "$shell" == "zsh" ]]; then
75
+ local profile="${HOME}/.zshrc"
76
+ local line="source $(pwd)/shell/completion.zsh"
77
+ if ! grep -q "$line" "$profile" 2>/dev/null; then
78
+ echo "Adding completion to $profile"
79
+ echo "$line" >> "$profile"
80
+ fi
81
+ echo "Zsh completion installed. Reload shell or run: source $profile"
82
+ else
83
+ echo "Usage: smart-cli completion --install [bash|zsh]"
84
+ fi
85
+ }
@@ -0,0 +1,72 @@
1
+ #!/bin/fish
2
+ # Evolith Smart CLI Fish Completion
3
+ # Install: cp this file to ~/.config/fish/completions/smart-cli.fish
4
+
5
+ complete -c smart-cli -f
6
+
7
+ # Top-level commands
8
+ complete -c smart-cli -a 'validate' -d 'Validate repository'
9
+ complete -c smart-cli -a 'adr' -d 'Manage ADRs'
10
+ complete -c smart-cli -a 'standards' -d 'Manage standards'
11
+ complete -c smart-cli -a 'agents' -d 'Manage agents'
12
+ complete -c smart-cli -a 'init' -d 'Initialize repository'
13
+ complete -c smart-cli -a 'mcp' -d 'Start MCP server'
14
+ complete -c smart-cli -a 'sdlc' -d 'SDLC phase management'
15
+ complete -c smart-cli -a 'docs' -d 'Documentation'
16
+ complete -c smart-cli -a 'config' -d 'Configuration'
17
+ complete -c smart-cli -a 'upgrade' -d 'Upgrade CLI'
18
+ complete -c smart-cli -a 'completion' -d 'Shell completions'
19
+ complete -c smart-cli -a 'help' -d 'Show help'
20
+
21
+ # validate options
22
+ complete -c smart-cli -n '__fish_seen_subcommand_from validate' -l format -d 'Output format' -a 'json table yaml'
23
+ complete -c smart-cli -n '__fish_seen_subcommand_from validate' -l output -d 'Output file'
24
+ complete -c smart-cli -n '__fish_seen_subcommand_from validate' -l satellite -d 'Satellite path'
25
+ complete -c smart-cli -n '__fish_seen_subcommand_from validate' -l core -d 'Core path'
26
+ complete -c smart-cli -n '__fish_seen_subcommand_from validate' -l ruleset -d 'Specific ruleset'
27
+
28
+ # adr subcommands
29
+ complete -c smart-cli -n '__fish_seen_subcommand_from adr' -a 'create' -d 'Create ADR'
30
+ complete -c smart-cli -n '__fish_seen_subcommand_from adr' -a 'list' -d 'List ADRs'
31
+ complete -c smart-cli -n '__fish_seen_subcommand_from adr' -a 'get' -d 'Get ADR details'
32
+ complete -c smart-cli -n '__fish_seen_subcommand_from adr' -a 'update' -d 'Update ADR'
33
+ complete -c smart-cli -n '__fish_seen_subcommand_from adr' -a 'matrix' -d 'Show ADR matrix'
34
+
35
+ # standards subcommands
36
+ complete -c smart-cli -n '__fish_seen_subcommand_from standards' -a 'init' -d 'Initialize'
37
+ complete -c smart-cli -n '__fish_seen_subcommand_from standards' -a 'list' -d 'List standards'
38
+ complete -c smart-cli -n '__fish_seen_subcommand_from standards' -a 'get' -d 'Get standard'
39
+ complete -c smart-cli -n '__fish_seen_subcommand_from standards' -a 'validate' -d 'Validate'
40
+ complete -c smart-cli -n '__fish_seen_subcommand_from standards' -a 'export' -d 'Export standard'
41
+
42
+ # agents subcommands
43
+ complete -c smart-cli -n '__fish_seen_subcommand_from agents' -a 'install' -d 'Install agent'
44
+ complete -c smart-cli -n '__fish_seen_subcommand_from agents' -a 'remove' -d 'Remove agent'
45
+ complete -c smart-cli -n '__fish_seen_subcommand_from agents' -a 'list' -d 'List agents'
46
+ complete -c smart-cli -n '__fish_seen_subcommand_from agents' -a 'validate' -d 'Validate agent'
47
+ complete -c smart-cli -n '__fish_seen_subcommand_from agents' -a 'upgrade' -d 'Upgrade agent'
48
+ complete -c smart-cli -n '__fish_seen_subcommand_from agents' -a 'menu' -d 'Interactive menu'
49
+
50
+ # mcp subcommands
51
+ complete -c smart-cli -n '__fish_seen_subcommand_from mcp' -a 'serve' -d 'Start MCP server'
52
+ complete -c smart-cli -n '__fish_seen_subcommand_from mcp' -a 'version' -d 'Show MCP version'
53
+
54
+ # sdlc subcommands
55
+ complete -c smart-cli -n '__fish_seen_subcommand_from sdlc' -a 'handoff' -d 'Generate handoff'
56
+ complete -c smart-cli -n '__fish_seen_subcommand_from sdlc' -a 'status' -d 'Show status'
57
+ complete -c smart-cli -n '__fish_seen_subcommand_from sdlc' -a 'list' -d 'List phases'
58
+ complete -c smart-cli -n '__fish_seen_subcommand_from sdlc' -a 'phases' -d 'Show phases'
59
+
60
+ # config subcommands
61
+ complete -c smart-cli -n '__fish_seen_subcommand_from config' -a 'get' -d 'Get config value'
62
+ complete -c smart-cli -n '__fish_seen_subcommand_from config' -a 'set' -d 'Set config value'
63
+ complete -c smart-cli -n '__fish_seen_subcommand_from config' -a 'list' -d 'List config'
64
+ complete -c smart-cli -n '__fish_seen_subcommand_from config' -a 'delete' -d 'Delete config'
65
+
66
+ # Global options
67
+ complete -c smart-cli -l help -d 'Show help'
68
+ complete -c smart-cli -l version -d 'Show version'
69
+ complete -c smart-cli -l verbose -d 'Verbose output'
70
+ complete -c smart-cli -l debug -d 'Debug mode'
71
+ complete -c smart-cli -l json -d 'JSON output'
72
+ complete -c smart-cli -l quiet -d 'Quiet mode'