yuangs 5.50.0 → 5.52.0
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/agent/codeSummary.js +17 -1
- package/dist/agent/codeSummary.js.map +1 -1
- package/dist/agent/errorHandling.d.ts +4 -0
- package/dist/agent/errorHandling.js +39 -26
- package/dist/agent/errorHandling.js.map +1 -1
- package/dist/agent/llmAdapter.js +6 -3
- package/dist/agent/llmAdapter.js.map +1 -1
- package/dist/agent/prompt.js +4 -4
- package/dist/agent/prompt.js.map +1 -1
- package/dist/agent/protocolV2_2.d.ts +6 -7
- package/dist/agent/protocolV2_2.js +44 -154
- package/dist/agent/protocolV2_2.js.map +1 -1
- package/dist/agent/smartContextManager.d.ts +1 -0
- package/dist/agent/smartContextManager.js +20 -1
- package/dist/agent/smartContextManager.js.map +1 -1
- package/dist/cli.js +3 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/contextBuffer.d.ts +6 -0
- package/dist/commands/contextBuffer.js +12 -2
- package/dist/commands/contextBuffer.js.map +1 -1
- package/dist/commands/git/auto.js +171 -1
- package/dist/commands/git/auto.js.map +1 -1
- package/dist/commands/git/utils.js +6 -6
- package/dist/commands/git/utils.js.map +1 -1
- package/dist/commands/handleAIChat.js +23 -6
- package/dist/commands/handleAIChat.js.map +1 -1
- package/dist/core/capability/CapabilityLevel.d.ts +31 -0
- package/dist/core/capability/CapabilityLevel.js +80 -0
- package/dist/core/capability/CapabilityLevel.js.map +1 -1
- package/dist/core/fileReader.d.ts +6 -1
- package/dist/core/fileReader.js +54 -1
- package/dist/core/fileReader.js.map +1 -1
- package/dist/core/git/CodeReviewer.d.ts +1 -0
- package/dist/core/git/CodeReviewer.js +13 -1
- package/dist/core/git/CodeReviewer.js.map +1 -1
- package/dist/core/git/ConflictResolver.d.ts +15 -0
- package/dist/core/git/ConflictResolver.js +110 -54
- package/dist/core/git/ConflictResolver.js.map +1 -1
- package/dist/core/git/ContextGatherer.js +38 -16
- package/dist/core/git/ContextGatherer.js.map +1 -1
- package/dist/core/git/InteractiveReview.d.ts +33 -0
- package/dist/core/git/InteractiveReview.js +296 -0
- package/dist/core/git/InteractiveReview.js.map +1 -0
- package/dist/core/git/ReviewCache.d.ts +53 -0
- package/dist/core/git/ReviewCache.js +392 -0
- package/dist/core/git/ReviewCache.js.map +1 -0
- package/dist/core/git/semantic/SemanticDiffEngine.js +6 -6
- package/dist/core/git/semantic/SemanticDiffEngine.js.map +1 -1
- package/dist/core/workflows/AutoWorkflow.js +24 -8
- package/dist/core/workflows/AutoWorkflow.js.map +1 -1
- package/dist/core/workflows/GitWorkflowSession.d.ts +7 -0
- package/dist/core/workflows/GitWorkflowSession.js +16 -0
- package/dist/core/workflows/GitWorkflowSession.js.map +1 -1
- package/dist/core/workflows/PlanWorkflow.js +4 -0
- package/dist/core/workflows/PlanWorkflow.js.map +1 -1
- package/dist/utils/renderer.js +23 -21
- package/dist/utils/renderer.js.map +1 -1
- package/dist/utils/syntaxHandler.js +1 -1
- package/dist/utils/syntaxHandler.js.map +1 -1
- package/package.json +1 -1
|
@@ -36,11 +36,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.ConflictResolver = void 0;
|
|
39
|
+
exports.ConflictResolver = exports.ResolveStrategy = void 0;
|
|
40
40
|
const fs_1 = __importDefault(require("fs"));
|
|
41
41
|
const path_1 = __importDefault(require("path"));
|
|
42
42
|
const llm_1 = require("../../agent/llm");
|
|
43
43
|
const constants_1 = require("./constants");
|
|
44
|
+
var ResolveStrategy;
|
|
45
|
+
(function (ResolveStrategy) {
|
|
46
|
+
ResolveStrategy["SEMANTIC"] = "semantic";
|
|
47
|
+
ResolveStrategy["OURS"] = "ours";
|
|
48
|
+
ResolveStrategy["THEIRS"] = "theirs";
|
|
49
|
+
})(ResolveStrategy || (exports.ResolveStrategy = ResolveStrategy = {}));
|
|
44
50
|
class ConflictResolver {
|
|
45
51
|
gitService;
|
|
46
52
|
constructor(gitService) {
|
|
@@ -50,7 +56,8 @@ class ConflictResolver {
|
|
|
50
56
|
* 使用 AI 尝试自动解决冲突
|
|
51
57
|
*/
|
|
52
58
|
async resolveFile(filePath, options = {}) {
|
|
53
|
-
const { model = constants_1.DEFAULT_AI_MODEL, dryRun = false, backup = true
|
|
59
|
+
const { model = constants_1.DEFAULT_AI_MODEL, dryRun = false, backup = true, strategy = ResolveStrategy.SEMANTIC, timeout = 30000 // P1: 默认 30 秒超时
|
|
60
|
+
} = options;
|
|
54
61
|
try {
|
|
55
62
|
const fullPath = path_1.default.isAbsolute(filePath) ? filePath : path_1.default.join(process.cwd(), filePath);
|
|
56
63
|
try {
|
|
@@ -63,67 +70,116 @@ class ConflictResolver {
|
|
|
63
70
|
if (!content.includes('<<<<<<<') || !content.includes('>>>>>>>')) {
|
|
64
71
|
return { file: filePath, success: false, error: '未检测到冲突标记' };
|
|
65
72
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
1. 分析提供的文件内容。
|
|
70
|
-
2. 识别冲突部分(由 <<<<<<<, =======, >>>>>>> 标记)。
|
|
71
|
-
3. 根据上下文逻辑,将两个版本的变更进行语义化合并。
|
|
72
|
-
4. **绝对不要**遗漏任何必要的逻辑或闭合括号。
|
|
73
|
-
5. 移除所有 Git 冲突标记。
|
|
74
|
-
6. 输出完整的、修复后的文件内容,不要包含任何解释或 Markdown 代码块容器(直接输出原始内容)。`,
|
|
75
|
-
messages: [
|
|
76
|
-
{
|
|
77
|
-
role: 'user',
|
|
78
|
-
content: `文件路径: ${filePath}\n\n内容:\n${content}`
|
|
79
|
-
}
|
|
80
|
-
]
|
|
81
|
-
};
|
|
82
|
-
const response = await (0, llm_1.runLLM)({
|
|
83
|
-
prompt,
|
|
84
|
-
model: model || constants_1.DEFAULT_AI_MODEL,
|
|
85
|
-
stream: false
|
|
86
|
-
});
|
|
87
|
-
const resolvedContent = response.rawText;
|
|
88
|
-
// 1. 基本非空校验
|
|
89
|
-
if (!resolvedContent || resolvedContent.trim().length === 0) {
|
|
90
|
-
return { file: filePath, success: false, error: 'AI 生成了空内容,操作已拦截' };
|
|
91
|
-
}
|
|
92
|
-
// 2. 长度偏差校验
|
|
93
|
-
if (content.length > 300 && resolvedContent.length < content.length * 0.3) {
|
|
94
|
-
return { file: filePath, success: false, error: 'AI 生成的内容量严重缺失,疑似合并失败' };
|
|
95
|
-
}
|
|
96
|
-
// 3. 冲突标记残留校验
|
|
97
|
-
if (resolvedContent.includes('<<<<<<<') || resolvedContent.includes('=======') || resolvedContent.includes('>>>>>>>')) {
|
|
98
|
-
return { file: filePath, success: false, error: 'AI 生成的内容仍包含冲突标记' };
|
|
99
|
-
}
|
|
100
|
-
// 4. 基础语法完整性校验
|
|
101
|
-
const syntaxError = this.validateSyntax(filePath, resolvedContent);
|
|
102
|
-
if (syntaxError) {
|
|
103
|
-
return { file: filePath, success: false, error: `AI 生成的代码存在基础语法风险: ${syntaxError}` };
|
|
73
|
+
// P1: 如果策略是 ours 或 theirs,直接使用 Git 命令
|
|
74
|
+
if (strategy === ResolveStrategy.OURS || strategy === ResolveStrategy.THEIRS) {
|
|
75
|
+
return await this.resolveWithGit(fullPath, filePath, strategy, backup);
|
|
104
76
|
}
|
|
105
|
-
//
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
77
|
+
// P1: 使用超时熔断(Promise.race 实现)
|
|
78
|
+
const resolveWithTimeout = this.resolveWithAI(filePath, fullPath, content, model, dryRun, backup);
|
|
79
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
80
|
+
setTimeout(() => {
|
|
81
|
+
reject(new Error(`冲突解决超时(${timeout}ms),请手动处理或使用 --strategy ours/theirs`));
|
|
82
|
+
}, timeout);
|
|
83
|
+
});
|
|
84
|
+
const result = await Promise.race([resolveWithTimeout, timeoutPromise]);
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
const errMsg = error instanceof Error ? error.message : (typeof error === 'string' ? error : String(error));
|
|
89
|
+
return { file: filePath, success: false, error: errMsg };
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* P1: 使用 Git 命令解决冲突(ours/theirs 策略)
|
|
94
|
+
*/
|
|
95
|
+
async resolveWithGit(fullPath, filePath, strategy, backup) {
|
|
96
|
+
try {
|
|
97
|
+
const gitOption = strategy === ResolveStrategy.OURS ? '--ours' : '--theirs';
|
|
98
|
+
// 备份原文件
|
|
114
99
|
let backupFile;
|
|
115
100
|
if (backup) {
|
|
101
|
+
const content = await fs_1.default.promises.readFile(fullPath, 'utf8');
|
|
116
102
|
backupFile = `${fullPath}.bak`;
|
|
117
103
|
await fs_1.default.promises.writeFile(backupFile, content, 'utf8');
|
|
118
104
|
}
|
|
119
|
-
//
|
|
120
|
-
await
|
|
121
|
-
return {
|
|
105
|
+
// 使用 git checkout 选择版本
|
|
106
|
+
await this.gitService.execSafe(`checkout ${gitOption} -- "${filePath}"`);
|
|
107
|
+
return {
|
|
108
|
+
file: filePath,
|
|
109
|
+
success: true,
|
|
110
|
+
suggestion: `已使用 ${strategy} 策略解决冲突`,
|
|
111
|
+
backupFile
|
|
112
|
+
};
|
|
122
113
|
}
|
|
123
114
|
catch (error) {
|
|
124
|
-
const errMsg = error instanceof Error ? error.message :
|
|
125
|
-
return { file: filePath, success: false, error: errMsg };
|
|
115
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
116
|
+
return { file: filePath, success: false, error: `Git 策略失败: ${errMsg}` };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* P1: 使用 AI 解决冲突(带超时保护)
|
|
121
|
+
*/
|
|
122
|
+
async resolveWithAI(filePath, fullPath, content, model, dryRun, backup) {
|
|
123
|
+
const prompt = {
|
|
124
|
+
system: `你是一个资深软件工程师,擅长解决 Git 合并冲突。
|
|
125
|
+
你的任务是:
|
|
126
|
+
1. 分析提供的文件内容。
|
|
127
|
+
2. 识别冲突部分(由 <<<<<<<, =======, >>>>>>> 标记)。
|
|
128
|
+
3. 根据上下文逻辑,将两个版本的变更进行语义化合并。
|
|
129
|
+
4. **绝对不要**遗漏任何必要的逻辑或闭合括号。
|
|
130
|
+
5. 移除所有 Git 冲突标记。
|
|
131
|
+
6. 输出完整的、修复后的文件内容,不要包含任何解释或 Markdown 代码块容器(直接输出原始内容)。`,
|
|
132
|
+
messages: [
|
|
133
|
+
{
|
|
134
|
+
role: 'user',
|
|
135
|
+
content: `文件路径: ${filePath}\n\n内容:\n${content}`
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
};
|
|
139
|
+
const response = await (0, llm_1.runLLM)({
|
|
140
|
+
prompt,
|
|
141
|
+
model: model || constants_1.DEFAULT_AI_MODEL,
|
|
142
|
+
stream: false
|
|
143
|
+
});
|
|
144
|
+
// WARNING: 增加 response?.rawText 类型保护
|
|
145
|
+
const resolvedContent = response?.rawText;
|
|
146
|
+
if (!resolvedContent) {
|
|
147
|
+
return { file: filePath, success: false, error: 'AI 返回了无效响应(缺少 rawText 字段)' };
|
|
148
|
+
}
|
|
149
|
+
// 1. 基本非空校验
|
|
150
|
+
if (!resolvedContent || resolvedContent.trim().length === 0) {
|
|
151
|
+
return { file: filePath, success: false, error: 'AI 生成了空内容,操作已拦截' };
|
|
152
|
+
}
|
|
153
|
+
// 2. 长度偏差校验
|
|
154
|
+
if (content.length > 300 && resolvedContent.length < content.length * 0.3) {
|
|
155
|
+
return { file: filePath, success: false, error: 'AI 生成的内容量严重缺失,疑似合并失败' };
|
|
156
|
+
}
|
|
157
|
+
// 3. 冲突标记残留校验
|
|
158
|
+
if (resolvedContent.includes('<<<<<<<') || resolvedContent.includes('=======') || resolvedContent.includes('>>>>>>>')) {
|
|
159
|
+
return { file: filePath, success: false, error: 'AI 生成的内容仍包含冲突标记' };
|
|
160
|
+
}
|
|
161
|
+
// 4. 基础语法完整性校验
|
|
162
|
+
const syntaxError = this.validateSyntax(filePath, resolvedContent);
|
|
163
|
+
if (syntaxError) {
|
|
164
|
+
return { file: filePath, success: false, error: `AI 生成的代码存在基础语法风险: ${syntaxError}` };
|
|
165
|
+
}
|
|
166
|
+
// 5. 更严格的语法校验(根据文件类型)
|
|
167
|
+
const advancedSyntaxError = await this.validateAdvancedSyntax(filePath, resolvedContent);
|
|
168
|
+
if (advancedSyntaxError) {
|
|
169
|
+
return { file: filePath, success: false, error: `AI 生成的代码存在高级语法错误: ${advancedSyntaxError}` };
|
|
170
|
+
}
|
|
171
|
+
if (dryRun) {
|
|
172
|
+
return { file: filePath, success: true, suggestion: 'Dry-run: 内容已生成但未写回文件' };
|
|
173
|
+
}
|
|
174
|
+
// 6. 备份处理
|
|
175
|
+
let backupFile;
|
|
176
|
+
if (backup) {
|
|
177
|
+
backupFile = `${fullPath}.bak`;
|
|
178
|
+
await fs_1.default.promises.writeFile(backupFile, content, 'utf8');
|
|
126
179
|
}
|
|
180
|
+
// 7. 覆盖写入
|
|
181
|
+
await fs_1.default.promises.writeFile(fullPath, resolvedContent, 'utf8');
|
|
182
|
+
return { file: filePath, success: true, backupFile };
|
|
127
183
|
}
|
|
128
184
|
/**
|
|
129
185
|
* 对生成的代码进行基础语法校验
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConflictResolver.js","sourceRoot":"","sources":["../../../src/core/git/ConflictResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAExB,yCAAkD;AAClD,2CAA+C;
|
|
1
|
+
{"version":3,"file":"ConflictResolver.js","sourceRoot":"","sources":["../../../src/core/git/ConflictResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.ContextGatherer = void 0;
|
|
7
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
7
8
|
const fs_1 = __importDefault(require("fs"));
|
|
8
9
|
const path_1 = __importDefault(require("path"));
|
|
9
10
|
const ContextMeta_1 = require("../context/ContextMeta");
|
|
10
11
|
const ASTParser_1 = require("../kernel/ASTParser");
|
|
12
|
+
const p_limit_1 = __importDefault(require("p-limit"));
|
|
11
13
|
/**
|
|
12
14
|
* 项目上下文采集器
|
|
13
15
|
* 负责为 LLM 提供项目现状的真实快照
|
|
@@ -16,7 +18,7 @@ class ContextGatherer {
|
|
|
16
18
|
gitService;
|
|
17
19
|
MAX_FILE_CONTENT_LENGTH = 10000; // 单个文件读取上限
|
|
18
20
|
MAX_TOTAL_CONTEXT_LENGTH = 50000; // 总上限
|
|
19
|
-
SUMMARY_THRESHOLD =
|
|
21
|
+
SUMMARY_THRESHOLD = 200; // P2: 改为200行,避免过度摘要
|
|
20
22
|
astParser; // Reuse AST parser instance
|
|
21
23
|
constructor(gitService) {
|
|
22
24
|
this.gitService = gitService;
|
|
@@ -174,43 +176,63 @@ class ContextGatherer {
|
|
|
174
176
|
potentialPaths.add(f);
|
|
175
177
|
});
|
|
176
178
|
}
|
|
177
|
-
// 3. 读取内容 (
|
|
178
|
-
|
|
179
|
+
// P2: 3. 读取内容 (正确使用异步 I/O + 并发控制 + 原子长度计数)
|
|
180
|
+
const limit = (0, p_limit_1.default)(5); // 限制并发数为 5
|
|
181
|
+
const totalLength = { value: 0 }; // 使用对象实现原子计数器
|
|
182
|
+
const readResults = [];
|
|
179
183
|
for (const filePath of potentialPaths) {
|
|
180
|
-
|
|
184
|
+
// 如果已达到总长度限制,提前终止
|
|
185
|
+
if (totalLength.value >= this.MAX_TOTAL_CONTEXT_LENGTH) {
|
|
186
|
+
console.log(`[ContextGatherer] 达到总长度限制 (${this.MAX_TOTAL_CONTEXT_LENGTH}),停止读取更多文件`);
|
|
181
187
|
break;
|
|
182
|
-
|
|
188
|
+
}
|
|
183
189
|
try {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
const
|
|
190
|
+
// 使用 limit 包裹任务,真正控制并发
|
|
191
|
+
const result = await limit(async () => {
|
|
192
|
+
const fullPath = path_1.default.join(repoRoot, filePath);
|
|
193
|
+
// 检查文件是否存在并获取信息
|
|
194
|
+
const stats = await promises_1.default.stat(fullPath);
|
|
195
|
+
if (!stats.isFile())
|
|
196
|
+
return null;
|
|
197
|
+
// 读取文件内容
|
|
198
|
+
let content = await promises_1.default.readFile(fullPath, 'utf8');
|
|
199
|
+
// 判断是否需要摘要
|
|
200
|
+
const isReferenceOnly = !description.includes(filePath);
|
|
201
|
+
const lineCount = content.split('\n').length;
|
|
202
|
+
const isTooLarge = lineCount > this.SUMMARY_THRESHOLD;
|
|
189
203
|
const isTSFile = filePath.endsWith('.ts') || filePath.endsWith('.tsx');
|
|
190
204
|
if (isReferenceOnly && isTooLarge && isTSFile) {
|
|
191
|
-
// Generate semantic summary for large TS files that are not directly referenced
|
|
192
205
|
try {
|
|
193
206
|
content = this.astParser.generateSummary(filePath, content);
|
|
194
|
-
console.log(`[Economy] ✂️ Summarized ${filePath} to save tokens.`);
|
|
207
|
+
console.log(`[Economy] ✂️ Summarized ${filePath} (${lineCount} lines) to save tokens.`);
|
|
195
208
|
}
|
|
196
209
|
catch (error) {
|
|
197
210
|
console.warn(`[ContextGatherer] 警告:摘要生成失败 "${filePath}": ${error.message}`);
|
|
198
|
-
// 如果摘要生成失败,回退到截断内容
|
|
199
211
|
content = content.substring(0, this.MAX_FILE_CONTENT_LENGTH) + '\n... (内容过长已截断,摘要生成失败)';
|
|
200
212
|
}
|
|
201
213
|
}
|
|
202
214
|
else if (content.length > this.MAX_FILE_CONTENT_LENGTH) {
|
|
203
215
|
content = content.substring(0, this.MAX_FILE_CONTENT_LENGTH) + '\n... (内容过长已截断)';
|
|
204
216
|
}
|
|
205
|
-
|
|
206
|
-
|
|
217
|
+
// 原子地更新总长度
|
|
218
|
+
if (totalLength.value + content.length <= this.MAX_TOTAL_CONTEXT_LENGTH) {
|
|
219
|
+
totalLength.value += content.length;
|
|
220
|
+
return { path: filePath, content };
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
console.log(`[ContextGatherer] 跳过 ${filePath} (会超过总长度限制)`);
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
if (result) {
|
|
228
|
+
readResults.push(result);
|
|
207
229
|
}
|
|
208
230
|
}
|
|
209
231
|
catch (e) {
|
|
210
232
|
console.warn(`[ContextGatherer] 警告:无法读取相关上下文文件 "${filePath}": ${e.message}`);
|
|
211
233
|
}
|
|
212
234
|
}
|
|
213
|
-
return
|
|
235
|
+
return readResults.filter((r) => r !== null);
|
|
214
236
|
}
|
|
215
237
|
/**
|
|
216
238
|
* 获取审计日志
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextGatherer.js","sourceRoot":"","sources":["../../../src/core/git/ContextGatherer.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"ContextGatherer.js","sourceRoot":"","sources":["../../../src/core/git/ContextGatherer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ReviewIssue } from './CodeReviewer';
|
|
2
|
+
import { GitService } from './GitService';
|
|
3
|
+
export interface FixAction {
|
|
4
|
+
type: 'apply' | 'skip' | 'edit' | 'batch';
|
|
5
|
+
issue?: ReviewIssue;
|
|
6
|
+
customFix?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface InteractiveFixResult {
|
|
9
|
+
applied: number;
|
|
10
|
+
skipped: number;
|
|
11
|
+
edited: number;
|
|
12
|
+
batchApplied: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class InteractiveReview {
|
|
15
|
+
private gitService;
|
|
16
|
+
private rl;
|
|
17
|
+
constructor(gitService: GitService);
|
|
18
|
+
startInteractiveFix(issues: ReviewIssue[]): Promise<InteractiveFixResult>;
|
|
19
|
+
private askBatchProcessing;
|
|
20
|
+
private processBatch;
|
|
21
|
+
private groupIssuesByType;
|
|
22
|
+
private processSingleIssue;
|
|
23
|
+
private displayIssue;
|
|
24
|
+
private askBatchAction;
|
|
25
|
+
private askCustomFix;
|
|
26
|
+
private applyFix;
|
|
27
|
+
private editAndApplyFix;
|
|
28
|
+
private showProgress;
|
|
29
|
+
private printSummary;
|
|
30
|
+
private askQuestion;
|
|
31
|
+
destroy(): void;
|
|
32
|
+
}
|
|
33
|
+
export declare function startInteractiveReview(issues: ReviewIssue[], gitService: GitService): Promise<InteractiveFixResult>;
|