@evolith/smart-cli 0.0.2-beta → 0.0.3-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 (135) hide show
  1. package/dist/app.module.js +0 -2
  2. package/dist/app.module.js.map +1 -1
  3. package/dist/app.module.spec.d.ts +1 -0
  4. package/dist/app.module.spec.js +305 -0
  5. package/dist/app.module.spec.js.map +1 -0
  6. package/dist/commands/adr/adr.command.spec.d.ts +1 -0
  7. package/dist/commands/adr/adr.command.spec.js +409 -0
  8. package/dist/commands/adr/adr.command.spec.js.map +1 -0
  9. package/dist/commands/architecture/scaffold.command.spec.d.ts +1 -0
  10. package/dist/commands/architecture/scaffold.command.spec.js +207 -0
  11. package/dist/commands/architecture/scaffold.command.spec.js.map +1 -0
  12. package/dist/commands/completion/completion.command.spec.d.ts +1 -0
  13. package/dist/commands/completion/completion.command.spec.js +240 -0
  14. package/dist/commands/completion/completion.command.spec.js.map +1 -0
  15. package/dist/commands/docs/docs.command.spec.d.ts +1 -0
  16. package/dist/commands/docs/docs.command.spec.js +87 -0
  17. package/dist/commands/docs/docs.command.spec.js.map +1 -0
  18. package/dist/commands/drift/drift.command.spec.d.ts +1 -0
  19. package/dist/commands/drift/drift.command.spec.js +327 -0
  20. package/dist/commands/drift/drift.command.spec.js.map +1 -0
  21. package/dist/commands/history/history.command.spec.d.ts +1 -0
  22. package/dist/commands/history/history.command.spec.js +392 -0
  23. package/dist/commands/history/history.command.spec.js.map +1 -0
  24. package/dist/commands/init/agents.command.spec.js +398 -0
  25. package/dist/commands/init/agents.command.spec.js.map +1 -1
  26. package/dist/commands/init/init.command.spec.d.ts +1 -0
  27. package/dist/commands/init/init.command.spec.js +272 -0
  28. package/dist/commands/init/init.command.spec.js.map +1 -0
  29. package/dist/commands/init/upgrade.command.spec.d.ts +1 -0
  30. package/dist/commands/init/upgrade.command.spec.js +378 -0
  31. package/dist/commands/init/upgrade.command.spec.js.map +1 -0
  32. package/dist/commands/mcp/mcp-serve.command.spec.d.ts +1 -0
  33. package/dist/commands/mcp/mcp-serve.command.spec.js +58 -0
  34. package/dist/commands/mcp/mcp-serve.command.spec.js.map +1 -0
  35. package/dist/commands/sdlc/generate-domain.command.spec.d.ts +1 -0
  36. package/dist/commands/sdlc/generate-domain.command.spec.js +47 -0
  37. package/dist/commands/sdlc/generate-domain.command.spec.js.map +1 -0
  38. package/dist/commands/sdlc/handoff.command.spec.d.ts +1 -0
  39. package/dist/commands/sdlc/handoff.command.spec.js +395 -0
  40. package/dist/commands/sdlc/handoff.command.spec.js.map +1 -0
  41. package/dist/commands/sdlc/sdlc.command.spec.d.ts +1 -0
  42. package/dist/commands/sdlc/sdlc.command.spec.js +45 -0
  43. package/dist/commands/sdlc/sdlc.command.spec.js.map +1 -0
  44. package/dist/commands/standards/standards.command.spec.d.ts +1 -0
  45. package/dist/commands/standards/standards.command.spec.js +311 -0
  46. package/dist/commands/standards/standards.command.spec.js.map +1 -0
  47. package/dist/commands/validate/validate.command.spec.d.ts +1 -0
  48. package/dist/commands/validate/validate.command.spec.js +368 -0
  49. package/dist/commands/validate/validate.command.spec.js.map +1 -0
  50. package/dist/core/abstractions/providers/logger.provider.spec.d.ts +1 -0
  51. package/dist/core/abstractions/providers/logger.provider.spec.js +212 -0
  52. package/dist/core/abstractions/providers/logger.provider.spec.js.map +1 -0
  53. package/dist/core/di/container.spec.js +164 -0
  54. package/dist/core/di/container.spec.js.map +1 -1
  55. package/dist/core/mcp/metrics.service.spec.d.ts +1 -0
  56. package/dist/core/mcp/metrics.service.spec.js +159 -0
  57. package/dist/core/mcp/metrics.service.spec.js.map +1 -0
  58. package/dist/core/mcp/prompts/index.js +36 -0
  59. package/dist/core/mcp/prompts/index.js.map +1 -1
  60. package/dist/core/mcp/prompts/index.spec.d.ts +1 -0
  61. package/dist/core/mcp/prompts/index.spec.js +150 -0
  62. package/dist/core/mcp/prompts/index.spec.js.map +1 -0
  63. package/dist/core/mcp/resources/index.js +16 -0
  64. package/dist/core/mcp/resources/index.js.map +1 -1
  65. package/dist/core/mcp/resources/index.spec.d.ts +1 -0
  66. package/dist/core/mcp/resources/index.spec.js +212 -0
  67. package/dist/core/mcp/resources/index.spec.js.map +1 -0
  68. package/dist/core/mcp/server.d.ts +2 -1
  69. package/dist/core/mcp/server.js +256 -5
  70. package/dist/core/mcp/server.js.map +1 -1
  71. package/dist/core/mcp/server.spec.d.ts +1 -0
  72. package/dist/core/mcp/server.spec.js +563 -0
  73. package/dist/core/mcp/server.spec.js.map +1 -0
  74. package/dist/core/mcp/tools/agent.spec.d.ts +1 -0
  75. package/dist/core/mcp/tools/agent.spec.js +171 -0
  76. package/dist/core/mcp/tools/agent.spec.js.map +1 -0
  77. package/dist/core/mcp/tools/architecture.d.ts +2 -0
  78. package/dist/core/mcp/tools/architecture.js +68 -0
  79. package/dist/core/mcp/tools/architecture.js.map +1 -1
  80. package/dist/core/mcp/tools/architecture.spec.d.ts +1 -0
  81. package/dist/core/mcp/tools/architecture.spec.js +145 -0
  82. package/dist/core/mcp/tools/architecture.spec.js.map +1 -0
  83. package/dist/core/mcp/tools/moscow.d.ts +30 -0
  84. package/dist/core/mcp/tools/moscow.js +113 -0
  85. package/dist/core/mcp/tools/moscow.js.map +1 -0
  86. package/dist/core/mcp/tools/moscow.spec.d.ts +1 -0
  87. package/dist/core/mcp/tools/moscow.spec.js +209 -0
  88. package/dist/core/mcp/tools/moscow.spec.js.map +1 -0
  89. package/dist/core/mcp/tools/sdlc.js +2 -1
  90. package/dist/core/mcp/tools/sdlc.js.map +1 -1
  91. package/dist/core/mcp/tools/sdlc.spec.d.ts +1 -0
  92. package/dist/core/mcp/tools/sdlc.spec.js +170 -0
  93. package/dist/core/mcp/tools/sdlc.spec.js.map +1 -0
  94. package/dist/core/mcp/tools/validate.spec.d.ts +1 -0
  95. package/dist/core/mcp/tools/validate.spec.js +130 -0
  96. package/dist/core/mcp/tools/validate.spec.js.map +1 -0
  97. package/dist/core/mcp/watcher.service.spec.js +109 -8
  98. package/dist/core/mcp/watcher.service.spec.js.map +1 -1
  99. package/dist/core/observability/error-reporter.spec.d.ts +1 -0
  100. package/dist/core/observability/error-reporter.spec.js +291 -0
  101. package/dist/core/observability/error-reporter.spec.js.map +1 -0
  102. package/dist/core/observability/structured-logger.spec.d.ts +1 -0
  103. package/dist/core/observability/structured-logger.spec.js +197 -0
  104. package/dist/core/observability/structured-logger.spec.js.map +1 -0
  105. package/dist/core/observability/timing.spec.d.ts +1 -0
  106. package/dist/core/observability/timing.spec.js +216 -0
  107. package/dist/core/observability/timing.spec.js.map +1 -0
  108. package/dist/core/upgrade/satellite-upgrade.service.spec.js +121 -101
  109. package/dist/core/upgrade/satellite-upgrade.service.spec.js.map +1 -1
  110. package/dist/core/validators/deep-architecture-analyzer.d.ts +58 -0
  111. package/dist/core/validators/deep-architecture-analyzer.js +333 -0
  112. package/dist/core/validators/deep-architecture-analyzer.js.map +1 -0
  113. package/dist/core/validators/deep-architecture-analyzer.spec.d.ts +1 -0
  114. package/dist/core/validators/deep-architecture-analyzer.spec.js +216 -0
  115. package/dist/core/validators/deep-architecture-analyzer.spec.js.map +1 -0
  116. package/dist/core/validators/phase-gate-validator.service.js +3 -1
  117. package/dist/core/validators/phase-gate-validator.service.js.map +1 -1
  118. package/dist/core/validators/ruleset-validator-architecture.spec.js +2 -2
  119. package/dist/core/validators/ruleset-validator-architecture.spec.js.map +1 -1
  120. package/dist/core/validators/ruleset-validator.service.js +7 -7
  121. package/dist/core/validators/ruleset-validator.service.js.map +1 -1
  122. package/dist/core/validators/ruleset-validator.service.spec.js +347 -0
  123. package/dist/core/validators/ruleset-validator.service.spec.js.map +1 -1
  124. package/dist/domain/services/index.d.ts +1 -0
  125. package/dist/domain/services/index.js +3 -1
  126. package/dist/domain/services/index.js.map +1 -1
  127. package/dist/domain/services/moscow-prioritization.service.d.ts +44 -0
  128. package/dist/domain/services/moscow-prioritization.service.js +213 -0
  129. package/dist/domain/services/moscow-prioritization.service.js.map +1 -0
  130. package/dist/domain/services/moscow-prioritization.service.spec.d.ts +1 -0
  131. package/dist/domain/services/moscow-prioritization.service.spec.js +285 -0
  132. package/dist/domain/services/moscow-prioritization.service.spec.js.map +1 -0
  133. package/dist/domain/services/standards.service.spec.js +461 -1
  134. package/dist/domain/services/standards.service.spec.js.map +1 -1
  135. package/package.json +2 -2
