cadr-cli 1.10.0 → 2.0.1
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/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/commands/analyze.js +3 -3
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/status.d.ts +11 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +69 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/status.test.d.ts +2 -0
- package/dist/commands/status.test.d.ts.map +1 -0
- package/dist/commands/status.test.js +83 -0
- package/dist/commands/status.test.js.map +1 -0
- 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.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/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/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- 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/{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/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/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.ts +175 -0
- package/src/analysis/strategies/git-strategy.ts +106 -0
- package/src/commands/analyze.ts +8 -9
- package/src/commands/status.test.ts +64 -0
- package/src/commands/status.ts +71 -0
- package/src/git/git.errors.ts +10 -0
- package/src/git/git.operations.ts +85 -0
- package/src/git/index.ts +3 -0
- package/src/index.ts +6 -0
- package/src/llm/index.ts +2 -0
- package/src/{llm.ts → llm/llm.ts} +46 -107
- package/src/{prompts.ts → llm/prompts.ts} +30 -72
- package/src/llm/response-parser.ts +90 -0
- package/src/presenters/console-presenter.ts +152 -0
- 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.d.ts +0 -2
- package/dist/llm.test.d.ts.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
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADR File Management Module
|
|
3
|
+
*
|
|
4
|
+
* Handles creation and management of Architectural Decision Record files.
|
|
5
|
+
* Follows MADR (Markdown Architectural Decision Records) format.
|
|
6
|
+
*/
|
|
7
|
+
export declare const DEFAULT_ADR_DIR = "docs/adr";
|
|
8
|
+
export declare function titleToSlug(title: string): string;
|
|
9
|
+
export declare function getNextADRNumber(adrDir: string): number;
|
|
10
|
+
export declare function ensureADRDirectory(adrDir: string): void;
|
|
11
|
+
export declare function generateADRFilename(number: number, title: string): string;
|
|
12
|
+
export declare function saveADR(content: string, title: string, adrDir?: string): {
|
|
13
|
+
success: boolean;
|
|
14
|
+
filePath?: string;
|
|
15
|
+
error?: string;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=adr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adr.d.ts","sourceRoot":"","sources":["../../src/adr/adr.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,eAAO,MAAM,eAAe,aAAa,CAAC;AAE1C,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAyBvD;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAKvD;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIzE;AAED,wBAAgB,OAAO,CACrB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,MAAwB,GAC/B;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA8BzD"}
|
|
@@ -47,35 +47,21 @@ exports.generateADRFilename = generateADRFilename;
|
|
|
47
47
|
exports.saveADR = saveADR;
|
|
48
48
|
const fs = __importStar(require("fs"));
|
|
49
49
|
const path = __importStar(require("path"));
|
|
50
|
-
const logger_1 = require("
|
|
51
|
-
/**
|
|
52
|
-
* Default ADR directory relative to project root
|
|
53
|
-
*/
|
|
50
|
+
const logger_1 = require("../logger");
|
|
54
51
|
exports.DEFAULT_ADR_DIR = 'docs/adr';
|
|
55
|
-
/**
|
|
56
|
-
* Convert a title to a filename-safe slug
|
|
57
|
-
* Example: "Use PostgreSQL for Storage" -> "use-postgresql-for-storage"
|
|
58
|
-
*/
|
|
59
52
|
function titleToSlug(title) {
|
|
60
53
|
return title
|
|
61
54
|
.toLowerCase()
|
|
62
|
-
.replace(/[^a-z0-9]+/g, '-')
|
|
63
|
-
.replace(/^-+|-+$/g, '');
|
|
55
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
56
|
+
.replace(/^-+|-+$/g, '');
|
|
64
57
|
}
|
|
65
|
-
/**
|
|
66
|
-
* Get the next ADR number by scanning existing ADR files
|
|
67
|
-
*
|
|
68
|
-
* @param adrDir - Directory containing ADR files
|
|
69
|
-
* @returns Next available ADR number (e.g., 1, 2, 3...)
|
|
70
|
-
*/
|
|
71
58
|
function getNextADRNumber(adrDir) {
|
|
72
59
|
try {
|
|
73
60
|
if (!fs.existsSync(adrDir)) {
|
|
74
|
-
return 1;
|
|
61
|
+
return 1;
|
|
75
62
|
}
|
|
76
63
|
const files = fs.readdirSync(adrDir);
|
|
77
64
|
const adrNumbers = [];
|
|
78
|
-
// Extract numbers from existing ADR files (format: 0001-title.md)
|
|
79
65
|
for (const file of files) {
|
|
80
66
|
const match = file.match(/^(\d{4})-/);
|
|
81
67
|
if (match) {
|
|
@@ -85,7 +71,6 @@ function getNextADRNumber(adrDir) {
|
|
|
85
71
|
if (adrNumbers.length === 0) {
|
|
86
72
|
return 1;
|
|
87
73
|
}
|
|
88
|
-
// Return next number after the highest existing number
|
|
89
74
|
return Math.max(...adrNumbers) + 1;
|
|
90
75
|
}
|
|
91
76
|
catch (error) {
|
|
@@ -93,47 +78,23 @@ function getNextADRNumber(adrDir) {
|
|
|
93
78
|
return 1;
|
|
94
79
|
}
|
|
95
80
|
}
|
|
96
|
-
/**
|
|
97
|
-
* Ensure ADR directory exists, create if it doesn't
|
|
98
|
-
*
|
|
99
|
-
* @param adrDir - Directory path to ensure exists
|
|
100
|
-
*/
|
|
101
81
|
function ensureADRDirectory(adrDir) {
|
|
102
82
|
if (!fs.existsSync(adrDir)) {
|
|
103
83
|
logger_1.loggerInstance.info('Creating ADR directory', { adrDir });
|
|
104
84
|
fs.mkdirSync(adrDir, { recursive: true });
|
|
105
85
|
}
|
|
106
86
|
}
|
|
107
|
-
/**
|
|
108
|
-
* Generate ADR filename from number and title
|
|
109
|
-
*
|
|
110
|
-
* @param number - ADR number (will be zero-padded to 4 digits)
|
|
111
|
-
* @param title - ADR title (will be converted to slug)
|
|
112
|
-
* @returns Filename like "0001-use-postgresql-for-storage.md"
|
|
113
|
-
*/
|
|
114
87
|
function generateADRFilename(number, title) {
|
|
115
88
|
const paddedNumber = String(number).padStart(4, '0');
|
|
116
89
|
const slug = titleToSlug(title);
|
|
117
90
|
return `${paddedNumber}-${slug}.md`;
|
|
118
91
|
}
|
|
119
|
-
/**
|
|
120
|
-
* Save ADR content to file
|
|
121
|
-
*
|
|
122
|
-
* @param content - Full markdown content of the ADR
|
|
123
|
-
* @param title - Title extracted from ADR content
|
|
124
|
-
* @param adrDir - Directory to save ADR in (defaults to docs/adr)
|
|
125
|
-
* @returns Object with success status, file path, and any error
|
|
126
|
-
*/
|
|
127
92
|
function saveADR(content, title, adrDir = exports.DEFAULT_ADR_DIR) {
|
|
128
93
|
try {
|
|
129
|
-
// Ensure directory exists
|
|
130
94
|
ensureADRDirectory(adrDir);
|
|
131
|
-
// Get next ADR number
|
|
132
95
|
const adrNumber = getNextADRNumber(adrDir);
|
|
133
|
-
// Generate filename
|
|
134
96
|
const filename = generateADRFilename(adrNumber, title);
|
|
135
97
|
const filePath = path.join(adrDir, filename);
|
|
136
|
-
// Check if file already exists (shouldn't happen, but safety check)
|
|
137
98
|
if (fs.existsSync(filePath)) {
|
|
138
99
|
logger_1.loggerInstance.warn('ADR file already exists, using alternative name', { filePath });
|
|
139
100
|
const alternativeFilename = generateADRFilename(adrNumber + 1, title);
|
|
@@ -142,7 +103,6 @@ function saveADR(content, title, adrDir = exports.DEFAULT_ADR_DIR) {
|
|
|
142
103
|
logger_1.loggerInstance.info('ADR saved successfully', { filePath: alternativeFilePath });
|
|
143
104
|
return { success: true, filePath: alternativeFilePath };
|
|
144
105
|
}
|
|
145
|
-
// Write ADR content to file
|
|
146
106
|
fs.writeFileSync(filePath, content, 'utf-8');
|
|
147
107
|
logger_1.loggerInstance.info('ADR saved successfully', { filePath, adrNumber });
|
|
148
108
|
return { success: true, filePath };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adr.js","sourceRoot":"","sources":["../../src/adr/adr.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adr.test.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"adr.test.d.ts","sourceRoot":"","sources":["../../src/adr/adr.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* ADR File Management Module Tests
|
|
4
|
-
*
|
|
5
|
-
* Tests for ADR file creation, numbering, and management.
|
|
6
|
-
* Following TDD: These tests are written BEFORE implementation.
|
|
7
4
|
*/
|
|
8
5
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
6
|
if (k2 === undefined) k2 = k;
|
|
@@ -45,13 +42,11 @@ const adr_1 = require("./adr");
|
|
|
45
42
|
describe('ADR Module', () => {
|
|
46
43
|
const testDir = path.join(__dirname, '../test-adrs');
|
|
47
44
|
beforeEach(() => {
|
|
48
|
-
// Clean up test directory before each test
|
|
49
45
|
if (fs.existsSync(testDir)) {
|
|
50
46
|
fs.rmSync(testDir, { recursive: true, force: true });
|
|
51
47
|
}
|
|
52
48
|
});
|
|
53
49
|
afterEach(() => {
|
|
54
|
-
// Clean up test directory after each test
|
|
55
50
|
if (fs.existsSync(testDir)) {
|
|
56
51
|
fs.rmSync(testDir, { recursive: true, force: true });
|
|
57
52
|
}
|
|
@@ -193,7 +188,6 @@ describe('ADR Module', () => {
|
|
|
193
188
|
expect(savedContent).toBe(content);
|
|
194
189
|
});
|
|
195
190
|
it('uses default directory when not specified', () => {
|
|
196
|
-
// Clean up default directory
|
|
197
191
|
const defaultPath = path.join(process.cwd(), adr_1.DEFAULT_ADR_DIR);
|
|
198
192
|
if (fs.existsSync(defaultPath)) {
|
|
199
193
|
fs.rmSync(defaultPath, { recursive: true, force: true });
|
|
@@ -202,15 +196,12 @@ describe('ADR Module', () => {
|
|
|
202
196
|
const result = (0, adr_1.saveADR)(content, 'Default Location');
|
|
203
197
|
expect(result.success).toBe(true);
|
|
204
198
|
expect(result.filePath).toContain(adr_1.DEFAULT_ADR_DIR);
|
|
205
|
-
// Cleanup
|
|
206
199
|
if (fs.existsSync(defaultPath)) {
|
|
207
200
|
fs.rmSync(defaultPath, { recursive: true, force: true });
|
|
208
201
|
}
|
|
209
202
|
});
|
|
210
203
|
it('handles file write errors gracefully', () => {
|
|
211
|
-
// Create a read-only directory to trigger write error
|
|
212
204
|
fs.mkdirSync(testDir, { recursive: true });
|
|
213
|
-
// Make directory read-only (if not Windows)
|
|
214
205
|
if (process.platform !== 'win32') {
|
|
215
206
|
fs.chmodSync(testDir, 0o444);
|
|
216
207
|
const content = '# Test\n\nContent';
|
|
@@ -218,15 +209,11 @@ describe('ADR Module', () => {
|
|
|
218
209
|
expect(result.success).toBe(false);
|
|
219
210
|
expect(result.error).toBeDefined();
|
|
220
211
|
expect(result.filePath).toBeUndefined();
|
|
221
|
-
// Restore permissions for cleanup
|
|
222
212
|
fs.chmodSync(testDir, 0o755);
|
|
223
213
|
}
|
|
224
214
|
else {
|
|
225
|
-
// On Windows, just verify error handling structure exists
|
|
226
|
-
// Skip actual permission test as Windows permissions work differently
|
|
227
215
|
const content = '# Test\n\nContent';
|
|
228
216
|
const result = (0, adr_1.saveADR)(content, 'Test', testDir);
|
|
229
|
-
// Should succeed on Windows since we can't easily simulate permission errors
|
|
230
217
|
expect(result).toHaveProperty('success');
|
|
231
218
|
expect(typeof result.success).toBe('boolean');
|
|
232
219
|
}
|
|
@@ -242,7 +229,6 @@ describe('ADR Module', () => {
|
|
|
242
229
|
const content = '# Decision with émojis 🚀\n\nContent';
|
|
243
230
|
const result = (0, adr_1.saveADR)(content, 'Decision with émojis 🚀', testDir);
|
|
244
231
|
expect(result.success).toBe(true);
|
|
245
|
-
// Should strip unicode to safe characters
|
|
246
232
|
expect(result.filePath).toMatch(/0001-.+\.md$/);
|
|
247
233
|
});
|
|
248
234
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adr.test.js","sourceRoot":"","sources":["../../src/adr/adr.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adr/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./adr"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adr/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DiffOptions } from '../git/index';
|
|
2
|
+
export interface AnalysisResult {
|
|
3
|
+
is_significant: boolean;
|
|
4
|
+
reason: string;
|
|
5
|
+
confidence?: number;
|
|
6
|
+
timestamp: string;
|
|
7
|
+
}
|
|
8
|
+
export interface GenerationResult {
|
|
9
|
+
content: string;
|
|
10
|
+
title: string;
|
|
11
|
+
timestamp: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function runAnalysis(diffOptions?: DiffOptions): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=analysis.orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis.orchestrator.d.ts","sourceRoot":"","sources":["../../src/analysis/analysis.orchestrator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAchD,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AA2ID,wBAAsB,WAAW,CAAC,WAAW,GAAE,WAA6B,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3F"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.runAnalysis = runAnalysis;
|
|
37
|
+
/* eslint-disable no-console */
|
|
38
|
+
const config_1 = require("../config");
|
|
39
|
+
const prompts_1 = require("../llm/prompts");
|
|
40
|
+
const llm_1 = require("../llm/llm");
|
|
41
|
+
const logger_1 = require("../logger");
|
|
42
|
+
const adr_1 = require("../adr/adr");
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const git_strategy_1 = require("./strategies/git-strategy");
|
|
45
|
+
const console_presenter_1 = require("../presenters/console-presenter");
|
|
46
|
+
async function runAnalysisInternal(diffOptions) {
|
|
47
|
+
const configPath = (0, config_1.getDefaultConfigPath)();
|
|
48
|
+
const config = await (0, config_1.loadConfig)(configPath);
|
|
49
|
+
if (!config) {
|
|
50
|
+
console_presenter_1.presenter.showConfigError();
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const gitStrategy = (0, git_strategy_1.createGitStrategy)(diffOptions);
|
|
54
|
+
let changedFiles;
|
|
55
|
+
try {
|
|
56
|
+
changedFiles = await gitStrategy.getFiles();
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
const gitError = error;
|
|
60
|
+
if (gitError.name === 'GitError') {
|
|
61
|
+
console_presenter_1.presenter.showGitError(gitError.message || 'Unknown Git error');
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
console_presenter_1.presenter.showReadFilesError();
|
|
65
|
+
}
|
|
66
|
+
logger_1.loggerInstance.error('Failed to get changed files', { error, mode: diffOptions.mode });
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (changedFiles.length === 0) {
|
|
70
|
+
console_presenter_1.presenter.showNoChanges(diffOptions);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
console_presenter_1.presenter.showAnalyzingFiles(changedFiles, diffOptions);
|
|
74
|
+
let diffContent;
|
|
75
|
+
try {
|
|
76
|
+
diffContent = await gitStrategy.getDiff();
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console_presenter_1.presenter.showReadFilesError();
|
|
80
|
+
logger_1.loggerInstance.error('Failed to get diff', { error, mode: diffOptions.mode });
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (!diffContent || diffContent.trim().length === 0) {
|
|
84
|
+
console_presenter_1.presenter.showNoDiffContent();
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const repositoryContext = path.basename(process.cwd());
|
|
88
|
+
const prompt = (0, prompts_1.formatPrompt)(prompts_1.ANALYSIS_PROMPT_V1, {
|
|
89
|
+
file_paths: changedFiles,
|
|
90
|
+
diff_content: diffContent,
|
|
91
|
+
});
|
|
92
|
+
console_presenter_1.presenter.showSendingToLLM(diffOptions, config.provider, config.analysis_model);
|
|
93
|
+
const response = await (0, llm_1.analyzeChanges)(config, {
|
|
94
|
+
file_paths: changedFiles,
|
|
95
|
+
diff_content: diffContent,
|
|
96
|
+
repository_context: repositoryContext,
|
|
97
|
+
analysis_prompt: prompt,
|
|
98
|
+
});
|
|
99
|
+
if (!response.result || response.error) {
|
|
100
|
+
console_presenter_1.presenter.showAnalysisFailed(response.error);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const result = response.result;
|
|
104
|
+
console_presenter_1.presenter.showAnalysisComplete();
|
|
105
|
+
if (result.is_significant) {
|
|
106
|
+
const summary = {
|
|
107
|
+
fileCount: changedFiles.length,
|
|
108
|
+
mode: diffOptions.mode,
|
|
109
|
+
isSignificant: true,
|
|
110
|
+
reason: result.reason,
|
|
111
|
+
confidence: result.confidence,
|
|
112
|
+
};
|
|
113
|
+
console_presenter_1.presenter.showSignificantResult(summary);
|
|
114
|
+
const shouldGenerate = await (0, prompts_1.promptForGeneration)(result.reason);
|
|
115
|
+
if (shouldGenerate) {
|
|
116
|
+
console_presenter_1.presenter.showGeneratingADR();
|
|
117
|
+
const generationPrompt = (0, prompts_1.formatGenerationPrompt)({
|
|
118
|
+
file_paths: changedFiles,
|
|
119
|
+
diff_content: diffContent,
|
|
120
|
+
});
|
|
121
|
+
const generationResponse = await (0, llm_1.generateADRContent)(config, {
|
|
122
|
+
file_paths: changedFiles,
|
|
123
|
+
diff_content: diffContent,
|
|
124
|
+
reason: result.reason,
|
|
125
|
+
generation_prompt: generationPrompt,
|
|
126
|
+
});
|
|
127
|
+
if (!generationResponse.result || generationResponse.error) {
|
|
128
|
+
console_presenter_1.presenter.showGenerationFailed(generationResponse.error);
|
|
129
|
+
logger_1.loggerInstance.error('ADR generation failed', { error: generationResponse.error });
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
const saveResult = (0, adr_1.saveADR)(generationResponse.result.content, generationResponse.result.title);
|
|
133
|
+
if (saveResult.success && saveResult.filePath) {
|
|
134
|
+
console_presenter_1.presenter.showADRSuccess(saveResult.filePath);
|
|
135
|
+
logger_1.loggerInstance.info('ADR generation workflow completed successfully', {
|
|
136
|
+
filePath: saveResult.filePath,
|
|
137
|
+
title: generationResponse.result.title,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
console_presenter_1.presenter.showADRSaveError(saveResult.error);
|
|
142
|
+
logger_1.loggerInstance.error('Failed to save ADR', { error: saveResult.error });
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
console_presenter_1.presenter.showSkippingGeneration();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
const summary = {
|
|
152
|
+
fileCount: changedFiles.length,
|
|
153
|
+
mode: diffOptions.mode,
|
|
154
|
+
isSignificant: false,
|
|
155
|
+
reason: result.reason,
|
|
156
|
+
confidence: result.confidence,
|
|
157
|
+
};
|
|
158
|
+
console_presenter_1.presenter.showNotSignificantResult(summary);
|
|
159
|
+
}
|
|
160
|
+
logger_1.loggerInstance.info('Analysis workflow completed successfully', {
|
|
161
|
+
is_significant: result.is_significant,
|
|
162
|
+
file_count: changedFiles.length,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
async function runAnalysis(diffOptions = { mode: 'all' }) {
|
|
166
|
+
try {
|
|
167
|
+
logger_1.loggerInstance.info('Starting analysis workflow');
|
|
168
|
+
await runAnalysisInternal(diffOptions);
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
logger_1.loggerInstance.error('Unexpected error in analysis workflow', { error });
|
|
172
|
+
console_presenter_1.presenter.showUnexpectedError();
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=analysis.orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis.orchestrator.js","sourceRoot":"","sources":["../../src/analysis/analysis.orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type DiffOptions } from '../../git/git.operations';
|
|
2
|
+
export interface GitStrategy {
|
|
3
|
+
getFiles(): Promise<string[]>;
|
|
4
|
+
getDiff(): Promise<string>;
|
|
5
|
+
}
|
|
6
|
+
export declare class StagedChangesStrategy implements GitStrategy {
|
|
7
|
+
getFiles(): Promise<string[]>;
|
|
8
|
+
getDiff(): Promise<string>;
|
|
9
|
+
}
|
|
10
|
+
export declare class AllChangesStrategy implements GitStrategy {
|
|
11
|
+
getFiles(): Promise<string[]>;
|
|
12
|
+
getDiff(): Promise<string>;
|
|
13
|
+
}
|
|
14
|
+
export declare class BranchDiffStrategy implements GitStrategy {
|
|
15
|
+
private base;
|
|
16
|
+
private head;
|
|
17
|
+
constructor(base: string, head: string);
|
|
18
|
+
getFiles(): Promise<string[]>;
|
|
19
|
+
getDiff(): Promise<string>;
|
|
20
|
+
}
|
|
21
|
+
export declare function createGitStrategy(options: DiffOptions): GitStrategy;
|
|
22
|
+
//# sourceMappingURL=git-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-strategy.d.ts","sourceRoot":"","sources":["../../../src/analysis/strategies/git-strategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,0BAA0B,CAAC;AAGlC,MAAM,WAAW,WAAW;IAC1B,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5B;AAED,qBAAa,qBAAsB,YAAW,WAAW;IACjD,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI7B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CAGjC;AAED,qBAAa,kBAAmB,YAAW,WAAW;IAC9C,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI7B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CAGjC;AAED,qBAAa,kBAAmB,YAAW,WAAW;IAElD,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,IAAI;gBADJ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM;IAGhB,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA4B7B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CAwBjC;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,CAWnE"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.BranchDiffStrategy = exports.AllChangesStrategy = exports.StagedChangesStrategy = void 0;
|
|
37
|
+
exports.createGitStrategy = createGitStrategy;
|
|
38
|
+
const git_operations_1 = require("../../git/git.operations");
|
|
39
|
+
const git_1 = require("../../git");
|
|
40
|
+
class StagedChangesStrategy {
|
|
41
|
+
async getFiles() {
|
|
42
|
+
return (0, git_operations_1.getStagedFiles)();
|
|
43
|
+
}
|
|
44
|
+
async getDiff() {
|
|
45
|
+
return (0, git_operations_1.getStagedDiff)();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.StagedChangesStrategy = StagedChangesStrategy;
|
|
49
|
+
class AllChangesStrategy {
|
|
50
|
+
async getFiles() {
|
|
51
|
+
return (0, git_operations_1.getAllChanges)();
|
|
52
|
+
}
|
|
53
|
+
async getDiff() {
|
|
54
|
+
return (0, git_operations_1.getAllDiff)();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.AllChangesStrategy = AllChangesStrategy;
|
|
58
|
+
class BranchDiffStrategy {
|
|
59
|
+
base;
|
|
60
|
+
head;
|
|
61
|
+
constructor(base, head) {
|
|
62
|
+
this.base = base;
|
|
63
|
+
this.head = head;
|
|
64
|
+
}
|
|
65
|
+
async getFiles() {
|
|
66
|
+
const { exec } = await Promise.resolve().then(() => __importStar(require('child_process')));
|
|
67
|
+
const { promisify } = await Promise.resolve().then(() => __importStar(require('util')));
|
|
68
|
+
const execAsync = promisify(exec);
|
|
69
|
+
try {
|
|
70
|
+
const { stdout } = await execAsync(`git diff --name-only ${this.base}...${this.head}`);
|
|
71
|
+
return stdout
|
|
72
|
+
.split('\n')
|
|
73
|
+
.map((f) => f.trim())
|
|
74
|
+
.filter((f) => f.length > 0);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
const errorWithCode = error;
|
|
78
|
+
if (errorWithCode.code === 128) {
|
|
79
|
+
throw new git_1.GitError(`Invalid git reference: ${this.base} or ${this.head}. Please ensure both references exist.`, 'GIT_ERROR', error instanceof Error ? error : new Error(String(error)));
|
|
80
|
+
}
|
|
81
|
+
throw new git_1.GitError('Unable to read Git repository. Please check repository permissions.', 'GIT_ERROR', error instanceof Error ? error : new Error(String(error)));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async getDiff() {
|
|
85
|
+
const { exec } = await Promise.resolve().then(() => __importStar(require('child_process')));
|
|
86
|
+
const { promisify } = await Promise.resolve().then(() => __importStar(require('util')));
|
|
87
|
+
const execAsync = promisify(exec);
|
|
88
|
+
try {
|
|
89
|
+
const { stdout } = await execAsync(`git diff ${this.base}...${this.head} --unified=1`);
|
|
90
|
+
return stdout;
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
const errorWithCode = error;
|
|
94
|
+
if (errorWithCode.code === 128) {
|
|
95
|
+
throw new git_1.GitError(`Invalid git reference: ${this.base} or ${this.head}. Please ensure both references exist.`, 'GIT_ERROR', error instanceof Error ? error : new Error(String(error)));
|
|
96
|
+
}
|
|
97
|
+
throw new git_1.GitError('Unable to read Git repository. Please check repository permissions.', 'GIT_ERROR', error instanceof Error ? error : new Error(String(error)));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
exports.BranchDiffStrategy = BranchDiffStrategy;
|
|
102
|
+
function createGitStrategy(options) {
|
|
103
|
+
switch (options.mode) {
|
|
104
|
+
case 'staged':
|
|
105
|
+
return new StagedChangesStrategy();
|
|
106
|
+
case 'all':
|
|
107
|
+
return new AllChangesStrategy();
|
|
108
|
+
case 'branch-diff':
|
|
109
|
+
return new BranchDiffStrategy(options.base || 'origin/main', options.head || 'HEAD');
|
|
110
|
+
default:
|
|
111
|
+
return new AllChangesStrategy();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=git-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-strategy.js","sourceRoot":"","sources":["../../../src/analysis/strategies/git-strategy.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8FA,8CAWC;AAzGD,6DAMkC;AAClC,mCAAqC;AAOrC,MAAa,qBAAqB;IAChC,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAA,+BAAc,GAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAA,8BAAa,GAAE,CAAC;IACzB,CAAC;CACF;AARD,sDAQC;AAED,MAAa,kBAAkB;IAC7B,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAA,8BAAa,GAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAA,2BAAU,GAAE,CAAC;IACtB,CAAC;CACF;AARD,gDAQC;AAED,MAAa,kBAAkB;IAEnB;IACA;IAFV,YACU,IAAY,EACZ,IAAY;QADZ,SAAI,GAAJ,IAAI,CAAQ;QACZ,SAAI,GAAJ,IAAI,CAAQ;IACnB,CAAC;IAEJ,KAAK,CAAC,QAAQ;QACZ,MAAM,EAAE,IAAI,EAAE,GAAG,wDAAa,eAAe,GAAC,CAAC;QAC/C,MAAM,EAAE,SAAS,EAAE,GAAG,wDAAa,MAAM,GAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,wBAAwB,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACvF,OAAO,MAAM;iBACV,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,aAAa,GAAG,KAA0B,CAAC;YACjD,IAAI,aAAa,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBAC/B,MAAM,IAAI,cAAQ,CAChB,0BAA0B,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,wCAAwC,EAC3F,WAAW,EACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC1D,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,cAAQ,CAChB,qEAAqE,EACrE,WAAW,EACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC1D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,EAAE,IAAI,EAAE,GAAG,wDAAa,eAAe,GAAC,CAAC;QAC/C,MAAM,EAAE,SAAS,EAAE,GAAG,wDAAa,MAAM,GAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,YAAY,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,cAAc,CAAC,CAAC;YACvF,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,aAAa,GAAG,KAA0B,CAAC;YACjD,IAAI,aAAa,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBAC/B,MAAM,IAAI,cAAQ,CAChB,0BAA0B,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,wCAAwC,EAC3F,WAAW,EACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC1D,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,cAAQ,CAChB,qEAAqE,EACrE,WAAW,EACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC1D,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AA1DD,gDA0DC;AAED,SAAgB,iBAAiB,CAAC,OAAoB;IACpD,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,IAAI,qBAAqB,EAAE,CAAC;QACrC,KAAK,KAAK;YACR,OAAO,IAAI,kBAAkB,EAAE,CAAC;QAClC,KAAK,aAAa;YAChB,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC,IAAI,IAAI,aAAa,EAAE,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;QACvF;YACE,OAAO,IAAI,kBAAkB,EAAE,CAAC;IACpC,CAAC;AACH,CAAC"}
|
package/dist/commands/analyze.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.analyzeCommand = analyzeCommand;
|
|
10
|
-
const
|
|
10
|
+
const analysis_orchestrator_1 = require("../analysis/analysis.orchestrator");
|
|
11
11
|
const logger_1 = require("../logger");
|
|
12
12
|
/**
|
|
13
13
|
* Execute the analyze command
|
|
@@ -39,9 +39,9 @@ async function analyzeCommand(args = []) {
|
|
|
39
39
|
logger_1.loggerInstance.info('Analyze command started', {
|
|
40
40
|
mode: diffOptions.mode,
|
|
41
41
|
base: diffOptions.base,
|
|
42
|
-
head: diffOptions.head
|
|
42
|
+
head: diffOptions.head,
|
|
43
43
|
});
|
|
44
|
-
await (0,
|
|
44
|
+
await (0, analysis_orchestrator_1.runAnalysis)(diffOptions);
|
|
45
45
|
logger_1.loggerInstance.info('Analyze command completed');
|
|
46
46
|
}
|
|
47
47
|
catch (error) {
|