cadr-cli 0.0.1 → 1.9.2

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 (121) hide show
  1. package/dist/adr.d.ts +50 -0
  2. package/dist/adr.d.ts.map +1 -0
  3. package/dist/adr.js +156 -0
  4. package/dist/adr.js.map +1 -0
  5. package/dist/adr.test.d.ts +8 -0
  6. package/dist/adr.test.d.ts.map +1 -0
  7. package/dist/adr.test.js +256 -0
  8. package/dist/adr.test.js.map +1 -0
  9. package/dist/analysis.d.ts +24 -0
  10. package/dist/analysis.d.ts.map +1 -0
  11. package/dist/analysis.js +281 -0
  12. package/dist/analysis.js.map +1 -0
  13. package/dist/analysis.test.d.ts +8 -0
  14. package/dist/analysis.test.d.ts.map +1 -0
  15. package/dist/analysis.test.js +351 -0
  16. package/dist/analysis.test.js.map +1 -0
  17. package/dist/commands/analyze.d.ts +14 -0
  18. package/dist/commands/analyze.d.ts.map +1 -0
  19. package/dist/commands/analyze.js +56 -0
  20. package/dist/commands/analyze.js.map +1 -0
  21. package/dist/commands/init.d.ts +12 -0
  22. package/dist/commands/init.d.ts.map +1 -0
  23. package/dist/commands/init.js +93 -0
  24. package/dist/commands/init.js.map +1 -0
  25. package/dist/commands/init.test.d.ts +2 -0
  26. package/dist/commands/init.test.d.ts.map +1 -0
  27. package/dist/commands/init.test.js +56 -0
  28. package/dist/commands/init.test.js.map +1 -0
  29. package/dist/config.d.ts +40 -0
  30. package/dist/config.d.ts.map +1 -0
  31. package/dist/config.js +208 -0
  32. package/dist/config.js.map +1 -0
  33. package/dist/config.test.d.ts +2 -0
  34. package/dist/config.test.d.ts.map +1 -0
  35. package/dist/config.test.js +97 -0
  36. package/dist/config.test.js.map +1 -0
  37. package/dist/git.d.ts +42 -0
  38. package/dist/git.d.ts.map +1 -1
  39. package/dist/git.js +157 -0
  40. package/dist/git.js.map +1 -1
  41. package/dist/index.d.ts +2 -3
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +78 -62
  44. package/dist/index.js.map +1 -1
  45. package/dist/index.test.d.ts +2 -0
  46. package/dist/index.test.d.ts.map +1 -0
  47. package/dist/index.test.js +51 -0
  48. package/dist/index.test.js.map +1 -0
  49. package/dist/llm.d.ts +73 -0
  50. package/dist/llm.d.ts.map +1 -0
  51. package/dist/llm.js +263 -0
  52. package/dist/llm.js.map +1 -0
  53. package/dist/llm.test.d.ts +2 -0
  54. package/dist/llm.test.d.ts.map +1 -0
  55. package/dist/llm.test.js +592 -0
  56. package/dist/llm.test.js.map +1 -0
  57. package/dist/logger.d.ts.map +1 -1
  58. package/dist/logger.js +5 -3
  59. package/dist/logger.js.map +1 -1
  60. package/dist/logger.test.d.ts +2 -0
  61. package/dist/logger.test.d.ts.map +1 -0
  62. package/dist/logger.test.js +78 -0
  63. package/dist/logger.test.js.map +1 -0
  64. package/dist/prompts.d.ts +49 -0
  65. package/dist/prompts.d.ts.map +1 -0
  66. package/dist/prompts.js +195 -0
  67. package/dist/prompts.js.map +1 -0
  68. package/dist/prompts.test.d.ts +2 -0
  69. package/dist/prompts.test.d.ts.map +1 -0
  70. package/dist/prompts.test.js +427 -0
  71. package/dist/prompts.test.js.map +1 -0
  72. package/dist/providers/gemini.d.ts +3 -0
  73. package/dist/providers/gemini.d.ts.map +1 -0
  74. package/dist/providers/gemini.js +39 -0
  75. package/dist/providers/gemini.js.map +1 -0
  76. package/dist/providers/index.d.ts +2 -0
  77. package/dist/providers/index.d.ts.map +1 -0
  78. package/dist/providers/index.js +6 -0
  79. package/dist/providers/index.js.map +1 -0
  80. package/dist/providers/openai.d.ts +3 -0
  81. package/dist/providers/openai.d.ts.map +1 -0
  82. package/dist/providers/openai.js +25 -0
  83. package/dist/providers/openai.js.map +1 -0
  84. package/dist/providers/registry.d.ts +4 -0
  85. package/dist/providers/registry.d.ts.map +1 -0
  86. package/dist/providers/registry.js +16 -0
  87. package/dist/providers/registry.js.map +1 -0
  88. package/dist/providers/types.d.ts +12 -0
  89. package/dist/providers/types.d.ts.map +1 -0
  90. package/dist/providers/types.js +5 -0
  91. package/dist/providers/types.js.map +1 -0
  92. package/dist/version.test.d.ts +3 -0
  93. package/dist/version.test.d.ts.map +1 -0
  94. package/dist/version.test.js +25 -0
  95. package/dist/version.test.js.map +1 -0
  96. package/package.json +14 -5
  97. package/src/adr.test.ts +278 -0
  98. package/src/adr.ts +136 -0
  99. package/src/analysis.test.ts +396 -0
  100. package/src/analysis.ts +262 -0
  101. package/src/commands/analyze.ts +56 -0
  102. package/src/commands/init.test.ts +27 -0
  103. package/src/commands/init.ts +99 -0
  104. package/src/config.test.ts +79 -0
  105. package/src/config.ts +214 -0
  106. package/src/git.ts +240 -0
  107. package/src/index.test.ts +59 -0
  108. package/src/index.ts +80 -60
  109. package/src/llm.test.ts +701 -0
  110. package/src/llm.ts +344 -0
  111. package/src/logger.test.ts +90 -0
  112. package/src/logger.ts +6 -3
  113. package/src/prompts.test.ts +515 -0
  114. package/src/prompts.ts +174 -0
  115. package/src/providers/gemini.ts +41 -0
  116. package/src/providers/index.ts +1 -0
  117. package/src/providers/openai.ts +22 -0
  118. package/src/providers/registry.ts +16 -0
  119. package/src/providers/types.ts +14 -0
  120. package/src/version.test.ts +29 -0
  121. package/bin/cadr.js +0 -16