@@ -47,24 +47,125 @@ jest.mock('chokidar', () => {
47
47
  });
48
48
  describe('WatcherService', () => {
49
49
  let service;
50
+ let watchMock;
50
51
  beforeEach(async () => {
52
+ jest.clearAllMocks();
51
53
  const module = await testing_1.Test.createTestingModule({
52
54
  providers: [watcher_service_1.WatcherService],
53
55
  }).compile();
54
56
  service = module.get(watcher_service_1.WatcherService);
57
+ watchMock = {
58
+ on: jest.fn().mockReturnThis(),
59
+ close: jest.fn(),
60
+ };
61
+ chokidar.watch.mockReturnValue(watchMock);
55
62
  });
56
63
  it('should be defined', () => {
57
64
  expect(service).toBeDefined();
58
65
  });
59
- it('should start watching the specified directory', () => {
60
- service.startWatching('/test/cwd');
61
- expect(chokidar.watch).toHaveBeenCalled();
66
+ describe('startWatching', () => {
67
+ it('should start watching the specified directory', () => {
68
+ service.startWatching('/test/cwd');
69
+ expect(chokidar.watch).toHaveBeenCalled();
70
+ });
71
+ it('should watch markdown files', () => {
72
+ service.startWatching('/test/cwd');
73
+ const callArgs = chokidar.watch.mock.calls[0];
74
+ const patterns = callArgs[0];
75
+ expect(patterns).toContain('**/*.md');
76
+ });
77
+ it('should watch package.json', () => {
78
+ service.startWatching('/test/cwd');
79
+ const callArgs = chokidar.watch.mock.calls[0];
80
+ const patterns = callArgs[0];
81
+ expect(patterns).toContain('package.json');
82
+ });
83
+ it('should watch evolith.setup.json', () => {
84
+ service.startWatching('/test/cwd');
85
+ const callArgs = chokidar.watch.mock.calls[0];
86
+ const patterns = callArgs[0];
87
+ expect(patterns).toContain('evolith.setup.json');
88
+ });
89
+ it('should use provided cwd in options', () => {
90
+ service.startWatching('/custom/path');
91
+ const callArgs = chokidar.watch.mock.calls[0];
92
+ const options = callArgs[1];
93
+ expect(options.cwd).toBe('/custom/path');
94
+ });
95
+ it('should use process.cwd() when no cwd is provided', () => {
96
+ service.startWatching();
97
+ const callArgs = chokidar.watch.mock.calls[0];
98
+ const options = callArgs[1];
99
+ expect(options.cwd).toBe(process.cwd());
100
+ });
101
+ it('should set persistent option to true', () => {
102
+ service.startWatching('/test/cwd');
103
+ const callArgs = chokidar.watch.mock.calls[0];
104
+ const options = callArgs[1];
105
+ expect(options.persistent).toBe(true);
106
+ });
107
+ it('should register change event handler', () => {
108
+ service.startWatching('/test/cwd');
109
+ expect(watchMock.on).toHaveBeenCalledWith('change', expect.any(Function));
110
+ });
111
+ it('should register error event handler', () => {
112
+ service.startWatching('/test/cwd');
113
+ expect(watchMock.on).toHaveBeenCalledWith('error', expect.any(Function));
114
+ });
115
+ it('should chain on calls', () => {
116
+ service.startWatching('/test/cwd');
117
+ expect(watchMock.on).toHaveBeenCalledTimes(2);
118
+ });
119
+ });
120
+ describe('handleFileChange', () => {
121
+ it('should trigger change handler when file changes', () => {
122
+ service.startWatching('/test/cwd');
123
+ const changeHandler = watchMock.on.mock.calls.find((call) => call[0] === 'change')?.[1];
124
+ expect(changeHandler).toBeDefined();
125
+ changeHandler('test-file.md');
126
+ });
127
+ it('should log architecture file changes', () => {
128
+ const logSpy = jest.spyOn(service['logger'], 'log').mockImplementation(() => { });
129
+ service.startWatching('/test/cwd');
130
+ const changeHandler = watchMock.on.mock.calls.find((call) => call[0] === 'change')?.[1];
131
+ changeHandler('architecture/pattern.md');
132
+ expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('[IDE NOTIFY]'));
133
+ logSpy.mockRestore();
134
+ });
135
+ it('should log docs file changes', () => {
136
+ const logSpy = jest.spyOn(service['logger'], 'log').mockImplementation(() => { });
137
+ service.startWatching('/test/cwd');
138
+ const changeHandler = watchMock.on.mock.calls.find((call) => call[0] === 'change')?.[1];
139
+ changeHandler('docs/guide.md');
140
+ expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('[IDE NOTIFY]'));
141
+ logSpy.mockRestore();
142
+ });
143
+ it('should not notify for non-relevant files', () => {
144
+ const logSpy = jest.spyOn(service['logger'], 'log').mockImplementation(() => { });
145
+ service.startWatching('/test/cwd');
146
+ const changeHandler = watchMock.on.mock.calls.find((call) => call[0] === 'change')?.[1];
147
+ changeHandler('src/index.ts');
148
+ const notifyCalls = logSpy.mock.calls.filter((call) => call[0]?.includes?.('[IDE NOTIFY]'));
149
+ expect(notifyCalls).toHaveLength(0);
150
+ logSpy.mockRestore();
151
+ });
62
152
  });
63
- it('should close the watcher on module destroy', () => {
64
- service.startWatching('/test/cwd');
65
- service.onModuleDestroy();
66
- const watchMock = chokidar.watch.mock.results[0].value;
67
- expect(watchMock.close).toHaveBeenCalled();
153
+ describe('onModuleDestroy', () => {
154
+ it('should close the watcher on module destroy', () => {
155
+ service.startWatching('/test/cwd');
156
+ service.onModuleDestroy();
157
+ expect(watchMock.close).toHaveBeenCalled();
158
+ });
159
+ it('should not throw when watcher is not started', () => {
160
+ expect(() => service.onModuleDestroy()).not.toThrow();
161
+ });
162
+ it('should log when watcher is stopped', () => {
163
+ const logSpy = jest.spyOn(service['logger'], 'log').mockImplementation(() => { });
164
+ service.startWatching('/test/cwd');
165
+ service.onModuleDestroy();
166
+ expect(logSpy).toHaveBeenCalledWith('Watcher detenido.');
167
+ logSpy.mockRestore();
168
+ });
68
169
  });
69
170
  });
70
171
  //# sourceMappingURL=watcher.service.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.service.spec.js","sourceRoot":"","sources":["../../../src/core/mcp/watcher.service.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAsD;AACtD,uDAAmD;AACnD,mDAAqC;AAErC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;IACzB,MAAM,WAAW,GAAG;QAClB,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,cAAc,EAAE;QAC9B,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;KACjB,CAAC;IACF,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC;KAClC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,OAAuB,CAAC;IAE5B,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,MAAM,GAAkB,MAAM,cAAI,CAAC,mBAAmB,CAAC;YAC3D,SAAS,EAAE,CAAC,gCAAc,CAAC;SAC5B,CAAC,CAAC,OAAO,EAAE,CAAC;QAEb,OAAO,GAAG,MAAM,CAAC,GAAG,CAAiB,gCAAc,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACnC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACnC,OAAO,CAAC,eAAe,EAAE,CAAC;QAG1B,MAAM,SAAS,GAAI,QAAQ,CAAC,KAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACtE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"watcher.service.spec.js","sourceRoot":"","sources":["../../../src/core/mcp/watcher.service.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,291 @@
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
+ const error_reporter_1 = require("./error-reporter");
37
+ jest.mock('./structured-logger', () => ({
38
+ logger: {
39
+ startOperation: jest.fn(),
40
+ endOperation: jest.fn(),
41
+ error: jest.fn(),
42
+ info: jest.fn(),
43
+ warn: jest.fn(),
44
+ },
45
+ LogLevel: {
46
+ DEBUG: 'DEBUG',
47
+ INFO: 'INFO',
48
+ WARN: 'WARN',
49
+ ERROR: 'ERROR',
50
+ FATAL: 'FATAL',
51
+ },
52
+ }));
53
+ jest.mock('../errors', () => ({
54
+ isEvolithError: jest.fn(() => false),
55
+ getErrorContext: jest.fn(),
56
+ getErrorCode: jest.fn(),
57
+ EvolithError: class EvolithError extends Error {
58
+ constructor(message, code) {
59
+ super(message);
60
+ this.code = code;
61
+ this.name = 'EvolithError';
62
+ }
63
+ },
64
+ }));
65
+ const structured_logger_1 = require("./structured-logger");
66
+ const errors = __importStar(require("../errors"));
67
+ const mockIsEvolithError = errors.isEvolithError;
68
+ describe('ErrorReporter', () => {
69
+ let reporter;
70
+ beforeEach(() => {
71
+ jest.clearAllMocks();
72
+ mockIsEvolithError.mockReturnValue(false);
73
+ reporter = new error_reporter_1.ErrorReporter();
74
+ });
75
+ describe('startOperation', () => {
76
+ it('should start operation timing', () => {
77
+ reporter.startOperation('test-operation');
78
+ expect(structured_logger_1.logger.startOperation).toHaveBeenCalledWith('test-operation');
79
+ });
80
+ });
81
+ describe('report', () => {
82
+ it('should report standard Error', () => {
83
+ const error = new Error('Test error');
84
+ const context = { operation: 'test', command: 'evolith validate' };
85
+ const report = reporter.report(error, context);
86
+ expect(report.error.name).toBe('Error');
87
+ expect(report.error.message).toBe('Test error');
88
+ expect(report.operation).toBe('test');
89
+ expect(report.context).toEqual(context);
90
+ });
91
+ it('should report EvolithError with code', () => {
92
+ mockIsEvolithError.mockReturnValue(true);
93
+ const evolithError = new errors.EvolithError('Validation failed', 'GOV-01');
94
+ const report = reporter.report(evolithError, { operation: 'validate' });
95
+ expect(report.error.code).toBe('GOV-01');
96
+ expect(report.suggestion).toBeDefined();
97
+ });
98
+ it('should report unknown error type', () => {
99
+ const report = reporter.report('string error', { operation: 'test' });
100
+ expect(report.error.name).toBe('Unknown');
101
+ expect(report.error.message).toBe('string error');
102
+ });
103
+ it('should report error without context', () => {
104
+ const error = new Error('No context error');
105
+ const report = reporter.report(error);
106
+ expect(report.context).toEqual({});
107
+ expect(report.operation).toBeUndefined();
108
+ });
109
+ it('should include duration when operation was started', () => {
110
+ reporter.startOperation('timed-operation');
111
+ const error = new Error('Timed error');
112
+ const report = reporter.report(error, { operation: 'timed-operation' });
113
+ expect(report.durationMs).toBeGreaterThanOrEqual(0);
114
+ });
115
+ it('should emit report to logger', () => {
116
+ const error = new Error('Emit test');
117
+ reporter.report(error, { operation: 'emit-test' });
118
+ expect(structured_logger_1.logger.error).toHaveBeenCalled();
119
+ });
120
+ it('should log suggestion when present', () => {
121
+ mockIsEvolithError.mockReturnValue(true);
122
+ const evolithError = new errors.EvolithError('Config error', 'GOV-01');
123
+ reporter.report(evolithError);
124
+ expect(structured_logger_1.logger.info).toHaveBeenCalledWith(expect.stringContaining('Suggestion'));
125
+ });
126
+ });
127
+ describe('getReports', () => {
128
+ it('should return all reports', () => {
129
+ reporter.report(new Error('Error 1'));
130
+ reporter.report(new Error('Error 2'));
131
+ const reports = reporter.getReports();
132
+ expect(reports).toHaveLength(2);
133
+ });
134
+ it('should return a copy of reports', () => {
135
+ reporter.report(new Error('Error 1'));
136
+ const reports = reporter.getReports();
137
+ reports.length = 0;
138
+ expect(reporter.getReports()).toHaveLength(1);
139
+ });
140
+ });
141
+ describe('getLastReport', () => {
142
+ it('should return the last report', () => {
143
+ reporter.report(new Error('Error 1'));
144
+ reporter.report(new Error('Error 2'));
145
+ const last = reporter.getLastReport();
146
+ expect(last?.error.message).toBe('Error 2');
147
+ });
148
+ it('should return undefined when no reports', () => {
149
+ const last = reporter.getLastReport();
150
+ expect(last).toBeUndefined();
151
+ });
152
+ });
153
+ describe('clearReports', () => {
154
+ it('should clear all reports', () => {
155
+ reporter.report(new Error('Error 1'));
156
+ reporter.report(new Error('Error 2'));
157
+ reporter.clearReports();
158
+ expect(reporter.getReports()).toHaveLength(0);
159
+ });
160
+ });
161
+ describe('printSummary', () => {
162
+ let logSpy;
163
+ beforeEach(() => {
164
+ logSpy = jest.spyOn(console, 'log').mockImplementation(() => { });
165
+ });
166
+ afterEach(() => {
167
+ logSpy.mockRestore();
168
+ });
169
+ it('should print no errors message when empty', () => {
170
+ reporter.printSummary();
171
+ expect(structured_logger_1.logger.info).toHaveBeenCalledWith('No errors reported.');
172
+ });
173
+ it('should print error summary', () => {
174
+ reporter.report(new Error('Test error'), { operation: 'test' });
175
+ reporter.printSummary();
176
+ expect(structured_logger_1.logger.info).toHaveBeenCalledWith('Error Summary: 1 error(s)');
177
+ });
178
+ it('should print error details', () => {
179
+ mockIsEvolithError.mockReturnValue(true);
180
+ const evolithError = new errors.EvolithError('Config error', 'GOV-01');
181
+ reporter.report(evolithError, { operation: 'validate' });
182
+ reporter.printSummary();
183
+ expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('Config error'));
184
+ });
185
+ });
186
+ describe('getSuggestionForCode', () => {
187
+ it('should return suggestion for PLATFORM_NOT_FOUND', () => {
188
+ mockIsEvolithError.mockReturnValue(true);
189
+ const evolithError = new errors.EvolithError('test', 'PLATFORM_NOT_FOUND');
190
+ const report = reporter.report(evolithError);
191
+ expect(report.suggestion).toContain('Install');
192
+ });
193
+ it('should return suggestion for PHASE_TRANSITION_ERROR', () => {
194
+ mockIsEvolithError.mockReturnValue(true);
195
+ const evolithError = new errors.EvolithError('test', 'PHASE_TRANSITION_ERROR');
196
+ const report = reporter.report(evolithError);
197
+ expect(report.suggestion).toContain('transitioning');
198
+ });
199
+ it('should return suggestion for CATALOG_LOAD_ERROR', () => {
200
+ mockIsEvolithError.mockReturnValue(true);
201
+ const evolithError = new errors.EvolithError('test', 'CATALOG_LOAD_ERROR');
202
+ const report = reporter.report(evolithError);
203
+ expect(report.suggestion).toContain('catalog');
204
+ });
205
+ it('should return suggestion for TOOL_VALIDATION_ERROR', () => {
206
+ mockIsEvolithError.mockReturnValue(true);
207
+ const evolithError = new errors.EvolithError('test', 'TOOL_VALIDATION_ERROR');
208
+ const report = reporter.report(evolithError);
209
+ expect(report.suggestion).toContain('supported');
210
+ });
211
+ it('should return suggestion for COMMAND_EXECUTION_ERROR', () => {
212
+ mockIsEvolithError.mockReturnValue(true);
213
+ const evolithError = new errors.EvolithError('test', 'COMMAND_EXECUTION_ERROR');
214
+ const report = reporter.report(evolithError);
215
+ expect(report.suggestion).toContain('syntax');
216
+ });
217
+ it('should return suggestion for VALIDATION_ERROR', () => {
218
+ mockIsEvolithError.mockReturnValue(true);
219
+ const evolithError = new errors.EvolithError('test', 'VALIDATION_ERROR');
220
+ const report = reporter.report(evolithError);
221
+ expect(report.suggestion).toContain('Review');
222
+ });
223
+ it('should return generic suggestion for unknown code', () => {
224
+ mockIsEvolithError.mockReturnValue(true);
225
+ const evolithError = new errors.EvolithError('test', 'UNKNOWN_CODE');
226
+ const report = reporter.report(evolithError);
227
+ expect(report.suggestion).toContain('details');
228
+ });
229
+ });
230
+ describe('getSuggestionForError', () => {
231
+ it('should return suggestion for ENOENT errors', () => {
232
+ const enoentError = new Error('ENOENT: no such file');
233
+ const report = reporter.report(enoentError);
234
+ expect(report.suggestion).toContain('not found');
235
+ });
236
+ it('should return suggestion for EACCES errors', () => {
237
+ const eaccesError = new Error('EACCES: permission denied');
238
+ const report = reporter.report(eaccesError);
239
+ expect(report.suggestion).toContain('Permission denied');
240
+ });
241
+ it('should return suggestion for ENOEXEC errors', () => {
242
+ const enoexecError = new Error('ENOEXEC: not executable');
243
+ const report = reporter.report(enoexecError);
244
+ expect(report.suggestion).toContain('Install');
245
+ });
246
+ it('should return generic suggestion for other errors', () => {
247
+ const genericError = new Error('Something went wrong');
248
+ const report = reporter.report(genericError);
249
+ expect(report.suggestion).toContain('unexpected');
250
+ });
251
+ });
252
+ describe('generateId', () => {
253
+ it('should generate unique IDs', () => {
254
+ const report1 = reporter.report(new Error('Error 1'));
255
+ const report2 = reporter.report(new Error('Error 2'));
256
+ expect(report1.id).not.toBe(report2.id);
257
+ });
258
+ it('should generate IDs with ERR- prefix', () => {
259
+ const report = reporter.report(new Error('Test'));
260
+ expect(report.id).toMatch(/^ERR-/);
261
+ });
262
+ });
263
+ });
264
+ describe('OperationContext', () => {
265
+ beforeEach(() => {
266
+ error_reporter_1.OperationContext.clear();
267
+ });
268
+ it('should set and get values', () => {
269
+ error_reporter_1.OperationContext.set('key', 'value');
270
+ expect(error_reporter_1.OperationContext.get('key')).toBe('value');
271
+ });
272
+ it('should return undefined for missing keys', () => {
273
+ expect(error_reporter_1.OperationContext.get('missing')).toBeUndefined();
274
+ });
275
+ it('should clear all values', () => {
276
+ error_reporter_1.OperationContext.set('key1', 'value1');
277
+ error_reporter_1.OperationContext.set('key2', 'value2');
278
+ error_reporter_1.OperationContext.clear();
279
+ expect(error_reporter_1.OperationContext.get('key1')).toBeUndefined();
280
+ expect(error_reporter_1.OperationContext.get('key2')).toBeUndefined();
281
+ });
282
+ it('should return copy of all values', () => {
283
+ error_reporter_1.OperationContext.set('key1', 'value1');
284
+ error_reporter_1.OperationContext.set('key2', 'value2');
285
+ const all = error_reporter_1.OperationContext.getAll();
286
+ expect(all).toEqual({ key1: 'value1', key2: 'value2' });
287
+ all.key1 = 'modified';
288
+ expect(error_reporter_1.OperationContext.get('key1')).toBe('value1');
289
+ });
290
+ });
291
+ //# sourceMappingURL=error-reporter.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-reporter.spec.js","sourceRoot":"","sources":["../../../src/core/observability/error-reporter.spec.ts"],"names":[],"mappings":"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"}