yuangs 5.43.0 → 5.45.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/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/git/auto.d.ts +0 -3
- package/dist/commands/git/auto.js +78 -257
- package/dist/commands/git/auto.js.map +1 -1
- package/dist/commands/git/historySemantic.d.ts +2 -0
- package/dist/commands/git/historySemantic.js +62 -0
- package/dist/commands/git/historySemantic.js.map +1 -0
- package/dist/commands/git/plan.js +4 -2
- package/dist/commands/git/plan.js.map +1 -1
- package/dist/commands/git/resolve.d.ts +2 -0
- package/dist/commands/git/resolve.js +104 -0
- package/dist/commands/git/resolve.js.map +1 -0
- package/dist/commands/git/semanticDiff.d.ts +2 -0
- package/dist/commands/git/semanticDiff.js +51 -0
- package/dist/commands/git/semanticDiff.js.map +1 -0
- package/dist/commands/git/smartCommit.d.ts +2 -0
- package/dist/commands/git/smartCommit.js +110 -0
- package/dist/commands/git/smartCommit.js.map +1 -0
- package/dist/commands/gitCommands.js +8 -0
- package/dist/commands/gitCommands.js.map +1 -1
- package/dist/core/ConfigManager.d.ts +39 -0
- package/dist/core/ConfigManager.js +127 -0
- package/dist/core/ConfigManager.js.map +1 -0
- package/dist/core/GlobalErrorHandler.d.ts +10 -0
- package/dist/core/GlobalErrorHandler.js +65 -0
- package/dist/core/GlobalErrorHandler.js.map +1 -0
- package/dist/core/capability/CapabilityLevel.d.ts +41 -109
- package/dist/core/capability/CapabilityLevel.js +76 -159
- package/dist/core/capability/CapabilityLevel.js.map +1 -1
- package/dist/core/capability/DegradationPolicy.js.map +1 -1
- package/dist/core/capability/Logger.d.ts +41 -0
- package/dist/core/capability/Logger.js +58 -0
- package/dist/core/capability/Logger.js.map +1 -0
- package/dist/core/capability/Pipeline.d.ts +146 -0
- package/dist/core/capability/Pipeline.js +233 -0
- package/dist/core/capability/Pipeline.js.map +1 -0
- package/dist/core/capability/PipelineFactory.d.ts +40 -0
- package/dist/core/capability/PipelineFactory.js +260 -0
- package/dist/core/capability/PipelineFactory.js.map +1 -0
- package/dist/core/capability/index.d.ts +3 -0
- package/dist/core/capability/index.js +3 -0
- package/dist/core/capability/index.js.map +1 -1
- package/dist/core/errors.d.ts +38 -0
- package/dist/core/errors.js +64 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/git/ConflictResolver.d.ts +25 -0
- package/dist/core/git/ConflictResolver.js +121 -0
- package/dist/core/git/ConflictResolver.js.map +1 -0
- package/dist/core/git/GitService.d.ts +11 -1
- package/dist/core/git/GitService.js +37 -1
- package/dist/core/git/GitService.js.map +1 -1
- package/dist/core/git/SmartCommitManager.d.ts +24 -0
- package/dist/core/git/SmartCommitManager.js +137 -0
- package/dist/core/git/SmartCommitManager.js.map +1 -0
- package/dist/core/git/constants.d.ts +4 -0
- package/dist/core/git/constants.js +14 -1
- package/dist/core/git/constants.js.map +1 -1
- package/dist/core/git/semantic/SemanticCommitParser.d.ts +12 -0
- package/dist/core/git/semantic/SemanticCommitParser.js +92 -0
- package/dist/core/git/semantic/SemanticCommitParser.js.map +1 -0
- package/dist/core/git/semantic/SemanticDiffEngine.d.ts +18 -0
- package/dist/core/git/semantic/SemanticDiffEngine.js +152 -0
- package/dist/core/git/semantic/SemanticDiffEngine.js.map +1 -0
- package/dist/core/git/semantic/historyTypes.d.ts +14 -0
- package/dist/core/git/semantic/historyTypes.js +3 -0
- package/dist/core/git/semantic/historyTypes.js.map +1 -0
- package/dist/core/git/semantic/types.d.ts +29 -0
- package/dist/core/git/semantic/types.js +18 -0
- package/dist/core/git/semantic/types.js.map +1 -0
- package/dist/core/metrics/PerformanceMonitor.d.ts +28 -0
- package/dist/core/metrics/PerformanceMonitor.js +64 -0
- package/dist/core/metrics/PerformanceMonitor.js.map +1 -0
- package/dist/utils/CLIComponent.d.ts +26 -0
- package/dist/utils/CLIComponent.js +91 -0
- package/dist/utils/CLIComponent.js.map +1 -0
- package/dist/utils/Logger.d.ts +31 -0
- package/dist/utils/Logger.js +102 -0
- package/dist/utils/Logger.js.map +1 -0
- package/dist/utils/ProgressBar.d.ts +27 -0
- package/dist/utils/ProgressBar.js +103 -0
- package/dist/utils/ProgressBar.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PipelineFactory = void 0;
|
|
4
|
+
const Pipeline_1 = require("./Pipeline");
|
|
5
|
+
const DegradationPolicy_1 = require("./DegradationPolicy");
|
|
6
|
+
const CostProfile_1 = require("./CostProfile");
|
|
7
|
+
const Logger_1 = require("./Logger");
|
|
8
|
+
/**
|
|
9
|
+
* Pipeline 工厂
|
|
10
|
+
*
|
|
11
|
+
* 提供预定义的 Pipeline 模板,快速创建符合不同场景的 Pipeline
|
|
12
|
+
*/
|
|
13
|
+
class PipelineFactory {
|
|
14
|
+
/**
|
|
15
|
+
* 创建代码审查 Pipeline
|
|
16
|
+
*/
|
|
17
|
+
static createCodeReviewPipeline(options = {}) {
|
|
18
|
+
const degradationPolicy = options.degradationType === 'noop'
|
|
19
|
+
? new DegradationPolicy_1.NoOpDegradationPolicy()
|
|
20
|
+
: new DegradationPolicy_1.ThresholdDegradationPolicy({
|
|
21
|
+
timeLimit: options.maxExecutionTime ?? 30000,
|
|
22
|
+
confidenceThreshold: options.confidenceThreshold ?? 0.7,
|
|
23
|
+
});
|
|
24
|
+
const stages = [
|
|
25
|
+
{
|
|
26
|
+
name: 'preprocessing',
|
|
27
|
+
minCapability: {
|
|
28
|
+
minCapability: Pipeline_1.CapabilityLevel.TEXT,
|
|
29
|
+
fallbackChain: [Pipeline_1.CapabilityLevel.NONE],
|
|
30
|
+
},
|
|
31
|
+
execute: async (context) => {
|
|
32
|
+
// 预处理阶段:文本清理、格式化
|
|
33
|
+
console.log(' 📝 预处理代码变更...');
|
|
34
|
+
return {
|
|
35
|
+
success: true,
|
|
36
|
+
data: { preprocessed: true },
|
|
37
|
+
confidence: 1.0,
|
|
38
|
+
finalCapability: Pipeline_1.CapabilityLevel.TEXT,
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'analysis',
|
|
44
|
+
minCapability: {
|
|
45
|
+
minCapability: Pipeline_1.CapabilityLevel.STRUCTURAL,
|
|
46
|
+
fallbackChain: [Pipeline_1.CapabilityLevel.LINE, Pipeline_1.CapabilityLevel.TEXT, Pipeline_1.CapabilityLevel.NONE],
|
|
47
|
+
},
|
|
48
|
+
execute: async (context) => {
|
|
49
|
+
// 分析阶段:代码结构分析、依赖分析
|
|
50
|
+
console.log(' 🔍 分析代码结构...');
|
|
51
|
+
return {
|
|
52
|
+
success: true,
|
|
53
|
+
data: { analyzed: true },
|
|
54
|
+
confidence: 0.9,
|
|
55
|
+
finalCapability: Pipeline_1.CapabilityLevel.STRUCTURAL,
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'review',
|
|
61
|
+
minCapability: {
|
|
62
|
+
minCapability: Pipeline_1.CapabilityLevel.SEMANTIC,
|
|
63
|
+
fallbackChain: [Pipeline_1.CapabilityLevel.STRUCTURAL, Pipeline_1.CapabilityLevel.LINE, Pipeline_1.CapabilityLevel.TEXT, Pipeline_1.CapabilityLevel.NONE],
|
|
64
|
+
},
|
|
65
|
+
execute: async (context) => {
|
|
66
|
+
// 审查阶段:语义理解、问题发现
|
|
67
|
+
console.log(' 👨💻 执行代码审查...');
|
|
68
|
+
// 实际审查逻辑由外部实现
|
|
69
|
+
return {
|
|
70
|
+
success: true,
|
|
71
|
+
data: { reviewed: true },
|
|
72
|
+
confidence: 0.85,
|
|
73
|
+
finalCapability: Pipeline_1.CapabilityLevel.SEMANTIC,
|
|
74
|
+
};
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
];
|
|
78
|
+
const config = {
|
|
79
|
+
stages,
|
|
80
|
+
degradationPolicy: degradationPolicy ?? new DegradationPolicy_1.ThresholdDegradationPolicy(),
|
|
81
|
+
costCalculator: new CostProfile_1.CostProfileCalculator(options.costProfileOptions),
|
|
82
|
+
logger: new Logger_1.ConsoleLogger(),
|
|
83
|
+
autoDegradation: options.autoDegradation ?? true,
|
|
84
|
+
maxExecutionTime: options.maxExecutionTime ?? 30000,
|
|
85
|
+
confidenceThreshold: options.confidenceThreshold ?? 0.7,
|
|
86
|
+
};
|
|
87
|
+
return new Pipeline_1.CapabilityPipeline(config);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* 创建代码生成 Pipeline
|
|
91
|
+
*/
|
|
92
|
+
static createCodeGenerationPipeline(options = {}) {
|
|
93
|
+
const degradationPolicy = options.degradationType === 'noop'
|
|
94
|
+
? new DegradationPolicy_1.NoOpDegradationPolicy()
|
|
95
|
+
: new DegradationPolicy_1.ThresholdDegradationPolicy({
|
|
96
|
+
timeLimit: options.maxExecutionTime ?? 60000,
|
|
97
|
+
confidenceThreshold: options.confidenceThreshold ?? 0.75,
|
|
98
|
+
});
|
|
99
|
+
const stages = [
|
|
100
|
+
{
|
|
101
|
+
name: 'context_gathering',
|
|
102
|
+
minCapability: {
|
|
103
|
+
minCapability: Pipeline_1.CapabilityLevel.TEXT,
|
|
104
|
+
fallbackChain: [Pipeline_1.CapabilityLevel.NONE],
|
|
105
|
+
},
|
|
106
|
+
execute: async (context) => {
|
|
107
|
+
// 上下文收集阶段
|
|
108
|
+
console.log(' 📚 收集项目上下文...');
|
|
109
|
+
return {
|
|
110
|
+
success: true,
|
|
111
|
+
data: { context: 'gathered' },
|
|
112
|
+
confidence: 1.0,
|
|
113
|
+
finalCapability: Pipeline_1.CapabilityLevel.TEXT,
|
|
114
|
+
};
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: 'planning',
|
|
119
|
+
minCapability: {
|
|
120
|
+
minCapability: Pipeline_1.CapabilityLevel.STRUCTURAL,
|
|
121
|
+
fallbackChain: [Pipeline_1.CapabilityLevel.LINE, Pipeline_1.CapabilityLevel.TEXT, Pipeline_1.CapabilityLevel.NONE],
|
|
122
|
+
},
|
|
123
|
+
execute: async (context) => {
|
|
124
|
+
// 规划阶段:生成代码结构
|
|
125
|
+
console.log(' 📋 规划代码结构...');
|
|
126
|
+
return {
|
|
127
|
+
success: true,
|
|
128
|
+
data: { plan: 'created' },
|
|
129
|
+
confidence: 0.9,
|
|
130
|
+
finalCapability: Pipeline_1.CapabilityLevel.STRUCTURAL,
|
|
131
|
+
};
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: 'generation',
|
|
136
|
+
minCapability: {
|
|
137
|
+
minCapability: Pipeline_1.CapabilityLevel.SEMANTIC,
|
|
138
|
+
fallbackChain: [Pipeline_1.CapabilityLevel.STRUCTURAL, Pipeline_1.CapabilityLevel.LINE, Pipeline_1.CapabilityLevel.TEXT, Pipeline_1.CapabilityLevel.NONE],
|
|
139
|
+
},
|
|
140
|
+
execute: async (context) => {
|
|
141
|
+
// 生成阶段:生成代码
|
|
142
|
+
console.log(' ⚙️ 生成代码...');
|
|
143
|
+
return {
|
|
144
|
+
success: true,
|
|
145
|
+
data: { code: 'generated' },
|
|
146
|
+
confidence: 0.85,
|
|
147
|
+
finalCapability: Pipeline_1.CapabilityLevel.SEMANTIC,
|
|
148
|
+
};
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
name: 'validation',
|
|
153
|
+
minCapability: {
|
|
154
|
+
minCapability: Pipeline_1.CapabilityLevel.STRUCTURAL,
|
|
155
|
+
fallbackChain: [Pipeline_1.CapabilityLevel.LINE, Pipeline_1.CapabilityLevel.TEXT, Pipeline_1.CapabilityLevel.NONE],
|
|
156
|
+
},
|
|
157
|
+
execute: async (context) => {
|
|
158
|
+
// 验证阶段:代码质量检查
|
|
159
|
+
console.log(' ✅ 验证代码质量...');
|
|
160
|
+
return {
|
|
161
|
+
success: true,
|
|
162
|
+
data: { validated: true },
|
|
163
|
+
confidence: 0.9,
|
|
164
|
+
finalCapability: Pipeline_1.CapabilityLevel.STRUCTURAL,
|
|
165
|
+
};
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
];
|
|
169
|
+
const config = {
|
|
170
|
+
stages,
|
|
171
|
+
degradationPolicy: degradationPolicy ?? new DegradationPolicy_1.ThresholdDegradationPolicy(),
|
|
172
|
+
costCalculator: new CostProfile_1.CostProfileCalculator(options.costProfileOptions),
|
|
173
|
+
logger: new Logger_1.ConsoleLogger(),
|
|
174
|
+
autoDegradation: options.autoDegradation ?? true,
|
|
175
|
+
maxExecutionTime: options.maxExecutionTime ?? 60000,
|
|
176
|
+
confidenceThreshold: options.confidenceThreshold ?? 0.75,
|
|
177
|
+
};
|
|
178
|
+
return new Pipeline_1.CapabilityPipeline(config);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* 创建 Commit Message 生成 Pipeline
|
|
182
|
+
*/
|
|
183
|
+
static createCommitMessagePipeline(options = {}) {
|
|
184
|
+
const degradationPolicy = options.degradationType === 'noop'
|
|
185
|
+
? new DegradationPolicy_1.NoOpDegradationPolicy()
|
|
186
|
+
: new DegradationPolicy_1.ThresholdDegradationPolicy({
|
|
187
|
+
timeLimit: options.maxExecutionTime ?? 15000,
|
|
188
|
+
confidenceThreshold: options.confidenceThreshold ?? 0.7,
|
|
189
|
+
});
|
|
190
|
+
const stages = [
|
|
191
|
+
{
|
|
192
|
+
name: 'diff_analysis',
|
|
193
|
+
minCapability: {
|
|
194
|
+
minCapability: Pipeline_1.CapabilityLevel.TEXT,
|
|
195
|
+
fallbackChain: [Pipeline_1.CapabilityLevel.NONE],
|
|
196
|
+
},
|
|
197
|
+
execute: async (context) => {
|
|
198
|
+
// Diff 分析阶段
|
|
199
|
+
console.log(' 📊 分析代码变更...');
|
|
200
|
+
return {
|
|
201
|
+
success: true,
|
|
202
|
+
data: { diff: 'analyzed' },
|
|
203
|
+
confidence: 1.0,
|
|
204
|
+
finalCapability: Pipeline_1.CapabilityLevel.TEXT,
|
|
205
|
+
};
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
name: 'message_generation',
|
|
210
|
+
minCapability: {
|
|
211
|
+
minCapability: Pipeline_1.CapabilityLevel.SEMANTIC,
|
|
212
|
+
fallbackChain: [Pipeline_1.CapabilityLevel.STRUCTURAL, Pipeline_1.CapabilityLevel.LINE, Pipeline_1.CapabilityLevel.TEXT, Pipeline_1.CapabilityLevel.NONE],
|
|
213
|
+
},
|
|
214
|
+
execute: async (context) => {
|
|
215
|
+
// Message 生成阶段
|
|
216
|
+
console.log(' ✍️ 生成 Commit Message...');
|
|
217
|
+
return {
|
|
218
|
+
success: true,
|
|
219
|
+
data: { message: 'generated' },
|
|
220
|
+
confidence: 0.9,
|
|
221
|
+
finalCapability: Pipeline_1.CapabilityLevel.SEMANTIC,
|
|
222
|
+
};
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
];
|
|
226
|
+
const config = {
|
|
227
|
+
stages,
|
|
228
|
+
degradationPolicy: degradationPolicy ?? new DegradationPolicy_1.ThresholdDegradationPolicy(),
|
|
229
|
+
costCalculator: new CostProfile_1.CostProfileCalculator(options.costProfileOptions),
|
|
230
|
+
logger: new Logger_1.ConsoleLogger(),
|
|
231
|
+
autoDegradation: options.autoDegradation ?? true,
|
|
232
|
+
maxExecutionTime: options.maxExecutionTime ?? 15000,
|
|
233
|
+
confidenceThreshold: options.confidenceThreshold ?? 0.7,
|
|
234
|
+
};
|
|
235
|
+
return new Pipeline_1.CapabilityPipeline(config);
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* 创建自定义 Pipeline
|
|
239
|
+
*/
|
|
240
|
+
static createCustomPipeline(stages, options = {}) {
|
|
241
|
+
const degradationPolicy = options.degradationType === 'noop'
|
|
242
|
+
? new DegradationPolicy_1.NoOpDegradationPolicy()
|
|
243
|
+
: new DegradationPolicy_1.ThresholdDegradationPolicy({
|
|
244
|
+
timeLimit: options.maxExecutionTime ?? 30000,
|
|
245
|
+
confidenceThreshold: options.confidenceThreshold ?? 0.7,
|
|
246
|
+
});
|
|
247
|
+
const config = {
|
|
248
|
+
stages,
|
|
249
|
+
degradationPolicy: degradationPolicy ?? new DegradationPolicy_1.ThresholdDegradationPolicy(),
|
|
250
|
+
costCalculator: new CostProfile_1.CostProfileCalculator(options.costProfileOptions),
|
|
251
|
+
logger: new Logger_1.ConsoleLogger(),
|
|
252
|
+
autoDegradation: options.autoDegradation ?? true,
|
|
253
|
+
maxExecutionTime: options.maxExecutionTime ?? 30000,
|
|
254
|
+
confidenceThreshold: options.confidenceThreshold ?? 0.7,
|
|
255
|
+
};
|
|
256
|
+
return new Pipeline_1.CapabilityPipeline(config);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
exports.PipelineFactory = PipelineFactory;
|
|
260
|
+
//# sourceMappingURL=PipelineFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PipelineFactory.js","sourceRoot":"","sources":["../../../src/core/capability/PipelineFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,4 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./CapabilityLevel"), exports);
|
|
18
18
|
__exportStar(require("./DegradationPolicy"), exports);
|
|
19
19
|
__exportStar(require("./CostProfile"), exports);
|
|
20
|
+
__exportStar(require("./Pipeline"), exports);
|
|
21
|
+
__exportStar(require("./PipelineFactory"), exports);
|
|
22
|
+
__exportStar(require("./Logger"), exports);
|
|
20
23
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/capability/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,sDAAoC;AACpC,gDAA8B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/capability/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,sDAAoC;AACpC,gDAA8B;AAC9B,6CAA2B;AAC3B,oDAAkC;AAClC,2CAAyB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base error class for all yuangs errors
|
|
3
|
+
*/
|
|
4
|
+
export declare class YuangsError extends Error {
|
|
5
|
+
readonly code: string;
|
|
6
|
+
readonly suggestions?: string[];
|
|
7
|
+
constructor(message: string, code?: string, suggestions?: string[]);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Errors related to Git operations
|
|
11
|
+
*/
|
|
12
|
+
export declare class GitError extends YuangsError {
|
|
13
|
+
constructor(message: string, suggestions?: string[]);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Errors related to AI planning
|
|
17
|
+
*/
|
|
18
|
+
export declare class PlanError extends YuangsError {
|
|
19
|
+
constructor(message: string, suggestions?: string[]);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Errors related to AI code review
|
|
23
|
+
*/
|
|
24
|
+
export declare class ReviewError extends YuangsError {
|
|
25
|
+
constructor(message: string, suggestions?: string[]);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Errors related to configuration
|
|
29
|
+
*/
|
|
30
|
+
export declare class ConfigError extends YuangsError {
|
|
31
|
+
constructor(message: string, suggestions?: string[]);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Errors related to user policy/safety
|
|
35
|
+
*/
|
|
36
|
+
export declare class PolicyError extends YuangsError {
|
|
37
|
+
constructor(message: string, suggestions?: string[]);
|
|
38
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PolicyError = exports.ConfigError = exports.ReviewError = exports.PlanError = exports.GitError = exports.YuangsError = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Base error class for all yuangs errors
|
|
6
|
+
*/
|
|
7
|
+
class YuangsError extends Error {
|
|
8
|
+
code;
|
|
9
|
+
suggestions;
|
|
10
|
+
constructor(message, code = 'UNKNOWN_ERROR', suggestions) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = this.constructor.name;
|
|
13
|
+
this.code = code;
|
|
14
|
+
this.suggestions = suggestions;
|
|
15
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.YuangsError = YuangsError;
|
|
19
|
+
/**
|
|
20
|
+
* Errors related to Git operations
|
|
21
|
+
*/
|
|
22
|
+
class GitError extends YuangsError {
|
|
23
|
+
constructor(message, suggestions) {
|
|
24
|
+
super(message, 'GIT_ERROR', suggestions);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.GitError = GitError;
|
|
28
|
+
/**
|
|
29
|
+
* Errors related to AI planning
|
|
30
|
+
*/
|
|
31
|
+
class PlanError extends YuangsError {
|
|
32
|
+
constructor(message, suggestions) {
|
|
33
|
+
super(message, 'PLAN_ERROR', suggestions);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.PlanError = PlanError;
|
|
37
|
+
/**
|
|
38
|
+
* Errors related to AI code review
|
|
39
|
+
*/
|
|
40
|
+
class ReviewError extends YuangsError {
|
|
41
|
+
constructor(message, suggestions) {
|
|
42
|
+
super(message, 'REVIEW_ERROR', suggestions);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.ReviewError = ReviewError;
|
|
46
|
+
/**
|
|
47
|
+
* Errors related to configuration
|
|
48
|
+
*/
|
|
49
|
+
class ConfigError extends YuangsError {
|
|
50
|
+
constructor(message, suggestions) {
|
|
51
|
+
super(message, 'CONFIG_ERROR', suggestions);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.ConfigError = ConfigError;
|
|
55
|
+
/**
|
|
56
|
+
* Errors related to user policy/safety
|
|
57
|
+
*/
|
|
58
|
+
class PolicyError extends YuangsError {
|
|
59
|
+
constructor(message, suggestions) {
|
|
60
|
+
super(message, 'POLICY_ERROR', suggestions);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.PolicyError = PolicyError;
|
|
64
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,WAAY,SAAQ,KAAK;IAClB,IAAI,CAAS;IACb,WAAW,CAAY;IAEvC,YAAY,OAAe,EAAE,OAAe,eAAe,EAAE,WAAsB;QAC/E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;CACJ;AAXD,kCAWC;AAED;;GAEG;AACH,MAAa,QAAS,SAAQ,WAAW;IACrC,YAAY,OAAe,EAAE,WAAsB;QAC/C,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAC7C,CAAC;CACJ;AAJD,4BAIC;AAED;;GAEG;AACH,MAAa,SAAU,SAAQ,WAAW;IACtC,YAAY,OAAe,EAAE,WAAsB;QAC/C,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC;CACJ;AAJD,8BAIC;AAED;;GAEG;AACH,MAAa,WAAY,SAAQ,WAAW;IACxC,YAAY,OAAe,EAAE,WAAsB;QAC/C,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC;CACJ;AAJD,kCAIC;AAED;;GAEG;AACH,MAAa,WAAY,SAAQ,WAAW;IACxC,YAAY,OAAe,EAAE,WAAsB;QAC/C,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC;CACJ;AAJD,kCAIC;AAED;;GAEG;AACH,MAAa,WAAY,SAAQ,WAAW;IACxC,YAAY,OAAe,EAAE,WAAsB;QAC/C,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC;CACJ;AAJD,kCAIC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { GitService } from './GitService';
|
|
2
|
+
export interface ConflictResolutionResult {
|
|
3
|
+
file: string;
|
|
4
|
+
success: boolean;
|
|
5
|
+
suggestion?: string;
|
|
6
|
+
error?: string;
|
|
7
|
+
backupFile?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ResolveOptions {
|
|
10
|
+
model?: string;
|
|
11
|
+
dryRun?: boolean;
|
|
12
|
+
backup?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare class ConflictResolver {
|
|
15
|
+
private gitService;
|
|
16
|
+
constructor(gitService: GitService);
|
|
17
|
+
/**
|
|
18
|
+
* 使用 AI 尝试自动解决冲突
|
|
19
|
+
*/
|
|
20
|
+
resolveFile(filePath: string, options?: ResolveOptions): Promise<ConflictResolutionResult>;
|
|
21
|
+
/**
|
|
22
|
+
* 对生成的代码进行基础语法校验
|
|
23
|
+
*/
|
|
24
|
+
private validateSyntax;
|
|
25
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ConflictResolver = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const llm_1 = require("../../agent/llm");
|
|
10
|
+
const constants_1 = require("./constants");
|
|
11
|
+
class ConflictResolver {
|
|
12
|
+
gitService;
|
|
13
|
+
constructor(gitService) {
|
|
14
|
+
this.gitService = gitService;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 使用 AI 尝试自动解决冲突
|
|
18
|
+
*/
|
|
19
|
+
async resolveFile(filePath, options = {}) {
|
|
20
|
+
const { model = constants_1.DEFAULT_AI_MODEL, dryRun = false, backup = true } = options;
|
|
21
|
+
try {
|
|
22
|
+
const fullPath = path_1.default.isAbsolute(filePath) ? filePath : path_1.default.join(process.cwd(), filePath);
|
|
23
|
+
try {
|
|
24
|
+
await fs_1.default.promises.access(fullPath, fs_1.default.constants.F_OK);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return { file: filePath, success: false, error: '文件不存在' };
|
|
28
|
+
}
|
|
29
|
+
const content = await fs_1.default.promises.readFile(fullPath, 'utf8');
|
|
30
|
+
if (!content.includes('<<<<<<<') || !content.includes('>>>>>>>')) {
|
|
31
|
+
return { file: filePath, success: false, error: '未检测到冲突标记' };
|
|
32
|
+
}
|
|
33
|
+
const prompt = {
|
|
34
|
+
system: `你是一个资深软件工程师,擅长解决 Git 合并冲突。
|
|
35
|
+
你的任务是:
|
|
36
|
+
1. 分析提供的文件内容。
|
|
37
|
+
2. 识别冲突部分(由 <<<<<<<, =======, >>>>>>> 标记)。
|
|
38
|
+
3. 根据上下文逻辑,将两个版本的变更进行语义化合并。
|
|
39
|
+
4. **绝对不要**遗漏任何必要的逻辑或闭合括号。
|
|
40
|
+
5. 移除所有 Git 冲突标记。
|
|
41
|
+
6. 输出完整的、修复后的文件内容,不要包含任何解释或 Markdown 代码块容器(直接输出原始内容)。`,
|
|
42
|
+
messages: [
|
|
43
|
+
{
|
|
44
|
+
role: 'user',
|
|
45
|
+
content: `文件路径: ${filePath}\n\n内容:\n${content}`
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
};
|
|
49
|
+
const response = await (0, llm_1.runLLM)({
|
|
50
|
+
prompt,
|
|
51
|
+
model: model || constants_1.DEFAULT_AI_MODEL,
|
|
52
|
+
stream: false
|
|
53
|
+
});
|
|
54
|
+
const resolvedContent = response.rawText;
|
|
55
|
+
// 1. 基本非空校验
|
|
56
|
+
if (!resolvedContent || resolvedContent.trim().length === 0) {
|
|
57
|
+
return { file: filePath, success: false, error: 'AI 生成了空内容,操作已拦截' };
|
|
58
|
+
}
|
|
59
|
+
// 2. 长度偏差校验
|
|
60
|
+
if (content.length > 300 && resolvedContent.length < content.length * 0.3) {
|
|
61
|
+
return { file: filePath, success: false, error: 'AI 生成的内容量严重缺失,疑似合并失败' };
|
|
62
|
+
}
|
|
63
|
+
// 3. 冲突标记残留校验
|
|
64
|
+
if (resolvedContent.includes('<<<<<<<') || resolvedContent.includes('=======') || resolvedContent.includes('>>>>>>>')) {
|
|
65
|
+
return { file: filePath, success: false, error: 'AI 生成的内容仍包含冲突标记' };
|
|
66
|
+
}
|
|
67
|
+
// 4. 基础语法完整性校验
|
|
68
|
+
const syntaxError = this.validateSyntax(filePath, resolvedContent);
|
|
69
|
+
if (syntaxError) {
|
|
70
|
+
return { file: filePath, success: false, error: `AI 生成的代码存在基础语法风险: ${syntaxError}` };
|
|
71
|
+
}
|
|
72
|
+
if (dryRun) {
|
|
73
|
+
return { file: filePath, success: true, suggestion: 'Dry-run: 内容已生成但未写回文件' };
|
|
74
|
+
}
|
|
75
|
+
// 5. 备份处理
|
|
76
|
+
let backupFile;
|
|
77
|
+
if (backup) {
|
|
78
|
+
backupFile = `${fullPath}.bak`;
|
|
79
|
+
await fs_1.default.promises.writeFile(backupFile, content, 'utf8');
|
|
80
|
+
}
|
|
81
|
+
// 6. 覆盖写入
|
|
82
|
+
await fs_1.default.promises.writeFile(fullPath, resolvedContent, 'utf8');
|
|
83
|
+
return { file: filePath, success: true, backupFile };
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
87
|
+
return { file: filePath, success: false, error: errMsg };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 对生成的代码进行基础语法校验
|
|
92
|
+
*/
|
|
93
|
+
validateSyntax(filePath, content) {
|
|
94
|
+
const ext = path_1.default.extname(filePath).toLowerCase();
|
|
95
|
+
// JSON 校验
|
|
96
|
+
if (ext === '.json') {
|
|
97
|
+
try {
|
|
98
|
+
JSON.parse(content);
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
return `JSON 解析失败: ${e.message}`;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// JS/TS 括号匹配基础校验
|
|
105
|
+
if (['.js', '.ts', '.jsx', '.tsx', '.json', '.c', '.cpp', '.java'].includes(ext)) {
|
|
106
|
+
const openBraces = (content.match(/{/g) || []).length;
|
|
107
|
+
const closeBraces = (content.match(/}/g) || []).length;
|
|
108
|
+
if (openBraces !== closeBraces) {
|
|
109
|
+
return `大括号不匹配 ( {:${openBraces}, }:${closeBraces} )`;
|
|
110
|
+
}
|
|
111
|
+
const openParens = (content.match(/\(/g) || []).length;
|
|
112
|
+
const closeParens = (content.match(/\)/g) || []).length;
|
|
113
|
+
if (openParens !== closeParens) {
|
|
114
|
+
return `圆括号不匹配 ( (:${openParens}, ):${closeParens} )`;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
exports.ConflictResolver = ConflictResolver;
|
|
121
|
+
//# sourceMappingURL=ConflictResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConflictResolver.js","sourceRoot":"","sources":["../../../src/core/git/ConflictResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SemanticDiffResult } from './semantic/types';
|
|
1
2
|
/**
|
|
2
3
|
* Git 变更信息
|
|
3
4
|
*/
|
|
@@ -49,7 +50,7 @@ export declare class GitService {
|
|
|
49
50
|
/**
|
|
50
51
|
* 安全执行 Git 命令(失败返回 null)
|
|
51
52
|
*/
|
|
52
|
-
|
|
53
|
+
execSafe(command: string): Promise<string | null>;
|
|
53
54
|
/**
|
|
54
55
|
* 检查是否在 Git 仓库中
|
|
55
56
|
*/
|
|
@@ -90,6 +91,11 @@ export declare class GitService {
|
|
|
90
91
|
diff: string | null;
|
|
91
92
|
files: string[];
|
|
92
93
|
}>;
|
|
94
|
+
/**
|
|
95
|
+
* 获取语义级 Diff 分析结果
|
|
96
|
+
* @param staged 是否只分析已暂存的变更
|
|
97
|
+
*/
|
|
98
|
+
getSemanticDiff(staged?: boolean): Promise<SemanticDiffResult | null>;
|
|
93
99
|
/**
|
|
94
100
|
* 获取 commit 的详细信息
|
|
95
101
|
* @param commitHash commit hash
|
|
@@ -121,6 +127,10 @@ export declare class GitService {
|
|
|
121
127
|
deleted: number;
|
|
122
128
|
untracked: number;
|
|
123
129
|
}>;
|
|
130
|
+
/**
|
|
131
|
+
* 获取存在冲突的文件列表
|
|
132
|
+
*/
|
|
133
|
+
getConflictedFiles(): Promise<string[]>;
|
|
124
134
|
/**
|
|
125
135
|
* 获取仓库根目录
|
|
126
136
|
*/
|
|
@@ -3,6 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.GitService = void 0;
|
|
4
4
|
const child_process_1 = require("child_process");
|
|
5
5
|
const util_1 = require("util");
|
|
6
|
+
const errors_1 = require("../errors");
|
|
7
|
+
const SemanticDiffEngine_1 = require("./semantic/SemanticDiffEngine");
|
|
8
|
+
const constants_1 = require("./constants");
|
|
6
9
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
7
10
|
/**
|
|
8
11
|
* Git 服务类
|
|
@@ -25,7 +28,11 @@ class GitService {
|
|
|
25
28
|
return stdout.trim();
|
|
26
29
|
}
|
|
27
30
|
catch (error) {
|
|
28
|
-
throw new
|
|
31
|
+
throw new errors_1.GitError(`Git command failed: git ${command}\n${error.message}`, [
|
|
32
|
+
'Ensure you are in a valid Git repository.',
|
|
33
|
+
'Check if there are any pending merge conflicts.',
|
|
34
|
+
'Verify your Git permissions for this directory.'
|
|
35
|
+
]);
|
|
29
36
|
}
|
|
30
37
|
}
|
|
31
38
|
/**
|
|
@@ -168,6 +175,16 @@ class GitService {
|
|
|
168
175
|
files: files ? files.split('\n').filter(Boolean) : [],
|
|
169
176
|
};
|
|
170
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* 获取语义级 Diff 分析结果
|
|
180
|
+
* @param staged 是否只分析已暂存的变更
|
|
181
|
+
*/
|
|
182
|
+
async getSemanticDiff(staged = true) {
|
|
183
|
+
const diffContent = await this.execSafe(staged ? 'diff --staged' : 'diff');
|
|
184
|
+
if (!diffContent)
|
|
185
|
+
return null;
|
|
186
|
+
return SemanticDiffEngine_1.SemanticDiffEngine.analyze(diffContent);
|
|
187
|
+
}
|
|
171
188
|
/**
|
|
172
189
|
* 获取 commit 的详细信息
|
|
173
190
|
* @param commitHash commit hash
|
|
@@ -285,6 +302,25 @@ class GitService {
|
|
|
285
302
|
}
|
|
286
303
|
return { modified, added, deleted, untracked };
|
|
287
304
|
}
|
|
305
|
+
/**
|
|
306
|
+
* 获取存在冲突的文件列表
|
|
307
|
+
*/
|
|
308
|
+
async getConflictedFiles() {
|
|
309
|
+
const status = await this.execSafe('status --porcelain');
|
|
310
|
+
if (!status)
|
|
311
|
+
return [];
|
|
312
|
+
const conflictedFiles = [];
|
|
313
|
+
const lines = status.split('\n');
|
|
314
|
+
for (const line of lines) {
|
|
315
|
+
if (line.length < 3)
|
|
316
|
+
continue;
|
|
317
|
+
const statusCode = line.substring(0, 2);
|
|
318
|
+
if (constants_1.GIT_CONFLICT_CODES.includes(statusCode)) {
|
|
319
|
+
conflictedFiles.push(line.substring(3).trim());
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
return conflictedFiles;
|
|
323
|
+
}
|
|
288
324
|
/**
|
|
289
325
|
* 获取仓库根目录
|
|
290
326
|
*/
|