@@ -0,0 +1,592 @@
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
+ const llm_1 = require("./llm");
7
+ const openai_1 = __importDefault(require("openai"));
8
+ const generative_ai_1 = require("@google/generative-ai");
9
+ // Mock OpenAI module
10
+ jest.mock('openai');
11
+ jest.mock('@google/generative-ai');
12
+ describe('LLM Client Module', () => {
13
+ const mockConfig = {
14
+ provider: 'openai',
15
+ analysis_model: 'gpt-4',
16
+ api_key_env: 'OPENAI_API_KEY',
17
+ timeout_seconds: 15
18
+ };
19
+ const mockRequest = {
20
+ file_paths: ['src/auth.ts', 'src/user.ts'],
21
+ diff_content: `
22
+ diff --git a/src/auth.ts b/src/auth.ts
23
+ +export function authenticateUser(token: string) {
24
+ + return jwt.verify(token);
25
+ +}
26
+ `,
27
+ repository_context: 'my-app',
28
+ analysis_prompt: 'Analyze these changes...'
29
+ };
30
+ beforeEach(() => {
31
+ jest.clearAllMocks();
32
+ process.env.OPENAI_API_KEY = 'test-api-key';
33
+ });
34
+ afterEach(() => {
35
+ delete process.env.OPENAI_API_KEY;
36
+ });
37
+ describe('analyzeChanges', () => {
38
+ test('analyzes changes successfully with significant result', async () => {
39
+ const mockResponse = {
40
+ choices: [{
41
+ message: {
42
+ content: JSON.stringify({
43
+ is_significant: true,
44
+ reason: 'Introduces new authentication system'
45
+ })
46
+ }
47
+ }]
48
+ };
49
+ const mockCreate = jest.fn().mockResolvedValue(mockResponse);
50
+ openai_1.default.mockImplementation(() => ({
51
+ chat: {
52
+ completions: {
53
+ create: mockCreate
54
+ }
55
+ }
56
+ }));
57
+ const response = await (0, llm_1.analyzeChanges)(mockConfig, mockRequest);
58
+ expect(response.result).not.toBeNull();
59
+ expect(response.error).toBeUndefined();
60
+ expect(response.result?.is_significant).toBe(true);
61
+ expect(response.result?.reason).toContain('authentication');
62
+ expect(response.result?.timestamp).toBeDefined();
63
+ expect(mockCreate).toHaveBeenCalledWith(expect.objectContaining({
64
+ model: 'gpt-4',
65
+ messages: expect.any(Array)
66
+ }), expect.objectContaining({
67
+ timeout: 15000
68
+ }));
69
+ });
70
+ test('analyzes changes successfully with non-significant result', async () => {
71
+ const mockResponse = {
72
+ choices: [{
73
+ message: {
74
+ content: JSON.stringify({
75
+ is_significant: false,
76
+ reason: 'Minor documentation updates'
77
+ })
78
+ }
79
+ }]
80
+ };
81
+ const mockCreate = jest.fn().mockResolvedValue(mockResponse);
82
+ openai_1.default.mockImplementation(() => ({
83
+ chat: {
84
+ completions: {
85
+ create: mockCreate
86
+ }
87
+ }
88
+ }));
89
+ const response = await (0, llm_1.analyzeChanges)(mockConfig, mockRequest);
90
+ expect(response.result).not.toBeNull();
91
+ expect(response.error).toBeUndefined();
92
+ expect(response.result?.is_significant).toBe(false);
93
+ expect(response.result?.reason).toContain('documentation');
94
+ });
95
+ test('accepts empty reason when change is not significant', async () => {
96
+ const mockResponse = {
97
+ choices: [{
98
+ message: {
99
+ content: JSON.stringify({
100
+ is_significant: false,
101
+ reason: ''
102
+ })
103
+ }
104
+ }]
105
+ };
106
+ const mockCreate = jest.fn().mockResolvedValue(mockResponse);
107
+ openai_1.default.mockImplementation(() => ({
108
+ chat: {
109
+ completions: {
110
+ create: mockCreate
111
+ }
112
+ }
113
+ }));
114
+ const response = await (0, llm_1.analyzeChanges)(mockConfig, mockRequest);
115
+ expect(response.result).not.toBeNull();
116
+ expect(response.error).toBeUndefined();
117
+ expect(response.result?.is_significant).toBe(false);
118
+ expect(response.result?.reason).toBe('');
119
+ });
120
+ test('rejects empty reason when change is significant', async () => {
121
+ const mockResponse = {
122
+ choices: [{
123
+ message: {
124
+ content: JSON.stringify({
125
+ is_significant: true,
126
+ reason: ''
127
+ })
128
+ }
129
+ }]
130
+ };
131
+ const mockCreate = jest.fn().mockResolvedValue(mockResponse);
132
+ openai_1.default.mockImplementation(() => ({
133
+ chat: {
134
+ completions: {
135
+ create: mockCreate
136
+ }
137
+ }
138
+ }));
139
+ const response = await (0, llm_1.analyzeChanges)(mockConfig, mockRequest);
140
+ expect(response.result).toBeNull();
141
+ expect(response.error).toBeDefined();
142
+ expect(response.error).toContain('no reason');
143
+ });
144
+ test('handles API failures gracefully (fail-open)', async () => {
145
+ const mockCreate = jest.fn().mockRejectedValue(new Error('API Error'));
146
+ openai_1.default.mockImplementation(() => ({
147
+ chat: {
148
+ completions: {
149
+ create: mockCreate
150
+ }
151
+ }
152
+ }));
153
+ const response = await (0, llm_1.analyzeChanges)(mockConfig, mockRequest);
154
+ // Fail-open: should return error, not throw
155
+ expect(response.result).toBeNull();
156
+ expect(response.error).toBeDefined();
157
+ expect(response.error).toContain('API error');
158
+ expect(mockCreate).toHaveBeenCalled();
159
+ });
160
+ test('handles rate limiting gracefully', async () => {
161
+ const rateLimitError = new Error('Rate limit exceeded');
162
+ rateLimitError.status = 429;
163
+ const mockCreate = jest.fn().mockRejectedValue(rateLimitError);
164
+ openai_1.default.mockImplementation(() => ({
165
+ chat: {
166
+ completions: {
167
+ create: mockCreate
168
+ }
169
+ }
170
+ }));
171
+ const response = await (0, llm_1.analyzeChanges)(mockConfig, mockRequest);
172
+ expect(response.result).toBeNull();
173
+ expect(response.error).toBeDefined();
174
+ expect(response.error).toContain('Rate limit exceeded');
175
+ });
176
+ test('handles timeout gracefully', async () => {
177
+ const timeoutError = new Error('Request timeout');
178
+ timeoutError.code = 'ETIMEDOUT';
179
+ const mockCreate = jest.fn().mockRejectedValue(timeoutError);
180
+ openai_1.default.mockImplementation(() => ({
181
+ chat: {
182
+ completions: {
183
+ create: mockCreate
184
+ }
185
+ }
186
+ }));
187
+ const response = await (0, llm_1.analyzeChanges)(mockConfig, mockRequest);
188
+ expect(response.result).toBeNull();
189
+ expect(response.error).toBeDefined();
190
+ });
191
+ test('validates response format and rejects invalid JSON', async () => {
192
+ const mockResponse = {
193
+ choices: [{
194
+ message: {
195
+ content: 'This is not valid JSON'
196
+ }
197
+ }]
198
+ };
199
+ const mockCreate = jest.fn().mockResolvedValue(mockResponse);
200
+ openai_1.default.mockImplementation(() => ({
201
+ chat: {
202
+ completions: {
203
+ create: mockCreate
204
+ }
205
+ }
206
+ }));
207
+ const response = await (0, llm_1.analyzeChanges)(mockConfig, mockRequest);
208
+ expect(response.result).toBeNull();
209
+ expect(response.error).toBeDefined();
210
+ });
211
+ test('validates response format and rejects missing fields', async () => {
212
+ const mockResponse = {
213
+ choices: [{
214
+ message: {
215
+ content: JSON.stringify({
216
+ is_significant: true
217
+ // Missing 'reason' field
218
+ })
219
+ }
220
+ }]
221
+ };
222
+ const mockCreate = jest.fn().mockResolvedValue(mockResponse);
223
+ openai_1.default.mockImplementation(() => ({
224
+ chat: {
225
+ completions: {
226
+ create: mockCreate
227
+ }
228
+ }
229
+ }));
230
+ const response = await (0, llm_1.analyzeChanges)(mockConfig, mockRequest);
231
+ expect(response.result).toBeNull();
232
+ expect(response.error).toBeDefined();
233
+ });
234
+ test('respects timeout configuration', async () => {
235
+ const customConfig = { ...mockConfig, timeout_seconds: 5 };
236
+ const mockCreate = jest.fn().mockResolvedValue({
237
+ choices: [{
238
+ message: {
239
+ content: JSON.stringify({
240
+ is_significant: true,
241
+ reason: 'Test'
242
+ })
243
+ }
244
+ }]
245
+ });
246
+ openai_1.default.mockImplementation(() => ({
247
+ chat: {
248
+ completions: {
249
+ create: mockCreate
250
+ }
251
+ }
252
+ }));
253
+ await (0, llm_1.analyzeChanges)(customConfig, mockRequest);
254
+ // Verify timeout was passed to OpenAI client
255
+ expect(mockCreate).toHaveBeenCalledWith(expect.objectContaining({
256
+ model: 'gpt-4',
257
+ messages: expect.any(Array)
258
+ }), expect.objectContaining({
259
+ timeout: 5000 // milliseconds
260
+ }));
261
+ });
262
+ test('returns null when API key is missing', async () => {
263
+ delete process.env.OPENAI_API_KEY;
264
+ const response = await (0, llm_1.analyzeChanges)(mockConfig, mockRequest);
265
+ expect(response.result).toBeNull();
266
+ expect(response.error).toBeDefined();
267
+ });
268
+ test('includes confidence score when provided by LLM', async () => {
269
+ const mockResponse = {
270
+ choices: [{
271
+ message: {
272
+ content: JSON.stringify({
273
+ is_significant: true,
274
+ reason: 'Major change',
275
+ confidence: 0.95
276
+ })
277
+ }
278
+ }]
279
+ };
280
+ const mockCreate = jest.fn().mockResolvedValue(mockResponse);
281
+ openai_1.default.mockImplementation(() => ({
282
+ chat: {
283
+ completions: {
284
+ create: mockCreate
285
+ }
286
+ }
287
+ }));
288
+ const response = await (0, llm_1.analyzeChanges)(mockConfig, mockRequest);
289
+ expect(response.result).not.toBeNull();
290
+ expect(response.error).toBeUndefined();
291
+ expect(response.result?.confidence).toBe(0.95);
292
+ });
293
+ test('supports Gemini provider with valid JSON response', async () => {
294
+ const geminiConfig = {
295
+ provider: 'gemini',
296
+ analysis_model: 'gemini-1.5-pro',
297
+ api_key_env: 'GEMINI_API_KEY',
298
+ timeout_seconds: 10,
299
+ };
300
+ generative_ai_1.GoogleGenerativeAI.mockImplementation(() => ({
301
+ getGenerativeModel: () => ({
302
+ generateContent: jest.fn().mockResolvedValue({
303
+ response: {
304
+ text: () => JSON.stringify({ is_significant: false, reason: '' }),
305
+ },
306
+ }),
307
+ }),
308
+ }));
309
+ process.env.GEMINI_API_KEY = 'test-api-key';
310
+ const response = await (0, llm_1.analyzeChanges)(geminiConfig, mockRequest);
311
+ expect(response.result).not.toBeNull();
312
+ expect(response.result?.is_significant).toBe(false);
313
+ delete process.env.GEMINI_API_KEY;
314
+ });
315
+ test('handles Gemini timeout gracefully', async () => {
316
+ const geminiConfig = {
317
+ provider: 'gemini',
318
+ analysis_model: 'gemini-1.5-pro',
319
+ api_key_env: 'GEMINI_API_KEY',
320
+ timeout_seconds: 1,
321
+ };
322
+ const slowPromise = new Promise((resolve) => setTimeout(() => resolve({
323
+ response: { text: () => JSON.stringify({ is_significant: true, reason: 'Test' }) }
324
+ }), 3000));
325
+ generative_ai_1.GoogleGenerativeAI.mockImplementation(() => ({
326
+ getGenerativeModel: () => ({
327
+ generateContent: jest.fn().mockReturnValue(slowPromise),
328
+ }),
329
+ }));
330
+ process.env.GEMINI_API_KEY = 'test-api-key';
331
+ const response = await (0, llm_1.analyzeChanges)(geminiConfig, mockRequest);
332
+ expect(response.result).toBeNull();
333
+ expect(response.error).toMatch(/timeout/i);
334
+ delete process.env.GEMINI_API_KEY;
335
+ });
336
+ });
337
+ describe('Prompt Construction', () => {
338
+ test('constructs proper prompt with file paths and diff', async () => {
339
+ const mockCreate = jest.fn().mockResolvedValue({
340
+ choices: [{
341
+ message: {
342
+ content: JSON.stringify({
343
+ is_significant: false,
344
+ reason: 'Test'
345
+ })
346
+ }
347
+ }]
348
+ });
349
+ openai_1.default.mockImplementation(() => ({
350
+ chat: {
351
+ completions: {
352
+ create: mockCreate
353
+ }
354
+ }
355
+ }));
356
+ await (0, llm_1.analyzeChanges)(mockConfig, mockRequest);
357
+ expect(mockCreate).toHaveBeenCalled();
358
+ const callArgs = mockCreate.mock.calls[0][0];
359
+ expect(callArgs.messages).toBeDefined();
360
+ expect(callArgs.messages.length).toBeGreaterThan(0);
361
+ });
362
+ });
363
+ describe('generateADRContent', () => {
364
+ const mockGenerationRequest = {
365
+ file_paths: ['src/database.ts'],
366
+ diff_content: `
367
+ diff --git a/src/database.ts b/src/database.ts
368
+ +import pg from 'pg';
369
+ +export const database = new pg.Pool();
370
+ `,
371
+ reason: 'Introduces PostgreSQL as primary datastore',
372
+ generation_prompt: 'Generate an ADR for the following changes...'
373
+ };
374
+ beforeEach(() => {
375
+ process.env.OPENAI_API_KEY = 'test-api-key';
376
+ });
377
+ afterEach(() => {
378
+ delete process.env.OPENAI_API_KEY;
379
+ });
380
+ test('generates ADR content successfully', async () => {
381
+ const mockADRContent = `# Use PostgreSQL as Primary Datastore
382
+
383
+ * Status: accepted
384
+ * Date: 2025-10-21
385
+
386
+ ## Context and Problem Statement
387
+
388
+ We need a reliable database for our application.
389
+
390
+ ## Decision Drivers
391
+
392
+ * Need for ACID compliance
393
+ * Strong community support
394
+ * Excellent performance
395
+
396
+ ## Considered Options
397
+
398
+ * PostgreSQL
399
+ * MySQL
400
+ * MongoDB
401
+
402
+ ## Decision Outcome
403
+
404
+ Chosen option: "PostgreSQL", because it provides strong ACID guarantees and excellent JSON support.
405
+
406
+ ### Consequences
407
+
408
+ * Good, because we get reliable transactions
409
+ * Good, because we have strong typing
410
+ * Bad, because requires more setup than NoSQL`;
411
+ const mockResponse = {
412
+ choices: [{
413
+ message: {
414
+ content: mockADRContent
415
+ }
416
+ }]
417
+ };
418
+ const mockCreate = jest.fn().mockResolvedValue(mockResponse);
419
+ openai_1.default.mockImplementation(() => ({
420
+ chat: {
421
+ completions: {
422
+ create: mockCreate
423
+ }
424
+ }
425
+ }));
426
+ const response = await (0, llm_1.generateADRContent)(mockConfig, mockGenerationRequest);
427
+ expect(response.result).not.toBeNull();
428
+ expect(response.error).toBeUndefined();
429
+ expect(response.result?.content).toBe(mockADRContent);
430
+ expect(response.result?.title).toBe('Use PostgreSQL as Primary Datastore');
431
+ expect(response.result?.timestamp).toBeDefined();
432
+ });
433
+ test('extracts title from markdown heading', async () => {
434
+ const mockADRContent = `# Switch to TypeScript
435
+
436
+ * Status: accepted
437
+
438
+ Some content...`;
439
+ const mockResponse = {
440
+ choices: [{
441
+ message: {
442
+ content: mockADRContent
443
+ }
444
+ }]
445
+ };
446
+ const mockCreate = jest.fn().mockResolvedValue(mockResponse);
447
+ openai_1.default.mockImplementation(() => ({
448
+ chat: {
449
+ completions: {
450
+ create: mockCreate
451
+ }
452
+ }
453
+ }));
454
+ const response = await (0, llm_1.generateADRContent)(mockConfig, mockGenerationRequest);
455
+ expect(response.result?.title).toBe('Switch to TypeScript');
456
+ });
457
+ test('handles missing title gracefully', async () => {
458
+ const mockADRContent = `Some content without a title heading
459
+
460
+ * Status: accepted`;
461
+ const mockResponse = {
462
+ choices: [{
463
+ message: {
464
+ content: mockADRContent
465
+ }
466
+ }]
467
+ };
468
+ const mockCreate = jest.fn().mockResolvedValue(mockResponse);
469
+ openai_1.default.mockImplementation(() => ({
470
+ chat: {
471
+ completions: {
472
+ create: mockCreate
473
+ }
474
+ }
475
+ }));
476
+ const response = await (0, llm_1.generateADRContent)(mockConfig, mockGenerationRequest);
477
+ expect(response.result?.title).toBe('Untitled Decision');
478
+ });
479
+ test('removes markdown code fences if present', async () => {
480
+ const mockADRContent = `# My Decision
481
+
482
+ * Status: accepted`;
483
+ const mockResponse = {
484
+ choices: [{
485
+ message: {
486
+ content: '```markdown\n' + mockADRContent + '\n```'
487
+ }
488
+ }]
489
+ };
490
+ const mockCreate = jest.fn().mockResolvedValue(mockResponse);
491
+ openai_1.default.mockImplementation(() => ({
492
+ chat: {
493
+ completions: {
494
+ create: mockCreate
495
+ }
496
+ }
497
+ }));
498
+ const response = await (0, llm_1.generateADRContent)(mockConfig, mockGenerationRequest);
499
+ expect(response.result?.content).toBe(mockADRContent);
500
+ expect(response.result?.content).not.toContain('```');
501
+ });
502
+ test('handles API failures gracefully', async () => {
503
+ const mockCreate = jest.fn().mockRejectedValue(new Error('API Error'));
504
+ openai_1.default.mockImplementation(() => ({
505
+ chat: {
506
+ completions: {
507
+ create: mockCreate
508
+ }
509
+ }
510
+ }));
511
+ const response = await (0, llm_1.generateADRContent)(mockConfig, mockGenerationRequest);
512
+ expect(response.result).toBeNull();
513
+ expect(response.error).toBeDefined();
514
+ expect(response.error).toContain('API error');
515
+ });
516
+ test('handles missing API key', async () => {
517
+ delete process.env.OPENAI_API_KEY;
518
+ const response = await (0, llm_1.generateADRContent)(mockConfig, mockGenerationRequest);
519
+ expect(response.result).toBeNull();
520
+ expect(response.error).toContain('API key not found');
521
+ });
522
+ test('handles timeout errors', async () => {
523
+ const mockCreate = jest.fn().mockRejectedValue({ code: 'ETIMEDOUT' });
524
+ openai_1.default.mockImplementation(() => ({
525
+ chat: {
526
+ completions: {
527
+ create: mockCreate
528
+ }
529
+ }
530
+ }));
531
+ const response = await (0, llm_1.generateADRContent)(mockConfig, mockGenerationRequest);
532
+ expect(response.result).toBeNull();
533
+ expect(response.error).toMatch(/timeout/i);
534
+ });
535
+ test('follows fail-open principle on all errors', async () => {
536
+ const mockCreate = jest.fn().mockRejectedValue(new Error('Unexpected error'));
537
+ openai_1.default.mockImplementation(() => ({
538
+ chat: {
539
+ completions: {
540
+ create: mockCreate
541
+ }
542
+ }
543
+ }));
544
+ // Should not throw, should return error response
545
+ await expect((0, llm_1.generateADRContent)(mockConfig, mockGenerationRequest)).resolves.toEqual({
546
+ result: null,
547
+ error: expect.any(String)
548
+ });
549
+ });
550
+ test('respects timeout configuration', async () => {
551
+ const mockCreate = jest.fn().mockResolvedValue({
552
+ choices: [{
553
+ message: {
554
+ content: '# Test\n\nContent'
555
+ }
556
+ }]
557
+ });
558
+ openai_1.default.mockImplementation(() => ({
559
+ chat: {
560
+ completions: {
561
+ create: mockCreate
562
+ }
563
+ }
564
+ }));
565
+ await (0, llm_1.generateADRContent)(mockConfig, mockGenerationRequest);
566
+ expect(mockCreate).toHaveBeenCalledWith(expect.any(Object), expect.objectContaining({
567
+ timeout: 15000 // 15 seconds from config
568
+ }));
569
+ });
570
+ test('uses same model as analysis', async () => {
571
+ const mockCreate = jest.fn().mockResolvedValue({
572
+ choices: [{
573
+ message: {
574
+ content: '# Test\n\nContent'
575
+ }
576
+ }]
577
+ });
578
+ openai_1.default.mockImplementation(() => ({
579
+ chat: {
580
+ completions: {
581
+ create: mockCreate
582
+ }
583
+ }
584
+ }));
585
+ await (0, llm_1.generateADRContent)(mockConfig, mockGenerationRequest);
586
+ expect(mockCreate).toHaveBeenCalledWith(expect.objectContaining({
587
+ model: 'gpt-4' // Same as analysis_model
588
+ }), expect.any(Object));
589
+ });
590
+ });
591
+ });
592
+ //# sourceMappingURL=llm.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm.test.js","sourceRoot":"","sources":["../src/llm.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAWA,qBAAa,MAAM;IACjB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ7C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ7C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;CAO/C;AAGD,eAAO,MAAM,cAAc,QAAe,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAcA,qBAAa,MAAM;IACjB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ7C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ7C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;CAO/C;AAGD,eAAO,MAAM,cAAc,QAAe,CAAC"}
package/dist/logger.js CHANGED
@@ -5,10 +5,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.loggerInstance = exports.Logger = void 0;
7
7
  const pino_1 = __importDefault(require("pino"));
