cadr-cli 2.0.0 → 2.0.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.
- package/dist/adr/adr.d.ts +17 -0
- package/dist/adr/adr.d.ts.map +1 -0
- package/dist/{adr.js → adr/adr.js} +4 -44
- package/dist/adr/adr.js.map +1 -0
- package/dist/adr/adr.test.d.ts +5 -0
- package/dist/{adr.test.d.ts.map → adr/adr.test.d.ts.map} +1 -1
- package/dist/{adr.test.js → adr/adr.test.js} +0 -14
- package/dist/adr/adr.test.js.map +1 -0
- package/dist/adr/index.d.ts +2 -0
- package/dist/adr/index.d.ts.map +1 -0
- package/dist/adr/index.js +18 -0
- package/dist/adr/index.js.map +1 -0
- package/dist/analysis/analysis.orchestrator.d.ts +14 -0
- package/dist/analysis/analysis.orchestrator.d.ts.map +1 -0
- package/dist/analysis/analysis.orchestrator.js +175 -0
- package/dist/analysis/analysis.orchestrator.js.map +1 -0
- package/dist/analysis/analysis.orchestrator.test.d.ts +2 -0
- package/dist/analysis/analysis.orchestrator.test.d.ts.map +1 -0
- package/dist/analysis/analysis.orchestrator.test.js +177 -0
- package/dist/analysis/analysis.orchestrator.test.js.map +1 -0
- package/dist/analysis/strategies/git-strategy.d.ts +22 -0
- package/dist/analysis/strategies/git-strategy.d.ts.map +1 -0
- package/dist/analysis/strategies/git-strategy.js +114 -0
- package/dist/analysis/strategies/git-strategy.js.map +1 -0
- package/dist/analysis/strategies/git-strategy.test.d.ts +2 -0
- package/dist/analysis/strategies/git-strategy.test.d.ts.map +1 -0
- package/dist/analysis/strategies/git-strategy.test.js +147 -0
- package/dist/analysis/strategies/git-strategy.test.js.map +1 -0
- package/dist/commands/analyze.js +3 -3
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/analyze.test.d.ts +2 -0
- package/dist/commands/analyze.test.d.ts.map +1 -0
- package/dist/commands/analyze.test.js +70 -0
- package/dist/commands/analyze.test.js.map +1 -0
- package/dist/commands/init.test.js +128 -2
- package/dist/commands/init.test.js.map +1 -1
- package/dist/config.test.js +167 -0
- package/dist/config.test.js.map +1 -1
- package/dist/git/git.errors.d.ts +6 -0
- package/dist/git/git.errors.d.ts.map +1 -0
- package/dist/git/git.errors.js +15 -0
- package/dist/git/git.errors.js.map +1 -0
- package/dist/git/git.errors.test.d.ts +2 -0
- package/dist/git/git.errors.test.d.ts.map +1 -0
- package/dist/git/git.errors.test.js +34 -0
- package/dist/git/git.errors.test.js.map +1 -0
- package/dist/git/git.operations.d.ts +12 -0
- package/dist/git/git.operations.d.ts.map +1 -0
- package/dist/git/git.operations.js +64 -0
- package/dist/git/git.operations.js.map +1 -0
- package/dist/git/git.operations.test.d.ts +2 -0
- package/dist/git/git.operations.test.d.ts.map +1 -0
- package/dist/git/git.operations.test.js +164 -0
- package/dist/git/git.operations.test.js.map +1 -0
- package/dist/git/index.d.ts +4 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +19 -0
- package/dist/git/index.js.map +1 -0
- package/dist/llm/index.d.ts +3 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +19 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/llm.d.ts +35 -0
- package/dist/llm/llm.d.ts.map +1 -0
- package/dist/{llm.js → llm/llm.js} +16 -58
- package/dist/llm/llm.js.map +1 -0
- package/dist/{llm.test.d.ts.map → llm/llm.test.d.ts.map} +1 -1
- package/dist/llm/llm.test.js +224 -0
- package/dist/llm/llm.test.js.map +1 -0
- package/dist/{prompts.d.ts → llm/prompts.d.ts} +1 -38
- package/dist/llm/prompts.d.ts.map +1 -0
- package/dist/{prompts.js → llm/prompts.js} +9 -54
- package/dist/llm/prompts.js.map +1 -0
- package/dist/llm/response-parser.d.ts +9 -0
- package/dist/llm/response-parser.d.ts.map +1 -0
- package/dist/llm/response-parser.js +67 -0
- package/dist/llm/response-parser.js.map +1 -0
- package/dist/llm/response-parser.test.d.ts +2 -0
- package/dist/llm/response-parser.test.d.ts.map +1 -0
- package/dist/llm/response-parser.test.js +134 -0
- package/dist/llm/response-parser.test.js.map +1 -0
- package/dist/presenters/console-presenter.d.ts +35 -0
- package/dist/presenters/console-presenter.d.ts.map +1 -0
- package/dist/presenters/console-presenter.js +114 -0
- package/dist/presenters/console-presenter.js.map +1 -0
- package/dist/presenters/console-presenter.test.d.ts +2 -0
- package/dist/presenters/console-presenter.test.d.ts.map +1 -0
- package/dist/presenters/console-presenter.test.js +227 -0
- package/dist/presenters/console-presenter.test.js.map +1 -0
- package/dist/version.test.d.ts +1 -2
- package/dist/version.test.d.ts.map +1 -1
- package/dist/version.test.js +29 -16
- package/dist/version.test.js.map +1 -1
- package/package.json +1 -1
- package/src/{adr.test.ts → adr/adr.test.ts} +10 -23
- package/src/{adr.ts → adr/adr.ts} +7 -48
- package/src/adr/index.ts +1 -0
- package/src/analysis/analysis.orchestrator.test.ts +237 -0
- package/src/analysis/analysis.orchestrator.ts +175 -0
- package/src/analysis/strategies/git-strategy.test.ts +210 -0
- package/src/analysis/strategies/git-strategy.ts +106 -0
- package/src/commands/analyze.test.ts +91 -0
- package/src/commands/analyze.ts +8 -9
- package/src/commands/init.test.ts +200 -5
- package/src/config.test.ts +232 -2
- package/src/git/git.errors.test.ts +43 -0
- package/src/git/git.errors.ts +10 -0
- package/src/git/git.operations.test.ts +222 -0
- package/src/git/git.operations.ts +85 -0
- package/src/git/index.ts +3 -0
- package/src/llm/index.ts +2 -0
- package/src/llm/llm.test.ts +315 -0
- package/src/{llm.ts → llm/llm.ts} +46 -107
- package/src/{prompts.ts → llm/prompts.ts} +30 -72
- package/src/llm/response-parser.test.ts +170 -0
- package/src/llm/response-parser.ts +90 -0
- package/src/presenters/console-presenter.test.ts +259 -0
- package/src/presenters/console-presenter.ts +152 -0
- package/src/version.test.ts +30 -16
- package/dist/adr.d.ts +0 -50
- package/dist/adr.d.ts.map +0 -1
- package/dist/adr.js.map +0 -1
- package/dist/adr.test.d.ts +0 -8
- package/dist/adr.test.js.map +0 -1
- package/dist/analysis.d.ts +0 -24
- package/dist/analysis.d.ts.map +0 -1
- package/dist/analysis.js +0 -281
- package/dist/analysis.js.map +0 -1
- package/dist/analysis.test.d.ts +0 -8
- package/dist/analysis.test.d.ts.map +0 -1
- package/dist/analysis.test.js +0 -351
- package/dist/analysis.test.js.map +0 -1
- package/dist/git.d.ts +0 -54
- package/dist/git.d.ts.map +0 -1
- package/dist/git.js +0 -204
- package/dist/git.js.map +0 -1
- package/dist/llm.d.ts +0 -73
- package/dist/llm.d.ts.map +0 -1
- package/dist/llm.js.map +0 -1
- package/dist/llm.test.js +0 -592
- package/dist/llm.test.js.map +0 -1
- package/dist/prompts.d.ts.map +0 -1
- package/dist/prompts.js.map +0 -1
- package/dist/prompts.test.d.ts +0 -2
- package/dist/prompts.test.d.ts.map +0 -1
- package/dist/prompts.test.js +0 -427
- package/dist/prompts.test.js.map +0 -1
- package/src/analysis.test.ts +0 -396
- package/src/analysis.ts +0 -262
- package/src/git.ts +0 -300
- package/src/llm.test.ts +0 -701
- package/src/prompts.test.ts +0 -515
- /package/dist/{llm.test.d.ts → llm/llm.test.d.ts} +0 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
jest.mock('../logger', () => ({
|
|
4
|
+
loggerInstance: {
|
|
5
|
+
info: jest.fn(),
|
|
6
|
+
warn: jest.fn(),
|
|
7
|
+
error: jest.fn(),
|
|
8
|
+
debug: jest.fn(),
|
|
9
|
+
},
|
|
10
|
+
}));
|
|
11
|
+
const response_parser_1 = require("./response-parser");
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
jest.clearAllMocks();
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
jest.restoreAllMocks();
|
|
17
|
+
});
|
|
18
|
+
describe('parseAnalysisResponse', () => {
|
|
19
|
+
it('should parse a clean JSON string', () => {
|
|
20
|
+
const input = JSON.stringify({ is_significant: true, reason: 'big change' });
|
|
21
|
+
const result = (0, response_parser_1.parseAnalysisResponse)(input);
|
|
22
|
+
expect(result).toEqual({ is_significant: true, reason: 'big change' });
|
|
23
|
+
});
|
|
24
|
+
it('should extract JSON wrapped in ```json code block', () => {
|
|
25
|
+
const input = '```json\n{"is_significant": true, "reason": "refactored module"}\n```';
|
|
26
|
+
const result = (0, response_parser_1.parseAnalysisResponse)(input);
|
|
27
|
+
expect(result).toEqual({ is_significant: true, reason: 'refactored module' });
|
|
28
|
+
});
|
|
29
|
+
it('should extract JSON wrapped in ``` code block without language', () => {
|
|
30
|
+
const input = '```\n{"is_significant": true, "reason": "new feature"}\n```';
|
|
31
|
+
const result = (0, response_parser_1.parseAnalysisResponse)(input);
|
|
32
|
+
expect(result).toEqual({ is_significant: true, reason: 'new feature' });
|
|
33
|
+
});
|
|
34
|
+
it('should extract JSON embedded in surrounding text', () => {
|
|
35
|
+
const input = 'Here is the analysis:\n{"is_significant": false, "reason": "minor fix"}\nEnd of response.';
|
|
36
|
+
const result = (0, response_parser_1.parseAnalysisResponse)(input);
|
|
37
|
+
expect(result).toEqual({ is_significant: false, reason: 'minor fix' });
|
|
38
|
+
});
|
|
39
|
+
it('should parse is_significant: false with a reason', () => {
|
|
40
|
+
const input = JSON.stringify({ is_significant: false, reason: 'no impact' });
|
|
41
|
+
const result = (0, response_parser_1.parseAnalysisResponse)(input);
|
|
42
|
+
expect(result).toEqual({ is_significant: false, reason: 'no impact' });
|
|
43
|
+
});
|
|
44
|
+
it('should include confidence when within [0, 1]', () => {
|
|
45
|
+
const input = JSON.stringify({ is_significant: true, reason: 'important', confidence: 0.85 });
|
|
46
|
+
const result = (0, response_parser_1.parseAnalysisResponse)(input);
|
|
47
|
+
expect(result).toEqual({ is_significant: true, reason: 'important', confidence: 0.85 });
|
|
48
|
+
});
|
|
49
|
+
it('should not include confidence when out of range (> 1)', () => {
|
|
50
|
+
const input = JSON.stringify({ is_significant: true, reason: 'important', confidence: 1.5 });
|
|
51
|
+
const result = (0, response_parser_1.parseAnalysisResponse)(input);
|
|
52
|
+
expect(result).toEqual({ is_significant: true, reason: 'important' });
|
|
53
|
+
expect(result.confidence).toBeUndefined();
|
|
54
|
+
});
|
|
55
|
+
it('should not include confidence when it is not a number', () => {
|
|
56
|
+
const input = JSON.stringify({ is_significant: true, reason: 'important', confidence: 'high' });
|
|
57
|
+
const result = (0, response_parser_1.parseAnalysisResponse)(input);
|
|
58
|
+
expect(result).toEqual({ is_significant: true, reason: 'important' });
|
|
59
|
+
expect(result.confidence).toBeUndefined();
|
|
60
|
+
});
|
|
61
|
+
it('should throw when is_significant is true but reason is empty', () => {
|
|
62
|
+
const input = JSON.stringify({ is_significant: true, reason: '' });
|
|
63
|
+
expect(() => (0, response_parser_1.parseAnalysisResponse)(input)).toThrow('LLM indicated significant change but provided no reason');
|
|
64
|
+
});
|
|
65
|
+
it('should throw when is_significant is not a boolean', () => {
|
|
66
|
+
const input = JSON.stringify({ is_significant: 'yes', reason: 'something' });
|
|
67
|
+
expect(() => (0, response_parser_1.parseAnalysisResponse)(input)).toThrow('Invalid response format');
|
|
68
|
+
});
|
|
69
|
+
it('should throw when reason is not a string', () => {
|
|
70
|
+
const input = JSON.stringify({ is_significant: true, reason: 123 });
|
|
71
|
+
expect(() => (0, response_parser_1.parseAnalysisResponse)(input)).toThrow('Invalid response format');
|
|
72
|
+
});
|
|
73
|
+
it('should throw on invalid JSON', () => {
|
|
74
|
+
const input = 'not json at all {{{';
|
|
75
|
+
expect(() => (0, response_parser_1.parseAnalysisResponse)(input)).toThrow();
|
|
76
|
+
});
|
|
77
|
+
it('should throw on empty string', () => {
|
|
78
|
+
expect(() => (0, response_parser_1.parseAnalysisResponse)('')).toThrow();
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe('extractTitleFromMarkdown', () => {
|
|
82
|
+
it('should extract h1 title from markdown', () => {
|
|
83
|
+
const input = '# My Decision Title\n\nSome content here.';
|
|
84
|
+
expect((0, response_parser_1.extractTitleFromMarkdown)(input)).toBe('My Decision Title');
|
|
85
|
+
});
|
|
86
|
+
it('should return "Untitled Decision" when only h2 is present', () => {
|
|
87
|
+
const input = '## Second level\n\nSome content.';
|
|
88
|
+
expect((0, response_parser_1.extractTitleFromMarkdown)(input)).toBe('Untitled Decision');
|
|
89
|
+
});
|
|
90
|
+
it('should return "Untitled Decision" for empty string', () => {
|
|
91
|
+
expect((0, response_parser_1.extractTitleFromMarkdown)('')).toBe('Untitled Decision');
|
|
92
|
+
});
|
|
93
|
+
it('should extract h1 from content wrapped in ```markdown code block', () => {
|
|
94
|
+
const input = '```markdown\n# Wrapped Title\n\nBody text.\n```';
|
|
95
|
+
expect((0, response_parser_1.extractTitleFromMarkdown)(input)).toBe('Wrapped Title');
|
|
96
|
+
});
|
|
97
|
+
it('should trim trailing whitespace from the title', () => {
|
|
98
|
+
const input = '# Title With Spaces \n\nContent.';
|
|
99
|
+
expect((0, response_parser_1.extractTitleFromMarkdown)(input)).toBe('Title With Spaces');
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
describe('parseLLMResponse', () => {
|
|
103
|
+
it('should return validator result for valid JSON', () => {
|
|
104
|
+
const input = JSON.stringify({ key: 'value' });
|
|
105
|
+
const validator = (parsed) => parsed;
|
|
106
|
+
const result = (0, response_parser_1.parseLLMResponse)(input, validator);
|
|
107
|
+
expect(result).toEqual({ key: 'value' });
|
|
108
|
+
});
|
|
109
|
+
it('should rethrow with descriptive message when validator throws', () => {
|
|
110
|
+
const input = JSON.stringify({ key: 'value' });
|
|
111
|
+
const validator = () => {
|
|
112
|
+
throw new Error('validation failed');
|
|
113
|
+
};
|
|
114
|
+
expect(() => (0, response_parser_1.parseLLMResponse)(input, validator)).toThrow('Failed to parse LLM response as JSON');
|
|
115
|
+
expect(() => (0, response_parser_1.parseLLMResponse)(input, validator)).toThrow(expect.objectContaining({
|
|
116
|
+
message: expect.stringContaining(input.substring(0, 20)),
|
|
117
|
+
}));
|
|
118
|
+
});
|
|
119
|
+
it('should rethrow with descriptive message on invalid JSON', () => {
|
|
120
|
+
const input = 'totally not json';
|
|
121
|
+
const validator = (parsed) => parsed;
|
|
122
|
+
expect(() => (0, response_parser_1.parseLLMResponse)(input, validator)).toThrow('Failed to parse LLM response as JSON');
|
|
123
|
+
expect(() => (0, response_parser_1.parseLLMResponse)(input, validator)).toThrow(expect.objectContaining({
|
|
124
|
+
message: expect.stringContaining('totally not json'),
|
|
125
|
+
}));
|
|
126
|
+
});
|
|
127
|
+
it('should strip code block wrapping before parsing', () => {
|
|
128
|
+
const input = '```json\n{"status": "ok"}\n```';
|
|
129
|
+
const validator = (parsed) => parsed;
|
|
130
|
+
const result = (0, response_parser_1.parseLLMResponse)(input, validator);
|
|
131
|
+
expect(result).toEqual({ status: 'ok' });
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=response-parser.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-parser.test.js","sourceRoot":"","sources":["../../src/llm/response-parser.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface AnalysisSummary {
|
|
2
|
+
fileCount: number;
|
|
3
|
+
mode: string;
|
|
4
|
+
isSignificant: boolean;
|
|
5
|
+
reason: string;
|
|
6
|
+
confidence?: number;
|
|
7
|
+
filePath?: string;
|
|
8
|
+
title?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface DiffOptions {
|
|
11
|
+
mode: 'staged' | 'all' | 'branch-diff';
|
|
12
|
+
base?: string;
|
|
13
|
+
head?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare class ConsolePresenter {
|
|
16
|
+
showConfigError(): void;
|
|
17
|
+
showGitError(message: string): void;
|
|
18
|
+
showReadFilesError(): void;
|
|
19
|
+
showNoChanges(options: DiffOptions): void;
|
|
20
|
+
showAnalyzingFiles(files: string[], options: DiffOptions): void;
|
|
21
|
+
showNoDiffContent(): void;
|
|
22
|
+
showSendingToLLM(options: DiffOptions, provider: string, model: string): void;
|
|
23
|
+
showAnalysisFailed(error?: string): void;
|
|
24
|
+
showAnalysisComplete(): void;
|
|
25
|
+
showSignificantResult(summary: AnalysisSummary): void;
|
|
26
|
+
showNotSignificantResult(summary: AnalysisSummary): void;
|
|
27
|
+
showGeneratingADR(): void;
|
|
28
|
+
showGenerationFailed(error?: string): void;
|
|
29
|
+
showADRSuccess(filePath: string): void;
|
|
30
|
+
showADRSaveError(error?: string): void;
|
|
31
|
+
showSkippingGeneration(): void;
|
|
32
|
+
showUnexpectedError(): void;
|
|
33
|
+
}
|
|
34
|
+
export declare const presenter: ConsolePresenter;
|
|
35
|
+
//# sourceMappingURL=console-presenter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-presenter.d.ts","sourceRoot":"","sources":["../../src/presenters/console-presenter.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,aAAa,CAAC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,gBAAgB;IAC3B,eAAe,IAAI,IAAI;IAMvB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAInC,kBAAkB,IAAI,IAAI;IAI1B,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAwBzC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAoB/D,iBAAiB,IAAI,IAAI;IAIzB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAY7E,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAKxC,oBAAoB,IAAI,IAAI;IAI5B,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAQrD,wBAAwB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IASxD,iBAAiB,IAAI,IAAI;IAIzB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAK1C,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQtC,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAKtC,sBAAsB,IAAI,IAAI;IAK9B,mBAAmB,IAAI,IAAI;CAI5B;AAED,eAAO,MAAM,SAAS,kBAAyB,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.presenter = exports.ConsolePresenter = void 0;
|
|
4
|
+
class ConsolePresenter {
|
|
5
|
+
showConfigError() {
|
|
6
|
+
console.error('\n❌ Configuration Error');
|
|
7
|
+
console.error('Configuration file not found or invalid.');
|
|
8
|
+
console.error('\n💡 Run `cadr init` to create a configuration file.\n');
|
|
9
|
+
}
|
|
10
|
+
showGitError(message) {
|
|
11
|
+
console.error(`\n❌ Git Error: ${message}\n`);
|
|
12
|
+
}
|
|
13
|
+
showReadFilesError() {
|
|
14
|
+
console.error('\n❌ Failed to read changed files\n');
|
|
15
|
+
}
|
|
16
|
+
showNoChanges(options) {
|
|
17
|
+
const modeText = options.mode === 'staged'
|
|
18
|
+
? 'staged'
|
|
19
|
+
: options.mode === 'branch-diff'
|
|
20
|
+
? `between ${options.base || 'origin/main'} and ${options.head || 'HEAD'}`
|
|
21
|
+
: 'uncommitted';
|
|
22
|
+
console.log(`\nℹ️ No changes to analyze ${options.mode === 'branch-diff' ? modeText : `(${modeText})`}`);
|
|
23
|
+
if (options.mode === 'staged') {
|
|
24
|
+
console.log('💡 Stage some files first:');
|
|
25
|
+
console.log(' git add <files>');
|
|
26
|
+
console.log(' cadr analyze --staged\n');
|
|
27
|
+
}
|
|
28
|
+
else if (options.mode === 'branch-diff') {
|
|
29
|
+
console.log('💡 No changes found between specified git references.\n');
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
console.log('💡 Make some changes first, then run:');
|
|
33
|
+
console.log(' cadr analyze\n');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
showAnalyzingFiles(files, options) {
|
|
37
|
+
const modeText = options.mode === 'staged'
|
|
38
|
+
? 'staged'
|
|
39
|
+
: options.mode === 'branch-diff'
|
|
40
|
+
? `between ${options.base || 'origin/main'} and ${options.head || 'HEAD'}`
|
|
41
|
+
: 'uncommitted';
|
|
42
|
+
const fileCountText = options.mode === 'branch-diff'
|
|
43
|
+
? `${files.length} file${files.length === 1 ? '' : 's'} changed ${modeText}`
|
|
44
|
+
: `${files.length} ${modeText} file${files.length === 1 ? '' : 's'}`;
|
|
45
|
+
console.log(`\n📝 Analyzing ${fileCountText}:`);
|
|
46
|
+
files.forEach((file) => {
|
|
47
|
+
console.log(` • ${file}`);
|
|
48
|
+
});
|
|
49
|
+
console.log('');
|
|
50
|
+
}
|
|
51
|
+
showNoDiffContent() {
|
|
52
|
+
console.log('\nℹ️ No diff content found\n');
|
|
53
|
+
}
|
|
54
|
+
showSendingToLLM(options, provider, model) {
|
|
55
|
+
const analysisText = options.mode === 'staged'
|
|
56
|
+
? 'staged changes'
|
|
57
|
+
: options.mode === 'branch-diff'
|
|
58
|
+
? 'changes'
|
|
59
|
+
: 'uncommitted changes';
|
|
60
|
+
console.log(`🔍 Analyzing ${analysisText} for architectural significance...\n`);
|
|
61
|
+
console.log(`🤖 Sending to ${provider} ${model}...\n`);
|
|
62
|
+
}
|
|
63
|
+
showAnalysisFailed(error) {
|
|
64
|
+
console.error('\n❌ Analysis failed');
|
|
65
|
+
console.error(`\n${error || 'Unknown error occurred'}\n`);
|
|
66
|
+
}
|
|
67
|
+
showAnalysisComplete() {
|
|
68
|
+
console.log('✅ Analysis Complete\n');
|
|
69
|
+
}
|
|
70
|
+
showSignificantResult(summary) {
|
|
71
|
+
console.log('📊 Result: ✨ ARCHITECTURALLY SIGNIFICANT');
|
|
72
|
+
console.log(`💭 Reasoning: ${summary.reason}\n`);
|
|
73
|
+
if (summary.confidence) {
|
|
74
|
+
console.log(`🎯 Confidence: ${(summary.confidence * 100).toFixed(0)}%\n`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
showNotSignificantResult(summary) {
|
|
78
|
+
console.log('📊 Result: ℹ️ NOT ARCHITECTURALLY SIGNIFICANT');
|
|
79
|
+
console.log(`💭 Reasoning: ${summary.reason}\n`);
|
|
80
|
+
if (summary.confidence) {
|
|
81
|
+
console.log(`🎯 Confidence: ${(summary.confidence * 100).toFixed(0)}%\n`);
|
|
82
|
+
}
|
|
83
|
+
console.log('✅ No ADR needed for these changes.\n');
|
|
84
|
+
}
|
|
85
|
+
showGeneratingADR() {
|
|
86
|
+
console.log('\n🧠 Generating ADR draft...\n');
|
|
87
|
+
}
|
|
88
|
+
showGenerationFailed(error) {
|
|
89
|
+
console.error('\n❌ ADR generation failed');
|
|
90
|
+
console.error(`\n${error || 'Unknown error occurred'}\n`);
|
|
91
|
+
}
|
|
92
|
+
showADRSuccess(filePath) {
|
|
93
|
+
console.log('✅ Success! Draft ADR created\n');
|
|
94
|
+
console.log(`📄 File: ${filePath}\n`);
|
|
95
|
+
console.log('💡 Next steps:');
|
|
96
|
+
console.log(' 1. Review and refine the generated ADR');
|
|
97
|
+
console.log(' 2. Commit it alongside your code changes\n');
|
|
98
|
+
}
|
|
99
|
+
showADRSaveError(error) {
|
|
100
|
+
console.error('\n❌ Failed to save ADR');
|
|
101
|
+
console.error(`\n${error || 'Unknown error occurred'}\n`);
|
|
102
|
+
}
|
|
103
|
+
showSkippingGeneration() {
|
|
104
|
+
console.log('\n📋 Skipping ADR generation');
|
|
105
|
+
console.log('🎯 Recommendation: Consider documenting this decision manually.\n');
|
|
106
|
+
}
|
|
107
|
+
showUnexpectedError() {
|
|
108
|
+
console.error('\n❌ An unexpected error occurred');
|
|
109
|
+
console.error('Please check the logs for more details.\n');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.ConsolePresenter = ConsolePresenter;
|
|
113
|
+
exports.presenter = new ConsolePresenter();
|
|
114
|
+
//# sourceMappingURL=console-presenter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-presenter.js","sourceRoot":"","sources":["../../src/presenters/console-presenter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-presenter.test.d.ts","sourceRoot":"","sources":["../../src/presenters/console-presenter.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const console_presenter_1 = require("./console-presenter");
|
|
4
|
+
describe('ConsolePresenter', () => {
|
|
5
|
+
let logSpy;
|
|
6
|
+
let errorSpy;
|
|
7
|
+
let instance;
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
jest.clearAllMocks();
|
|
10
|
+
logSpy = jest.spyOn(console, 'log').mockImplementation();
|
|
11
|
+
errorSpy = jest.spyOn(console, 'error').mockImplementation();
|
|
12
|
+
instance = new console_presenter_1.ConsolePresenter();
|
|
13
|
+
});
|
|
14
|
+
afterEach(() => {
|
|
15
|
+
logSpy.mockRestore();
|
|
16
|
+
errorSpy.mockRestore();
|
|
17
|
+
});
|
|
18
|
+
function allLogOutput() {
|
|
19
|
+
return logSpy.mock.calls.map((c) => c.join(' ')).join('\n');
|
|
20
|
+
}
|
|
21
|
+
function allErrorOutput() {
|
|
22
|
+
return errorSpy.mock.calls.map((c) => c.join(' ')).join('\n');
|
|
23
|
+
}
|
|
24
|
+
describe('showConfigError', () => {
|
|
25
|
+
test('outputs Configuration Error to stderr', () => {
|
|
26
|
+
instance.showConfigError();
|
|
27
|
+
const output = allErrorOutput();
|
|
28
|
+
expect(output).toContain('Configuration Error');
|
|
29
|
+
});
|
|
30
|
+
test('suggests running cadr init', () => {
|
|
31
|
+
instance.showConfigError();
|
|
32
|
+
const output = allErrorOutput();
|
|
33
|
+
expect(output).toContain('cadr init');
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
describe('showGitError', () => {
|
|
37
|
+
test('outputs Git Error with the provided message to stderr', () => {
|
|
38
|
+
instance.showGitError('not a repository');
|
|
39
|
+
const output = allErrorOutput();
|
|
40
|
+
expect(output).toContain('Git Error: not a repository');
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('showReadFilesError', () => {
|
|
44
|
+
test('outputs Failed to read changed files to stderr', () => {
|
|
45
|
+
instance.showReadFilesError();
|
|
46
|
+
const output = allErrorOutput();
|
|
47
|
+
expect(output).toContain('Failed to read changed files');
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe('showNoChanges', () => {
|
|
51
|
+
test('staged mode mentions staged, git add, and cadr analyze --staged', () => {
|
|
52
|
+
instance.showNoChanges({ mode: 'staged' });
|
|
53
|
+
const output = allLogOutput();
|
|
54
|
+
expect(output).toContain('staged');
|
|
55
|
+
expect(output).toContain('git add');
|
|
56
|
+
expect(output).toContain('cadr analyze --staged');
|
|
57
|
+
});
|
|
58
|
+
test('all mode mentions uncommitted and cadr analyze', () => {
|
|
59
|
+
instance.showNoChanges({ mode: 'all' });
|
|
60
|
+
const output = allLogOutput();
|
|
61
|
+
expect(output).toContain('uncommitted');
|
|
62
|
+
expect(output).toContain('cadr analyze');
|
|
63
|
+
});
|
|
64
|
+
test('branch-diff mode with base and head mentions between main and HEAD', () => {
|
|
65
|
+
instance.showNoChanges({ mode: 'branch-diff', base: 'main', head: 'HEAD' });
|
|
66
|
+
const output = allLogOutput();
|
|
67
|
+
expect(output).toContain('between main and HEAD');
|
|
68
|
+
});
|
|
69
|
+
test('branch-diff mode without base/head defaults to origin/main and HEAD', () => {
|
|
70
|
+
instance.showNoChanges({ mode: 'branch-diff' });
|
|
71
|
+
const output = allLogOutput();
|
|
72
|
+
expect(output).toContain('origin/main');
|
|
73
|
+
expect(output).toContain('HEAD');
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
describe('showAnalyzingFiles', () => {
|
|
77
|
+
test('all mode with 2 files shows count and lists both files', () => {
|
|
78
|
+
instance.showAnalyzingFiles(['a.ts', 'b.ts'], { mode: 'all' });
|
|
79
|
+
const output = allLogOutput();
|
|
80
|
+
expect(output).toContain('2 uncommitted files');
|
|
81
|
+
expect(output).toContain('a.ts');
|
|
82
|
+
expect(output).toContain('b.ts');
|
|
83
|
+
});
|
|
84
|
+
test('staged mode with 1 file shows singular file count', () => {
|
|
85
|
+
instance.showAnalyzingFiles(['a.ts'], { mode: 'staged' });
|
|
86
|
+
const output = allLogOutput();
|
|
87
|
+
expect(output).toContain('1 staged file');
|
|
88
|
+
});
|
|
89
|
+
test('branch-diff mode shows files changed between base and head', () => {
|
|
90
|
+
instance.showAnalyzingFiles(['a.ts', 'b.ts'], { mode: 'branch-diff', base: 'main', head: 'feat' });
|
|
91
|
+
const output = allLogOutput();
|
|
92
|
+
expect(output).toContain('2 files changed between main and feat');
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
describe('showNoDiffContent', () => {
|
|
96
|
+
test('outputs No diff content found', () => {
|
|
97
|
+
instance.showNoDiffContent();
|
|
98
|
+
const output = allLogOutput();
|
|
99
|
+
expect(output).toContain('No diff content found');
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
describe('showSendingToLLM', () => {
|
|
103
|
+
test('staged mode mentions staged changes, provider, and model', () => {
|
|
104
|
+
instance.showSendingToLLM({ mode: 'staged' }, 'openai', 'gpt-4');
|
|
105
|
+
const output = allLogOutput();
|
|
106
|
+
expect(output).toContain('staged changes');
|
|
107
|
+
expect(output).toContain('openai');
|
|
108
|
+
expect(output).toContain('gpt-4');
|
|
109
|
+
});
|
|
110
|
+
test('all mode mentions uncommitted changes', () => {
|
|
111
|
+
instance.showSendingToLLM({ mode: 'all' }, 'gemini', 'gemini-pro');
|
|
112
|
+
const output = allLogOutput();
|
|
113
|
+
expect(output).toContain('uncommitted changes');
|
|
114
|
+
});
|
|
115
|
+
test('branch-diff mode mentions changes', () => {
|
|
116
|
+
instance.showSendingToLLM({ mode: 'branch-diff' }, 'openai', 'gpt-4');
|
|
117
|
+
const output = allLogOutput();
|
|
118
|
+
expect(output).toContain('changes');
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
describe('showAnalysisFailed', () => {
|
|
122
|
+
test('outputs Analysis failed and the error message to stderr', () => {
|
|
123
|
+
instance.showAnalysisFailed('some error');
|
|
124
|
+
const output = allErrorOutput();
|
|
125
|
+
expect(output).toContain('Analysis failed');
|
|
126
|
+
expect(output).toContain('some error');
|
|
127
|
+
});
|
|
128
|
+
test('shows Unknown error occurred when no argument provided', () => {
|
|
129
|
+
instance.showAnalysisFailed();
|
|
130
|
+
const output = allErrorOutput();
|
|
131
|
+
expect(output).toContain('Unknown error occurred');
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
describe('showAnalysisComplete', () => {
|
|
135
|
+
test('outputs Analysis Complete', () => {
|
|
136
|
+
instance.showAnalysisComplete();
|
|
137
|
+
const output = allLogOutput();
|
|
138
|
+
expect(output).toContain('Analysis Complete');
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
describe('showSignificantResult', () => {
|
|
142
|
+
const baseSummary = {
|
|
143
|
+
fileCount: 5,
|
|
144
|
+
mode: 'all',
|
|
145
|
+
isSignificant: true,
|
|
146
|
+
reason: 'big change',
|
|
147
|
+
};
|
|
148
|
+
test('outputs ARCHITECTURALLY SIGNIFICANT with reason and confidence', () => {
|
|
149
|
+
instance.showSignificantResult({ ...baseSummary, confidence: 0.9 });
|
|
150
|
+
const output = allLogOutput();
|
|
151
|
+
expect(output).toContain('ARCHITECTURALLY SIGNIFICANT');
|
|
152
|
+
expect(output).toContain('big change');
|
|
153
|
+
expect(output).toContain('90%');
|
|
154
|
+
});
|
|
155
|
+
test('does not show percentage when confidence is not provided', () => {
|
|
156
|
+
instance.showSignificantResult(baseSummary);
|
|
157
|
+
const output = allLogOutput();
|
|
158
|
+
expect(output).toContain('ARCHITECTURALLY SIGNIFICANT');
|
|
159
|
+
expect(output).not.toContain('%');
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
describe('showNotSignificantResult', () => {
|
|
163
|
+
const baseSummary = {
|
|
164
|
+
fileCount: 2,
|
|
165
|
+
mode: 'all',
|
|
166
|
+
isSignificant: false,
|
|
167
|
+
reason: 'trivial',
|
|
168
|
+
};
|
|
169
|
+
test('outputs NOT ARCHITECTURALLY SIGNIFICANT with reason and confidence', () => {
|
|
170
|
+
instance.showNotSignificantResult({ ...baseSummary, confidence: 0.5 });
|
|
171
|
+
const output = allLogOutput();
|
|
172
|
+
expect(output).toContain('NOT ARCHITECTURALLY SIGNIFICANT');
|
|
173
|
+
expect(output).toContain('trivial');
|
|
174
|
+
expect(output).toContain('50%');
|
|
175
|
+
});
|
|
176
|
+
test('does not show percentage when confidence is not provided', () => {
|
|
177
|
+
instance.showNotSignificantResult(baseSummary);
|
|
178
|
+
const output = allLogOutput();
|
|
179
|
+
expect(output).toContain('NOT ARCHITECTURALLY SIGNIFICANT');
|
|
180
|
+
expect(output).not.toContain('%');
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
describe('showGeneratingADR', () => {
|
|
184
|
+
test('outputs Generating ADR', () => {
|
|
185
|
+
instance.showGeneratingADR();
|
|
186
|
+
const output = allLogOutput();
|
|
187
|
+
expect(output).toContain('Generating ADR');
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
describe('showGenerationFailed', () => {
|
|
191
|
+
test('outputs ADR generation failed and error message to stderr', () => {
|
|
192
|
+
instance.showGenerationFailed('error msg');
|
|
193
|
+
const output = allErrorOutput();
|
|
194
|
+
expect(output).toContain('ADR generation failed');
|
|
195
|
+
expect(output).toContain('error msg');
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
describe('showADRSuccess', () => {
|
|
199
|
+
test('outputs Success, file path, and Next steps', () => {
|
|
200
|
+
instance.showADRSuccess('/path/to/adr.md');
|
|
201
|
+
const output = allLogOutput();
|
|
202
|
+
expect(output).toContain('Success');
|
|
203
|
+
expect(output).toContain('/path/to/adr.md');
|
|
204
|
+
expect(output).toContain('Next steps');
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
describe('showSkippingGeneration', () => {
|
|
208
|
+
test('outputs Skipping ADR generation', () => {
|
|
209
|
+
instance.showSkippingGeneration();
|
|
210
|
+
const output = allLogOutput();
|
|
211
|
+
expect(output).toContain('Skipping ADR generation');
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
describe('showUnexpectedError', () => {
|
|
215
|
+
test('outputs unexpected error to stderr', () => {
|
|
216
|
+
instance.showUnexpectedError();
|
|
217
|
+
const output = allErrorOutput();
|
|
218
|
+
expect(output).toContain('unexpected error');
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
describe('presenter export', () => {
|
|
222
|
+
test('is an instance of ConsolePresenter', () => {
|
|
223
|
+
expect(console_presenter_1.presenter).toBeInstanceOf(console_presenter_1.ConsolePresenter);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
//# sourceMappingURL=console-presenter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-presenter.test.js","sourceRoot":"","sources":["../../src/presenters/console-presenter.test.ts"],"names":[],"mappings":"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"}
|
package/dist/version.test.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.test.d.ts","sourceRoot":"","sources":["../src/version.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"version.test.d.ts","sourceRoot":"","sources":["../src/version.test.ts"],"names":[],"mappings":""}
|
package/dist/version.test.js
CHANGED
|
@@ -1,25 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const index_1 = require("./index");
|
|
4
|
+
jest.mock('./commands/init', () => ({ initCommand: jest.fn() }));
|
|
5
|
+
jest.mock('./commands/analyze', () => ({ analyzeCommand: jest.fn() }));
|
|
6
|
+
jest.mock('./commands/status', () => ({ statusCommand: jest.fn() }));
|
|
7
|
+
describe('showVersion', () => {
|
|
8
|
+
let stdoutSpy;
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
jest.clearAllMocks();
|
|
11
|
+
stdoutSpy = jest.spyOn(process.stdout, 'write').mockImplementation(() => true);
|
|
8
12
|
});
|
|
9
|
-
|
|
10
|
-
|
|
13
|
+
afterEach(() => {
|
|
14
|
+
stdoutSpy.mockRestore();
|
|
11
15
|
});
|
|
12
|
-
test('
|
|
13
|
-
|
|
16
|
+
test('writes to process.stdout', () => {
|
|
17
|
+
(0, index_1.showVersion)();
|
|
18
|
+
expect(stdoutSpy).toHaveBeenCalled();
|
|
14
19
|
});
|
|
15
|
-
test('
|
|
16
|
-
|
|
20
|
+
test('output contains cADR version', () => {
|
|
21
|
+
(0, index_1.showVersion)();
|
|
22
|
+
const output = stdoutSpy.mock.calls[0][0];
|
|
23
|
+
expect(output).toContain('cADR version');
|
|
17
24
|
});
|
|
18
|
-
test('
|
|
19
|
-
|
|
25
|
+
test('output version string matches semver pattern', () => {
|
|
26
|
+
(0, index_1.showVersion)();
|
|
27
|
+
const output = stdoutSpy.mock.calls[0][0];
|
|
28
|
+
expect(output).toMatch(/\d+\.\d+\.\d+/);
|
|
20
29
|
});
|
|
21
|
-
test('
|
|
22
|
-
|
|
30
|
+
test('output contains the version from package.json', () => {
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
32
|
+
const pkg = require('../package.json');
|
|
33
|
+
(0, index_1.showVersion)();
|
|
34
|
+
const output = stdoutSpy.mock.calls[0][0];
|
|
35
|
+
expect(output).toContain(pkg.version);
|
|
23
36
|
});
|
|
24
37
|
});
|
|
25
38
|
//# sourceMappingURL=version.test.js.map
|