@winspan/claude-forge 1.28.0 → 1.33.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.
@@ -1,4 +1,3 @@
1
- import { logger } from '../../utils/logger.js';
2
1
  import { validateLimit } from '../utils/validation.js';
3
2
  import { handleError } from '../utils/errors.js';
4
3
  import { QUERY_LIMIT } from '../../constants.js';
@@ -97,225 +96,73 @@ export function registerQualityRoutes(app, storage, aiProvider) {
97
96
  handleError(err, res, 'quality');
98
97
  }
99
98
  });
100
- // 自动修复质量问题(SSE 流式响应)
101
- app.post('/api/quality/:id/auto-fix', async (req, res) => {
102
- const id = Array.isArray(req.params.id) ? req.params.id[0] : req.params.id;
103
- // 设置 SSE 响应头
104
- res.setHeader('Content-Type', 'text/event-stream');
105
- res.setHeader('Cache-Control', 'no-cache');
106
- res.setHeader('Connection', 'keep-alive');
107
- const sendProgress = (step, message, data) => {
108
- res.write(`data: ${JSON.stringify({ step, message, ...data })}\n\n`);
109
- };
110
- const sendError = (error) => {
111
- res.write(`data: ${JSON.stringify({ step: 'error', message: error })}\n\n`);
112
- res.end();
113
- };
114
- const sendComplete = (data) => {
115
- res.write(`data: ${JSON.stringify({ step: 'complete', ...data })}\n\n`);
116
- res.end();
117
- };
99
+ // 获取质量问题的上下文信息(用于复制)
100
+ app.get('/api/quality/:id/context', (req, res) => {
118
101
  try {
119
- if (!aiProvider) {
120
- return sendError('AI 服务未配置');
121
- }
122
- sendProgress('init', '开始分析质量问题...');
123
- // 获取问题详情
102
+ const id = Array.isArray(req.params.id) ? req.params.id[0] : req.params.id;
124
103
  const db = storage.getDatabase();
125
104
  const issue = db.prepare('SELECT * FROM quality_gate_history WHERE id = ?').get(id);
126
105
  if (!issue) {
127
- return sendError('问题不存在');
128
- }
129
- if (issue.resolved) {
130
- return sendComplete({ success: false, message: '该问题已标记为已修复' });
106
+ return res.status(404).json({ error: '问题不存在' });
131
107
  }
132
108
  const filePath = issue.file_path;
133
- const message = issue.message;
134
- const category = issue.category;
135
- const level = issue.level;
136
- sendProgress('check_file', `检查文件:${filePath}`);
137
- // 检查文件是否存在
138
- if (!fs.existsSync(filePath)) {
139
- return sendError(`文件不存在:${filePath}`);
140
- }
141
- sendProgress('read_file', '读取文件内容...');
142
- // 读取文件内容
143
- const fileContent = fs.readFileSync(filePath, 'utf-8');
144
- sendProgress('build_prompt', '构建分析提示词...');
145
- // 构建修复提示词
146
- const prompt = `你是一个代码质量修复专家。请分析以下质量问题并提供修复建议:
147
-
148
- **问题类型**:${category}
149
- **严重级别**:${level}
150
- **问题描述**:${message}
151
-
152
- **文件路径**:${filePath}
153
-
154
- **当前代码**:
155
- \`\`\`
156
- ${fileContent.slice(0, 5000)}
157
- \`\`\`
158
-
159
- 请回答以下问题:
160
- 1. 这个问题是否需要修复?(回答"需要"或"不需要")
161
- 2. 如果需要修复,请提供具体的修复方案(简洁明了,不超过200字)
162
-
163
- 请以 JSON 格式回复:
164
- {
165
- "needsFix": true/false,
166
- "reason": "判断理由",
167
- "fixSuggestion": "修复建议(如果 needsFix 为 true)"
168
- }`;
169
- logger.info(`[质量修复] 开始分析问题 ${id}:${message}`);
170
- sendProgress('ai_analyze', '调用 AI 进行分析(可能需要几秒钟)...');
171
- // 调用 AI 分析
172
- const response = await aiProvider.complete(prompt, 'quality-auto-fix');
173
- sendProgress('parse_response', '解析 AI 响应...');
174
- // 解析 AI 响应
175
- let analysis;
176
- try {
177
- const jsonMatch = response.match(/\{[\s\S]*\}/);
178
- if (!jsonMatch) {
179
- throw new Error('AI 响应格式错误');
109
+ let fileContent = '';
110
+ let fileExists = false;
111
+ // 尝试读取文件内容
112
+ if (fs.existsSync(filePath)) {
113
+ fileExists = true;
114
+ try {
115
+ const fullContent = fs.readFileSync(filePath, 'utf-8');
116
+ // 限制文件内容长度,避免过大
117
+ fileContent = fullContent.length > 10000
118
+ ? fullContent.slice(0, 10000) + '\n\n... (文件内容过长,已截断)'
119
+ : fullContent;
120
+ }
121
+ catch (err) {
122
+ fileContent = `无法读取文件内容:${err}`;
180
123
  }
181
- analysis = JSON.parse(jsonMatch[0]);
182
- }
183
- catch (parseErr) {
184
- logger.warn(`[质量修复] AI 响应解析失败:${parseErr}`);
185
- return sendError(`AI 响应解析失败:${parseErr}`);
186
- }
187
- if (!analysis.needsFix) {
188
- // 不需要修复,直接标记为已解决
189
- sendProgress('mark_resolved', '标记为已解决...');
190
- db.prepare('UPDATE quality_gate_history SET resolved = 1, resolved_at = datetime(\'now\') WHERE id = ?').run(id);
191
- logger.info(`[质量修复] 问题 ${id} 无需修复:${analysis.reason}`);
192
- return sendComplete({
193
- success: true,
194
- needsFix: false,
195
- reason: analysis.reason,
196
- message: '该问题无需修复,已自动标记为已解决'
197
- });
198
- }
199
- // 需要修复,返回修复建议
200
- logger.info(`[质量修复] 问题 ${id} 需要修复:${analysis.fixSuggestion}`);
201
- sendComplete({
202
- success: true,
203
- needsFix: true,
204
- reason: analysis.reason,
205
- fixSuggestion: analysis.fixSuggestion,
206
- message: '已生成修复建议,请手动应用修复'
207
- });
208
- }
209
- catch (err) {
210
- logger.error(`[质量修复] 自动修复失败:${err}`);
211
- sendError(String(err));
212
- }
213
- });
214
- // 批量自动修复所有未解决的质量问题
215
- app.post('/api/quality/auto-fix-all', async (req, res) => {
216
- try {
217
- const { project_path } = req.body;
218
- if (!aiProvider) {
219
- return res.status(503).json({ error: 'AI 服务未配置' });
220
- }
221
- if (!project_path) {
222
- return res.status(400).json({ error: 'project_path 参数必填' });
223
- }
224
- // 获取所有未解决的问题
225
- const issues = storage.getUnresolvedIssues(project_path);
226
- if (issues.length === 0) {
227
- return res.json({ success: true, total: 0, fixed: 0, skipped: 0, message: '没有未解决的问题' });
228
124
  }
229
- logger.info(`[质量修复] 开始批量修复 ${issues.length} 个问题`);
230
- let fixed = 0;
231
- let skipped = 0;
232
- const results = [];
233
- for (const issue of issues) {
234
- try {
235
- const filePath = issue.file_path;
236
- const message = issue.message;
237
- const category = issue.category;
238
- const level = issue.level;
239
- // 检查文件是否存在
240
- if (!fs.existsSync(filePath)) {
241
- skipped++;
242
- results.push({ id: issue.id, message, needsFix: false, reason: '文件不存在' });
243
- continue;
244
- }
245
- // 读取文件内容
246
- const fileContent = fs.readFileSync(filePath, 'utf-8');
247
- // 构建修复提示词
248
- const prompt = `你是一个代码质量修复专家。请分析以下质量问题并提供修复建议:
125
+ // 构建上下文文本
126
+ const context = `# 质量问题上下文
249
127
 
250
- **问题类型**:${category}
251
- **严重级别**:${level}
252
- **问题描述**:${message}
128
+ ## 问题信息
129
+ - **ID**: ${issue.id}
130
+ - **级别**: ${issue.level}
131
+ - **类别**: ${issue.category}
132
+ - **状态**: ${issue.resolved ? '已解决' : '未解决'}
133
+ - **创建时间**: ${issue.created_at || '-'}
253
134
 
254
- **文件路径**:${filePath}
135
+ ## 问题描述
136
+ ${issue.message}
255
137
 
256
- **当前代码**:
257
- \`\`\`
258
- ${fileContent.slice(0, 5000)}
259
- \`\`\`
138
+ ## 文件路径
139
+ ${filePath}
260
140
 
261
- 请回答以下问题:
262
- 1. 这个问题是否需要修复?(回答"需要"或"不需要")
263
- 2. 如果需要修复,请提供具体的修复方案(简洁明了,不超过200字)
141
+ ## 项目路径
142
+ ${issue.project_path || '-'}
264
143
 
265
- 请以 JSON 格式回复:
266
- {
267
- "needsFix": true/false,
268
- "reason": "判断理由"
269
- }`;
270
- // 调用 AI 分析
271
- const response = await aiProvider.complete(prompt, 'quality-auto-fix-batch');
272
- // 解析 AI 响应
273
- let analysis;
274
- try {
275
- const jsonMatch = response.match(/\{[\s\S]*\}/);
276
- if (!jsonMatch) {
277
- throw new Error('AI 响应格式错误');
278
- }
279
- analysis = JSON.parse(jsonMatch[0]);
280
- }
281
- catch (parseErr) {
282
- logger.warn(`[质量修复] 问题 ${issue.id} AI 响应解析失败:${parseErr}`);
283
- skipped++;
284
- results.push({ id: issue.id, message, needsFix: false, reason: 'AI 响应解析失败' });
285
- continue;
286
- }
287
- if (!analysis.needsFix) {
288
- // 不需要修复,直接标记为已解决
289
- const db = storage.getDatabase();
290
- db.prepare('UPDATE quality_gate_history SET resolved = 1, resolved_at = datetime(\'now\') WHERE id = ?').run(issue.id);
291
- fixed++;
292
- results.push({ id: issue.id, message, needsFix: false, reason: analysis.reason });
293
- logger.info(`[质量修复] 问题 ${issue.id} 无需修复:${analysis.reason}`);
294
- }
295
- else {
296
- skipped++;
297
- results.push({ id: issue.id, message, needsFix: true, reason: analysis.reason });
298
- logger.info(`[质量修复] 问题 ${issue.id} 需要修复:${analysis.reason}`);
299
- }
300
- }
301
- catch (err) {
302
- logger.error(`[质量修复] 处理问题 ${issue.id} 失败:${err}`);
303
- skipped++;
304
- results.push({ id: issue.id, message: issue.message, needsFix: false, reason: String(err) });
305
- }
306
- }
307
- logger.info(`[质量修复] 批量修复完成:总计 ${issues.length},已修复 ${fixed},跳过 ${skipped}`);
144
+ ## 文件内容
145
+ ${fileExists ? `\`\`\`
146
+ ${fileContent}
147
+ \`\`\`` : '文件不存在或无法访问'}
148
+
149
+ ---
150
+ 请帮我修复上述质量问题。`;
308
151
  res.json({
309
152
  success: true,
310
- total: issues.length,
311
- fixed,
312
- skipped,
313
- results,
314
- message: `批量修复完成:${fixed} 个问题已自动解决,${skipped} 个问题需要手动处理`
153
+ context,
154
+ issue: {
155
+ id: issue.id,
156
+ level: issue.level,
157
+ category: issue.category,
158
+ message: issue.message,
159
+ file_path: filePath,
160
+ project_path: issue.project_path,
161
+ file_exists: fileExists,
162
+ }
315
163
  });
316
164
  }
317
165
  catch (err) {
318
- logger.error(`[质量修复] 批量修复失败:${err}`);
319
166
  handleError(err, res, 'quality');
320
167
  }
321
168
  });
@@ -1 +1 @@
1
- {"version":3,"file":"quality.js","sourceRoot":"","sources":["../../../src/web/routes/quality.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quality.js","sourceRoot":"","sources":["../../../src/web/routes/quality.ts"],"names":[],"mappings":"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"}