8
- // Configure Pino to output JSON to stderr
8
+ // Configure Pino to be silent by default (or verbose if --verbose flag is present)
9
+ const isVerbose = process.argv.includes('--verbose') || process.argv.includes('-v');
10
+ const isTest = process.env.NODE_ENV === 'test';
9
11
  const logger = (0, pino_1.default)({
10
- level: 'info',
11
- transport: {
12
+ level: isTest || !isVerbose ? 'silent' : 'info',
13
+ transport: isTest || !isVerbose ? undefined : {
12
14
  target: 'pino/file',
13
15
  options: { destination: 2 } // stderr
14
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,0CAA0C;AAC1C,MAAM,MAAM,GAAG,IAAA,cAAI,EAAC;IAClB,KAAK,EAAE,MAAM;IACb,SAAS,EAAE;QACT,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,SAAS;KACtC;CACF,CAAC,CAAC;AAEH,MAAa,MAAM;IACjB,IAAI,CAAC,OAAe,EAAE,OAAgB;QACpC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAgB;QACpC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,OAAgB;QACrC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;CACF;AAxBD,wBAwBC;AAED,mCAAmC;AACtB,QAAA,cAAc,GAAG,IAAI,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,mFAAmF;AACnF,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC;AAE/C,MAAM,MAAM,GAAG,IAAA,cAAI,EAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;IAC/C,SAAS,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5C,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,SAAS;KACtC;CACF,CAAC,CAAC;AAEH,MAAa,MAAM;IACjB,IAAI,CAAC,OAAe,EAAE,OAAgB;QACpC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAgB;QACpC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,OAAgB;QACrC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;CACF;AAxBD,wBAwBC;AAED,mCAAmC;AACtB,QAAA,cAAc,GAAG,IAAI,MAAM,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logger.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.test.d.ts","sourceRoot":"","sources":["../src/logger.test.ts"],"names":[],"mappings":""}