intention-coding 0.5.3 → 0.5.5
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/index.cjs +1523 -541
- package/dist/services/change-summarizer/index.d.ts.map +1 -1
- package/dist/services/image-analysis/analyzer.d.ts +0 -18
- package/dist/services/image-analysis/analyzer.d.ts.map +1 -1
- package/dist/services/image-analysis/index.d.ts +2 -2
- package/dist/services/image-analysis/index.d.ts.map +1 -1
- package/dist/services/image-analysis/types.d.ts +1 -148
- package/dist/services/image-analysis/types.d.ts.map +1 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/project-template/index.d.ts +2 -2
- package/dist/services/requirement/index.d.ts +75 -0
- package/dist/services/requirement/index.d.ts.map +1 -0
- package/dist/services/requirement-analyzer/index.d.ts +4 -4
- package/dist/services/requirement-analyzer/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/services/code-generator/index.d.ts +0 -50
- package/dist/services/code-generator/index.d.ts.map +0 -1
- package/dist/services/code-generator/stages/execution-stage.d.ts +0 -96
- package/dist/services/code-generator/stages/execution-stage.d.ts.map +0 -1
- package/dist/services/code-generator/stages/ideation-stage.d.ts +0 -34
- package/dist/services/code-generator/stages/ideation-stage.d.ts.map +0 -1
- package/dist/services/code-generator/stages/optimization-stage.d.ts +0 -47
- package/dist/services/code-generator/stages/optimization-stage.d.ts.map +0 -1
- package/dist/services/code-generator/stages/planning-stage.d.ts +0 -34
- package/dist/services/code-generator/stages/planning-stage.d.ts.map +0 -1
- package/dist/services/code-generator/stages/research-stage.d.ts +0 -36
- package/dist/services/code-generator/stages/research-stage.d.ts.map +0 -1
- package/dist/services/code-generator/stages/review-stage.d.ts +0 -34
- package/dist/services/code-generator/stages/review-stage.d.ts.map +0 -1
- package/dist/services/code-generator/types.d.ts +0 -233
- package/dist/services/code-generator/types.d.ts.map +0 -1
- package/dist/services/code-generator/utils/instruction-executor.d.ts +0 -70
- package/dist/services/code-generator/utils/instruction-executor.d.ts.map +0 -1
- package/dist/services/code-generator/workflow-manager.d.ts +0 -47
- package/dist/services/code-generator/workflow-manager.d.ts.map +0 -1
- package/dist/services/requirement-handler/core/agents/align-agent.d.ts +0 -31
- package/dist/services/requirement-handler/core/agents/align-agent.d.ts.map +0 -1
- package/dist/services/requirement-handler/core/agents/approve-agent.d.ts +0 -33
- package/dist/services/requirement-handler/core/agents/approve-agent.d.ts.map +0 -1
- package/dist/services/requirement-handler/core/agents/architect-agent.d.ts +0 -29
- package/dist/services/requirement-handler/core/agents/architect-agent.d.ts.map +0 -1
- package/dist/services/requirement-handler/core/agents/assess-agent.d.ts +0 -53
- package/dist/services/requirement-handler/core/agents/assess-agent.d.ts.map +0 -1
- package/dist/services/requirement-handler/core/agents/atomize-agent.d.ts +0 -33
- package/dist/services/requirement-handler/core/agents/atomize-agent.d.ts.map +0 -1
- package/dist/services/requirement-handler/core/agents/automate-agent.d.ts +0 -43
- package/dist/services/requirement-handler/core/agents/automate-agent.d.ts.map +0 -1
- package/dist/services/requirement-handler/core/requirement-handler-service.d.ts +0 -35
- package/dist/services/requirement-handler/core/requirement-handler-service.d.ts.map +0 -1
- package/dist/services/requirement-handler/core/types.d.ts +0 -143
- package/dist/services/requirement-handler/core/types.d.ts.map +0 -1
- package/dist/services/requirement-handler/index.d.ts +0 -87
- package/dist/services/requirement-handler/index.d.ts.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -66,7 +66,7 @@ var __webpack_exports__ = {};
|
|
|
66
66
|
try {
|
|
67
67
|
if (process.env.LOG_DIR) logDir = process.env.LOG_DIR;
|
|
68
68
|
else {
|
|
69
|
-
const storageDir =
|
|
69
|
+
const storageDir = config_getStorageDir();
|
|
70
70
|
logDir = storageDir ? storageDir + '/logs' : './.aico/logs';
|
|
71
71
|
}
|
|
72
72
|
} catch (error) {
|
|
@@ -130,7 +130,7 @@ var __webpack_exports__ = {};
|
|
|
130
130
|
format: fileFormat,
|
|
131
131
|
level: 'info'
|
|
132
132
|
}));
|
|
133
|
-
const
|
|
133
|
+
const logger_logger = external_winston_default().createLogger({
|
|
134
134
|
level: 'debug',
|
|
135
135
|
levels,
|
|
136
136
|
format: external_winston_default().format.combine(external_winston_default().format.errors({
|
|
@@ -159,8 +159,8 @@ var __webpack_exports__ = {};
|
|
|
159
159
|
] : []
|
|
160
160
|
});
|
|
161
161
|
process.on('SIGINT', ()=>{
|
|
162
|
-
|
|
163
|
-
|
|
162
|
+
logger_logger.end(()=>{
|
|
163
|
+
logger_logger.info("\u65E5\u5FD7\u5DF2\u5173\u95ED");
|
|
164
164
|
process.exit(0);
|
|
165
165
|
});
|
|
166
166
|
});
|
|
@@ -243,7 +243,7 @@ var __webpack_exports__ = {};
|
|
|
243
243
|
const contextManager = new ContextManager();
|
|
244
244
|
const detectProjectRoot = (enableLogging = false)=>{
|
|
245
245
|
if (process.env.MCP_STORAGE_DIR) {
|
|
246
|
-
if (enableLogging)
|
|
246
|
+
if (enableLogging) logger_logger.info(`\u{4F7F}\u{7528}\u{73AF}\u{5883}\u{53D8}\u{91CF} MCP_STORAGE_DIR: ${process.env.MCP_STORAGE_DIR}`);
|
|
247
247
|
return process.env.MCP_STORAGE_DIR;
|
|
248
248
|
}
|
|
249
249
|
let currentDir = process.cwd();
|
|
@@ -254,12 +254,12 @@ var __webpack_exports__ = {};
|
|
|
254
254
|
'pyproject.toml',
|
|
255
255
|
'go.mod'
|
|
256
256
|
];
|
|
257
|
-
if (enableLogging)
|
|
257
|
+
if (enableLogging) logger_logger.info(`\u{5F00}\u{59CB}\u{4ECE}\u{5F53}\u{524D}\u{76EE}\u{5F55}\u{68C0}\u{6D4B}\u{9879}\u{76EE}\u{6839}\u{76EE}\u{5F55}: ${currentDir}`);
|
|
258
258
|
while('/' !== currentDir){
|
|
259
259
|
for (const marker of markers){
|
|
260
260
|
const markerPath = (0, external_path_namespaceObject.resolve)(currentDir, marker);
|
|
261
261
|
if (external_fs_namespaceObject.existsSync(markerPath)) {
|
|
262
|
-
if (enableLogging)
|
|
262
|
+
if (enableLogging) logger_logger.info(`\u{627E}\u{5230}\u{9879}\u{76EE}\u{6807}\u{8BB0}\u{6587}\u{4EF6} ${marker} \u{5728}: ${currentDir}`);
|
|
263
263
|
return currentDir;
|
|
264
264
|
}
|
|
265
265
|
}
|
|
@@ -267,7 +267,7 @@ var __webpack_exports__ = {};
|
|
|
267
267
|
if (parentDir === currentDir) break;
|
|
268
268
|
currentDir = parentDir;
|
|
269
269
|
}
|
|
270
|
-
if (enableLogging)
|
|
270
|
+
if (enableLogging) logger_logger.warn(`\u{672A}\u{627E}\u{5230}\u{9879}\u{76EE}\u{6807}\u{8BB0}\u{6587}\u{4EF6}\u{FF0C}\u{4F7F}\u{7528}\u{5F53}\u{524D}\u{5DE5}\u{4F5C}\u{76EE}\u{5F55}: ${process.cwd()}`);
|
|
271
271
|
return process.cwd();
|
|
272
272
|
};
|
|
273
273
|
let _PROJECT_ROOT = null;
|
|
@@ -289,9 +289,9 @@ var __webpack_exports__ = {};
|
|
|
289
289
|
_PROJECT_ROOT = detectedRoot;
|
|
290
290
|
if (!process.env.MCP_STORAGE_DIR) process.env.MCP_STORAGE_DIR = detectedRoot;
|
|
291
291
|
contextManager.setCachedData("project_root", detectedRoot);
|
|
292
|
-
|
|
292
|
+
logger_logger.info(`\u{9879}\u{76EE}\u{6839}\u{76EE}\u{5F55}\u{5DF2}\u{8BBE}\u{7F6E}\u{4E3A}: ${detectedRoot}`);
|
|
293
293
|
};
|
|
294
|
-
const
|
|
294
|
+
const config_getStorageDir = ()=>{
|
|
295
295
|
try {
|
|
296
296
|
const cachedRoot = contextManager.getCachedData("project_root");
|
|
297
297
|
if (cachedRoot && 'string' == typeof cachedRoot) return cachedRoot + "/.aico";
|
|
@@ -317,7 +317,7 @@ var __webpack_exports__ = {};
|
|
|
317
317
|
const external_html_to_md_namespaceObject = require("html-to-md");
|
|
318
318
|
var external_html_to_md_default = /*#__PURE__*/ __webpack_require__.n(external_html_to_md_namespaceObject);
|
|
319
319
|
const external_os_namespaceObject = require("os");
|
|
320
|
-
const
|
|
320
|
+
const common_sanitizeFileName = (input)=>input.replace(/[\\/:*?"<>|\n\r#%&]/g, '').trim().replace(/\s+/g, '_').replace(/_+/g, '_').replace(/^_+|_+$/g, '');
|
|
321
321
|
function normalizePath(filePath) {
|
|
322
322
|
if (!filePath || 'string' != typeof filePath) throw new Error("\u6587\u4EF6\u8DEF\u5F84\u4E0D\u80FD\u4E3A\u7A7A");
|
|
323
323
|
filePath = filePath.trim().replace(/^["']|["']$/g, '');
|
|
@@ -329,14 +329,14 @@ var __webpack_exports__ = {};
|
|
|
329
329
|
const resolved = external_path_default().resolve(normalized);
|
|
330
330
|
return resolved;
|
|
331
331
|
}
|
|
332
|
-
async function
|
|
332
|
+
async function common_validateAndResolvePath(filePath) {
|
|
333
333
|
if (!filePath) throw new Error("\u6587\u4EF6\u8DEF\u5F84\u53C2\u6570\u7F3A\u5931\uFF0C\u8BF7\u63D0\u4F9B filePath \u53C2\u6570");
|
|
334
334
|
const resolved = normalizePath(filePath);
|
|
335
335
|
try {
|
|
336
336
|
await external_fs_namespaceObject.promises.access(resolved, external_fs_namespaceObject.constants.R_OK);
|
|
337
337
|
} catch (error) {
|
|
338
338
|
const osInfo = `[${process.platform}]`;
|
|
339
|
-
|
|
339
|
+
logger_logger.warn(`\u{6587}\u{4EF6}\u{4E0D}\u{5B58}\u{5728}\u{6216}\u{4E0D}\u{53EF}\u{8BFB} ${osInfo}: ${resolved}`, error);
|
|
340
340
|
throw new Error(`\u{6587}\u{4EF6}\u{4E0D}\u{5B58}\u{5728}\u{6216}\u{4E0D}\u{53EF}\u{8BFB} ${osInfo}: ${resolved}`);
|
|
341
341
|
}
|
|
342
342
|
return resolved;
|
|
@@ -3968,9 +3968,9 @@ var __webpack_exports__ = {};
|
|
|
3968
3968
|
const { filePath } = args;
|
|
3969
3969
|
if (!filePath) throw new Error("\u6587\u4EF6\u8DEF\u5F84\u53C2\u6570\u7F3A\u5931\uFF0C\u8BF7\u63D0\u4F9B filePath \u53C2\u6570");
|
|
3970
3970
|
try {
|
|
3971
|
-
const resolvedPath = await
|
|
3971
|
+
const resolvedPath = await common_validateAndResolvePath(filePath);
|
|
3972
3972
|
const buffer = await promises_namespaceObject.readFile(resolvedPath);
|
|
3973
|
-
const mdDir = external_path_default().join(
|
|
3973
|
+
const mdDir = external_path_default().join(config_getStorageDir(), 'md');
|
|
3974
3974
|
const baseName = external_path_default().basename(filePath, '.docx');
|
|
3975
3975
|
const outputDir = external_path_default().join(mdDir, baseName);
|
|
3976
3976
|
const imgsDir = external_path_default().join(outputDir, 'imgs');
|
|
@@ -3980,7 +3980,7 @@ var __webpack_exports__ = {};
|
|
|
3980
3980
|
await promises_namespaceObject.mkdir(imgsDir, {
|
|
3981
3981
|
recursive: true
|
|
3982
3982
|
});
|
|
3983
|
-
|
|
3983
|
+
logger_logger.info("\u5F00\u59CB\u8F6C\u6362Word\u6587\u6863", {
|
|
3984
3984
|
file: filePath,
|
|
3985
3985
|
outputDir,
|
|
3986
3986
|
imgsDir
|
|
@@ -4006,7 +4006,7 @@ var __webpack_exports__ = {};
|
|
|
4006
4006
|
await promises_namespaceObject.writeFile(imagePath, imageBuffer);
|
|
4007
4007
|
htmlContent = htmlContent.replace(img.fullMatch, `<img src="./imgs/${imageFileName}" />`);
|
|
4008
4008
|
} catch (err) {
|
|
4009
|
-
|
|
4009
|
+
logger_logger.error("\u56FE\u7247\u5904\u7406\u5931\u8D25", {
|
|
4010
4010
|
error: err instanceof Error ? err.message : String(err),
|
|
4011
4011
|
imageNumber: i + 1
|
|
4012
4012
|
});
|
|
@@ -4017,7 +4017,7 @@ var __webpack_exports__ = {};
|
|
|
4017
4017
|
value: htmlContent,
|
|
4018
4018
|
messages: basicResult.messages
|
|
4019
4019
|
};
|
|
4020
|
-
if (htmlResult.messages && htmlResult.messages.length > 0)
|
|
4020
|
+
if (htmlResult.messages && htmlResult.messages.length > 0) logger_logger.warn("Word\u8F6C\u6362\u8B66\u544A", {
|
|
4021
4021
|
file: filePath,
|
|
4022
4022
|
warnings: htmlResult.messages
|
|
4023
4023
|
});
|
|
@@ -4042,7 +4042,7 @@ var __webpack_exports__ = {};
|
|
|
4042
4042
|
};
|
|
4043
4043
|
} catch (error) {
|
|
4044
4044
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
4045
|
-
|
|
4045
|
+
logger_logger.error(`Word\u{8F6C}\u{6362}\u{5931}\u{8D25}: ${errorMsg}`, {
|
|
4046
4046
|
tool: "word2md",
|
|
4047
4047
|
filePath
|
|
4048
4048
|
});
|
|
@@ -4094,17 +4094,17 @@ var __webpack_exports__ = {};
|
|
|
4094
4094
|
const { preserve_formatting = true, extract_metadata = true } = options;
|
|
4095
4095
|
try {
|
|
4096
4096
|
initializeProjectRoot();
|
|
4097
|
-
const resolvedPath = await
|
|
4097
|
+
const resolvedPath = await common_validateAndResolvePath(file_path);
|
|
4098
4098
|
if (!file_path.toLowerCase().endsWith('.pdf')) throw new Error("\u6587\u4EF6\u5FC5\u987B\u662FPDF\u683C\u5F0F\uFF08.pdf\u6269\u5C55\u540D\uFF09");
|
|
4099
|
-
|
|
4099
|
+
logger_logger.info("\u5F00\u59CB\u8BFB\u53D6PDF\u6587\u4EF6", {
|
|
4100
4100
|
file: file_path
|
|
4101
4101
|
});
|
|
4102
4102
|
const dataBuffer = await promises_namespaceObject.readFile(resolvedPath);
|
|
4103
|
-
|
|
4103
|
+
logger_logger.info("\u5F00\u59CB\u89E3\u6790PDF\u5185\u5BB9");
|
|
4104
4104
|
const pdfParse = await Promise.resolve().then(__webpack_require__.bind(__webpack_require__, "pdf-parse/lib/pdf-parse.js"));
|
|
4105
4105
|
const pdfData = await pdfParse.default(dataBuffer);
|
|
4106
|
-
const mdDir = external_path_default().join(
|
|
4107
|
-
const baseName =
|
|
4106
|
+
const mdDir = external_path_default().join(config_getStorageDir(), 'md');
|
|
4107
|
+
const baseName = common_sanitizeFileName(external_path_default().basename(file_path, '.pdf'));
|
|
4108
4108
|
const outputDir = external_path_default().join(mdDir, baseName);
|
|
4109
4109
|
await promises_namespaceObject.mkdir(outputDir, {
|
|
4110
4110
|
recursive: true
|
|
@@ -4133,7 +4133,7 @@ var __webpack_exports__ = {};
|
|
|
4133
4133
|
markdownLength: markdownContent.length,
|
|
4134
4134
|
outputFile: external_path_default().resolve(fullMdPath)
|
|
4135
4135
|
};
|
|
4136
|
-
|
|
4136
|
+
logger_logger.info("PDF\u8F6C\u6362\u5B8C\u6210", stats);
|
|
4137
4137
|
return {
|
|
4138
4138
|
content: [
|
|
4139
4139
|
{
|
|
@@ -4160,7 +4160,7 @@ var __webpack_exports__ = {};
|
|
|
4160
4160
|
};
|
|
4161
4161
|
} catch (error) {
|
|
4162
4162
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
4163
|
-
|
|
4163
|
+
logger_logger.error(`PDF\u{8F6C}\u{6362}\u{5931}\u{8D25}: ${errorMsg}`, {
|
|
4164
4164
|
tool: "pdf2md",
|
|
4165
4165
|
file_path,
|
|
4166
4166
|
error: errorMsg
|
|
@@ -4181,188 +4181,7 @@ var __webpack_exports__ = {};
|
|
|
4181
4181
|
}
|
|
4182
4182
|
}
|
|
4183
4183
|
};
|
|
4184
|
-
|
|
4185
|
-
|
|
4186
|
-
\u{8BF7}\u{6309}\u{4EE5}\u{4E0B}\u{6B65}\u{9AA4}\u{8FDB}\u{884C}\u{5206}\u{6790}\u{FF1A}
|
|
4187
|
-
|
|
4188
|
-
## 1. \u{4EE3}\u{7801}\u{5E93}\u{5206}\u{6790}
|
|
4189
|
-
\u{5206}\u{6790}\u{5F53}\u{524D}\u{4EE3}\u{7801}\u{5E93}\u{FF0C}\u{603B}\u{7ED3}\u{FF1A}
|
|
4190
|
-
- \u{4E3B}\u{8981}\u{529F}\u{80FD}\u{6A21}\u{5757}\u{53CA}\u{5176}\u{5B9E}\u{73B0}
|
|
4191
|
-
- \u{5173}\u{952E}\u{4E1A}\u{52A1}\u{903B}\u{8F91}\u{6D41}\u{7A0B}
|
|
4192
|
-
- \u{91CD}\u{8981}\u{6570}\u{636E}\u{7ED3}\u{6784}
|
|
4193
|
-
- \u{6838}\u{5FC3}\u{7B97}\u{6CD5}\u{5B9E}\u{73B0}
|
|
4194
|
-
|
|
4195
|
-
## 2. \u{63A5}\u{53E3}\u{4E0E}\u{9700}\u{6C42}\u{5BF9}\u{5E94}\u{5173}\u{7CFB}\u{8868}
|
|
4196
|
-
\u{6839}\u{636E}\u{4EE3}\u{7801}\u{53D8}\u{66F4}\u{FF0C}\u{751F}\u{6210}\u{63A5}\u{53E3}\u{4E0E}\u{9700}\u{6C42}\u{5BF9}\u{5E94}\u{5173}\u{7CFB}\u{8868}\u{FF1A}
|
|
4197
|
-
|
|
4198
|
-
| \u{9700}\u{6C42}\u{529F}\u{80FD} | \u{5B9E}\u{73B0}\u{63A5}\u{53E3} | \u{8BF7}\u{6C42}\u{65B9}\u{5F0F} | URL | \u{53D8}\u{66F4}\u{72B6}\u{6001} |
|
|
4199
|
-
|---------|---------|---------|-----|----------|
|
|
4200
|
-
| [\u{9700}\u{6C42}\u{529F}\u{80FD}\u{63CF}\u{8FF0}] | [Controller.method] | [GET/POST/PUT/DELETE] | [/api/path] | [\u{65B0}\u{589E}/\u{4FEE}\u{6539}/\u{5220}\u{9664}] |
|
|
4201
|
-
|
|
4202
|
-
## 3. \u{6838}\u{5FC3}\u{903B}\u{8F91}\u{65B9}\u{6CD5}\u{8868}
|
|
4203
|
-
\u{5206}\u{6790}\u{6838}\u{5FC3}\u{4E1A}\u{52A1}\u{903B}\u{8F91}\u{65B9}\u{6CD5}\u{FF1A}
|
|
4204
|
-
|
|
4205
|
-
| \u{65B9}\u{6CD5}\u{540D}\u{79F0} | \u{6240}\u{5C5E}\u{7C7B} | \u{529F}\u{80FD}\u{8BF4}\u{660E} | \u{53D8}\u{66F4}\u{72B6}\u{6001} |
|
|
4206
|
-
|---------|-------|---------|----------|
|
|
4207
|
-
| [methodName] | [ClassName] | [\u{529F}\u{80FD}\u{63CF}\u{8FF0}] | [\u{65B0}\u{589E}/\u{4FEE}\u{6539}/\u{5220}\u{9664}] |
|
|
4208
|
-
|
|
4209
|
-
## 4. \u{524D}\u{7AEF}\u{9875}\u{9762}\u{4E0E}\u{63A5}\u{53E3}\u{5BF9}\u{5E94}\u{5173}\u{7CFB}\u{8868}
|
|
4210
|
-
\u{5206}\u{6790}\u{524D}\u{7AEF}\u{9875}\u{9762}\u{53D8}\u{66F4}\u{FF1A}
|
|
4211
|
-
|
|
4212
|
-
| \u{9875}\u{9762}\u{540D}\u{79F0} | \u{8C03}\u{7528}\u{63A5}\u{53E3} | \u{7EC4}\u{4EF6}\u{540D}\u{79F0} | \u{8DEF}\u{7531}\u{8DEF}\u{5F84} | \u{53D8}\u{66F4}\u{72B6}\u{6001} |
|
|
4213
|
-
|---------|---------|---------|---------|----------|
|
|
4214
|
-
| [\u{9875}\u{9762}\u{540D}\u{79F0}] | [Controller.method] | [ComponentName] | [/path] | [\u{65B0}\u{589E}/\u{4FEE}\u{6539}/\u{5220}\u{9664}] |
|
|
4215
|
-
|
|
4216
|
-
## 5. \u{524D}\u{7AEF}\u{6838}\u{5FC3}\u{7EC4}\u{4EF6}\u{8868}
|
|
4217
|
-
\u{5206}\u{6790}\u{524D}\u{7AEF}\u{7EC4}\u{4EF6}\u{53D8}\u{66F4}\u{FF1A}
|
|
4218
|
-
|
|
4219
|
-
| \u{7EC4}\u{4EF6}\u{540D}\u{79F0} | \u{6240}\u{5C5E}\u{9875}\u{9762} | \u{529F}\u{80FD}\u{8BF4}\u{660E} | \u{53D8}\u{66F4}\u{72B6}\u{6001} |
|
|
4220
|
-
|---------|---------|---------|----------|
|
|
4221
|
-
| [ComponentName] | [PageName] | [\u{529F}\u{80FD}\u{63CF}\u{8FF0}] | [\u{65B0}\u{589E}/\u{4FEE}\u{6539}/\u{5220}\u{9664}] |
|
|
4222
|
-
|
|
4223
|
-
## 6. \u{9700}\u{6C42}\u{5B8C}\u{6574}\u{6027}\u{68C0}\u{67E5}
|
|
4224
|
-
\u{5BF9}\u{6BD4}\u{539F}\u{59CB}\u{9700}\u{6C42}\u{FF0C}\u{68C0}\u{67E5}\u{FF1A}
|
|
4225
|
-
- \u{2705} \u{5DF2}\u{5B8C}\u{6210}\u{7684}\u{529F}\u{80FD}
|
|
4226
|
-
- \u{26A0}\u{FE0F} \u{90E8}\u{5206}\u{5B8C}\u{6210}\u{7684}\u{529F}\u{80FD}
|
|
4227
|
-
- \u{274C} \u{672A}\u{5B9E}\u{73B0}\u{7684}\u{529F}\u{80FD}
|
|
4228
|
-
- \u{1F504} \u{9700}\u{8981}\u{8FDB}\u{4E00}\u{6B65}\u{5B8C}\u{5584}\u{7684}\u{529F}\u{80FD}
|
|
4229
|
-
|
|
4230
|
-
## 7. \u{5EFA}\u{8BAE}\u{4E0E}\u{603B}\u{7ED3}
|
|
4231
|
-
- \u{5B9E}\u{73B0}\u{8D28}\u{91CF}\u{8BC4}\u{4F30}
|
|
4232
|
-
- \u{6F5C}\u{5728}\u{95EE}\u{9898}\u{8BC6}\u{522B}
|
|
4233
|
-
- \u{540E}\u{7EED}\u{5F00}\u{53D1}\u{5EFA}\u{8BAE}
|
|
4234
|
-
- \u{6D4B}\u{8BD5}\u{5EFA}\u{8BAE}
|
|
4235
|
-
|
|
4236
|
-
\u{8BF7}\u{786E}\u{4FDD}\u{6240}\u{6709}\u{8868}\u{683C}\u{4E0A}\u{4E0B}\u{5BF9}\u{9F50}\u{FF0C}\u{5185}\u{5BB9}\u{8BE6}\u{5B9E}\u{51C6}\u{786E}\u{3002}`;
|
|
4237
|
-
objectType({
|
|
4238
|
-
baseBranch: stringType().default('main').describe("\u57FA\u51C6\u5206\u652F\u540D\u79F0\uFF0C\u7528\u4E8E\u5BF9\u6BD4\u53D8\u66F4"),
|
|
4239
|
-
requirementFile: stringType().optional().describe("\u9700\u6C42\u6587\u6863\u6587\u4EF6\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09"),
|
|
4240
|
-
includeUncommitted: booleanType().default(true).describe("\u662F\u5426\u5305\u542B\u672A\u63D0\u4EA4\u7684\u53D8\u66F4"),
|
|
4241
|
-
outputFormat: enumType([
|
|
4242
|
-
'markdown',
|
|
4243
|
-
'json'
|
|
4244
|
-
]).default('markdown').describe("\u8F93\u51FA\u683C\u5F0F")
|
|
4245
|
-
});
|
|
4246
|
-
const changeSummarizer = {
|
|
4247
|
-
name: "\u4EE3\u7801\u53D8\u66F4\u5206\u6790\u667A\u80FD\u4F53",
|
|
4248
|
-
description: "\u5206\u6790\u4EE3\u7801\u5E76\u4E0E\u9700\u6C42\u8FDB\u884C\u5BF9\u6BD4\uFF0C\u786E\u4FDD\u5B9E\u73B0\u5B8C\u6574\u6027",
|
|
4249
|
-
inputSchema: {
|
|
4250
|
-
baseBranch: stringType().default('main').describe("\u57FA\u51C6\u5206\u652F\u540D\u79F0\uFF0C\u7528\u4E8E\u5BF9\u6BD4\u53D8\u66F4"),
|
|
4251
|
-
requirementFile: stringType().optional().describe("\u9700\u6C42\u6587\u6863\u6587\u4EF6\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09"),
|
|
4252
|
-
includeUncommitted: booleanType().default(true).describe("\u662F\u5426\u5305\u542B\u672A\u63D0\u4EA4\u7684\u53D8\u66F4"),
|
|
4253
|
-
outputFormat: enumType([
|
|
4254
|
-
'markdown',
|
|
4255
|
-
'json'
|
|
4256
|
-
]).default('markdown').describe("\u8F93\u51FA\u683C\u5F0F")
|
|
4257
|
-
},
|
|
4258
|
-
handler: async (args)=>{
|
|
4259
|
-
try {
|
|
4260
|
-
initializeProjectRoot();
|
|
4261
|
-
console.log('[CHANGE-SUMMARIZER DEBUG] args:', JSON.stringify(args, null, 2));
|
|
4262
|
-
console.log('[CHANGE-SUMMARIZER DEBUG] args.baseBranch:', args.baseBranch);
|
|
4263
|
-
console.log('[CHANGE-SUMMARIZER DEBUG] args.outputFormat:', args.outputFormat);
|
|
4264
|
-
logger.info({
|
|
4265
|
-
module: 'change-summarizer',
|
|
4266
|
-
message: 'Starting code analysis',
|
|
4267
|
-
args
|
|
4268
|
-
});
|
|
4269
|
-
let requirementContent = '';
|
|
4270
|
-
if (args.requirementFile && external_fs_default().existsSync(args.requirementFile)) requirementContent = external_fs_default().readFileSync(args.requirementFile, 'utf-8');
|
|
4271
|
-
const analysisPrompt = buildAnalysisPrompt(requirementContent);
|
|
4272
|
-
const outputPath = await saveAnalysisResult(analysisPrompt, args.outputFormat);
|
|
4273
|
-
logger.info({
|
|
4274
|
-
module: 'change-summarizer',
|
|
4275
|
-
message: 'Code analysis completed',
|
|
4276
|
-
outputPath
|
|
4277
|
-
});
|
|
4278
|
-
return {
|
|
4279
|
-
content: [
|
|
4280
|
-
{
|
|
4281
|
-
type: "text",
|
|
4282
|
-
text: JSON.stringify({
|
|
4283
|
-
success: true,
|
|
4284
|
-
message: "\u4EE3\u7801\u53D8\u66F4\u5206\u6790\u667A\u80FD\u4F53\u6D4B\u8BD5\u6210\u529F",
|
|
4285
|
-
data: {
|
|
4286
|
-
baseBranch: args.baseBranch || 'main',
|
|
4287
|
-
outputFormat: args.outputFormat || 'markdown'
|
|
4288
|
-
}
|
|
4289
|
-
})
|
|
4290
|
-
}
|
|
4291
|
-
]
|
|
4292
|
-
};
|
|
4293
|
-
} catch (error) {
|
|
4294
|
-
logger.error({
|
|
4295
|
-
module: 'change-summarizer',
|
|
4296
|
-
message: 'Code analysis failed',
|
|
4297
|
-
error: error instanceof Error ? error.message : String(error)
|
|
4298
|
-
});
|
|
4299
|
-
return {
|
|
4300
|
-
content: [
|
|
4301
|
-
{
|
|
4302
|
-
type: "text",
|
|
4303
|
-
text: JSON.stringify({
|
|
4304
|
-
success: false,
|
|
4305
|
-
message: `\u{4EE3}\u{7801}\u{53D8}\u{66F4}\u{5206}\u{6790}\u{667A}\u{80FD}\u{4F53}\u{6267}\u{884C}\u{5931}\u{8D25}: ${error instanceof Error ? error.message : String(error)}`,
|
|
4306
|
-
data: null
|
|
4307
|
-
})
|
|
4308
|
-
}
|
|
4309
|
-
],
|
|
4310
|
-
isError: true
|
|
4311
|
-
};
|
|
4312
|
-
}
|
|
4313
|
-
}
|
|
4314
|
-
};
|
|
4315
|
-
changeSummarizer.handler = changeSummarizer.handler;
|
|
4316
|
-
function buildAnalysisPrompt(requirementContent) {
|
|
4317
|
-
const changesSection = `
|
|
4318
|
-
## \u{4EE3}\u{7801}\u{4E0A}\u{4E0B}\u{6587}\u{5206}\u{6790}
|
|
4319
|
-
|
|
4320
|
-
\u{8BF7}\u{57FA}\u{4E8E}\u{4EE5}\u{4E0B}\u{5185}\u{5BB9}\u{8FDB}\u{884C}\u{5206}\u{6790}\u{FF1A}
|
|
4321
|
-
- \u{5F53}\u{524D}\u{4EE3}\u{7801}\u{5E93}\u{7684}\u{6574}\u{4F53}\u{7ED3}\u{6784}
|
|
4322
|
-
- \u{4E3B}\u{8981}\u{529F}\u{80FD}\u{6A21}\u{5757}\u{7684}\u{5B9E}\u{73B0}
|
|
4323
|
-
- \u{5173}\u{952E}\u{4E1A}\u{52A1}\u{903B}\u{8F91}
|
|
4324
|
-
- \u{63A5}\u{53E3}\u{5B9A}\u{4E49}\u{4E0E}\u{5B9E}\u{73B0}
|
|
4325
|
-
- \u{524D}\u{7AEF}\u{7EC4}\u{4EF6}\u{4E0E}\u{9875}\u{9762}
|
|
4326
|
-
`;
|
|
4327
|
-
const requirementSection = requirementContent ? `
|
|
4328
|
-
## \u{9700}\u{6C42}\u{6587}\u{6863}\u{5185}\u{5BB9}
|
|
4329
|
-
${requirementContent}
|
|
4330
|
-
` : `
|
|
4331
|
-
## \u{9700}\u{6C42}\u{6587}\u{6863}
|
|
4332
|
-
\u{672A}\u{63D0}\u{4F9B}\u{9700}\u{6C42}\u{6587}\u{6863}\u{FF0C}\u{8BF7}\u{57FA}\u{4E8E}\u{4EE3}\u{7801}\u{53D8}\u{66F4}\u{8FDB}\u{884C}\u{5206}\u{6790}\u{3002}
|
|
4333
|
-
`;
|
|
4334
|
-
return `
|
|
4335
|
-
${changeAnalysisPrompt}
|
|
4336
|
-
|
|
4337
|
-
${changesSection}
|
|
4338
|
-
|
|
4339
|
-
${requirementSection}
|
|
4340
|
-
|
|
4341
|
-
\u{8BF7}\u{57FA}\u{4E8E}\u{4EE5}\u{4E0A}\u{4FE1}\u{606F}\u{8FDB}\u{884C}\u{8BE6}\u{7EC6}\u{5206}\u{6790}\u{3002}
|
|
4342
|
-
`;
|
|
4343
|
-
}
|
|
4344
|
-
async function saveAnalysisResult(prompt, format) {
|
|
4345
|
-
const storageDir = getStorageDir();
|
|
4346
|
-
if (!storageDir || 'string' != typeof storageDir) throw new Error("\u5B58\u50A8\u76EE\u5F55\u914D\u7F6E\u9519\u8BEF\uFF0C\u65E0\u6CD5\u4FDD\u5B58\u5206\u6790\u7ED3\u679C");
|
|
4347
|
-
const outputDir = external_path_default().join(storageDir, 'change-analysis');
|
|
4348
|
-
if (!external_fs_default().existsSync(outputDir)) external_fs_default().mkdirSync(outputDir, {
|
|
4349
|
-
recursive: true
|
|
4350
|
-
});
|
|
4351
|
-
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
4352
|
-
const filename = `change-analysis-${timestamp}.${'json' === format ? 'json' : 'md'}`;
|
|
4353
|
-
const outputPath = external_path_default().join(outputDir, filename);
|
|
4354
|
-
if ('json' === format) {
|
|
4355
|
-
const jsonData = {
|
|
4356
|
-
timestamp: new Date().toISOString(),
|
|
4357
|
-
prompt,
|
|
4358
|
-
type: 'change-analysis'
|
|
4359
|
-
};
|
|
4360
|
-
external_fs_default().writeFileSync(outputPath, JSON.stringify(jsonData, null, 2), 'utf-8');
|
|
4361
|
-
} else external_fs_default().writeFileSync(outputPath, prompt, 'utf-8');
|
|
4362
|
-
return outputPath;
|
|
4363
|
-
}
|
|
4364
|
-
const external_sharp_namespaceObject = require("sharp");
|
|
4365
|
-
var external_sharp_default = /*#__PURE__*/ __webpack_require__.n(external_sharp_namespaceObject);
|
|
4184
|
+
require("aico-pack");
|
|
4366
4185
|
class OpenAIService {
|
|
4367
4186
|
qwenConfig = {
|
|
4368
4187
|
apiKey: 'sk-95b0bc60b7464bbbafd64edc2f5bab14',
|
|
@@ -4683,7 +4502,623 @@ ${requirementSection}
|
|
|
4683
4502
|
}
|
|
4684
4503
|
}
|
|
4685
4504
|
}
|
|
4686
|
-
const
|
|
4505
|
+
const openai_openAIService = new OpenAIService();
|
|
4506
|
+
objectType({
|
|
4507
|
+
input_type: enumType([
|
|
4508
|
+
"text",
|
|
4509
|
+
"md_file"
|
|
4510
|
+
]).describe("\u8F93\u5165\u7C7B\u578B\uFF1A\u76F4\u63A5\u6587\u672C\u8F93\u5165\u6216\u5F15\u7528\u5DF2\u751F\u6210\u7684MD\u6587\u4EF6"),
|
|
4511
|
+
content: stringType().optional().describe("\u5F53input_type\u4E3Atext\u65F6\uFF0C\u76F4\u63A5\u8F93\u5165\u7684\u9700\u6C42\u5185\u5BB9"),
|
|
4512
|
+
md_file_path: stringType().optional().describe("\u5F53input_type\u4E3Amd_file\u65F6\uFF0C\u8981\u5206\u6790\u7684MD\u6587\u4EF6\u8DEF\u5F84"),
|
|
4513
|
+
feature_name: stringType().describe("\u529F\u80FD\u540D\u79F0\uFF0C\u7528\u4E8E\u751F\u6210\u8F93\u51FA\u6587\u4EF6\u540D"),
|
|
4514
|
+
custom_prompt: stringType().optional().describe("\u81EA\u5B9A\u4E49\u63D0\u793A\u8BCD\uFF0C\u7528\u4E8E\u6307\u5BFCAI\u751F\u6210\u7279\u5B9A\u98CE\u683C\u7684\u9700\u6C42\u6587\u6863"),
|
|
4515
|
+
analysis_depth: enumType([
|
|
4516
|
+
"basic",
|
|
4517
|
+
"detailed",
|
|
4518
|
+
"comprehensive"
|
|
4519
|
+
]).default("detailed").describe("\u5206\u6790\u6DF1\u5EA6\uFF1A\u57FA\u7840\u3001\u8BE6\u7EC6\u3001\u7EFC\u5408"),
|
|
4520
|
+
use_streaming: booleanType().default(false).describe("\u662F\u5426\u4F7F\u7528\u6D41\u5F0F\u5904\u7406\uFF08\u9002\u7528\u4E8E\u5927\u6587\u4EF6\uFF09"),
|
|
4521
|
+
chunk_size: numberType().min(10).max(1000).default(100).describe("\u5206\u5757\u5927\u5C0F\uFF08\u4EC5\u5728use_streaming\u4E3Atrue\u65F6\u6709\u6548\uFF09")
|
|
4522
|
+
}).refine((data)=>{
|
|
4523
|
+
if ("text" === data.input_type) return data.content && data.content.trim().length > 0;
|
|
4524
|
+
if ("md_file" === data.input_type) return data.md_file_path && data.md_file_path.trim().length > 0;
|
|
4525
|
+
return false;
|
|
4526
|
+
}, {
|
|
4527
|
+
message: "\u5F53input_type\u4E3Atext\u65F6content\u5FC5\u586B\uFF0C\u5F53input_type\u4E3Amd_file\u65F6md_file_path\u5FC5\u586B"
|
|
4528
|
+
});
|
|
4529
|
+
const requirementAnalyzerTool = {
|
|
4530
|
+
name: "\u9700\u6C42\u62A5\u544A\u751F\u6210\u667A\u80FD\u4F53",
|
|
4531
|
+
description: "\u667A\u80FD\u5206\u6790\u9700\u6C42\u5E76\u751F\u6210\u7EDF\u4E00\u7684\u6280\u672F\u6587\u6863\uFF0C\u652F\u6301\u9879\u76EE\u60C5\u51B5\u611F\u77E5\u548C\u7CBE\u786E\u6A21\u677F\u5339\u914D",
|
|
4532
|
+
inputSchema: {
|
|
4533
|
+
input_type: enumType([
|
|
4534
|
+
"text",
|
|
4535
|
+
"md_file"
|
|
4536
|
+
]).describe("\u8F93\u5165\u7C7B\u578B\uFF1A\u76F4\u63A5\u6587\u672C\u8F93\u5165\u6216\u5F15\u7528\u5DF2\u751F\u6210\u7684MD\u6587\u4EF6"),
|
|
4537
|
+
content: stringType().optional().describe("\u5F53input_type\u4E3Atext\u65F6\uFF0C\u76F4\u63A5\u8F93\u5165\u7684\u9700\u6C42\u5185\u5BB9"),
|
|
4538
|
+
md_file_path: stringType().optional().describe("\u5F53input_type\u4E3Amd_file\u65F6\uFF0C\u8981\u5206\u6790\u7684MD\u6587\u4EF6\u8DEF\u5F84"),
|
|
4539
|
+
feature_name: stringType().describe("\u529F\u80FD\u540D\u79F0\uFF0C\u7528\u4E8E\u751F\u6210\u8F93\u51FA\u6587\u4EF6\u540D"),
|
|
4540
|
+
custom_prompt: stringType().optional().describe("\u81EA\u5B9A\u4E49\u63D0\u793A\u8BCD\uFF0C\u7528\u4E8E\u6307\u5BFCAI\u751F\u6210\u7279\u5B9A\u98CE\u683C\u7684\u9700\u6C42\u6587\u6863"),
|
|
4541
|
+
analysis_depth: enumType([
|
|
4542
|
+
"basic",
|
|
4543
|
+
"detailed",
|
|
4544
|
+
"comprehensive"
|
|
4545
|
+
]).default("detailed").describe("\u5206\u6790\u6DF1\u5EA6\uFF1A\u57FA\u7840\u3001\u8BE6\u7EC6\u3001\u7EFC\u5408"),
|
|
4546
|
+
use_streaming: booleanType().default(false).describe("\u662F\u5426\u4F7F\u7528\u6D41\u5F0F\u5904\u7406\uFF08\u9002\u7528\u4E8E\u5927\u6587\u4EF6\uFF09"),
|
|
4547
|
+
chunk_size: numberType().min(10).max(1000).default(100).describe("\u5206\u5757\u5927\u5C0F\uFF08\u4EC5\u5728use_streaming\u4E3Atrue\u65F6\u6709\u6548\uFF09")
|
|
4548
|
+
},
|
|
4549
|
+
handler: async (args)=>{
|
|
4550
|
+
try {
|
|
4551
|
+
const { input_type, content, md_file_path, feature_name, custom_prompt, analysis_depth, use_streaming, chunk_size } = args;
|
|
4552
|
+
const systemGuidance = `
|
|
4553
|
+
# \u{7CFB}\u{7EDF}\u{5316}\u{9700}\u{6C42}\u{5206}\u{6790}\u{667A}\u{80FD}\u{4F53}\u{6267}\u{884C}\u{6D41}\u{7A0B}
|
|
4554
|
+
|
|
4555
|
+
## \u{8F93}\u{5165}\u{53C2}\u{6570}
|
|
4556
|
+
- \u{8F93}\u{5165}\u{7C7B}\u{578B}: ${input_type}
|
|
4557
|
+
- \u{529F}\u{80FD}\u{540D}\u{79F0}: ${feature_name}
|
|
4558
|
+
- \u{5206}\u{6790}\u{6DF1}\u{5EA6}: ${analysis_depth}
|
|
4559
|
+
- \u{6D41}\u{5F0F}\u{5904}\u{7406}: ${use_streaming}
|
|
4560
|
+
|
|
4561
|
+
## TODO\u{6E05}\u{5355}\u{6807}\u{51C6}\u{6D41}\u{7A0B}
|
|
4562
|
+
|
|
4563
|
+
### 1. \u{9700}\u{6C42}\u{5206}\u{6790}
|
|
4564
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
4565
|
+
- \u{5145}\u{5206}\u{641C}\u{7D22}\u{4E0E}\u{7528}\u{6237}\u{8F93}\u{5165}\u{5185}\u{5BB9}\u{76F8}\u{5173}\u{7684}\u{8D44}\u{6E90}
|
|
4566
|
+
- \u{660E}\u{786E}\u{7528}\u{6237}\u{7684}\u{6838}\u{5FC3}\u{95EE}\u{9898}\u{3001}\u{9690}\u{542B}\u{9700}\u{6C42}\u{548C}\u{6700}\u{7EC8}\u{76EE}\u{6807}
|
|
4567
|
+
- \u{56F4}\u{7ED5}\u{95EE}\u{9898}\u{FF0C}\u{5FEB}\u{901F}\u{6784}\u{5EFA}\u{4E00}\u{4E2A}\u{77E5}\u{8BC6}\u{6846}\u{67B6}\u{3002}\u{786E}\u{5B9A}\u{56DE}\u{7B54}\u{5E94}\u{5305}\u{542B}\u{7684}\u{5173}\u{952E}\u{6982}\u{5FF5}\u{3001}\u{4E0A}\u{4E0B}\u{6587}\u{3001}\u{6B63}\u{53CD}\u{8BBA}\u{70B9}\u{548C}\u{6F5C}\u{5728}\u{7684}\u{5EF6}\u{4F38}\u{9886}\u{57DF}
|
|
4568
|
+
- \u{6839}\u{636E}\u{5145}\u{5206}\u{4E86}\u{89E3}\u{5230}\u{7684}\u{4FE1}\u{606F}\u{FF0C}\u{6E05}\u{6670}\u{5B8C}\u{6574}\u{7684}\u{590D}\u{8FF0}\u{7528}\u{6237}\u{9700}\u{6C42}\u{FF0C}\u{5E76}\u{7ED9}\u{51FA}\u{4E00}\u{4E2A}\u{9AD8}\u{5EA6}\u{6D53}\u{7F29}\u{7684}\u{3001}\u{7ED3}\u{8BBA}\u{6027}\u{7684}\u{6838}\u{5FC3}\u{89C2}\u{70B9}
|
|
4569
|
+
|
|
4570
|
+
**\u{8F93}\u{5165}\u{5185}\u{5BB9}\u{5904}\u{7406}\u{FF1A}**
|
|
4571
|
+
${'text' === input_type ? `
|
|
4572
|
+
**\u{76F4}\u{63A5}\u{6587}\u{672C}\u{8F93}\u{5165}\u{FF1A}**
|
|
4573
|
+
\`\`\`
|
|
4574
|
+
${content}
|
|
4575
|
+
\`\`\`
|
|
4576
|
+
` : `
|
|
4577
|
+
**MD\u{6587}\u{4EF6}\u{8DEF}\u{5F84}\u{FF1A}** ${md_file_path}
|
|
4578
|
+
**\u{4F7F}\u{7528}\u{5DE5}\u{5177}\u{FF1A}** readFile \u{8BFB}\u{53D6}\u{6587}\u{4EF6}\u{5185}\u{5BB9}
|
|
4579
|
+
`}
|
|
4580
|
+
|
|
4581
|
+
**\u{4F7F}\u{7528}\u{5DE5}\u{5177}\u{FF1A}**
|
|
4582
|
+
${'md_file' === input_type ? `
|
|
4583
|
+
1. readFile("${md_file_path}") \u{8BFB}\u{53D6}MD\u{6587}\u{4EF6}\u{5185}\u{5BB9}
|
|
4584
|
+
2. \u{5206}\u{6790}\u{6587}\u{4EF6}\u{7ED3}\u{6784}\u{548C}\u{5185}\u{5BB9}\u{8981}\u{70B9}
|
|
4585
|
+
` : `
|
|
4586
|
+
1. \u{76F4}\u{63A5}\u{5206}\u{6790}\u{8F93}\u{5165}\u{7684}\u{6587}\u{672C}\u{5185}\u{5BB9}
|
|
4587
|
+
2. \u{8BC6}\u{522B}\u{5173}\u{952E}\u{9700}\u{6C42}\u{70B9}\u{548C}\u{6280}\u{672F}\u{8981}\u{6C42}
|
|
4588
|
+
`}
|
|
4589
|
+
|
|
4590
|
+
### 2. \u{573A}\u{666F}\u{8BC6}\u{522B}
|
|
4591
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
4592
|
+
- \u{57FA}\u{4E8E}\u{9700}\u{6C42}\u{5206}\u{6790}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{627E}\u{51FA}\u{4E3B}\u{8981}\u{77DB}\u{76FE}\u{70B9}\u{FF0C}\u{5B9A}\u{4F4D}\u{6838}\u{5FC3}\u{95EE}\u{9898}\u{8282}\u{70B9}
|
|
4593
|
+
- \u{4ECE}\u{7CFB}\u{7EDF}\u{5C42}\u{9762}\u{62C6}\u{89E3}\u{4E3A}\u{53EF}\u{6267}\u{884C}\u{5B50}\u{4EFB}\u{52A1}\u{FF0C}\u{786E}\u{4FDD}\u{903B}\u{8F91}\u{94FE}\u{6761}\u{6E05}\u{6670}\u{FF0C}\u{4E0A}\u{4E0B}\u{6587}\u{4FE1}\u{606F}\u{5145}\u{8DB3}
|
|
4594
|
+
|
|
4595
|
+
**\u{5206}\u{6790}\u{7EF4}\u{5EA6}\u{FF1A}**
|
|
4596
|
+
1. **\u{529F}\u{80FD}\u{573A}\u{666F}\u{8BC6}\u{522B}**
|
|
4597
|
+
- \u{6838}\u{5FC3}\u{529F}\u{80FD}\u{6A21}\u{5757}
|
|
4598
|
+
- \u{7528}\u{6237}\u{4EA4}\u{4E92}\u{573A}\u{666F}
|
|
4599
|
+
- \u{6570}\u{636E}\u{6D41}\u{8F6C}\u{573A}\u{666F}
|
|
4600
|
+
|
|
4601
|
+
2. **\u{6280}\u{672F}\u{573A}\u{666F}\u{8BC6}\u{522B}**
|
|
4602
|
+
- \u{6280}\u{672F}\u{6808}\u{8981}\u{6C42}
|
|
4603
|
+
- \u{67B6}\u{6784}\u{7EA6}\u{675F}
|
|
4604
|
+
- \u{6027}\u{80FD}\u{8981}\u{6C42}
|
|
4605
|
+
|
|
4606
|
+
3. **\u{4E1A}\u{52A1}\u{573A}\u{666F}\u{8BC6}\u{522B}**
|
|
4607
|
+
- \u{4E1A}\u{52A1}\u{6D41}\u{7A0B}
|
|
4608
|
+
- \u{7528}\u{6237}\u{89D2}\u{8272}
|
|
4609
|
+
- \u{4F7F}\u{7528}\u{573A}\u{666F}
|
|
4610
|
+
|
|
4611
|
+
### 3. \u{65B9}\u{6848}\u{8BBE}\u{8BA1}
|
|
4612
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
4613
|
+
- \u{65B9}\u{6848}\u{8BBE}\u{8BA1}\u{4F18}\u{5148}\u{590D}\u{7528}\u{73B0}\u{6709}\u{65B9}\u{6848}\u{FF0C}\u{7EC4}\u{4EF6}\u{FF0C}\u{5DE5}\u{5177}\u{65B9}\u{6CD5}\u{7B49}\u{FF0C}\u{80FD}\u{590D}\u{7528}\u{7684}\u{5C3D}\u{53EF}\u{80FD}\u{590D}\u{7528}
|
|
4614
|
+
- \u{626B}\u{63CF}\u{9879}\u{76EE}\u{4E2D}\u{4F7F}\u{7528}\u{7684}\u{6D4B}\u{8BD5}\u{6846}\u{67B6}\u{548C}\u{811A}\u{672C}\u{FF0C}\u{751F}\u{6210}\u{672C}\u{6B21}\u{9700}\u{6C42}\u{7684}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{5982}\u{679C}\u{4E0D}\u{5B58}\u{5728}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{5219}\u{7F16}\u{5199}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5230}.aico/tests\u{4E0B}\u{9762}
|
|
4615
|
+
|
|
4616
|
+
**\u{8BBE}\u{8BA1}\u{5185}\u{5BB9}\u{FF1A}**
|
|
4617
|
+
1. **\u{6280}\u{672F}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}**
|
|
4618
|
+
- \u{67B6}\u{6784}\u{6A21}\u{5F0F}\u{9009}\u{62E9}
|
|
4619
|
+
- \u{6280}\u{672F}\u{6808}\u{786E}\u{5B9A}
|
|
4620
|
+
- \u{6838}\u{5FC3}\u{7EC4}\u{4EF6}\u{8BBE}\u{8BA1}
|
|
4621
|
+
|
|
4622
|
+
2. **\u{5B9E}\u{73B0}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}**
|
|
4623
|
+
- \u{6587}\u{4EF6}\u{7ED3}\u{6784}\u{89C4}\u{5212}
|
|
4624
|
+
- \u{6A21}\u{5757}\u{5212}\u{5206}\u{7B56}\u{7565}
|
|
4625
|
+
- \u{63A5}\u{53E3}\u{8BBE}\u{8BA1}\u{65B9}\u{6848}
|
|
4626
|
+
|
|
4627
|
+
3. **\u{6D4B}\u{8BD5}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}**
|
|
4628
|
+
- \u{6D4B}\u{8BD5}\u{7B56}\u{7565}\u{5236}\u{5B9A}
|
|
4629
|
+
- \u{6D4B}\u{8BD5}\u{7528}\u{4F8B}\u{8BBE}\u{8BA1}
|
|
4630
|
+
- \u{6D4B}\u{8BD5}\u{73AF}\u{5883}\u{51C6}\u{5907}
|
|
4631
|
+
|
|
4632
|
+
### 4. \u{6267}\u{884C}\u{9A8C}\u{8BC1}
|
|
4633
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
4634
|
+
- \u{6309}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}\u{7684}\u{7ED3}\u{679C}\u{8F93}\u{51FA}\u{4EE3}\u{7801}
|
|
4635
|
+
- \u{5982}\u{679C}\u{6709}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{8FD0}\u{884C}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5E76}\u{4FEE}\u{6B63}\u{76F4}\u{5230}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5168}\u{90E8}\u{901A}\u{8FC7}
|
|
4636
|
+
|
|
4637
|
+
**\u{9A8C}\u{8BC1}\u{5185}\u{5BB9}\u{FF1A}**
|
|
4638
|
+
1. **\u{9700}\u{6C42}\u{6587}\u{6863}\u{751F}\u{6210}**
|
|
4639
|
+
- \u{57FA}\u{4E8E}\u{5206}\u{6790}\u{7ED3}\u{679C}\u{751F}\u{6210}\u{7ED3}\u{6784}\u{5316}\u{6587}\u{6863}
|
|
4640
|
+
- \u{786E}\u{4FDD}\u{6587}\u{6863}\u{5B8C}\u{6574}\u{6027}\u{548C}\u{51C6}\u{786E}\u{6027}
|
|
4641
|
+
- \u{8F93}\u{51FA}\u{6807}\u{51C6}\u{683C}\u{5F0F}\u{9700}\u{6C42}\u{62A5}\u{544A}
|
|
4642
|
+
|
|
4643
|
+
2. **\u{8D28}\u{91CF}\u{9A8C}\u{8BC1}**
|
|
4644
|
+
- \u{6587}\u{6863}\u{7ED3}\u{6784}\u{68C0}\u{67E5}
|
|
4645
|
+
- \u{5185}\u{5BB9}\u{5B8C}\u{6574}\u{6027}\u{9A8C}\u{8BC1}
|
|
4646
|
+
- \u{6280}\u{672F}\u{53EF}\u{884C}\u{6027}\u{8BC4}\u{4F30}
|
|
4647
|
+
|
|
4648
|
+
### 5. \u{603B}\u{7ED3}\u{53CD}\u{9988}
|
|
4649
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
4650
|
+
- \u{8F93}\u{51FA}\u{6700}\u{7EC8}\u{6267}\u{884C}\u{7684}\u{65B9}\u{6848}
|
|
4651
|
+
- \u{66F4}\u{65B0}TODO\u{6E05}\u{5355}
|
|
4652
|
+
- \u{6839}\u{636E}\u{60C5}\u{51B5}\u{63D0}\u{4F9B}\u{4E00}\u{4E9B}\u{524D}\u{77BB}\u{6027}\u{7684}\u{601D}\u{8003}\u{6216}\u{5EFA}\u{8BAE}
|
|
4653
|
+
|
|
4654
|
+
**\u{8F93}\u{51FA}\u{5185}\u{5BB9}\u{FF1A}**
|
|
4655
|
+
1. **\u{9700}\u{6C42}\u{5206}\u{6790}\u{62A5}\u{544A}**
|
|
4656
|
+
- \u{9700}\u{6C42}\u{6982}\u{8FF0}
|
|
4657
|
+
- \u{529F}\u{80FD}\u{6A21}\u{5757}\u{5206}\u{6790}
|
|
4658
|
+
- \u{6280}\u{672F}\u{65B9}\u{6848}\u{5EFA}\u{8BAE}
|
|
4659
|
+
- \u{5B9E}\u{65BD}\u{8DEF}\u{5F84}\u{89C4}\u{5212}
|
|
4660
|
+
|
|
4661
|
+
2. **\u{9879}\u{76EE}\u{5EFA}\u{8BAE}**
|
|
4662
|
+
- \u{98CE}\u{9669}\u{8BC4}\u{4F30}
|
|
4663
|
+
- \u{8D44}\u{6E90}\u{9700}\u{6C42}
|
|
4664
|
+
- \u{65F6}\u{95F4}\u{89C4}\u{5212}
|
|
4665
|
+
- \u{8D28}\u{91CF}\u{4FDD}\u{8BC1}\u{63AA}\u{65BD}
|
|
4666
|
+
|
|
4667
|
+
## \u{81EA}\u{5B9A}\u{4E49}\u{63D0}\u{793A}\u{8BCD}\u{5904}\u{7406}
|
|
4668
|
+
${custom_prompt ? `
|
|
4669
|
+
**\u{7528}\u{6237}\u{81EA}\u{5B9A}\u{4E49}\u{63D0}\u{793A}\u{8BCD}\u{FF1A}**
|
|
4670
|
+
\`\`\`
|
|
4671
|
+
${custom_prompt}
|
|
4672
|
+
\`\`\`
|
|
4673
|
+
|
|
4674
|
+
**\u{5904}\u{7406}\u{65B9}\u{5F0F}\u{FF1A}**
|
|
4675
|
+
- \u{5C06}\u{81EA}\u{5B9A}\u{4E49}\u{63D0}\u{793A}\u{8BCD}\u{878D}\u{5165}\u{5230}\u{6807}\u{51C6}\u{5206}\u{6790}\u{6D41}\u{7A0B}\u{4E2D}
|
|
4676
|
+
- \u{786E}\u{4FDD}\u{81EA}\u{5B9A}\u{4E49}\u{8981}\u{6C42}\u{4E0E}\u{7CFB}\u{7EDF}\u{5316}\u{6D41}\u{7A0B}\u{76F8}\u{7ED3}\u{5408}
|
|
4677
|
+
- \u{5728}\u{751F}\u{6210}\u{6587}\u{6863}\u{65F6}\u{4F53}\u{73B0}\u{7528}\u{6237}\u{7684}\u{7279}\u{5B9A}\u{9700}\u{6C42}
|
|
4678
|
+
` : `
|
|
4679
|
+
**\u{4F7F}\u{7528}\u{9ED8}\u{8BA4}\u{5206}\u{6790}\u{6A21}\u{677F}**
|
|
4680
|
+
- \u{6309}\u{7167}\u{6807}\u{51C6}\u{9700}\u{6C42}\u{5206}\u{6790}\u{6D41}\u{7A0B}\u{6267}\u{884C}
|
|
4681
|
+
- \u{751F}\u{6210}\u{901A}\u{7528}\u{683C}\u{5F0F}\u{7684}\u{9700}\u{6C42}\u{6587}\u{6863}
|
|
4682
|
+
- \u{786E}\u{4FDD}\u{5206}\u{6790}\u{7684}\u{5168}\u{9762}\u{6027}\u{548C}\u{7CFB}\u{7EDF}\u{6027}
|
|
4683
|
+
`}
|
|
4684
|
+
|
|
4685
|
+
## \u{5206}\u{6790}\u{6DF1}\u{5EA6}\u{63A7}\u{5236}
|
|
4686
|
+
**\u{5F53}\u{524D}\u{8BBE}\u{7F6E}\u{FF1A}** ${analysis_depth}
|
|
4687
|
+
- **basic**: \u{57FA}\u{7840}\u{5206}\u{6790}\u{FF0C}\u{91CD}\u{70B9}\u{5173}\u{6CE8}\u{6838}\u{5FC3}\u{529F}\u{80FD}
|
|
4688
|
+
- **detailed**: \u{8BE6}\u{7EC6}\u{5206}\u{6790}\u{FF0C}\u{5305}\u{542B}\u{6280}\u{672F}\u{7EC6}\u{8282}\u{548C}\u{5B9E}\u{73B0}\u{65B9}\u{6848}
|
|
4689
|
+
- **comprehensive**: \u{7EFC}\u{5408}\u{5206}\u{6790}\u{FF0C}\u{5168}\u{9762}\u{8986}\u{76D6}\u{6240}\u{6709}\u{65B9}\u{9762}
|
|
4690
|
+
|
|
4691
|
+
## \u{6D41}\u{5F0F}\u{5904}\u{7406}\u{914D}\u{7F6E}
|
|
4692
|
+
${use_streaming ? `
|
|
4693
|
+
**\u{542F}\u{7528}\u{6D41}\u{5F0F}\u{5904}\u{7406}**
|
|
4694
|
+
- \u{5206}\u{5757}\u{5927}\u{5C0F}: ${chunk_size}
|
|
4695
|
+
- \u{9002}\u{7528}\u{4E8E}\u{5927}\u{6587}\u{4EF6}\u{5904}\u{7406}
|
|
4696
|
+
- \u{652F}\u{6301}\u{589E}\u{91CF}\u{5206}\u{6790}\u{548C}\u{8F93}\u{51FA}
|
|
4697
|
+
` : `
|
|
4698
|
+
**\u{6807}\u{51C6}\u{5904}\u{7406}\u{6A21}\u{5F0F}**
|
|
4699
|
+
- \u{4E00}\u{6B21}\u{6027}\u{5B8C}\u{6574}\u{5206}\u{6790}
|
|
4700
|
+
- \u{9002}\u{7528}\u{4E8E}\u{4E2D}\u{5C0F}\u{578B}\u{9700}\u{6C42}
|
|
4701
|
+
- \u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{5206}\u{6790}\u{7ED3}\u{679C}
|
|
4702
|
+
`}
|
|
4703
|
+
|
|
4704
|
+
---
|
|
4705
|
+
|
|
4706
|
+
**\u{6267}\u{884C}\u{539F}\u{5219}\u{FF1A}**
|
|
4707
|
+
- \u{521B}\u{5EFA}\u{5E76}\u{6301}\u{7EED}\u{66F4}\u{65B0}TODO\u{6E05}\u{5355}
|
|
4708
|
+
- \u{6301}\u{7EED}\u{5DE5}\u{4F5C}\u{81F3}\u{5B8C}\u{6210}
|
|
4709
|
+
- \u{786E}\u{4FDD}\u{5206}\u{6790}\u{7684}\u{7CFB}\u{7EDF}\u{6027}\u{548C}\u{5B8C}\u{6574}\u{6027}
|
|
4710
|
+
- \u{4F18}\u{5148}\u{8003}\u{8651}\u{7528}\u{6237}\u{81EA}\u{5B9A}\u{4E49}\u{9700}\u{6C42}
|
|
4711
|
+
- \u{4FDD}\u{8BC1}\u{8F93}\u{51FA}\u{6587}\u{6863}\u{7684}\u{8D28}\u{91CF}\u{548C}\u{53EF}\u{7528}\u{6027}
|
|
4712
|
+
`;
|
|
4713
|
+
return {
|
|
4714
|
+
content: [
|
|
4715
|
+
{
|
|
4716
|
+
type: "text",
|
|
4717
|
+
text: JSON.stringify({
|
|
4718
|
+
success: true,
|
|
4719
|
+
message: "\u7CFB\u7EDF\u5316\u9700\u6C42\u5206\u6790\u667A\u80FD\u4F53\u6267\u884C\u6307\u5BFC\u5DF2\u751F\u6210",
|
|
4720
|
+
data: {
|
|
4721
|
+
input_type,
|
|
4722
|
+
feature_name,
|
|
4723
|
+
analysis_depth,
|
|
4724
|
+
use_streaming,
|
|
4725
|
+
guidance: systemGuidance,
|
|
4726
|
+
execution_phases: [
|
|
4727
|
+
"\u9700\u6C42\u5206\u6790 - \u6DF1\u5EA6\u7406\u89E3\u7528\u6237\u9700\u6C42",
|
|
4728
|
+
"\u573A\u666F\u8BC6\u522B - \u62C6\u89E3\u6838\u5FC3\u95EE\u9898\u8282\u70B9",
|
|
4729
|
+
"\u65B9\u6848\u8BBE\u8BA1 - \u5236\u5B9A\u6280\u672F\u5B9E\u73B0\u65B9\u6848",
|
|
4730
|
+
"\u6267\u884C\u9A8C\u8BC1 - \u751F\u6210\u9700\u6C42\u6587\u6863",
|
|
4731
|
+
"\u603B\u7ED3\u53CD\u9988 - \u63D0\u4F9B\u9879\u76EE\u5EFA\u8BAE"
|
|
4732
|
+
],
|
|
4733
|
+
next_steps: [
|
|
4734
|
+
"\u6839\u636E\u8F93\u5165\u7C7B\u578B\u5904\u7406\u5185\u5BB9",
|
|
4735
|
+
"\u6267\u884C\u7CFB\u7EDF\u5316\u5206\u6790\u6D41\u7A0B",
|
|
4736
|
+
"\u751F\u6210\u7ED3\u6784\u5316\u9700\u6C42\u6587\u6863",
|
|
4737
|
+
"\u63D0\u4F9B\u5B9E\u65BD\u5EFA\u8BAE"
|
|
4738
|
+
]
|
|
4739
|
+
}
|
|
4740
|
+
})
|
|
4741
|
+
}
|
|
4742
|
+
]
|
|
4743
|
+
};
|
|
4744
|
+
} catch (error) {
|
|
4745
|
+
return {
|
|
4746
|
+
content: [
|
|
4747
|
+
{
|
|
4748
|
+
type: "text",
|
|
4749
|
+
text: JSON.stringify({
|
|
4750
|
+
success: false,
|
|
4751
|
+
message: `\u{9700}\u{6C42}\u{5206}\u{6790}\u{667A}\u{80FD}\u{4F53}\u{6267}\u{884C}\u{5931}\u{8D25}: ${error.message}`,
|
|
4752
|
+
data: null
|
|
4753
|
+
})
|
|
4754
|
+
}
|
|
4755
|
+
],
|
|
4756
|
+
isError: true
|
|
4757
|
+
};
|
|
4758
|
+
}
|
|
4759
|
+
}
|
|
4760
|
+
};
|
|
4761
|
+
const changeAnalysisPrompt = `\u{8BF7}\u{5206}\u{6790}\u{5F53}\u{524D}\u{4EE3}\u{7801}\u{5E93}\u{FF0C}\u{5E76}\u{4E0E}\u{9700}\u{6C42}\u{8FDB}\u{884C}\u{5BF9}\u{6BD4}\u{FF0C}\u{786E}\u{4FDD}\u{5B9E}\u{73B0}\u{7684}\u{5B8C}\u{6574}\u{6027}\u{3002}
|
|
4762
|
+
|
|
4763
|
+
\u{8BF7}\u{6309}\u{4EE5}\u{4E0B}\u{6B65}\u{9AA4}\u{8FDB}\u{884C}\u{5206}\u{6790}\u{FF1A}
|
|
4764
|
+
|
|
4765
|
+
## 1. \u{4EE3}\u{7801}\u{5E93}\u{5206}\u{6790}
|
|
4766
|
+
\u{5206}\u{6790}\u{5F53}\u{524D}\u{4EE3}\u{7801}\u{5E93}\u{FF0C}\u{603B}\u{7ED3}\u{FF1A}
|
|
4767
|
+
- \u{4E3B}\u{8981}\u{529F}\u{80FD}\u{6A21}\u{5757}\u{53CA}\u{5176}\u{5B9E}\u{73B0}
|
|
4768
|
+
- \u{5173}\u{952E}\u{4E1A}\u{52A1}\u{903B}\u{8F91}\u{6D41}\u{7A0B}
|
|
4769
|
+
- \u{91CD}\u{8981}\u{6570}\u{636E}\u{7ED3}\u{6784}
|
|
4770
|
+
- \u{6838}\u{5FC3}\u{7B97}\u{6CD5}\u{5B9E}\u{73B0}
|
|
4771
|
+
|
|
4772
|
+
## 2. \u{63A5}\u{53E3}\u{4E0E}\u{9700}\u{6C42}\u{5BF9}\u{5E94}\u{5173}\u{7CFB}\u{8868}
|
|
4773
|
+
\u{6839}\u{636E}\u{4EE3}\u{7801}\u{53D8}\u{66F4}\u{FF0C}\u{751F}\u{6210}\u{63A5}\u{53E3}\u{4E0E}\u{9700}\u{6C42}\u{5BF9}\u{5E94}\u{5173}\u{7CFB}\u{8868}\u{FF1A}
|
|
4774
|
+
|
|
4775
|
+
| \u{9700}\u{6C42}\u{529F}\u{80FD} | \u{5B9E}\u{73B0}\u{63A5}\u{53E3} | \u{8BF7}\u{6C42}\u{65B9}\u{5F0F} | URL | \u{53D8}\u{66F4}\u{72B6}\u{6001} |
|
|
4776
|
+
|---------|---------|---------|-----|----------|
|
|
4777
|
+
| [\u{9700}\u{6C42}\u{529F}\u{80FD}\u{63CF}\u{8FF0}] | [Controller.method] | [GET/POST/PUT/DELETE] | [/api/path] | [\u{65B0}\u{589E}/\u{4FEE}\u{6539}/\u{5220}\u{9664}] |
|
|
4778
|
+
|
|
4779
|
+
## 3. \u{6838}\u{5FC3}\u{903B}\u{8F91}\u{65B9}\u{6CD5}\u{8868}
|
|
4780
|
+
\u{5206}\u{6790}\u{6838}\u{5FC3}\u{4E1A}\u{52A1}\u{903B}\u{8F91}\u{65B9}\u{6CD5}\u{FF1A}
|
|
4781
|
+
|
|
4782
|
+
| \u{65B9}\u{6CD5}\u{540D}\u{79F0} | \u{6240}\u{5C5E}\u{7C7B} | \u{529F}\u{80FD}\u{8BF4}\u{660E} | \u{53D8}\u{66F4}\u{72B6}\u{6001} |
|
|
4783
|
+
|---------|-------|---------|----------|
|
|
4784
|
+
| [methodName] | [ClassName] | [\u{529F}\u{80FD}\u{63CF}\u{8FF0}] | [\u{65B0}\u{589E}/\u{4FEE}\u{6539}/\u{5220}\u{9664}] |
|
|
4785
|
+
|
|
4786
|
+
## 4. \u{524D}\u{7AEF}\u{9875}\u{9762}\u{4E0E}\u{63A5}\u{53E3}\u{5BF9}\u{5E94}\u{5173}\u{7CFB}\u{8868}
|
|
4787
|
+
\u{5206}\u{6790}\u{524D}\u{7AEF}\u{9875}\u{9762}\u{53D8}\u{66F4}\u{FF1A}
|
|
4788
|
+
|
|
4789
|
+
| \u{9875}\u{9762}\u{540D}\u{79F0} | \u{8C03}\u{7528}\u{63A5}\u{53E3} | \u{7EC4}\u{4EF6}\u{540D}\u{79F0} | \u{8DEF}\u{7531}\u{8DEF}\u{5F84} | \u{53D8}\u{66F4}\u{72B6}\u{6001} |
|
|
4790
|
+
|---------|---------|---------|---------|----------|
|
|
4791
|
+
| [\u{9875}\u{9762}\u{540D}\u{79F0}] | [Controller.method] | [ComponentName] | [/path] | [\u{65B0}\u{589E}/\u{4FEE}\u{6539}/\u{5220}\u{9664}] |
|
|
4792
|
+
|
|
4793
|
+
## 5. \u{524D}\u{7AEF}\u{6838}\u{5FC3}\u{7EC4}\u{4EF6}\u{8868}
|
|
4794
|
+
\u{5206}\u{6790}\u{524D}\u{7AEF}\u{7EC4}\u{4EF6}\u{53D8}\u{66F4}\u{FF1A}
|
|
4795
|
+
|
|
4796
|
+
| \u{7EC4}\u{4EF6}\u{540D}\u{79F0} | \u{6240}\u{5C5E}\u{9875}\u{9762} | \u{529F}\u{80FD}\u{8BF4}\u{660E} | \u{53D8}\u{66F4}\u{72B6}\u{6001} |
|
|
4797
|
+
|---------|---------|---------|----------|
|
|
4798
|
+
| [ComponentName] | [PageName] | [\u{529F}\u{80FD}\u{63CF}\u{8FF0}] | [\u{65B0}\u{589E}/\u{4FEE}\u{6539}/\u{5220}\u{9664}] |
|
|
4799
|
+
|
|
4800
|
+
## 6. \u{9700}\u{6C42}\u{5B8C}\u{6574}\u{6027}\u{68C0}\u{67E5}
|
|
4801
|
+
\u{5BF9}\u{6BD4}\u{539F}\u{59CB}\u{9700}\u{6C42}\u{FF0C}\u{68C0}\u{67E5}\u{FF1A}
|
|
4802
|
+
- \u{2705} \u{5DF2}\u{5B8C}\u{6210}\u{7684}\u{529F}\u{80FD}
|
|
4803
|
+
- \u{26A0}\u{FE0F} \u{90E8}\u{5206}\u{5B8C}\u{6210}\u{7684}\u{529F}\u{80FD}
|
|
4804
|
+
- \u{274C} \u{672A}\u{5B9E}\u{73B0}\u{7684}\u{529F}\u{80FD}
|
|
4805
|
+
- \u{1F504} \u{9700}\u{8981}\u{8FDB}\u{4E00}\u{6B65}\u{5B8C}\u{5584}\u{7684}\u{529F}\u{80FD}
|
|
4806
|
+
|
|
4807
|
+
## 7. \u{5EFA}\u{8BAE}\u{4E0E}\u{603B}\u{7ED3}
|
|
4808
|
+
- \u{5B9E}\u{73B0}\u{8D28}\u{91CF}\u{8BC4}\u{4F30}
|
|
4809
|
+
- \u{6F5C}\u{5728}\u{95EE}\u{9898}\u{8BC6}\u{522B}
|
|
4810
|
+
- \u{540E}\u{7EED}\u{5F00}\u{53D1}\u{5EFA}\u{8BAE}
|
|
4811
|
+
- \u{6D4B}\u{8BD5}\u{5EFA}\u{8BAE}
|
|
4812
|
+
|
|
4813
|
+
\u{8BF7}\u{786E}\u{4FDD}\u{6240}\u{6709}\u{8868}\u{683C}\u{4E0A}\u{4E0B}\u{5BF9}\u{9F50}\u{FF0C}\u{5185}\u{5BB9}\u{8BE6}\u{5B9E}\u{51C6}\u{786E}\u{3002}`;
|
|
4814
|
+
objectType({
|
|
4815
|
+
baseBranch: stringType().default('main').describe("\u57FA\u51C6\u5206\u652F\u540D\u79F0\uFF0C\u7528\u4E8E\u5BF9\u6BD4\u53D8\u66F4"),
|
|
4816
|
+
requirementFile: stringType().optional().describe("\u9700\u6C42\u6587\u6863\u6587\u4EF6\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09"),
|
|
4817
|
+
includeUncommitted: booleanType().default(true).describe("\u662F\u5426\u5305\u542B\u672A\u63D0\u4EA4\u7684\u53D8\u66F4"),
|
|
4818
|
+
outputFormat: enumType([
|
|
4819
|
+
'markdown',
|
|
4820
|
+
'json'
|
|
4821
|
+
]).default('markdown').describe("\u8F93\u51FA\u683C\u5F0F")
|
|
4822
|
+
});
|
|
4823
|
+
const changeSummarizer = {
|
|
4824
|
+
name: "\u4EE3\u7801\u53D8\u66F4\u5206\u6790\u667A\u80FD\u4F53",
|
|
4825
|
+
description: "\u5206\u6790\u4EE3\u7801\u5E76\u4E0E\u9700\u6C42\u8FDB\u884C\u5BF9\u6BD4\uFF0C\u786E\u4FDD\u5B9E\u73B0\u5B8C\u6574\u6027",
|
|
4826
|
+
inputSchema: {
|
|
4827
|
+
baseBranch: stringType().default('main').describe("\u57FA\u51C6\u5206\u652F\u540D\u79F0\uFF0C\u7528\u4E8E\u5BF9\u6BD4\u53D8\u66F4"),
|
|
4828
|
+
requirementFile: stringType().optional().describe("\u9700\u6C42\u6587\u6863\u6587\u4EF6\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09"),
|
|
4829
|
+
includeUncommitted: booleanType().default(true).describe("\u662F\u5426\u5305\u542B\u672A\u63D0\u4EA4\u7684\u53D8\u66F4"),
|
|
4830
|
+
outputFormat: enumType([
|
|
4831
|
+
'markdown',
|
|
4832
|
+
'json'
|
|
4833
|
+
]).default('markdown').describe("\u8F93\u51FA\u683C\u5F0F")
|
|
4834
|
+
},
|
|
4835
|
+
handler: async (args)=>{
|
|
4836
|
+
try {
|
|
4837
|
+
initializeProjectRoot();
|
|
4838
|
+
console.log('[CHANGE-SUMMARIZER DEBUG] args:', JSON.stringify(args, null, 2));
|
|
4839
|
+
console.log('[CHANGE-SUMMARIZER DEBUG] args.baseBranch:', args.baseBranch);
|
|
4840
|
+
console.log('[CHANGE-SUMMARIZER DEBUG] args.outputFormat:', args.outputFormat);
|
|
4841
|
+
logger_logger.info({
|
|
4842
|
+
module: 'change-summarizer',
|
|
4843
|
+
message: 'Starting code analysis',
|
|
4844
|
+
args
|
|
4845
|
+
});
|
|
4846
|
+
let requirementContent = '';
|
|
4847
|
+
if (args.requirementFile && external_fs_default().existsSync(args.requirementFile)) requirementContent = external_fs_default().readFileSync(args.requirementFile, 'utf-8');
|
|
4848
|
+
const analysisPrompt = buildAnalysisPrompt(requirementContent);
|
|
4849
|
+
const outputPath = await saveAnalysisResult(analysisPrompt, args.outputFormat);
|
|
4850
|
+
logger_logger.info({
|
|
4851
|
+
module: 'change-summarizer',
|
|
4852
|
+
message: 'Code analysis completed',
|
|
4853
|
+
outputPath
|
|
4854
|
+
});
|
|
4855
|
+
const systemGuidance = `
|
|
4856
|
+
# \u{7CFB}\u{7EDF}\u{5316}\u{4EE3}\u{7801}\u{53D8}\u{66F4}\u{5206}\u{6790}\u{667A}\u{80FD}\u{4F53}\u{6267}\u{884C}\u{6D41}\u{7A0B}
|
|
4857
|
+
|
|
4858
|
+
## \u{5206}\u{6790}\u{53C2}\u{6570}
|
|
4859
|
+
- \u{57FA}\u{51C6}\u{5206}\u{652F}: ${args.baseBranch || 'main'}
|
|
4860
|
+
- \u{8F93}\u{51FA}\u{683C}\u{5F0F}: ${args.outputFormat || 'markdown'}
|
|
4861
|
+
- \u{5305}\u{542B}\u{672A}\u{63D0}\u{4EA4}\u{53D8}\u{66F4}: ${false !== args.includeUncommitted ? "\u662F" : "\u5426"}
|
|
4862
|
+
${args.requirementFile ? `- \u{9700}\u{6C42}\u{6587}\u{6863}: ${args.requirementFile}` : ''}
|
|
4863
|
+
|
|
4864
|
+
## TODO\u{6E05}\u{5355}\u{6807}\u{51C6}\u{6D41}\u{7A0B}
|
|
4865
|
+
|
|
4866
|
+
### 1. \u{9700}\u{6C42}\u{5206}\u{6790}
|
|
4867
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
4868
|
+
- \u{5145}\u{5206}\u{641C}\u{7D22}\u{4E0E}\u{7528}\u{6237}\u{8F93}\u{5165}\u{5185}\u{5BB9}\u{76F8}\u{5173}\u{7684}\u{8D44}\u{6E90}
|
|
4869
|
+
- \u{660E}\u{786E}\u{7528}\u{6237}\u{7684}\u{6838}\u{5FC3}\u{95EE}\u{9898}\u{3001}\u{9690}\u{542B}\u{9700}\u{6C42}\u{548C}\u{6700}\u{7EC8}\u{76EE}\u{6807}
|
|
4870
|
+
- \u{56F4}\u{7ED5}\u{95EE}\u{9898}\u{FF0C}\u{5FEB}\u{901F}\u{6784}\u{5EFA}\u{4E00}\u{4E2A}\u{77E5}\u{8BC6}\u{6846}\u{67B6}\u{3002}\u{786E}\u{5B9A}\u{56DE}\u{7B54}\u{5E94}\u{5305}\u{542B}\u{7684}\u{5173}\u{952E}\u{6982}\u{5FF5}\u{3001}\u{4E0A}\u{4E0B}\u{6587}\u{3001}\u{6B63}\u{53CD}\u{8BBA}\u{70B9}\u{548C}\u{6F5C}\u{5728}\u{7684}\u{5EF6}\u{4F38}\u{9886}\u{57DF}
|
|
4871
|
+
- \u{6839}\u{636E}\u{5145}\u{5206}\u{4E86}\u{89E3}\u{5230}\u{7684}\u{4FE1}\u{606F}\u{FF0C}\u{6E05}\u{6670}\u{5B8C}\u{6574}\u{7684}\u{590D}\u{8FF0}\u{7528}\u{6237}\u{9700}\u{6C42}\u{FF0C}\u{5E76}\u{7ED9}\u{51FA}\u{4E00}\u{4E2A}\u{9AD8}\u{5EA6}\u{6D53}\u{7F29}\u{7684}\u{3001}\u{7ED3}\u{8BBA}\u{6027}\u{7684}\u{6838}\u{5FC3}\u{89C2}\u{70B9}
|
|
4872
|
+
|
|
4873
|
+
**\u{9700}\u{6C42}\u{6587}\u{6863}\u{5206}\u{6790}\u{FF1A}**
|
|
4874
|
+
${args.requirementFile ? `
|
|
4875
|
+
**\u{5DF2}\u{63D0}\u{4F9B}\u{9700}\u{6C42}\u{6587}\u{6863}\u{FF1A}** ${args.requirementFile}
|
|
4876
|
+
**\u{9700}\u{6C42}\u{5185}\u{5BB9}\u{FF1A}**
|
|
4877
|
+
\`\`\`
|
|
4878
|
+
${requirementContent}
|
|
4879
|
+
\`\`\`
|
|
4880
|
+
` : `
|
|
4881
|
+
**\u{672A}\u{63D0}\u{4F9B}\u{9700}\u{6C42}\u{6587}\u{6863}**
|
|
4882
|
+
- \u{5C06}\u{57FA}\u{4E8E}\u{4EE3}\u{7801}\u{53D8}\u{66F4}\u{672C}\u{8EAB}\u{8FDB}\u{884C}\u{5206}\u{6790}
|
|
4883
|
+
- \u{91CD}\u{70B9}\u{5173}\u{6CE8}\u{4EE3}\u{7801}\u{8D28}\u{91CF}\u{548C}\u{529F}\u{80FD}\u{5B8C}\u{6574}\u{6027}
|
|
4884
|
+
- \u{8BC6}\u{522B}\u{6F5C}\u{5728}\u{7684}\u{95EE}\u{9898}\u{548C}\u{6539}\u{8FDB}\u{70B9}
|
|
4885
|
+
`}
|
|
4886
|
+
|
|
4887
|
+
**\u{4F7F}\u{7528}\u{5DE5}\u{5177}\u{FF1A}**
|
|
4888
|
+
1. **\u{4EE3}\u{7801}\u{53D8}\u{66F4}\u{83B7}\u{53D6}**
|
|
4889
|
+
- \u{4F7F}\u{7528} git \u{547D}\u{4EE4}\u{83B7}\u{53D6}\u{53D8}\u{66F4}\u{5185}\u{5BB9}
|
|
4890
|
+
- \u{5206}\u{6790}\u{6587}\u{4EF6}\u{53D8}\u{66F4}\u{5217}\u{8868}
|
|
4891
|
+
- \u{63D0}\u{53D6}\u{4EE3}\u{7801}\u{5DEE}\u{5F02}
|
|
4892
|
+
|
|
4893
|
+
2. **\u{9879}\u{76EE}\u{7ED3}\u{6784}\u{5206}\u{6790}**
|
|
4894
|
+
- listDirectory() \u{67E5}\u{770B}\u{9879}\u{76EE}\u{7ED3}\u{6784}
|
|
4895
|
+
- readFile() \u{8BFB}\u{53D6}\u{5173}\u{952E}\u{914D}\u{7F6E}\u{6587}\u{4EF6}
|
|
4896
|
+
- \u{4E86}\u{89E3}\u{9879}\u{76EE}\u{67B6}\u{6784}\u{548C}\u{6280}\u{672F}\u{6808}
|
|
4897
|
+
|
|
4898
|
+
### 2. \u{573A}\u{666F}\u{8BC6}\u{522B}
|
|
4899
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
4900
|
+
- \u{57FA}\u{4E8E}\u{9700}\u{6C42}\u{5206}\u{6790}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{627E}\u{51FA}\u{4E3B}\u{8981}\u{77DB}\u{76FE}\u{70B9}\u{FF0C}\u{5B9A}\u{4F4D}\u{6838}\u{5FC3}\u{95EE}\u{9898}\u{8282}\u{70B9}
|
|
4901
|
+
- \u{4ECE}\u{7CFB}\u{7EDF}\u{5C42}\u{9762}\u{62C6}\u{89E3}\u{4E3A}\u{53EF}\u{6267}\u{884C}\u{5B50}\u{4EFB}\u{52A1}\u{FF0C}\u{786E}\u{4FDD}\u{903B}\u{8F91}\u{94FE}\u{6761}\u{6E05}\u{6670}\u{FF0C}\u{4E0A}\u{4E0B}\u{6587}\u{4FE1}\u{606F}\u{5145}\u{8DB3}
|
|
4902
|
+
|
|
4903
|
+
**\u{5206}\u{6790}\u{7EF4}\u{5EA6}\u{FF1A}**
|
|
4904
|
+
1. **\u{53D8}\u{66F4}\u{573A}\u{666F}\u{8BC6}\u{522B}**
|
|
4905
|
+
- \u{65B0}\u{589E}\u{529F}\u{80FD}\u{573A}\u{666F}
|
|
4906
|
+
- \u{4FEE}\u{6539}\u{529F}\u{80FD}\u{573A}\u{666F}
|
|
4907
|
+
- \u{5220}\u{9664}\u{529F}\u{80FD}\u{573A}\u{666F}
|
|
4908
|
+
- \u{91CD}\u{6784}\u{573A}\u{666F}
|
|
4909
|
+
|
|
4910
|
+
2. **\u{5F71}\u{54CD}\u{8303}\u{56F4}\u{5206}\u{6790}**
|
|
4911
|
+
- \u{76F4}\u{63A5}\u{5F71}\u{54CD}\u{7684}\u{6A21}\u{5757}
|
|
4912
|
+
- \u{95F4}\u{63A5}\u{5F71}\u{54CD}\u{7684}\u{6A21}\u{5757}
|
|
4913
|
+
- \u{4F9D}\u{8D56}\u{5173}\u{7CFB}\u{53D8}\u{5316}
|
|
4914
|
+
- \u{63A5}\u{53E3}\u{517C}\u{5BB9}\u{6027}
|
|
4915
|
+
|
|
4916
|
+
3. **\u{98CE}\u{9669}\u{8BC4}\u{4F30}**
|
|
4917
|
+
- \u{7834}\u{574F}\u{6027}\u{53D8}\u{66F4}
|
|
4918
|
+
- \u{6027}\u{80FD}\u{5F71}\u{54CD}
|
|
4919
|
+
- \u{5B89}\u{5168}\u{98CE}\u{9669}
|
|
4920
|
+
- \u{517C}\u{5BB9}\u{6027}\u{95EE}\u{9898}
|
|
4921
|
+
|
|
4922
|
+
### 3. \u{65B9}\u{6848}\u{8BBE}\u{8BA1}
|
|
4923
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
4924
|
+
- \u{65B9}\u{6848}\u{8BBE}\u{8BA1}\u{4F18}\u{5148}\u{590D}\u{7528}\u{73B0}\u{6709}\u{65B9}\u{6848}\u{FF0C}\u{7EC4}\u{4EF6}\u{FF0C}\u{5DE5}\u{5177}\u{65B9}\u{6CD5}\u{7B49}\u{FF0C}\u{80FD}\u{590D}\u{7528}\u{7684}\u{5C3D}\u{53EF}\u{80FD}\u{590D}\u{7528}
|
|
4925
|
+
- \u{626B}\u{63CF}\u{9879}\u{76EE}\u{4E2D}\u{4F7F}\u{7528}\u{7684}\u{6D4B}\u{8BD5}\u{6846}\u{67B6}\u{548C}\u{811A}\u{672C}\u{FF0C}\u{751F}\u{6210}\u{672C}\u{6B21}\u{9700}\u{6C42}\u{7684}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{5982}\u{679C}\u{4E0D}\u{5B58}\u{5728}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{5219}\u{7F16}\u{5199}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5230}.aico/tests\u{4E0B}\u{9762}
|
|
4926
|
+
|
|
4927
|
+
**\u{8BBE}\u{8BA1}\u{5185}\u{5BB9}\u{FF1A}**
|
|
4928
|
+
1. **\u{5206}\u{6790}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}**
|
|
4929
|
+
- \u{4EE3}\u{7801}\u{5BA1}\u{67E5}\u{7B56}\u{7565}
|
|
4930
|
+
- \u{8D28}\u{91CF}\u{8BC4}\u{4F30}\u{6807}\u{51C6}
|
|
4931
|
+
- \u{6D4B}\u{8BD5}\u{9A8C}\u{8BC1}\u{65B9}\u{6848}
|
|
4932
|
+
|
|
4933
|
+
2. **\u{62A5}\u{544A}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}**
|
|
4934
|
+
- \u{62A5}\u{544A}\u{7ED3}\u{6784}\u{89C4}\u{5212}
|
|
4935
|
+
- \u{5173}\u{952E}\u{6307}\u{6807}\u{5B9A}\u{4E49}
|
|
4936
|
+
- \u{8F93}\u{51FA}\u{683C}\u{5F0F}\u{89C4}\u{8303}
|
|
4937
|
+
|
|
4938
|
+
3. **\u{6D4B}\u{8BD5}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}**
|
|
4939
|
+
- \u{56DE}\u{5F52}\u{6D4B}\u{8BD5}\u{8BA1}\u{5212}
|
|
4940
|
+
- \u{65B0}\u{529F}\u{80FD}\u{6D4B}\u{8BD5}
|
|
4941
|
+
- \u{6027}\u{80FD}\u{6D4B}\u{8BD5}\u{65B9}\u{6848}
|
|
4942
|
+
|
|
4943
|
+
### 4. \u{6267}\u{884C}\u{9A8C}\u{8BC1}
|
|
4944
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
4945
|
+
- \u{6309}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}\u{7684}\u{7ED3}\u{679C}\u{8F93}\u{51FA}\u{4EE3}\u{7801}
|
|
4946
|
+
- \u{5982}\u{679C}\u{6709}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{8FD0}\u{884C}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5E76}\u{4FEE}\u{6B63}\u{76F4}\u{5230}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5168}\u{90E8}\u{901A}\u{8FC7}
|
|
4947
|
+
|
|
4948
|
+
**\u{9A8C}\u{8BC1}\u{5185}\u{5BB9}\u{FF1A}**
|
|
4949
|
+
1. **\u{4EE3}\u{7801}\u{8D28}\u{91CF}\u{9A8C}\u{8BC1}**
|
|
4950
|
+
- \u{4EE3}\u{7801}\u{89C4}\u{8303}\u{68C0}\u{67E5}
|
|
4951
|
+
- \u{7C7B}\u{578B}\u{5B89}\u{5168}\u{9A8C}\u{8BC1}
|
|
4952
|
+
- \u{6027}\u{80FD}\u{5F71}\u{54CD}\u{8BC4}\u{4F30}
|
|
4953
|
+
- \u{5B89}\u{5168}\u{6027}\u{68C0}\u{67E5}
|
|
4954
|
+
|
|
4955
|
+
2. **\u{529F}\u{80FD}\u{5B8C}\u{6574}\u{6027}\u{9A8C}\u{8BC1}**
|
|
4956
|
+
- \u{9700}\u{6C42}\u{8986}\u{76D6}\u{5EA6}\u{5206}\u{6790}
|
|
4957
|
+
- \u{529F}\u{80FD}\u{5B9E}\u{73B0}\u{5B8C}\u{6574}\u{6027}
|
|
4958
|
+
- \u{8FB9}\u{754C}\u{6761}\u{4EF6}\u{5904}\u{7406}
|
|
4959
|
+
- \u{9519}\u{8BEF}\u{5904}\u{7406}\u{673A}\u{5236}
|
|
4960
|
+
|
|
4961
|
+
3. **\u{6D4B}\u{8BD5}\u{6267}\u{884C}**
|
|
4962
|
+
- \u{8FD0}\u{884C}\u{73B0}\u{6709}\u{6D4B}\u{8BD5}\u{5957}\u{4EF6}
|
|
4963
|
+
- \u{6267}\u{884C}\u{65B0}\u{589E}\u{6D4B}\u{8BD5}\u{7528}\u{4F8B}
|
|
4964
|
+
- \u{9A8C}\u{8BC1}\u{6D4B}\u{8BD5}\u{8986}\u{76D6}\u{7387}
|
|
4965
|
+
- \u{786E}\u{4FDD}\u{6240}\u{6709}\u{6D4B}\u{8BD5}\u{901A}\u{8FC7}
|
|
4966
|
+
|
|
4967
|
+
### 5. \u{603B}\u{7ED3}\u{53CD}\u{9988}
|
|
4968
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
4969
|
+
- \u{8F93}\u{51FA}\u{6700}\u{7EC8}\u{6267}\u{884C}\u{7684}\u{65B9}\u{6848}
|
|
4970
|
+
- \u{66F4}\u{65B0}TODO\u{6E05}\u{5355}
|
|
4971
|
+
- \u{6839}\u{636E}\u{60C5}\u{51B5}\u{63D0}\u{4F9B}\u{4E00}\u{4E9B}\u{524D}\u{77BB}\u{6027}\u{7684}\u{601D}\u{8003}\u{6216}\u{5EFA}\u{8BAE}
|
|
4972
|
+
|
|
4973
|
+
**\u{8F93}\u{51FA}\u{5185}\u{5BB9}\u{FF1A}**
|
|
4974
|
+
1. **\u{53D8}\u{66F4}\u{5206}\u{6790}\u{62A5}\u{544A}**
|
|
4975
|
+
- \u{53D8}\u{66F4}\u{6982}\u{8FF0}
|
|
4976
|
+
- \u{5F71}\u{54CD}\u{8303}\u{56F4}\u{5206}\u{6790}
|
|
4977
|
+
- \u{8D28}\u{91CF}\u{8BC4}\u{4F30}\u{7ED3}\u{679C}
|
|
4978
|
+
- \u{98CE}\u{9669}\u{8BC4}\u{4F30}\u{62A5}\u{544A}
|
|
4979
|
+
|
|
4980
|
+
2. **\u{5B9E}\u{65BD}\u{5EFA}\u{8BAE}**
|
|
4981
|
+
- \u{4EE3}\u{7801}\u{6539}\u{8FDB}\u{5EFA}\u{8BAE}
|
|
4982
|
+
- \u{6D4B}\u{8BD5}\u{5B8C}\u{5584}\u{5EFA}\u{8BAE}
|
|
4983
|
+
- \u{90E8}\u{7F72}\u{6CE8}\u{610F}\u{4E8B}\u{9879}
|
|
4984
|
+
- \u{540E}\u{7EED}\u{7EF4}\u{62A4}\u{5EFA}\u{8BAE}
|
|
4985
|
+
|
|
4986
|
+
## \u{5206}\u{6790}\u{6DF1}\u{5EA6}\u{63A7}\u{5236}
|
|
4987
|
+
**\u{57FA}\u{51C6}\u{5206}\u{652F}\u{FF1A}** ${args.baseBranch || 'main'}
|
|
4988
|
+
- \u{5BF9}\u{6BD4}\u{57FA}\u{51C6}\u{5206}\u{652F}\u{7684}\u{4EE3}\u{7801}\u{5DEE}\u{5F02}
|
|
4989
|
+
- \u{8BC6}\u{522B}\u{65B0}\u{589E}\u{3001}\u{4FEE}\u{6539}\u{3001}\u{5220}\u{9664}\u{7684}\u{6587}\u{4EF6}
|
|
4990
|
+
- \u{5206}\u{6790}\u{53D8}\u{66F4}\u{7684}\u{5F71}\u{54CD}\u{8303}\u{56F4}
|
|
4991
|
+
|
|
4992
|
+
**\u{8F93}\u{51FA}\u{683C}\u{5F0F}\u{FF1A}** ${args.outputFormat || 'markdown'}
|
|
4993
|
+
- **markdown**: \u{751F}\u{6210}\u{6613}\u{8BFB}\u{7684}Markdown\u{683C}\u{5F0F}\u{62A5}\u{544A}
|
|
4994
|
+
- **json**: \u{751F}\u{6210}\u{7ED3}\u{6784}\u{5316}\u{7684}JSON\u{683C}\u{5F0F}\u{6570}\u{636E}
|
|
4995
|
+
|
|
4996
|
+
## \u{53D8}\u{66F4}\u{8303}\u{56F4}\u{63A7}\u{5236}
|
|
4997
|
+
**\u{5305}\u{542B}\u{672A}\u{63D0}\u{4EA4}\u{53D8}\u{66F4}\u{FF1A}** ${false !== args.includeUncommitted ? "\u662F" : "\u5426"}
|
|
4998
|
+
- \u{5305}\u{542B}\u{5DE5}\u{4F5C}\u{533A}\u{548C}\u{6682}\u{5B58}\u{533A}\u{7684}\u{53D8}\u{66F4}
|
|
4999
|
+
- \u{63D0}\u{4F9B}\u{66F4}\u{5168}\u{9762}\u{7684}\u{5206}\u{6790}\u{89C6}\u{89D2}
|
|
5000
|
+
- \u{8BC6}\u{522B}\u{6F5C}\u{5728}\u{7684}\u{672A}\u{5B8C}\u{6210}\u{529F}\u{80FD}
|
|
5001
|
+
|
|
5002
|
+
---
|
|
5003
|
+
|
|
5004
|
+
**\u{6267}\u{884C}\u{539F}\u{5219}\u{FF1A}**
|
|
5005
|
+
- \u{521B}\u{5EFA}\u{5E76}\u{6301}\u{7EED}\u{66F4}\u{65B0}TODO\u{6E05}\u{5355}
|
|
5006
|
+
- \u{6301}\u{7EED}\u{5DE5}\u{4F5C}\u{81F3}\u{5B8C}\u{6210}
|
|
5007
|
+
- \u{786E}\u{4FDD}\u{5206}\u{6790}\u{7684}\u{5168}\u{9762}\u{6027}\u{548C}\u{51C6}\u{786E}\u{6027}
|
|
5008
|
+
- \u{91CD}\u{70B9}\u{5173}\u{6CE8}\u{4EE3}\u{7801}\u{8D28}\u{91CF}\u{548C}\u{529F}\u{80FD}\u{5B8C}\u{6574}\u{6027}
|
|
5009
|
+
- \u{63D0}\u{4F9B}\u{53EF}\u{64CD}\u{4F5C}\u{7684}\u{6539}\u{8FDB}\u{5EFA}\u{8BAE}
|
|
5010
|
+
`;
|
|
5011
|
+
return {
|
|
5012
|
+
content: [
|
|
5013
|
+
{
|
|
5014
|
+
type: "text",
|
|
5015
|
+
text: JSON.stringify({
|
|
5016
|
+
success: true,
|
|
5017
|
+
message: "\u7CFB\u7EDF\u5316\u4EE3\u7801\u53D8\u66F4\u5206\u6790\u667A\u80FD\u4F53\u6267\u884C\u6307\u5BFC\u5DF2\u751F\u6210",
|
|
5018
|
+
data: {
|
|
5019
|
+
baseBranch: args.baseBranch || 'main',
|
|
5020
|
+
outputFormat: args.outputFormat || 'markdown',
|
|
5021
|
+
includeUncommitted: false !== args.includeUncommitted,
|
|
5022
|
+
requirementFile: args.requirementFile || null,
|
|
5023
|
+
guidance: systemGuidance,
|
|
5024
|
+
execution_phases: [
|
|
5025
|
+
"\u9700\u6C42\u5206\u6790 - \u7406\u89E3\u53D8\u66F4\u80CC\u666F\u548C\u76EE\u6807",
|
|
5026
|
+
"\u573A\u666F\u8BC6\u522B - \u5206\u6790\u53D8\u66F4\u5F71\u54CD\u8303\u56F4",
|
|
5027
|
+
"\u65B9\u6848\u8BBE\u8BA1 - \u5236\u5B9A\u5206\u6790\u9A8C\u8BC1\u65B9\u6848",
|
|
5028
|
+
"\u6267\u884C\u9A8C\u8BC1 - \u6267\u884C\u4EE3\u7801\u8D28\u91CF\u68C0\u67E5",
|
|
5029
|
+
"\u603B\u7ED3\u53CD\u9988 - \u751F\u6210\u5206\u6790\u62A5\u544A\u548C\u5EFA\u8BAE"
|
|
5030
|
+
],
|
|
5031
|
+
analysis_dimensions: [
|
|
5032
|
+
"\u4EE3\u7801\u53D8\u66F4\u5206\u6790",
|
|
5033
|
+
"\u529F\u80FD\u5B8C\u6574\u6027\u9A8C\u8BC1",
|
|
5034
|
+
"\u8D28\u91CF\u8BC4\u4F30",
|
|
5035
|
+
"\u98CE\u9669\u8BC4\u4F30",
|
|
5036
|
+
"\u6D4B\u8BD5\u8986\u76D6\u5EA6\u5206\u6790"
|
|
5037
|
+
],
|
|
5038
|
+
next_steps: [
|
|
5039
|
+
"\u83B7\u53D6\u4EE3\u7801\u53D8\u66F4\u5185\u5BB9",
|
|
5040
|
+
"\u6267\u884C\u7CFB\u7EDF\u5316\u5206\u6790\u6D41\u7A0B",
|
|
5041
|
+
"\u751F\u6210\u53D8\u66F4\u5206\u6790\u62A5\u544A",
|
|
5042
|
+
"\u63D0\u4F9B\u6539\u8FDB\u5EFA\u8BAE"
|
|
5043
|
+
]
|
|
5044
|
+
}
|
|
5045
|
+
})
|
|
5046
|
+
}
|
|
5047
|
+
]
|
|
5048
|
+
};
|
|
5049
|
+
} catch (error) {
|
|
5050
|
+
logger_logger.error({
|
|
5051
|
+
module: 'change-summarizer',
|
|
5052
|
+
message: 'Code analysis failed',
|
|
5053
|
+
error: error instanceof Error ? error.message : String(error)
|
|
5054
|
+
});
|
|
5055
|
+
return {
|
|
5056
|
+
content: [
|
|
5057
|
+
{
|
|
5058
|
+
type: "text",
|
|
5059
|
+
text: JSON.stringify({
|
|
5060
|
+
success: false,
|
|
5061
|
+
message: `\u{4EE3}\u{7801}\u{53D8}\u{66F4}\u{5206}\u{6790}\u{667A}\u{80FD}\u{4F53}\u{6267}\u{884C}\u{5931}\u{8D25}: ${error instanceof Error ? error.message : String(error)}`,
|
|
5062
|
+
data: null
|
|
5063
|
+
})
|
|
5064
|
+
}
|
|
5065
|
+
],
|
|
5066
|
+
isError: true
|
|
5067
|
+
};
|
|
5068
|
+
}
|
|
5069
|
+
}
|
|
5070
|
+
};
|
|
5071
|
+
changeSummarizer.handler = changeSummarizer.handler;
|
|
5072
|
+
function buildAnalysisPrompt(requirementContent) {
|
|
5073
|
+
const changesSection = `
|
|
5074
|
+
## \u{4EE3}\u{7801}\u{4E0A}\u{4E0B}\u{6587}\u{5206}\u{6790}
|
|
5075
|
+
|
|
5076
|
+
\u{8BF7}\u{57FA}\u{4E8E}\u{4EE5}\u{4E0B}\u{5185}\u{5BB9}\u{8FDB}\u{884C}\u{5206}\u{6790}\u{FF1A}
|
|
5077
|
+
- \u{5F53}\u{524D}\u{4EE3}\u{7801}\u{5E93}\u{7684}\u{6574}\u{4F53}\u{7ED3}\u{6784}
|
|
5078
|
+
- \u{4E3B}\u{8981}\u{529F}\u{80FD}\u{6A21}\u{5757}\u{7684}\u{5B9E}\u{73B0}
|
|
5079
|
+
- \u{5173}\u{952E}\u{4E1A}\u{52A1}\u{903B}\u{8F91}
|
|
5080
|
+
- \u{63A5}\u{53E3}\u{5B9A}\u{4E49}\u{4E0E}\u{5B9E}\u{73B0}
|
|
5081
|
+
- \u{524D}\u{7AEF}\u{7EC4}\u{4EF6}\u{4E0E}\u{9875}\u{9762}
|
|
5082
|
+
`;
|
|
5083
|
+
const requirementSection = requirementContent ? `
|
|
5084
|
+
## \u{9700}\u{6C42}\u{6587}\u{6863}\u{5185}\u{5BB9}
|
|
5085
|
+
${requirementContent}
|
|
5086
|
+
` : `
|
|
5087
|
+
## \u{9700}\u{6C42}\u{6587}\u{6863}
|
|
5088
|
+
\u{672A}\u{63D0}\u{4F9B}\u{9700}\u{6C42}\u{6587}\u{6863}\u{FF0C}\u{8BF7}\u{57FA}\u{4E8E}\u{4EE3}\u{7801}\u{53D8}\u{66F4}\u{8FDB}\u{884C}\u{5206}\u{6790}\u{3002}
|
|
5089
|
+
`;
|
|
5090
|
+
return `
|
|
5091
|
+
${changeAnalysisPrompt}
|
|
5092
|
+
|
|
5093
|
+
${changesSection}
|
|
5094
|
+
|
|
5095
|
+
${requirementSection}
|
|
5096
|
+
|
|
5097
|
+
\u{8BF7}\u{57FA}\u{4E8E}\u{4EE5}\u{4E0A}\u{4FE1}\u{606F}\u{8FDB}\u{884C}\u{8BE6}\u{7EC6}\u{5206}\u{6790}\u{3002}
|
|
5098
|
+
`;
|
|
5099
|
+
}
|
|
5100
|
+
async function saveAnalysisResult(prompt, format) {
|
|
5101
|
+
const storageDir = config_getStorageDir();
|
|
5102
|
+
if (!storageDir || 'string' != typeof storageDir) throw new Error("\u5B58\u50A8\u76EE\u5F55\u914D\u7F6E\u9519\u8BEF\uFF0C\u65E0\u6CD5\u4FDD\u5B58\u5206\u6790\u7ED3\u679C");
|
|
5103
|
+
const outputDir = external_path_default().join(storageDir, 'change-analysis');
|
|
5104
|
+
if (!external_fs_default().existsSync(outputDir)) external_fs_default().mkdirSync(outputDir, {
|
|
5105
|
+
recursive: true
|
|
5106
|
+
});
|
|
5107
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
5108
|
+
const filename = `change-analysis-${timestamp}.${'json' === format ? 'json' : 'md'}`;
|
|
5109
|
+
const outputPath = external_path_default().join(outputDir, filename);
|
|
5110
|
+
if ('json' === format) {
|
|
5111
|
+
const jsonData = {
|
|
5112
|
+
timestamp: new Date().toISOString(),
|
|
5113
|
+
prompt,
|
|
5114
|
+
type: 'change-analysis'
|
|
5115
|
+
};
|
|
5116
|
+
external_fs_default().writeFileSync(outputPath, JSON.stringify(jsonData, null, 2), 'utf-8');
|
|
5117
|
+
} else external_fs_default().writeFileSync(outputPath, prompt, 'utf-8');
|
|
5118
|
+
return outputPath;
|
|
5119
|
+
}
|
|
5120
|
+
const external_sharp_namespaceObject = require("sharp");
|
|
5121
|
+
var external_sharp_default = /*#__PURE__*/ __webpack_require__.n(external_sharp_namespaceObject);
|
|
4687
5122
|
async function invokeFlow(params, streamCb) {
|
|
4688
5123
|
const { appid = 'app-ESTcrkOPOmkxdrO0120mE4s1', data, timeout = 1800000 } = params;
|
|
4689
5124
|
const controller = new AbortController();
|
|
@@ -4880,24 +5315,6 @@ ${requirementSection}
|
|
|
4880
5315
|
throw new Error("\u6587\u4EF6\u4E0A\u4F20\u5931\u8D25: \u672A\u77E5\u9519\u8BEF");
|
|
4881
5316
|
}
|
|
4882
5317
|
}
|
|
4883
|
-
var types_AnalysisType = /*#__PURE__*/ function(AnalysisType) {
|
|
4884
|
-
AnalysisType["GENERAL"] = "general";
|
|
4885
|
-
AnalysisType["OBJECTS"] = "objects";
|
|
4886
|
-
AnalysisType["TEXT"] = "text";
|
|
4887
|
-
AnalysisType["SCENE"] = "scene";
|
|
4888
|
-
AnalysisType["PEOPLE"] = "people";
|
|
4889
|
-
AnalysisType["TECHNICAL"] = "technical";
|
|
4890
|
-
AnalysisType["UI_DESIGN"] = "ui_design";
|
|
4891
|
-
AnalysisType["REQUIREMENT"] = "requirement";
|
|
4892
|
-
AnalysisType["CUSTOM"] = "custom";
|
|
4893
|
-
return AnalysisType;
|
|
4894
|
-
}({});
|
|
4895
|
-
var types_DetailLevel = /*#__PURE__*/ function(DetailLevel) {
|
|
4896
|
-
DetailLevel["BRIEF"] = "brief";
|
|
4897
|
-
DetailLevel["DETAILED"] = "detailed";
|
|
4898
|
-
DetailLevel["COMPREHENSIVE"] = "comprehensive";
|
|
4899
|
-
return DetailLevel;
|
|
4900
|
-
}({});
|
|
4901
5318
|
class ImageAnalysisError extends Error {
|
|
4902
5319
|
code;
|
|
4903
5320
|
context;
|
|
@@ -4913,7 +5330,6 @@ ${requirementSection}
|
|
|
4913
5330
|
AnalysisErrorCodes["IMAGE_CORRUPTED"] = "IMAGE_CORRUPTED";
|
|
4914
5331
|
AnalysisErrorCodes["ANALYSIS_FAILED"] = "ANALYSIS_FAILED";
|
|
4915
5332
|
AnalysisErrorCodes["AI_SERVICE_ERROR"] = "AI_SERVICE_ERROR";
|
|
4916
|
-
AnalysisErrorCodes["INVALID_ANALYSIS_TYPE"] = "INVALID_ANALYSIS_TYPE";
|
|
4917
5333
|
return AnalysisErrorCodes;
|
|
4918
5334
|
}({});
|
|
4919
5335
|
const SUPPORTED_IMAGE_FORMATS = [
|
|
@@ -4930,7 +5346,7 @@ ${requirementSection}
|
|
|
4930
5346
|
async analyzeImage(imagePath, context) {
|
|
4931
5347
|
const startTime = Date.now();
|
|
4932
5348
|
try {
|
|
4933
|
-
|
|
5349
|
+
logger_logger.info("\u5F00\u59CB\u56FE\u7247\u5185\u5BB9\u5206\u6790", {
|
|
4934
5350
|
imagePath: imagePath
|
|
4935
5351
|
});
|
|
4936
5352
|
await this.validateParams(imagePath);
|
|
@@ -4944,20 +5360,16 @@ ${requirementSection}
|
|
|
4944
5360
|
});
|
|
4945
5361
|
const result = {
|
|
4946
5362
|
basic_info: basicInfo,
|
|
4947
|
-
analysis_type: types_AnalysisType.GENERAL,
|
|
4948
|
-
detail_level: types_DetailLevel.DETAILED,
|
|
4949
5363
|
content: analysisContent,
|
|
4950
|
-
processing_time_ms: processingTime
|
|
4951
|
-
confidence_score: this.calculateConfidenceScore(analysisContent)
|
|
5364
|
+
processing_time_ms: processingTime
|
|
4952
5365
|
};
|
|
4953
|
-
|
|
5366
|
+
logger_logger.info("\u56FE\u7247\u5185\u5BB9\u5206\u6790\u5B8C\u6210", {
|
|
4954
5367
|
imagePath: imagePath,
|
|
4955
|
-
processingTimeMs: processingTime
|
|
4956
|
-
confidenceScore: result.confidence_score
|
|
5368
|
+
processingTimeMs: processingTime
|
|
4957
5369
|
});
|
|
4958
5370
|
return result;
|
|
4959
5371
|
} catch (error) {
|
|
4960
|
-
|
|
5372
|
+
logger_logger.error("\u56FE\u7247\u5185\u5BB9\u5206\u6790\u5931\u8D25", {
|
|
4961
5373
|
error,
|
|
4962
5374
|
params: {
|
|
4963
5375
|
image_path: imagePath
|
|
@@ -4970,7 +5382,7 @@ ${requirementSection}
|
|
|
4970
5382
|
try {
|
|
4971
5383
|
const imageBase64 = await this.imageToBase64(imagePath);
|
|
4972
5384
|
const prompt = this.buildAnalysisPrompt(imagePath, basicInfo, context);
|
|
4973
|
-
const aiResponse = await
|
|
5385
|
+
const aiResponse = await openai_openAIService.analyzeImage({
|
|
4974
5386
|
image_base64: imageBase64,
|
|
4975
5387
|
prompt: prompt,
|
|
4976
5388
|
system_prompt: "\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684\u56FE\u7247\u5206\u6790\u4E13\u5BB6\uFF0C\u8BF7\u4E25\u683C\u57FA\u4E8E\u4EFB\u52A1\u6307\u4EE4\u5206\u6790\u56FE\u7247\u5185\u5BB9\uFF0C\u4E0D\u504F\u79BB\u4EFB\u52A1\u8303\u56F4\uFF0C\u4E0D\u6DFB\u52A0\u65E0\u5173\u4FE1\u606F\u3002"
|
|
@@ -4978,13 +5390,26 @@ ${requirementSection}
|
|
|
4978
5390
|
const analysisContent = this.parseAIResponse(aiResponse);
|
|
4979
5391
|
return analysisContent;
|
|
4980
5392
|
} catch (error) {
|
|
4981
|
-
|
|
5393
|
+
logger_logger.warn("\u4E3BAI\u5206\u6790\u5931\u8D25\uFF0C\u5C1D\u8BD5Dify\u515C\u5E95\u5206\u6790", {
|
|
4982
5394
|
error,
|
|
4983
5395
|
params: {
|
|
4984
5396
|
image_path: imagePath
|
|
4985
5397
|
}
|
|
4986
5398
|
});
|
|
4987
|
-
|
|
5399
|
+
try {
|
|
5400
|
+
return await this.fallbackToDifyAnalysis(imagePath, context);
|
|
5401
|
+
} catch (fallbackError) {
|
|
5402
|
+
logger_logger.error("Dify\u515C\u5E95\u5206\u6790\u4E5F\u5931\u8D25", {
|
|
5403
|
+
error: fallbackError,
|
|
5404
|
+
params: {
|
|
5405
|
+
image_path: imagePath
|
|
5406
|
+
}
|
|
5407
|
+
});
|
|
5408
|
+
throw new ImageAnalysisError("\u8BC6\u522B\u56FE\u7247\u5931\u8D25", types_AnalysisErrorCodes.ANALYSIS_FAILED, {
|
|
5409
|
+
originalError: error,
|
|
5410
|
+
fallbackError
|
|
5411
|
+
});
|
|
5412
|
+
}
|
|
4988
5413
|
}
|
|
4989
5414
|
}
|
|
4990
5415
|
buildAnalysisPrompt(imagePath, basicInfo, context) {
|
|
@@ -4998,48 +5423,18 @@ ${requirementSection}
|
|
|
4998
5423
|
const contextPrompt = context ? `
|
|
4999
5424
|
|
|
5000
5425
|
## \u{5206}\u{6790}\u{6307}\u{4EE4}
|
|
5001
|
-
${context}
|
|
5002
|
-
|
|
5003
|
-
\u{8BF7}\u{4E25}\u{683C}\u{6839}\u{636E}\u{4EE5}\u{4E0A}\u{6307}\u{4EE4}\u{8FDB}\u{884C}\u{56FE}\u{7247}\u{5206}\u{6790}\u{FF0C}\u{4E0D}\u{504F}\u{79BB}\u{4EFB}\u{52A1}\u{8303}\u{56F4}\u{FF0C}\u{4E0D}\u{6DFB}\u{52A0}\u{65E0}\u{5173}\u{4FE1}\u{606F}\u{3002}` : '';
|
|
5004
|
-
const strictPrompt = `
|
|
5005
|
-
|
|
5006
|
-
## \u{5206}\u{6790}\u{8981}\u{6C42}
|
|
5007
|
-
\u{4F60}\u{5FC5}\u{987B}\u{4E25}\u{683C}\u{6839}\u{636E}\u{4EFB}\u{52A1}\u{6307}\u{4EE4}\u{5206}\u{6790}\u{56FE}\u{7247}\u{5185}\u{5BB9}\u{FF0C}\u{4E0D}\u{504F}\u{79BB}\u{7528}\u{6237}\u{8981}\u{6C42}\u{7684}\u{8303}\u{56F4}\u{FF0C}\u{4E0D}\u{6DFB}\u{52A0}\u{65E0}\u{5173}\u{4FE1}\u{606F}\u{3002}\u{786E}\u{4FDD}\u{5206}\u{6790}\u{7ED3}\u{679C}\u{6E05}\u{6670}\u{51C6}\u{786E}\u{FF0C}\u{53EA}\u{5305}\u{542B}\u{4E0E}\u{4EFB}\u{52A1}\u{76F8}\u{5173}\u{7684}\u{4FE1}\u{606F}\u{3002}`;
|
|
5008
|
-
return `${basePrompt}${contextPrompt}${strictPrompt}`.trim();
|
|
5426
|
+
${context}` : '';
|
|
5427
|
+
return `${basePrompt}${contextPrompt}`.trim();
|
|
5009
5428
|
}
|
|
5010
5429
|
parseAIResponse(aiResponse) {
|
|
5011
5430
|
if (!aiResponse || 'string' != typeof aiResponse) throw new ImageAnalysisError("AI\u670D\u52A1\u8FD4\u56DE\u65E0\u6548\u54CD\u5E94", types_AnalysisErrorCodes.AI_SERVICE_ERROR, {
|
|
5012
5431
|
aiResponse
|
|
5013
5432
|
});
|
|
5014
|
-
|
|
5015
|
-
|
|
5016
|
-
|
|
5017
|
-
});
|
|
5018
|
-
const cleanedResponse = this.cleanAIResponse(aiResponse);
|
|
5019
|
-
const content = {
|
|
5020
|
-
summary: cleanedResponse,
|
|
5021
|
-
details: {
|
|
5022
|
-
raw_response: aiResponse
|
|
5023
|
-
},
|
|
5433
|
+
return {
|
|
5434
|
+
summary: aiResponse.trim(),
|
|
5435
|
+
details: {},
|
|
5024
5436
|
tags: []
|
|
5025
5437
|
};
|
|
5026
|
-
logger.debug("\u5185\u5BB9\u89E3\u6790\u7ED3\u679C", {
|
|
5027
|
-
summaryLength: content.summary.length
|
|
5028
|
-
});
|
|
5029
|
-
return content;
|
|
5030
|
-
}
|
|
5031
|
-
cleanAIResponse(response) {
|
|
5032
|
-
let cleaned = response.trim();
|
|
5033
|
-
const patternsToRemove = [
|
|
5034
|
-
/^(?:好的|明白了|根据您的要求|根据分析|根据图片内容)[,,::]\s*/i,
|
|
5035
|
-
/(?:以下是|下面是对|分析结果如下|内容如下)[::]\s*/i,
|
|
5036
|
-
/\n(?:总结|结论|综上所述)[::]\s*/i
|
|
5037
|
-
];
|
|
5038
|
-
patternsToRemove.forEach((pattern)=>{
|
|
5039
|
-
cleaned = cleaned.replace(pattern, '');
|
|
5040
|
-
});
|
|
5041
|
-
cleaned = cleaned.replace(/\n{3,}/g, '\n\n').trim();
|
|
5042
|
-
return cleaned;
|
|
5043
5438
|
}
|
|
5044
5439
|
async getImageBasicInfo(imagePath) {
|
|
5045
5440
|
try {
|
|
@@ -5052,9 +5447,7 @@ ${context}
|
|
|
5052
5447
|
width: metadata.width || 0,
|
|
5053
5448
|
height: metadata.height || 0
|
|
5054
5449
|
},
|
|
5055
|
-
file_size: stats.size
|
|
5056
|
-
color_space: metadata.space,
|
|
5057
|
-
has_alpha: metadata.hasAlpha
|
|
5450
|
+
file_size: stats.size
|
|
5058
5451
|
};
|
|
5059
5452
|
} catch (error) {
|
|
5060
5453
|
throw new ImageAnalysisError(`\u{65E0}\u{6CD5}\u{8BFB}\u{53D6}\u{56FE}\u{7247}\u{4FE1}\u{606F}: ${imagePath}`, types_AnalysisErrorCodes.IMAGE_CORRUPTED, {
|
|
@@ -5108,135 +5501,6 @@ ${context}
|
|
|
5108
5501
|
supportedFormats: SUPPORTED_IMAGE_FORMATS
|
|
5109
5502
|
});
|
|
5110
5503
|
}
|
|
5111
|
-
calculateConfidenceScore(content) {
|
|
5112
|
-
let score = 0.5;
|
|
5113
|
-
if (content.summary.length > 100) score += 0.2;
|
|
5114
|
-
if (content.tags && content.tags.length > 0) score += 0.1;
|
|
5115
|
-
if (content.objects && content.objects.length > 0) score += 0.1;
|
|
5116
|
-
if (content.text_content && content.text_content.length > 0) score += 0.1;
|
|
5117
|
-
return Math.min(score, 1.0);
|
|
5118
|
-
}
|
|
5119
|
-
extractValue(text, pattern) {
|
|
5120
|
-
const match = text.match(pattern);
|
|
5121
|
-
return match ? match[1].trim() : null;
|
|
5122
|
-
}
|
|
5123
|
-
extractBoolean(text, pattern) {
|
|
5124
|
-
return pattern.test(text);
|
|
5125
|
-
}
|
|
5126
|
-
extractList(text, pattern) {
|
|
5127
|
-
const match = text.match(pattern);
|
|
5128
|
-
if (match) return match[1].split(/[,,、]/).map((item)=>item.trim()).filter(Boolean);
|
|
5129
|
-
return [];
|
|
5130
|
-
}
|
|
5131
|
-
extractUIComponents(text) {
|
|
5132
|
-
const components = [];
|
|
5133
|
-
const componentPatterns = [
|
|
5134
|
-
/按钮|button/gi,
|
|
5135
|
-
/输入框|input|文本框/gi,
|
|
5136
|
-
/导航|navigation|nav/gi,
|
|
5137
|
-
/卡片|card/gi,
|
|
5138
|
-
/列表|list/gi,
|
|
5139
|
-
/表格|table/gi
|
|
5140
|
-
];
|
|
5141
|
-
componentPatterns.forEach((pattern, index)=>{
|
|
5142
|
-
const matches = text.match(pattern);
|
|
5143
|
-
if (matches) components.push({
|
|
5144
|
-
type: [
|
|
5145
|
-
'button',
|
|
5146
|
-
'input',
|
|
5147
|
-
'navigation',
|
|
5148
|
-
'card',
|
|
5149
|
-
'list',
|
|
5150
|
-
'table'
|
|
5151
|
-
][index],
|
|
5152
|
-
name: matches[0],
|
|
5153
|
-
position: {
|
|
5154
|
-
x: 0,
|
|
5155
|
-
y: 0,
|
|
5156
|
-
width: 0,
|
|
5157
|
-
height: 0
|
|
5158
|
-
},
|
|
5159
|
-
properties: {}
|
|
5160
|
-
});
|
|
5161
|
-
});
|
|
5162
|
-
return components;
|
|
5163
|
-
}
|
|
5164
|
-
extractColorScheme(text) {
|
|
5165
|
-
return {
|
|
5166
|
-
primary_colors: this.extractList(text, /主色调[::]\s*([^\n]+)/i),
|
|
5167
|
-
secondary_colors: this.extractList(text, /辅助色[::]\s*([^\n]+)/i),
|
|
5168
|
-
background_colors: this.extractList(text, /背景色[::]\s*([^\n]+)/i)
|
|
5169
|
-
};
|
|
5170
|
-
}
|
|
5171
|
-
extractTypography(text) {
|
|
5172
|
-
return {
|
|
5173
|
-
fonts: this.extractList(text, /字体[::]\s*([^\n]+)/i),
|
|
5174
|
-
text_hierarchy: this.extractList(text, /文字层次[::]\s*([^\n]+)/i)
|
|
5175
|
-
};
|
|
5176
|
-
}
|
|
5177
|
-
extractNavigation(text) {
|
|
5178
|
-
return {
|
|
5179
|
-
type: this.extractValue(text, /导航类型[::]\s*([^\n]+)/i) || "\u672A\u8BC6\u522B",
|
|
5180
|
-
elements: this.extractList(text, /导航元素[::]\s*([^\n]+)/i)
|
|
5181
|
-
};
|
|
5182
|
-
}
|
|
5183
|
-
extractFunctionalRequirements(text) {
|
|
5184
|
-
const requirements = [];
|
|
5185
|
-
const funcReqPattern = /功能需求[::][\s\S]*?(?=非功能需求|用户故事|$)/i;
|
|
5186
|
-
const match = text.match(funcReqPattern);
|
|
5187
|
-
if (match) {
|
|
5188
|
-
const reqText = match[0];
|
|
5189
|
-
const reqItems = reqText.split(/\d+\./).filter((item)=>item.trim());
|
|
5190
|
-
reqItems.forEach((item, index)=>{
|
|
5191
|
-
if (item.trim()) requirements.push({
|
|
5192
|
-
id: `FR-${index + 1}`,
|
|
5193
|
-
title: item.split('\n')[0].trim(),
|
|
5194
|
-
description: item.trim(),
|
|
5195
|
-
priority: 'medium',
|
|
5196
|
-
category: "\u529F\u80FD\u9700\u6C42",
|
|
5197
|
-
acceptance_criteria: []
|
|
5198
|
-
});
|
|
5199
|
-
});
|
|
5200
|
-
}
|
|
5201
|
-
return requirements;
|
|
5202
|
-
}
|
|
5203
|
-
extractNonFunctionalRequirements(text) {
|
|
5204
|
-
const requirements = [];
|
|
5205
|
-
const nfrTypes = [
|
|
5206
|
-
"\u6027\u80FD",
|
|
5207
|
-
"\u5B89\u5168",
|
|
5208
|
-
"\u53EF\u7528\u6027",
|
|
5209
|
-
"\u53EF\u7EF4\u62A4\u6027",
|
|
5210
|
-
"\u53EF\u6269\u5C55\u6027"
|
|
5211
|
-
];
|
|
5212
|
-
nfrTypes.forEach((type)=>{
|
|
5213
|
-
const pattern = new RegExp(`${type}[\u{FF1A}:]\\s*([^\\n]+)`, 'i');
|
|
5214
|
-
const match = text.match(pattern);
|
|
5215
|
-
if (match) requirements.push({
|
|
5216
|
-
type: type,
|
|
5217
|
-
description: match[1].trim(),
|
|
5218
|
-
metric: '',
|
|
5219
|
-
target_value: ''
|
|
5220
|
-
});
|
|
5221
|
-
});
|
|
5222
|
-
return requirements;
|
|
5223
|
-
}
|
|
5224
|
-
extractUserStories(text) {
|
|
5225
|
-
const stories = [];
|
|
5226
|
-
const storyPattern = /作为.*?我希望.*?以便.*?/g;
|
|
5227
|
-
const matches = text.match(storyPattern);
|
|
5228
|
-
if (matches) matches.forEach((story, index)=>{
|
|
5229
|
-
const parts = story.split(/我希望|以便/);
|
|
5230
|
-
if (parts.length >= 3) stories.push({
|
|
5231
|
-
as_a: parts[0].replace("\u4F5C\u4E3A", '').trim(),
|
|
5232
|
-
i_want: parts[1].trim(),
|
|
5233
|
-
so_that: parts[2].trim(),
|
|
5234
|
-
acceptance_criteria: [],
|
|
5235
|
-
priority: 'medium'
|
|
5236
|
-
});
|
|
5237
|
-
});
|
|
5238
|
-
return stories;
|
|
5239
|
-
}
|
|
5240
5504
|
formatFileSize(bytes) {
|
|
5241
5505
|
if (0 === bytes) return '0 B';
|
|
5242
5506
|
const k = 1024;
|
|
@@ -5250,7 +5514,7 @@ ${context}
|
|
|
5250
5514
|
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;
|
|
5251
5515
|
}
|
|
5252
5516
|
async fallbackToDifyAnalysis(imagePath, context) {
|
|
5253
|
-
|
|
5517
|
+
logger_logger.info("\u5F00\u59CBDify\u515C\u5E95\u56FE\u7247\u5206\u6790", {
|
|
5254
5518
|
imagePath: imagePath,
|
|
5255
5519
|
context: context
|
|
5256
5520
|
});
|
|
@@ -5260,7 +5524,7 @@ ${context}
|
|
|
5260
5524
|
filePath: imagePath,
|
|
5261
5525
|
user: 'aico-mcp'
|
|
5262
5526
|
});
|
|
5263
|
-
|
|
5527
|
+
logger_logger.info("\u6587\u4EF6\u4E0A\u4F20\u6210\u529F\uFF0C\u6587\u4EF6ID:", uploadResult.id);
|
|
5264
5528
|
const workflowData = {
|
|
5265
5529
|
imagePath: {
|
|
5266
5530
|
type: 'image',
|
|
@@ -5273,16 +5537,15 @@ ${context}
|
|
|
5273
5537
|
appid: 'app-AvlLh0nfN4l9oz1MSW4sEAQ6',
|
|
5274
5538
|
data: workflowData
|
|
5275
5539
|
});
|
|
5276
|
-
|
|
5540
|
+
logger_logger.info("Dify\u5DE5\u4F5C\u6D41\u8C03\u7528\u6210\u529F", {
|
|
5277
5541
|
response: workflowResponse
|
|
5278
5542
|
});
|
|
5279
|
-
if (workflowResponse?.status === 'failed') throw new Error(`Dify\u{5DE5}\u{4F5C}\u{6D41}\u{6267}\u{884C}\u{5931}\u{8D25}: ${workflowResponse.error || "\u672A\u77E5\u9519\u8BEF"}`);
|
|
5280
|
-
if (workflowResponse?.status !== 'succeeded') throw new Error(`Dify\u{5DE5}\u{4F5C}\u{6D41}\u{72B6}\u{6001}\u{5F02}\u{5E38}: ${workflowResponse?.status}`);
|
|
5281
5543
|
let summary = "\u5206\u6790\u5B8C\u6210";
|
|
5282
5544
|
if ('string' == typeof workflowResponse) summary = workflowResponse;
|
|
5283
5545
|
else if (workflowResponse?.data?.text) summary = workflowResponse.data.text;
|
|
5284
5546
|
else if (workflowResponse?.answer) summary = workflowResponse.answer;
|
|
5285
5547
|
else if (workflowResponse?.outputs?.text) summary = workflowResponse.outputs.text;
|
|
5548
|
+
else if (workflowResponse?.status === 'failed') throw new Error(`Dify\u{5DE5}\u{4F5C}\u{6D41}\u{6267}\u{884C}\u{5931}\u{8D25}: ${workflowResponse.error || "\u672A\u77E5\u9519\u8BEF"}`);
|
|
5286
5549
|
return {
|
|
5287
5550
|
summary: summary,
|
|
5288
5551
|
details: {
|
|
@@ -5294,7 +5557,7 @@ ${context}
|
|
|
5294
5557
|
]
|
|
5295
5558
|
};
|
|
5296
5559
|
} catch (error) {
|
|
5297
|
-
|
|
5560
|
+
logger_logger.error("Dify\u670D\u52A1\u8C03\u7528\u5931\u8D25", {
|
|
5298
5561
|
error: error instanceof Error ? error.message : String(error),
|
|
5299
5562
|
imagePath: imagePath,
|
|
5300
5563
|
context: context
|
|
@@ -5317,11 +5580,166 @@ ${context}
|
|
|
5317
5580
|
handler: async (args)=>{
|
|
5318
5581
|
const analyzer = new ImageAnalyzer();
|
|
5319
5582
|
try {
|
|
5320
|
-
|
|
5583
|
+
logger_logger.info("\u56FE\u7247\u5185\u5BB9\u7406\u89E3\u667A\u80FD\u4F53\u5F00\u59CB\u6267\u884C", {
|
|
5321
5584
|
imagePath: args.image_path
|
|
5322
5585
|
});
|
|
5323
5586
|
const validatedArgs = ImageAnalysisParamsSchema.parse(args);
|
|
5324
5587
|
const result = await analyzer.analyzeImage(validatedArgs.image_path, validatedArgs.context);
|
|
5588
|
+
const systemGuidance = `
|
|
5589
|
+
# \u{7CFB}\u{7EDF}\u{5316}\u{56FE}\u{7247}\u{5185}\u{5BB9}\u{5206}\u{6790}\u{667A}\u{80FD}\u{4F53}\u{6267}\u{884C}\u{6D41}\u{7A0B}
|
|
5590
|
+
|
|
5591
|
+
## \u{5206}\u{6790}\u{53C2}\u{6570}
|
|
5592
|
+
- \u{56FE}\u{7247}\u{8DEF}\u{5F84}: ${validatedArgs.image_path}
|
|
5593
|
+
- \u{4E0A}\u{4E0B}\u{6587}\u{6307}\u{5BFC}: ${validatedArgs.context || "\u65E0"}
|
|
5594
|
+
- \u{56FE}\u{7247}\u{6587}\u{4EF6}: ${external_path_namespaceObject.basename(validatedArgs.image_path)}
|
|
5595
|
+
- \u{56FE}\u{7247}\u{5C3A}\u{5BF8}: ${result.basic_info.dimensions.width} \xd7 ${result.basic_info.dimensions.height} \u{50CF}\u{7D20}
|
|
5596
|
+
- \u{6587}\u{4EF6}\u{5927}\u{5C0F}: ${formatFileSize(result.basic_info.file_size)}
|
|
5597
|
+
- \u{5904}\u{7406}\u{65F6}\u{95F4}: ${result.processing_time_ms}ms
|
|
5598
|
+
|
|
5599
|
+
## TODO\u{6E05}\u{5355}\u{6807}\u{51C6}\u{6D41}\u{7A0B}
|
|
5600
|
+
|
|
5601
|
+
### 1. \u{9700}\u{6C42}\u{5206}\u{6790}
|
|
5602
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
5603
|
+
- \u{5145}\u{5206}\u{641C}\u{7D22}\u{4E0E}\u{7528}\u{6237}\u{8F93}\u{5165}\u{5185}\u{5BB9}\u{76F8}\u{5173}\u{7684}\u{8D44}\u{6E90}
|
|
5604
|
+
- \u{660E}\u{786E}\u{7528}\u{6237}\u{7684}\u{6838}\u{5FC3}\u{95EE}\u{9898}\u{3001}\u{9690}\u{542B}\u{9700}\u{6C42}\u{548C}\u{6700}\u{7EC8}\u{76EE}\u{6807}
|
|
5605
|
+
- \u{56F4}\u{7ED5}\u{95EE}\u{9898}\u{FF0C}\u{5FEB}\u{901F}\u{6784}\u{5EFA}\u{4E00}\u{4E2A}\u{77E5}\u{8BC6}\u{6846}\u{67B6}\u{3002}\u{786E}\u{5B9A}\u{56DE}\u{7B54}\u{5E94}\u{5305}\u{542B}\u{7684}\u{5173}\u{952E}\u{6982}\u{5FF5}\u{3001}\u{4E0A}\u{4E0B}\u{6587}\u{3001}\u{6B63}\u{53CD}\u{8BBA}\u{70B9}\u{548C}\u{6F5C}\u{5728}\u{7684}\u{5EF6}\u{4F38}\u{9886}\u{57DF}
|
|
5606
|
+
- \u{6839}\u{636E}\u{5145}\u{5206}\u{4E86}\u{89E3}\u{5230}\u{7684}\u{4FE1}\u{606F}\u{FF0C}\u{6E05}\u{6670}\u{5B8C}\u{6574}\u{7684}\u{590D}\u{8FF0}\u{7528}\u{6237}\u{9700}\u{6C42}\u{FF0C}\u{5E76}\u{7ED9}\u{51FA}\u{4E00}\u{4E2A}\u{9AD8}\u{5EA6}\u{6D53}\u{7F29}\u{7684}\u{3001}\u{7ED3}\u{8BBA}\u{6027}\u{7684}\u{6838}\u{5FC3}\u{89C2}\u{70B9}
|
|
5607
|
+
|
|
5608
|
+
**\u{4E0A}\u{4E0B}\u{6587}\u{5206}\u{6790}\u{FF1A}**
|
|
5609
|
+
${validatedArgs.context ? `
|
|
5610
|
+
**\u{7528}\u{6237}\u{63D0}\u{4F9B}\u{7684}\u{4E0A}\u{4E0B}\u{6587}\u{FF1A}**
|
|
5611
|
+
\`\`\`
|
|
5612
|
+
${validatedArgs.context}
|
|
5613
|
+
\`\`\`
|
|
5614
|
+
|
|
5615
|
+
**\u{5206}\u{6790}\u{91CD}\u{70B9}\u{FF1A}**
|
|
5616
|
+
- \u{6839}\u{636E}\u{4E0A}\u{4E0B}\u{6587}\u{786E}\u{5B9A}\u{5206}\u{6790}\u{65B9}\u{5411}
|
|
5617
|
+
- \u{91CD}\u{70B9}\u{5173}\u{6CE8}\u{4E0A}\u{4E0B}\u{6587}\u{4E2D}\u{63D0}\u{5230}\u{7684}\u{5173}\u{952E}\u{8981}\u{7D20}
|
|
5618
|
+
- \u{786E}\u{4FDD}\u{5206}\u{6790}\u{7ED3}\u{679C}\u{7B26}\u{5408}\u{7528}\u{6237}\u{9884}\u{671F}
|
|
5619
|
+
` : `
|
|
5620
|
+
**\u{65E0}\u{7279}\u{5B9A}\u{4E0A}\u{4E0B}\u{6587}\u{6307}\u{5BFC}**
|
|
5621
|
+
- \u{8FDB}\u{884C}\u{901A}\u{7528}\u{56FE}\u{7247}\u{5185}\u{5BB9}\u{5206}\u{6790}
|
|
5622
|
+
- \u{8BC6}\u{522B}\u{56FE}\u{7247}\u{4E2D}\u{7684}\u{4E3B}\u{8981}\u{5143}\u{7D20}\u{548C}\u{7279}\u{5F81}
|
|
5623
|
+
- \u{63D0}\u{4F9B}\u{5168}\u{9762}\u{7684}\u{56FE}\u{7247}\u{63CF}\u{8FF0}
|
|
5624
|
+
`}
|
|
5625
|
+
|
|
5626
|
+
**\u{56FE}\u{7247}\u{57FA}\u{672C}\u{4FE1}\u{606F}\u{FF1A}**
|
|
5627
|
+
- \u{6587}\u{4EF6}\u{8DEF}\u{5F84}: ${validatedArgs.image_path}
|
|
5628
|
+
- \u{56FE}\u{7247}\u{683C}\u{5F0F}: ${external_path_namespaceObject.extname(validatedArgs.image_path)}
|
|
5629
|
+
- \u{5206}\u{8FA8}\u{7387}: ${result.basic_info.dimensions.width} \xd7 ${result.basic_info.dimensions.height}
|
|
5630
|
+
- \u{6587}\u{4EF6}\u{5927}\u{5C0F}: ${formatFileSize(result.basic_info.file_size)}
|
|
5631
|
+
|
|
5632
|
+
### 2. \u{573A}\u{666F}\u{8BC6}\u{522B}
|
|
5633
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
5634
|
+
- \u{57FA}\u{4E8E}\u{9700}\u{6C42}\u{5206}\u{6790}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{627E}\u{51FA}\u{4E3B}\u{8981}\u{77DB}\u{76FE}\u{70B9}\u{FF0C}\u{5B9A}\u{4F4D}\u{6838}\u{5FC3}\u{95EE}\u{9898}\u{8282}\u{70B9}
|
|
5635
|
+
- \u{4ECE}\u{7CFB}\u{7EDF}\u{5C42}\u{9762}\u{62C6}\u{89E3}\u{4E3A}\u{53EF}\u{6267}\u{884C}\u{5B50}\u{4EFB}\u{52A1}\u{FF0C}\u{786E}\u{4FDD}\u{903B}\u{8F91}\u{94FE}\u{6761}\u{6E05}\u{6670}\u{FF0C}\u{4E0A}\u{4E0B}\u{6587}\u{4FE1}\u{606F}\u{5145}\u{8DB3}
|
|
5636
|
+
|
|
5637
|
+
**\u{5206}\u{6790}\u{7EF4}\u{5EA6}\u{FF1A}**
|
|
5638
|
+
1. **\u{5185}\u{5BB9}\u{573A}\u{666F}\u{8BC6}\u{522B}**
|
|
5639
|
+
- \u{56FE}\u{7247}\u{7C7B}\u{578B}\u{8BC6}\u{522B}\u{FF08}\u{81EA}\u{7136}\u{666F}\u{89C2}\u{3001}\u{4EBA}\u{7269}\u{3001}\u{6587}\u{6863}\u{3001}\u{56FE}\u{8868}\u{7B49}\u{FF09}
|
|
5640
|
+
- \u{4E3B}\u{8981}\u{5BF9}\u{8C61}\u{8BC6}\u{522B}
|
|
5641
|
+
- \u{573A}\u{666F}\u{73AF}\u{5883}\u{5206}\u{6790}
|
|
5642
|
+
- \u{60C5}\u{611F}\u{8272}\u{5F69}\u{5224}\u{65AD}
|
|
5643
|
+
|
|
5644
|
+
2. **\u{6280}\u{672F}\u{573A}\u{666F}\u{8BC6}\u{522B}**
|
|
5645
|
+
- \u{56FE}\u{7247}\u{8D28}\u{91CF}\u{8BC4}\u{4F30}
|
|
5646
|
+
- \u{5206}\u{8FA8}\u{7387}\u{9002}\u{7528}\u{6027}
|
|
5647
|
+
- \u{683C}\u{5F0F}\u{517C}\u{5BB9}\u{6027}
|
|
5648
|
+
- \u{538B}\u{7F29}\u{8D28}\u{91CF}\u{5206}\u{6790}
|
|
5649
|
+
|
|
5650
|
+
3. **\u{5E94}\u{7528}\u{573A}\u{666F}\u{8BC6}\u{522B}**
|
|
5651
|
+
- \u{4F7F}\u{7528}\u{573A}\u{666F}\u{5206}\u{6790}
|
|
5652
|
+
- \u{76EE}\u{6807}\u{53D7}\u{4F17}\u{8BC6}\u{522B}
|
|
5653
|
+
- \u{5546}\u{4E1A}\u{4EF7}\u{503C}\u{8BC4}\u{4F30}
|
|
5654
|
+
- \u{7248}\u{6743}\u{98CE}\u{9669}\u{5206}\u{6790}
|
|
5655
|
+
|
|
5656
|
+
### 3. \u{65B9}\u{6848}\u{8BBE}\u{8BA1}
|
|
5657
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
5658
|
+
- \u{65B9}\u{6848}\u{8BBE}\u{8BA1}\u{4F18}\u{5148}\u{590D}\u{7528}\u{73B0}\u{6709}\u{65B9}\u{6848}\u{FF0C}\u{7EC4}\u{4EF6}\u{FF0C}\u{5DE5}\u{5177}\u{65B9}\u{6CD5}\u{7B49}\u{FF0C}\u{80FD}\u{590D}\u{7528}\u{7684}\u{5C3D}\u{53EF}\u{80FD}\u{590D}\u{7528}
|
|
5659
|
+
- \u{626B}\u{63CF}\u{9879}\u{76EE}\u{4E2D}\u{4F7F}\u{7528}\u{7684}\u{6D4B}\u{8BD5}\u{6846}\u{67B6}\u{548C}\u{811A}\u{672C}\u{FF0C}\u{751F}\u{6210}\u{672C}\u{6B21}\u{9700}\u{6C42}\u{7684}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{5982}\u{679C}\u{4E0D}\u{5B58}\u{5728}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{5219}\u{7F16}\u{5199}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5230}.aico/tests\u{4E0B}\u{9762}
|
|
5660
|
+
|
|
5661
|
+
**\u{8BBE}\u{8BA1}\u{5185}\u{5BB9}\u{FF1A}**
|
|
5662
|
+
1. **\u{5206}\u{6790}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}**
|
|
5663
|
+
- \u{56FE}\u{7247}\u{5185}\u{5BB9}\u{8BC6}\u{522B}\u{7B56}\u{7565}
|
|
5664
|
+
- \u{7279}\u{5F81}\u{63D0}\u{53D6}\u{65B9}\u{6CD5}
|
|
5665
|
+
- \u{5206}\u{7C7B}\u{6807}\u{6CE8}\u{65B9}\u{6848}
|
|
5666
|
+
- \u{8D28}\u{91CF}\u{8BC4}\u{4F30}\u{6807}\u{51C6}
|
|
5667
|
+
|
|
5668
|
+
2. **\u{8F93}\u{51FA}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}**
|
|
5669
|
+
- \u{5206}\u{6790}\u{62A5}\u{544A}\u{7ED3}\u{6784}
|
|
5670
|
+
- \u{5173}\u{952E}\u{4FE1}\u{606F}\u{63D0}\u{53D6}
|
|
5671
|
+
- \u{683C}\u{5F0F}\u{5316}\u{8F93}\u{51FA}\u{89C4}\u{8303}
|
|
5672
|
+
- \u{591A}\u{8BED}\u{8A00}\u{652F}\u{6301}\u{65B9}\u{6848}
|
|
5673
|
+
|
|
5674
|
+
3. **\u{6D4B}\u{8BD5}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}**
|
|
5675
|
+
- \u{56FE}\u{7247}\u{6837}\u{672C}\u{6D4B}\u{8BD5}
|
|
5676
|
+
- \u{51C6}\u{786E}\u{6027}\u{9A8C}\u{8BC1}
|
|
5677
|
+
- \u{8FB9}\u{754C}\u{6848}\u{4F8B}\u{6D4B}\u{8BD5}
|
|
5678
|
+
- \u{6027}\u{80FD}\u{57FA}\u{51C6}\u{6D4B}\u{8BD5}
|
|
5679
|
+
|
|
5680
|
+
### 4. \u{6267}\u{884C}\u{9A8C}\u{8BC1}
|
|
5681
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
5682
|
+
- \u{6309}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}\u{7684}\u{7ED3}\u{679C}\u{8F93}\u{51FA}\u{4EE3}\u{7801}
|
|
5683
|
+
- \u{5982}\u{679C}\u{6709}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{8FD0}\u{884C}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5E76}\u{4FEE}\u{6B63}\u{76F4}\u{5230}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5168}\u{90E8}\u{901A}\u{8FC7}
|
|
5684
|
+
|
|
5685
|
+
**\u{9A8C}\u{8BC1}\u{5185}\u{5BB9}\u{FF1A}**
|
|
5686
|
+
1. **\u{56FE}\u{7247}\u{5185}\u{5BB9}\u{9A8C}\u{8BC1}**
|
|
5687
|
+
- \u{4E3B}\u{8981}\u{5BF9}\u{8C61}\u{8BC6}\u{522B}\u{51C6}\u{786E}\u{6027}
|
|
5688
|
+
- \u{573A}\u{666F}\u{63CF}\u{8FF0}\u{5B8C}\u{6574}\u{6027}
|
|
5689
|
+
- \u{7EC6}\u{8282}\u{7279}\u{5F81}\u{6355}\u{6349}
|
|
5690
|
+
- \u{4E0A}\u{4E0B}\u{6587}\u{76F8}\u{5173}\u{6027}
|
|
5691
|
+
|
|
5692
|
+
2. **\u{5206}\u{6790}\u{8D28}\u{91CF}\u{9A8C}\u{8BC1}**
|
|
5693
|
+
- \u{63CF}\u{8FF0}\u{51C6}\u{786E}\u{6027}\u{68C0}\u{67E5}
|
|
5694
|
+
- \u{5173}\u{952E}\u{4FE1}\u{606F}\u{5B8C}\u{6574}\u{6027}
|
|
5695
|
+
- \u{903B}\u{8F91}\u{4E00}\u{81F4}\u{6027}\u{9A8C}\u{8BC1}
|
|
5696
|
+
- \u{8BED}\u{8A00}\u{8868}\u{8FBE}\u{6E05}\u{6670}\u{5EA6}
|
|
5697
|
+
|
|
5698
|
+
3. **\u{6280}\u{672F}\u{6307}\u{6807}\u{9A8C}\u{8BC1}**
|
|
5699
|
+
- \u{5904}\u{7406}\u{65F6}\u{95F4}\u{6548}\u{7387}
|
|
5700
|
+
- \u{5185}\u{5B58}\u{4F7F}\u{7528}\u{4F18}\u{5316}
|
|
5701
|
+
- \u{9519}\u{8BEF}\u{5904}\u{7406}\u{673A}\u{5236}
|
|
5702
|
+
- \u{683C}\u{5F0F}\u{517C}\u{5BB9}\u{6027}
|
|
5703
|
+
|
|
5704
|
+
### 5. \u{603B}\u{7ED3}\u{53CD}\u{9988}
|
|
5705
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
5706
|
+
- \u{8F93}\u{51FA}\u{6700}\u{7EC8}\u{6267}\u{884C}\u{7684}\u{65B9}\u{6848}
|
|
5707
|
+
- \u{66F4}\u{65B0}TODO\u{6E05}\u{5355}
|
|
5708
|
+
- \u{6839}\u{636E}\u{60C5}\u{51B5}\u{63D0}\u{4F9B}\u{4E00}\u{4E9B}\u{524D}\u{77BB}\u{6027}\u{7684}\u{601D}\u{8003}\u{6216}\u{5EFA}\u{8BAE}
|
|
5709
|
+
|
|
5710
|
+
**\u{8F93}\u{51FA}\u{5185}\u{5BB9}\u{FF1A}**
|
|
5711
|
+
1. **\u{56FE}\u{7247}\u{5206}\u{6790}\u{62A5}\u{544A}**
|
|
5712
|
+
- \u{57FA}\u{672C}\u{4FE1}\u{606F}\u{6C47}\u{603B}
|
|
5713
|
+
- \u{5185}\u{5BB9}\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}
|
|
5714
|
+
- \u{7279}\u{5F81}\u{63D0}\u{53D6}\u{7ED3}\u{679C}
|
|
5715
|
+
- \u{8D28}\u{91CF}\u{8BC4}\u{4F30}\u{62A5}\u{544A}
|
|
5716
|
+
|
|
5717
|
+
2. **\u{5E94}\u{7528}\u{5EFA}\u{8BAE}**
|
|
5718
|
+
- \u{4F7F}\u{7528}\u{573A}\u{666F}\u{5EFA}\u{8BAE}
|
|
5719
|
+
- \u{4F18}\u{5316}\u{6539}\u{8FDB}\u{5EFA}\u{8BAE}
|
|
5720
|
+
- \u{6280}\u{672F}\u{5904}\u{7406}\u{5EFA}\u{8BAE}
|
|
5721
|
+
- \u{5546}\u{4E1A}\u{5E94}\u{7528}\u{5EFA}\u{8BAE}
|
|
5722
|
+
|
|
5723
|
+
## \u{5F53}\u{524D}\u{5206}\u{6790}\u{7ED3}\u{679C}
|
|
5724
|
+
|
|
5725
|
+
**\u{56FE}\u{7247}\u{63CF}\u{8FF0}\u{FF1A}**
|
|
5726
|
+
${result.content.summary}
|
|
5727
|
+
|
|
5728
|
+
**\u{8BE6}\u{7EC6}\u{5206}\u{6790}\u{7ED3}\u{679C}\u{FF1A}**
|
|
5729
|
+
- \u{57FA}\u{672C}\u{4FE1}\u{606F}\u{5DF2}\u{83B7}\u{53D6}
|
|
5730
|
+
- \u{5185}\u{5BB9}\u{5206}\u{6790}\u{5DF2}\u{5B8C}\u{6210}
|
|
5731
|
+
- \u{5904}\u{7406}\u{65F6}\u{95F4}: ${result.processing_time_ms}ms
|
|
5732
|
+
- \u{5206}\u{6790}\u{72B6}\u{6001}: \u{6210}\u{529F}
|
|
5733
|
+
|
|
5734
|
+
---
|
|
5735
|
+
|
|
5736
|
+
**\u{6267}\u{884C}\u{539F}\u{5219}\u{FF1A}**
|
|
5737
|
+
- \u{521B}\u{5EFA}\u{5E76}\u{6301}\u{7EED}\u{66F4}\u{65B0}TODO\u{6E05}\u{5355}
|
|
5738
|
+
- \u{6301}\u{7EED}\u{5DE5}\u{4F5C}\u{81F3}\u{5B8C}\u{6210}
|
|
5739
|
+
- \u{786E}\u{4FDD}\u{5206}\u{6790}\u{7684}\u{51C6}\u{786E}\u{6027}\u{548C}\u{5168}\u{9762}\u{6027}
|
|
5740
|
+
- \u{4E25}\u{683C}\u{57FA}\u{4E8E}\u{4EFB}\u{52A1}\u{6307}\u{4EE4}\u{8FDB}\u{884C}\u{5206}\u{6790}
|
|
5741
|
+
- \u{4E0D}\u{504F}\u{79BB}\u{4EFB}\u{52A1}\u{8303}\u{56F4}\u{FF0C}\u{8F93}\u{51FA}\u{6E05}\u{6670}\u{51C6}\u{786E}\u{7684}\u{7ED3}\u{679C}
|
|
5742
|
+
`;
|
|
5325
5743
|
return {
|
|
5326
5744
|
content: [
|
|
5327
5745
|
{
|
|
@@ -5337,12 +5755,14 @@ ${context}
|
|
|
5337
5755
|
\u{56FE}\u{7247}\u{63CF}\u{8FF0}\u{FF1A}
|
|
5338
5756
|
${result.content.summary}
|
|
5339
5757
|
|
|
5340
|
-
|
|
5758
|
+
---
|
|
5759
|
+
|
|
5760
|
+
${systemGuidance}`
|
|
5341
5761
|
}
|
|
5342
5762
|
]
|
|
5343
5763
|
};
|
|
5344
5764
|
} catch (error) {
|
|
5345
|
-
|
|
5765
|
+
logger_logger.error("\u56FE\u7247\u5185\u5BB9\u7406\u89E3\u667A\u80FD\u4F53\u6267\u884C\u5931\u8D25", {
|
|
5346
5766
|
error,
|
|
5347
5767
|
args
|
|
5348
5768
|
});
|
|
@@ -5373,51 +5793,16 @@ ${result.content.tags && result.content.tags.length > 0 ? `\u{5173}\u{952E}\u{68
|
|
|
5373
5793
|
[types_AnalysisErrorCodes.UNSUPPORTED_FORMAT]: "\u4E0D\u652F\u6301\u7684\u56FE\u7247\u683C\u5F0F",
|
|
5374
5794
|
[types_AnalysisErrorCodes.FILE_NOT_FOUND]: "\u56FE\u7247\u6587\u4EF6\u672A\u627E\u5230",
|
|
5375
5795
|
[types_AnalysisErrorCodes.IMAGE_CORRUPTED]: "\u56FE\u7247\u6587\u4EF6\u635F\u574F",
|
|
5376
|
-
[types_AnalysisErrorCodes.ANALYSIS_FAILED]: "\
|
|
5377
|
-
[types_AnalysisErrorCodes.AI_SERVICE_ERROR]: "AI\u670D\u52A1\u9519\u8BEF"
|
|
5378
|
-
[types_AnalysisErrorCodes.INVALID_ANALYSIS_TYPE]: "\u65E0\u6548\u7684\u5206\u6790\u7C7B\u578B"
|
|
5796
|
+
[types_AnalysisErrorCodes.ANALYSIS_FAILED]: "\u56FE\u7247\u8BC6\u522B\u5931\u8D25",
|
|
5797
|
+
[types_AnalysisErrorCodes.AI_SERVICE_ERROR]: "AI\u670D\u52A1\u9519\u8BEF"
|
|
5379
5798
|
};
|
|
5380
5799
|
const errorTitle = errorMessages[error.code] || "\u5206\u6790\u9519\u8BEF";
|
|
5381
|
-
return
|
|
5382
|
-
# \u{274C} ${errorTitle}
|
|
5383
|
-
|
|
5384
|
-
## \u{9519}\u{8BEF}\u{4FE1}\u{606F}
|
|
5385
|
-
${error.message}
|
|
5386
|
-
|
|
5387
|
-
## \u{9519}\u{8BEF}\u{4EE3}\u{7801}
|
|
5388
|
-
${error.code}
|
|
5389
|
-
|
|
5390
|
-
## \u{89E3}\u{51B3}\u{5EFA}\u{8BAE}
|
|
5391
|
-
${getErrorSuggestion(error.code)}
|
|
5392
|
-
|
|
5393
|
-
## \u{652F}\u{6301}\u{7684}\u{529F}\u{80FD}
|
|
5394
|
-
- **\u{56FE}\u{7247}\u{683C}\u{5F0F}**: ${SUPPORTED_IMAGE_FORMATS.join(", ")}
|
|
5395
|
-
- **\u{5206}\u{6790}\u{7C7B}\u{578B}**: \u{901A}\u{7528}\u{3001}\u{7269}\u{4F53}\u{8BC6}\u{522B}\u{3001}\u{6587}\u{5B57}\u{8BC6}\u{522B}\u{3001}\u{573A}\u{666F}\u{5206}\u{6790}\u{3001}\u{4EBA}\u{7269}\u{5206}\u{6790}\u{3001}\u{6280}\u{672F}\u{5206}\u{6790}\u{3001}UI\u{8BBE}\u{8BA1}\u{7A3F}\u{3001}\u{9700}\u{6C42}\u{8BC6}\u{522B}\u{3001}\u{81EA}\u{5B9A}\u{4E49}
|
|
5396
|
-
- **\u{8BE6}\u{7EC6}\u{7A0B}\u{5EA6}**: \u{7B80}\u{8981}\u{3001}\u{8BE6}\u{7EC6}\u{3001}\u{5168}\u{9762}
|
|
5397
|
-
|
|
5398
|
-
## \u{9519}\u{8BEF}\u{8BE6}\u{60C5}
|
|
5399
|
-
- **\u{65F6}\u{95F4}**: ${new Date().toISOString()}
|
|
5400
|
-
- **\u{4E0A}\u{4E0B}\u{6587}**: ${error.context ? JSON.stringify(error.context, null, 2) : "\u65E0"}
|
|
5401
|
-
|
|
5402
|
-
\u{8BF7}\u{6839}\u{636E}\u{4E0A}\u{8FF0}\u{4FE1}\u{606F}\u{8C03}\u{6574}\u{53C2}\u{6570}\u{540E}\u{91CD}\u{8BD5}\u{3002}
|
|
5403
|
-
`.trim();
|
|
5800
|
+
return `\u{274C} ${errorTitle}\n\n${error.message}`;
|
|
5404
5801
|
}
|
|
5405
5802
|
function formatUnknownErrorResponse(error) {
|
|
5406
|
-
return
|
|
5407
|
-
# \u{274C} \u{7CFB}\u{7EDF}\u{9519}\u{8BEF}
|
|
5408
|
-
|
|
5409
|
-
\u{56FE}\u{7247}\u{5185}\u{5BB9}\u{5206}\u{6790}\u{8FC7}\u{7A0B}\u{4E2D}\u{53D1}\u{751F}\u{672A}\u{77E5}\u{9519}\u{8BEF}\u{FF0C}\u{8BF7}\u{7A0D}\u{540E}\u{91CD}\u{8BD5}\u{6216}\u{8054}\u{7CFB}\u{6280}\u{672F}\u{652F}\u{6301}\u{3002}
|
|
5803
|
+
return `\u{274C} \u{7CFB}\u{7EDF}\u{9519}\u{8BEF}
|
|
5410
5804
|
|
|
5411
|
-
|
|
5412
|
-
**\u{65F6}\u{95F4}**: ${new Date().toISOString()}
|
|
5413
|
-
|
|
5414
|
-
## \u{5EFA}\u{8BAE}
|
|
5415
|
-
1. \u{68C0}\u{67E5}\u{56FE}\u{7247}\u{6587}\u{4EF6}\u{662F}\u{5426}\u{5B58}\u{5728}\u{4E14}\u{53EF}\u{8BFB}
|
|
5416
|
-
2. \u{786E}\u{8BA4}\u{56FE}\u{7247}\u{683C}\u{5F0F}\u{662F}\u{5426}\u{652F}\u{6301}
|
|
5417
|
-
3. \u{9A8C}\u{8BC1}\u{56FE}\u{7247}\u{6587}\u{4EF6}\u{662F}\u{5426}\u{635F}\u{574F}
|
|
5418
|
-
4. \u{68C0}\u{67E5}\u{7F51}\u{7EDC}\u{8FDE}\u{63A5}\u{662F}\u{5426}\u{6B63}\u{5E38}
|
|
5419
|
-
5. \u{5982}\u{95EE}\u{9898}\u{6301}\u{7EED}\u{FF0C}\u{8BF7}\u{8054}\u{7CFB}\u{6280}\u{672F}\u{652F}\u{6301}
|
|
5420
|
-
`.trim();
|
|
5805
|
+
${error?.message || "\u672A\u77E5\u9519\u8BEF"}`;
|
|
5421
5806
|
}
|
|
5422
5807
|
function formatFileSize(bytes) {
|
|
5423
5808
|
if (0 === bytes) return "0 B";
|
|
@@ -5431,18 +5816,6 @@ ${getErrorSuggestion(error.code)}
|
|
|
5431
5816
|
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
5432
5817
|
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;
|
|
5433
5818
|
}
|
|
5434
|
-
function getErrorSuggestion(errorCode) {
|
|
5435
|
-
const suggestions = {
|
|
5436
|
-
[types_AnalysisErrorCodes.INVALID_IMAGE_PATH]: "\u8BF7\u68C0\u67E5\u56FE\u7247\u8DEF\u5F84\u662F\u5426\u6B63\u786E",
|
|
5437
|
-
[types_AnalysisErrorCodes.UNSUPPORTED_FORMAT]: "\u8BF7\u4F7F\u7528\u652F\u6301\u7684\u56FE\u7247\u683C\u5F0F\uFF08jpg, png, gif\u7B49\uFF09",
|
|
5438
|
-
[types_AnalysisErrorCodes.FILE_NOT_FOUND]: "\u8BF7\u786E\u8BA4\u56FE\u7247\u6587\u4EF6\u5B58\u5728\u4E14\u8DEF\u5F84\u6B63\u786E",
|
|
5439
|
-
[types_AnalysisErrorCodes.IMAGE_CORRUPTED]: "\u8BF7\u68C0\u67E5\u56FE\u7247\u6587\u4EF6\u662F\u5426\u5B8C\u6574\u4E14\u672A\u635F\u574F",
|
|
5440
|
-
[types_AnalysisErrorCodes.ANALYSIS_FAILED]: "\u8BF7\u91CD\u8BD5\u6216\u4F7F\u7528\u4E0D\u540C\u7684\u5206\u6790\u7C7B\u578B",
|
|
5441
|
-
[types_AnalysisErrorCodes.AI_SERVICE_ERROR]: "\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u6216\u7A0D\u540E\u91CD\u8BD5",
|
|
5442
|
-
[types_AnalysisErrorCodes.INVALID_ANALYSIS_TYPE]: "\u8BF7\u4F7F\u7528\u6709\u6548\u7684\u5206\u6790\u7C7B\u578B"
|
|
5443
|
-
};
|
|
5444
|
-
return suggestions[errorCode] || "\u8BF7\u68C0\u67E5\u8F93\u5165\u53C2\u6570\u5E76\u91CD\u8BD5";
|
|
5445
|
-
}
|
|
5446
5819
|
class ImageConversionError extends Error {
|
|
5447
5820
|
code;
|
|
5448
5821
|
context;
|
|
@@ -5491,7 +5864,7 @@ ${getErrorSuggestion(error.code)}
|
|
|
5491
5864
|
const inputPaths = Array.isArray(params.input_paths) ? params.input_paths : [
|
|
5492
5865
|
params.input_paths
|
|
5493
5866
|
];
|
|
5494
|
-
|
|
5867
|
+
logger_logger.info("\u5F00\u59CB\u56FE\u7247\u8F6C\u6362", {
|
|
5495
5868
|
inputCount: inputPaths.length,
|
|
5496
5869
|
outputFormat: params.output_format,
|
|
5497
5870
|
isBatch: inputPaths.length > 1
|
|
@@ -5509,7 +5882,7 @@ ${getErrorSuggestion(error.code)}
|
|
|
5509
5882
|
processing_time_ms: processingTime
|
|
5510
5883
|
}
|
|
5511
5884
|
};
|
|
5512
|
-
|
|
5885
|
+
logger_logger.info("\u56FE\u7247\u8F6C\u6362\u5B8C\u6210", {
|
|
5513
5886
|
total: results.length,
|
|
5514
5887
|
successful,
|
|
5515
5888
|
failed,
|
|
@@ -5517,7 +5890,7 @@ ${getErrorSuggestion(error.code)}
|
|
|
5517
5890
|
});
|
|
5518
5891
|
return batchResult;
|
|
5519
5892
|
} catch (error) {
|
|
5520
|
-
|
|
5893
|
+
logger_logger.error("\u56FE\u7247\u8F6C\u6362\u5931\u8D25", {
|
|
5521
5894
|
error,
|
|
5522
5895
|
params
|
|
5523
5896
|
});
|
|
@@ -5531,14 +5904,14 @@ ${getErrorSuggestion(error.code)}
|
|
|
5531
5904
|
await this.ensureOutputDirectory(outputPath);
|
|
5532
5905
|
const metadata = await this.getImageMetadata(inputPath);
|
|
5533
5906
|
const result = await this.performConversion(inputPath, outputPath, params, metadata);
|
|
5534
|
-
|
|
5907
|
+
logger_logger.info("\u5355\u5F20\u56FE\u7247\u8F6C\u6362\u6210\u529F", {
|
|
5535
5908
|
inputPath,
|
|
5536
5909
|
outputPath,
|
|
5537
5910
|
format: params.output_format
|
|
5538
5911
|
});
|
|
5539
5912
|
return result;
|
|
5540
5913
|
} catch (error) {
|
|
5541
|
-
|
|
5914
|
+
logger_logger.error("\u5355\u5F20\u56FE\u7247\u8F6C\u6362\u5931\u8D25", {
|
|
5542
5915
|
error,
|
|
5543
5916
|
inputPath
|
|
5544
5917
|
});
|
|
@@ -5735,7 +6108,7 @@ ${getErrorSuggestion(error.code)}
|
|
|
5735
6108
|
initializeProjectRoot();
|
|
5736
6109
|
const converter = new ImageConverter();
|
|
5737
6110
|
try {
|
|
5738
|
-
|
|
6111
|
+
logger_logger.info("\u56FE\u7247\u683C\u5F0F\u8F6C\u6362\u667A\u80FD\u4F53\u5F00\u59CB\u6267\u884C", {
|
|
5739
6112
|
inputPaths: args.input_paths,
|
|
5740
6113
|
outputFormat: args.output_format,
|
|
5741
6114
|
isBatch: Array.isArray(args.input_paths)
|
|
@@ -5760,7 +6133,7 @@ ${getErrorSuggestion(error.code)}
|
|
|
5760
6133
|
]
|
|
5761
6134
|
};
|
|
5762
6135
|
} catch (error) {
|
|
5763
|
-
|
|
6136
|
+
logger_logger.error("\u56FE\u7247\u683C\u5F0F\u8F6C\u6362\u667A\u80FD\u4F53\u6267\u884C\u5931\u8D25", {
|
|
5764
6137
|
error,
|
|
5765
6138
|
args
|
|
5766
6139
|
});
|
|
@@ -5871,7 +6244,7 @@ ${error.message}
|
|
|
5871
6244
|
${error.code}
|
|
5872
6245
|
|
|
5873
6246
|
## \u{89E3}\u{51B3}\u{5EFA}\u{8BAE}
|
|
5874
|
-
${
|
|
6247
|
+
${getErrorSuggestion(error.code)}
|
|
5875
6248
|
|
|
5876
6249
|
## \u{652F}\u{6301}\u{7684}\u{683C}\u{5F0F}
|
|
5877
6250
|
- **\u{8F93}\u{5165}\u{683C}\u{5F0F}**: ${SUPPORTED_INPUT_FORMATS.join(", ")}
|
|
@@ -5915,7 +6288,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
5915
6288
|
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
5916
6289
|
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;
|
|
5917
6290
|
}
|
|
5918
|
-
function
|
|
6291
|
+
function getErrorSuggestion(errorCode) {
|
|
5919
6292
|
const suggestions = {
|
|
5920
6293
|
[types_ConversionErrorCodes.INVALID_INPUT_PATH]: "\u8BF7\u68C0\u67E5\u8F93\u5165\u8DEF\u5F84\u662F\u5426\u6B63\u786E",
|
|
5921
6294
|
[types_ConversionErrorCodes.UNSUPPORTED_FORMAT]: "\u8BF7\u4F7F\u7528\u652F\u6301\u7684\u56FE\u7247\u683C\u5F0F",
|
|
@@ -6010,7 +6383,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6010
6383
|
});
|
|
6011
6384
|
class ImagePreprocessor {
|
|
6012
6385
|
async validateImage(imagePath) {
|
|
6013
|
-
|
|
6386
|
+
logger_logger.info("ImagePreprocessor: \u5F00\u59CB\u9A8C\u8BC1\u56FE\u7247", imagePath);
|
|
6014
6387
|
const result = {
|
|
6015
6388
|
isValid: false,
|
|
6016
6389
|
fileExists: false,
|
|
@@ -6022,7 +6395,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6022
6395
|
result.formatSupported = types_SUPPORTED_IMAGE_FORMATS.includes(fileExtension);
|
|
6023
6396
|
if (!result.formatSupported) {
|
|
6024
6397
|
result.errorMessage = `\u{4E0D}\u{652F}\u{6301}\u{7684}\u{56FE}\u{7247}\u{683C}\u{5F0F}: ${fileExtension}`;
|
|
6025
|
-
|
|
6398
|
+
logger_logger.warn("\u4E0D\u652F\u6301\u7684\u56FE\u7247\u683C\u5F0F", {
|
|
6026
6399
|
imagePath,
|
|
6027
6400
|
format: fileExtension
|
|
6028
6401
|
});
|
|
@@ -6031,12 +6404,12 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6031
6404
|
try {
|
|
6032
6405
|
await external_node_fs_promises_namespaceObject.access(imagePath, external_node_fs_namespaceObject.constants.R_OK);
|
|
6033
6406
|
result.readable = true;
|
|
6034
|
-
|
|
6407
|
+
logger_logger.debug("\u56FE\u7247\u6587\u4EF6\u53EF\u8BFB", {
|
|
6035
6408
|
imagePath
|
|
6036
6409
|
});
|
|
6037
6410
|
} catch (error) {
|
|
6038
6411
|
result.errorMessage = "\u56FE\u7247\u6587\u4EF6\u65E0\u6CD5\u8BFB\u53D6\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u6743\u9650";
|
|
6039
|
-
|
|
6412
|
+
logger_logger.warn("\u56FE\u7247\u6587\u4EF6\u65E0\u6CD5\u8BFB\u53D6", {
|
|
6040
6413
|
imagePath
|
|
6041
6414
|
});
|
|
6042
6415
|
return result;
|
|
@@ -6045,32 +6418,32 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6045
6418
|
const metadata = await external_sharp_default()(imagePath).metadata();
|
|
6046
6419
|
if (!metadata.width || !metadata.height) {
|
|
6047
6420
|
result.errorMessage = "\u65E0\u6CD5\u83B7\u53D6\u56FE\u7247\u5C3A\u5BF8\u4FE1\u606F\uFF0C\u53EF\u80FD\u6587\u4EF6\u5DF2\u635F\u574F";
|
|
6048
|
-
|
|
6421
|
+
logger_logger.warn("\u65E0\u6CD5\u83B7\u53D6\u56FE\u7247\u5C3A\u5BF8", {
|
|
6049
6422
|
imagePath
|
|
6050
6423
|
});
|
|
6051
6424
|
return result;
|
|
6052
6425
|
}
|
|
6053
|
-
|
|
6426
|
+
logger_logger.debug("\u56FE\u7247\u5143\u6570\u636E\u83B7\u53D6\u6210\u529F", {
|
|
6054
6427
|
imagePath,
|
|
6055
6428
|
width: metadata.width,
|
|
6056
6429
|
height: metadata.height
|
|
6057
6430
|
});
|
|
6058
6431
|
} catch (error) {
|
|
6059
6432
|
result.errorMessage = "\u56FE\u7247\u6587\u4EF6\u683C\u5F0F\u9519\u8BEF\u6216\u5DF2\u635F\u574F";
|
|
6060
|
-
|
|
6433
|
+
logger_logger.warn("\u56FE\u7247\u6587\u4EF6\u635F\u574F", {
|
|
6061
6434
|
imagePath,
|
|
6062
6435
|
error: error instanceof Error ? error.message : error
|
|
6063
6436
|
});
|
|
6064
6437
|
return result;
|
|
6065
6438
|
}
|
|
6066
6439
|
result.isValid = true;
|
|
6067
|
-
|
|
6440
|
+
logger_logger.info("\u56FE\u7247\u9A8C\u8BC1\u6210\u529F", {
|
|
6068
6441
|
imagePath
|
|
6069
6442
|
});
|
|
6070
6443
|
return result;
|
|
6071
6444
|
} catch (error) {
|
|
6072
6445
|
result.errorMessage = `\u{56FE}\u{7247}\u{9A8C}\u{8BC1}\u{8FC7}\u{7A0B}\u{4E2D}\u{53D1}\u{751F}\u{9519}\u{8BEF}: ${error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"}`;
|
|
6073
|
-
|
|
6446
|
+
logger_logger.error("\u56FE\u7247\u9A8C\u8BC1\u5931\u8D25", {
|
|
6074
6447
|
imagePath,
|
|
6075
6448
|
error
|
|
6076
6449
|
});
|
|
@@ -6078,7 +6451,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6078
6451
|
}
|
|
6079
6452
|
}
|
|
6080
6453
|
async getImageInfo(imagePath) {
|
|
6081
|
-
|
|
6454
|
+
logger_logger.info("ImagePreprocessor: \u5F00\u59CB\u83B7\u53D6\u56FE\u7247\u4FE1\u606F", imagePath);
|
|
6082
6455
|
try {
|
|
6083
6456
|
const stats = await external_node_fs_promises_namespaceObject.stat(imagePath);
|
|
6084
6457
|
const fileName = external_node_path_namespaceObject.basename(imagePath);
|
|
@@ -6114,7 +6487,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6114
6487
|
fileName,
|
|
6115
6488
|
createdAt: stats.birthtime
|
|
6116
6489
|
};
|
|
6117
|
-
|
|
6490
|
+
logger_logger.info("\u56FE\u7247\u4FE1\u606F\u83B7\u53D6\u6210\u529F", {
|
|
6118
6491
|
imagePath,
|
|
6119
6492
|
width,
|
|
6120
6493
|
height,
|
|
@@ -6125,7 +6498,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6125
6498
|
return imageInfo;
|
|
6126
6499
|
} catch (error) {
|
|
6127
6500
|
if (error instanceof ImageRecognitionError) throw error;
|
|
6128
|
-
|
|
6501
|
+
logger_logger.error("\u83B7\u53D6\u56FE\u7247\u4FE1\u606F\u5931\u8D25", {
|
|
6129
6502
|
imagePath,
|
|
6130
6503
|
error
|
|
6131
6504
|
});
|
|
@@ -6140,7 +6513,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6140
6513
|
const heightCondition = height >= LONG_IMAGE_THRESHOLDS.MIN_HEIGHT;
|
|
6141
6514
|
const aspectRatioCondition = aspectRatio <= 1 / LONG_IMAGE_THRESHOLDS.MIN_ASPECT_RATIO;
|
|
6142
6515
|
const isLong = heightCondition && aspectRatioCondition;
|
|
6143
|
-
|
|
6516
|
+
logger_logger.debug("\u957F\u56FE\u68C0\u6D4B\u7ED3\u679C", {
|
|
6144
6517
|
width,
|
|
6145
6518
|
height,
|
|
6146
6519
|
aspectRatio: aspectRatio.toFixed(2),
|
|
@@ -6151,7 +6524,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6151
6524
|
return isLong;
|
|
6152
6525
|
}
|
|
6153
6526
|
async assessImageQuality(imagePath) {
|
|
6154
|
-
|
|
6527
|
+
logger_logger.info("ImagePreprocessor: \u5F00\u59CB\u8BC4\u4F30\u56FE\u7247\u8D28\u91CF", {
|
|
6155
6528
|
imagePath
|
|
6156
6529
|
});
|
|
6157
6530
|
try {
|
|
@@ -6193,7 +6566,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6193
6566
|
clarity: clarityScore,
|
|
6194
6567
|
recommendation
|
|
6195
6568
|
};
|
|
6196
|
-
|
|
6569
|
+
logger_logger.info("\u56FE\u7247\u8D28\u91CF\u8BC4\u4F30\u5B8C\u6210", {
|
|
6197
6570
|
imagePath,
|
|
6198
6571
|
totalScore: totalScore.toFixed(3),
|
|
6199
6572
|
resolutionScore: resolutionScore.toFixed(3),
|
|
@@ -6204,7 +6577,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6204
6577
|
return assessment;
|
|
6205
6578
|
} catch (error) {
|
|
6206
6579
|
if (error instanceof ImageRecognitionError) throw error;
|
|
6207
|
-
|
|
6580
|
+
logger_logger.error("\u56FE\u7247\u8D28\u91CF\u8BC4\u4F30\u5931\u8D25", {
|
|
6208
6581
|
imagePath,
|
|
6209
6582
|
error
|
|
6210
6583
|
});
|
|
@@ -6220,7 +6593,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6220
6593
|
}
|
|
6221
6594
|
class ConfigCalculator {
|
|
6222
6595
|
async calculateSegmentConfig(imageInfo, qualityAssessment, maxSegments = LONG_IMAGE_THRESHOLDS.MAX_SEGMENTS) {
|
|
6223
|
-
|
|
6596
|
+
logger_logger.info("ConfigCalculator: \u5F00\u59CB\u8BA1\u7B97\u5206\u6BB5\u914D\u7F6E", {
|
|
6224
6597
|
width: imageInfo.width,
|
|
6225
6598
|
height: imageInfo.height,
|
|
6226
6599
|
isLongImage: imageInfo.isLongImage
|
|
@@ -6236,7 +6609,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6236
6609
|
],
|
|
6237
6610
|
estimatedTime: this.estimateSegmentProcessingTime(1, imageInfo.size)
|
|
6238
6611
|
};
|
|
6239
|
-
|
|
6612
|
+
logger_logger.info("\u975E\u957F\u56FE\uFF0C\u4F7F\u7528\u5355\u6BB5\u914D\u7F6E", config);
|
|
6240
6613
|
return config;
|
|
6241
6614
|
}
|
|
6242
6615
|
const segmentHeight = this.calculateOptimalSegmentHeight(imageInfo, qualityAssessment);
|
|
@@ -6255,13 +6628,13 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6255
6628
|
processingOrder,
|
|
6256
6629
|
estimatedTime
|
|
6257
6630
|
};
|
|
6258
|
-
|
|
6631
|
+
logger_logger.info("\u5206\u6BB5\u914D\u7F6E\u8BA1\u7B97\u5B8C\u6210", {
|
|
6259
6632
|
...config,
|
|
6260
6633
|
estimatedTimeMinutes: (estimatedTime / 60000).toFixed(1)
|
|
6261
6634
|
});
|
|
6262
6635
|
return config;
|
|
6263
6636
|
} catch (error) {
|
|
6264
|
-
|
|
6637
|
+
logger_logger.error("\u5206\u6BB5\u914D\u7F6E\u8BA1\u7B97\u5931\u8D25", {
|
|
6265
6638
|
error,
|
|
6266
6639
|
imageInfo
|
|
6267
6640
|
});
|
|
@@ -6291,7 +6664,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6291
6664
|
return Math.max(overlapHeight, LONG_IMAGE_THRESHOLDS.MIN_OVERLAP);
|
|
6292
6665
|
}
|
|
6293
6666
|
calculateConcurrencyConfig(imageSize, segmentCount = 1) {
|
|
6294
|
-
|
|
6667
|
+
logger_logger.info("ConfigCalculator: \u5F00\u59CB\u8BA1\u7B97\u5E76\u53D1\u914D\u7F6E", {
|
|
6295
6668
|
imageSize: `${(imageSize / 1024 / 1024).toFixed(2)}MB`,
|
|
6296
6669
|
segmentCount
|
|
6297
6670
|
});
|
|
@@ -6313,7 +6686,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6313
6686
|
delayBetweenBatches,
|
|
6314
6687
|
memoryLimit: PERFORMANCE_LIMITS.MAX_MEMORY_MB
|
|
6315
6688
|
};
|
|
6316
|
-
|
|
6689
|
+
logger_logger.info("\u5E76\u53D1\u914D\u7F6E\u8BA1\u7B97\u5B8C\u6210", {
|
|
6317
6690
|
...config,
|
|
6318
6691
|
systemInfo: {
|
|
6319
6692
|
totalMemoryGB: (totalMemoryMB / 1024).toFixed(1),
|
|
@@ -6325,7 +6698,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6325
6698
|
});
|
|
6326
6699
|
return config;
|
|
6327
6700
|
} catch (error) {
|
|
6328
|
-
|
|
6701
|
+
logger_logger.error("\u5E76\u53D1\u914D\u7F6E\u8BA1\u7B97\u5931\u8D25", {
|
|
6329
6702
|
error,
|
|
6330
6703
|
imageSize,
|
|
6331
6704
|
segmentCount
|
|
@@ -6342,7 +6715,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6342
6715
|
return this.estimateSegmentProcessingTime(segmentCount, imageSize);
|
|
6343
6716
|
}
|
|
6344
6717
|
estimateSegmentProcessingTime(segmentCount, imageSize) {
|
|
6345
|
-
|
|
6718
|
+
logger_logger.info("ConfigCalculator: \u5F00\u59CB\u9884\u4F30\u5904\u7406\u65F6\u95F4", {
|
|
6346
6719
|
segmentCount,
|
|
6347
6720
|
imageSize
|
|
6348
6721
|
});
|
|
@@ -6360,7 +6733,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6360
6733
|
const startupOverhead = 2000;
|
|
6361
6734
|
const finalizationOverhead = 1000;
|
|
6362
6735
|
const estimatedTime = totalTime + startupOverhead + finalizationOverhead;
|
|
6363
|
-
|
|
6736
|
+
logger_logger.info("\u5904\u7406\u65F6\u95F4\u9884\u4F30\u5B8C\u6210", {
|
|
6364
6737
|
segmentCount,
|
|
6365
6738
|
baseTimePerSegment,
|
|
6366
6739
|
concurrencyEfficiency,
|
|
@@ -6369,7 +6742,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6369
6742
|
});
|
|
6370
6743
|
return estimatedTime;
|
|
6371
6744
|
} catch (error) {
|
|
6372
|
-
|
|
6745
|
+
logger_logger.error("\u5904\u7406\u65F6\u95F4\u9884\u4F30\u5931\u8D25", {
|
|
6373
6746
|
error,
|
|
6374
6747
|
segmentCount,
|
|
6375
6748
|
imageSize
|
|
@@ -6380,7 +6753,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6380
6753
|
}
|
|
6381
6754
|
class analyzer_ImageAnalyzer {
|
|
6382
6755
|
async analyzeLongImage(imagePath, imageInfo, segmentConfig, concurrencyConfig, apiPreference = 'auto') {
|
|
6383
|
-
|
|
6756
|
+
logger_logger.info("ImageAnalyzer: \u5F00\u59CB\u5206\u6790\u957F\u56FE", {
|
|
6384
6757
|
imagePath,
|
|
6385
6758
|
totalSegments: segmentConfig.totalSegments,
|
|
6386
6759
|
maxConcurrency: concurrencyConfig.maxConcurrency
|
|
@@ -6414,7 +6787,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6414
6787
|
outputPath: '',
|
|
6415
6788
|
success: 0 === summary.failedSegments
|
|
6416
6789
|
};
|
|
6417
|
-
|
|
6790
|
+
logger_logger.info("\u957F\u56FE\u5206\u6790\u5B8C\u6210", {
|
|
6418
6791
|
imagePath,
|
|
6419
6792
|
totalSegments: summary.totalSegments,
|
|
6420
6793
|
successfulSegments: summary.successfulSegments,
|
|
@@ -6423,7 +6796,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6423
6796
|
});
|
|
6424
6797
|
return result;
|
|
6425
6798
|
} catch (error) {
|
|
6426
|
-
|
|
6799
|
+
logger_logger.error("\u957F\u56FE\u5206\u6790\u5931\u8D25", {
|
|
6427
6800
|
imagePath,
|
|
6428
6801
|
error
|
|
6429
6802
|
});
|
|
@@ -6439,7 +6812,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6439
6812
|
const segments = await this.generateSegments(imagePath, imageInfo, segmentConfig);
|
|
6440
6813
|
for(let i = 0; i < segments.length; i += batchSize){
|
|
6441
6814
|
const batch = segments.slice(i, i + batchSize);
|
|
6442
|
-
|
|
6815
|
+
logger_logger.info(`\u{5904}\u{7406}\u{6279}\u{6B21} ${Math.floor(i / batchSize) + 1}/${Math.ceil(segments.length / batchSize)}`, {
|
|
6443
6816
|
batchSize: batch.length,
|
|
6444
6817
|
startIndex: i
|
|
6445
6818
|
});
|
|
@@ -6447,7 +6820,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6447
6820
|
try {
|
|
6448
6821
|
return await this.analyzeSegment(buffer, info, apiPreference);
|
|
6449
6822
|
} catch (error) {
|
|
6450
|
-
|
|
6823
|
+
logger_logger.error(`\u{6BB5}\u{843D} ${info.index} \u{5206}\u{6790}\u{5931}\u{8D25}`, {
|
|
6451
6824
|
error
|
|
6452
6825
|
});
|
|
6453
6826
|
return {
|
|
@@ -6469,7 +6842,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6469
6842
|
}
|
|
6470
6843
|
async analyzeSegment(imageBuffer, segmentInfo, apiPreference = 'auto') {
|
|
6471
6844
|
const startTime = Date.now();
|
|
6472
|
-
|
|
6845
|
+
logger_logger.info("ImageAnalyzer: \u5F00\u59CB\u5206\u6790\u56FE\u7247\u6BB5\u843D", {
|
|
6473
6846
|
segmentIndex: segmentInfo.index,
|
|
6474
6847
|
totalSegments: segmentInfo.totalSegments,
|
|
6475
6848
|
isFirstSegment: segmentInfo.isFirstSegment,
|
|
@@ -6484,7 +6857,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6484
6857
|
try {
|
|
6485
6858
|
if ('glm-4v' === apiPreference || 'auto' === apiPreference) {
|
|
6486
6859
|
apiUsed = 'glm-4v-flash';
|
|
6487
|
-
aiResponse = await
|
|
6860
|
+
aiResponse = await openai_openAIService.analyzeImage({
|
|
6488
6861
|
image_base64: base64Image,
|
|
6489
6862
|
prompt,
|
|
6490
6863
|
system_prompt: systemPrompt,
|
|
@@ -6494,7 +6867,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6494
6867
|
});
|
|
6495
6868
|
} else if ('moonshot' === apiPreference) {
|
|
6496
6869
|
apiUsed = 'kimi-latest';
|
|
6497
|
-
aiResponse = await
|
|
6870
|
+
aiResponse = await openai_openAIService.analyzeImage({
|
|
6498
6871
|
image_base64: base64Image,
|
|
6499
6872
|
prompt,
|
|
6500
6873
|
system_prompt: systemPrompt,
|
|
@@ -6504,13 +6877,13 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6504
6877
|
});
|
|
6505
6878
|
}
|
|
6506
6879
|
} catch (primaryError) {
|
|
6507
|
-
|
|
6880
|
+
logger_logger.warn(`\u{4E3B}\u{8981}API ${apiUsed} \u{8C03}\u{7528}\u{5931}\u{8D25}\u{FF0C}\u{5C1D}\u{8BD5}\u{5907}\u{7528}API`, {
|
|
6508
6881
|
error: primaryError instanceof Error ? primaryError.message : primaryError
|
|
6509
6882
|
});
|
|
6510
6883
|
try {
|
|
6511
6884
|
if ('kimi-latest' !== apiUsed) {
|
|
6512
6885
|
apiUsed = 'kimi-latest';
|
|
6513
|
-
aiResponse = await
|
|
6886
|
+
aiResponse = await openai_openAIService.analyzeImage({
|
|
6514
6887
|
image_base64: base64Image,
|
|
6515
6888
|
prompt,
|
|
6516
6889
|
system_prompt: systemPrompt,
|
|
@@ -6520,7 +6893,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6520
6893
|
});
|
|
6521
6894
|
} else {
|
|
6522
6895
|
apiUsed = 'glm-4v-flash';
|
|
6523
|
-
aiResponse = await
|
|
6896
|
+
aiResponse = await openai_openAIService.analyzeImage({
|
|
6524
6897
|
image_base64: base64Image,
|
|
6525
6898
|
prompt,
|
|
6526
6899
|
system_prompt: systemPrompt,
|
|
@@ -6551,7 +6924,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6551
6924
|
totalTokens: Math.ceil((prompt.length + aiResponse.length) / 4)
|
|
6552
6925
|
}
|
|
6553
6926
|
};
|
|
6554
|
-
|
|
6927
|
+
logger_logger.info("\u6BB5\u843D\u5206\u6790\u5B8C\u6210", {
|
|
6555
6928
|
segmentIndex: segmentInfo.index,
|
|
6556
6929
|
textLength: textContent.length,
|
|
6557
6930
|
descriptionLength: imageDescription.length,
|
|
@@ -6562,7 +6935,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6562
6935
|
return result;
|
|
6563
6936
|
} catch (error) {
|
|
6564
6937
|
const processingTime = Date.now() - startTime;
|
|
6565
|
-
|
|
6938
|
+
logger_logger.error("\u6BB5\u843D\u5206\u6790\u5931\u8D25", {
|
|
6566
6939
|
segmentIndex: segmentInfo.index,
|
|
6567
6940
|
error,
|
|
6568
6941
|
processingTimeMs: processingTime
|
|
@@ -6646,7 +7019,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6646
7019
|
let textContent = '';
|
|
6647
7020
|
let imageDescription = '';
|
|
6648
7021
|
let confidence = 0.9;
|
|
6649
|
-
|
|
7022
|
+
logger_logger.debug("AI\u54CD\u5E94\u539F\u59CB\u5185\u5BB9", {
|
|
6650
7023
|
responseLength: response.length,
|
|
6651
7024
|
responsePreview: response.substring(0, 200) + (response.length > 200 ? '...' : '')
|
|
6652
7025
|
});
|
|
@@ -6656,7 +7029,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6656
7029
|
textContent = '';
|
|
6657
7030
|
imageDescription = '';
|
|
6658
7031
|
confidence = 0.9;
|
|
6659
|
-
|
|
7032
|
+
logger_logger.debug("\u68C0\u6D4B\u5230\u65E0\u6587\u5B57\u5185\u5BB9\u6807\u8BC6");
|
|
6660
7033
|
return {
|
|
6661
7034
|
textContent,
|
|
6662
7035
|
imageDescription,
|
|
@@ -6671,14 +7044,14 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6671
7044
|
const chineseRatio = chineseCharCount / totalCharCount;
|
|
6672
7045
|
confidence = Math.min(0.9, 0.6 + 0.3 * chineseRatio);
|
|
6673
7046
|
} else confidence = totalCharCount > 10 ? 0.8 : 0.6;
|
|
6674
|
-
|
|
7047
|
+
logger_logger.debug("AI\u54CD\u5E94\u89E3\u6790\u7ED3\u679C", {
|
|
6675
7048
|
textContentLength: textContent.length,
|
|
6676
7049
|
chineseCharCount,
|
|
6677
7050
|
totalCharCount,
|
|
6678
7051
|
confidence
|
|
6679
7052
|
});
|
|
6680
7053
|
} catch (error) {
|
|
6681
|
-
|
|
7054
|
+
logger_logger.warn("AI\u54CD\u5E94\u89E3\u6790\u5931\u8D25\uFF0C\u4F7F\u7528\u539F\u59CB\u54CD\u5E94", {
|
|
6682
7055
|
error
|
|
6683
7056
|
});
|
|
6684
7057
|
textContent = response.trim();
|
|
@@ -6738,7 +7111,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6738
7111
|
}
|
|
6739
7112
|
async processImage(imagePath) {
|
|
6740
7113
|
const startTime = Date.now();
|
|
6741
|
-
|
|
7114
|
+
logger_logger.info("ImageRecognitionProcessor: \u5F00\u59CB\u5904\u7406\u56FE\u7247", {
|
|
6742
7115
|
imagePath
|
|
6743
7116
|
});
|
|
6744
7117
|
try {
|
|
@@ -6749,7 +7122,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6749
7122
|
});
|
|
6750
7123
|
const imageInfo = await this.preprocessor.getImageInfo(imagePath);
|
|
6751
7124
|
const qualityAssessment = await this.preprocessor.assessImageQuality(imagePath);
|
|
6752
|
-
|
|
7125
|
+
logger_logger.info("\u56FE\u7247\u4FE1\u606F\u83B7\u53D6\u5B8C\u6210", {
|
|
6753
7126
|
width: imageInfo.width,
|
|
6754
7127
|
height: imageInfo.height,
|
|
6755
7128
|
isLongImage: imageInfo.isLongImage,
|
|
@@ -6757,7 +7130,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6757
7130
|
});
|
|
6758
7131
|
const segmentConfig = await this.configCalculator.calculateSegmentConfig(imageInfo, qualityAssessment, 20);
|
|
6759
7132
|
const concurrencyConfig = this.configCalculator.calculateConcurrencyConfig(imageInfo.size, segmentConfig.totalSegments);
|
|
6760
|
-
|
|
7133
|
+
logger_logger.info("\u5206\u6BB5\u914D\u7F6E\u8BA1\u7B97\u5B8C\u6210", {
|
|
6761
7134
|
totalSegments: segmentConfig.totalSegments,
|
|
6762
7135
|
segmentHeight: segmentConfig.segmentHeight,
|
|
6763
7136
|
maxConcurrency: concurrencyConfig.maxConcurrency
|
|
@@ -6765,7 +7138,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6765
7138
|
const analysisResult = await this.analyzer.analyzeLongImage(imagePath, imageInfo, segmentConfig, concurrencyConfig, 'auto');
|
|
6766
7139
|
const outputPath = await this.generateSingleOutputFile(imageInfo, analysisResult.segmentResults, analysisResult.summary);
|
|
6767
7140
|
const totalTime = Date.now() - startTime;
|
|
6768
|
-
|
|
7141
|
+
logger_logger.info("\u56FE\u7247\u5904\u7406\u5B8C\u6210", {
|
|
6769
7142
|
outputPath,
|
|
6770
7143
|
totalSegments: analysisResult.summary.totalSegments,
|
|
6771
7144
|
successfulSegments: analysisResult.summary.successfulSegments,
|
|
@@ -6784,7 +7157,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6784
7157
|
}
|
|
6785
7158
|
};
|
|
6786
7159
|
} catch (error) {
|
|
6787
|
-
|
|
7160
|
+
logger_logger.error("\u56FE\u7247\u5904\u7406\u5931\u8D25", {
|
|
6788
7161
|
imagePath,
|
|
6789
7162
|
error
|
|
6790
7163
|
});
|
|
@@ -6808,7 +7181,7 @@ ${image_converter_getErrorSuggestion(error.code)}
|
|
|
6808
7181
|
}
|
|
6809
7182
|
}
|
|
6810
7183
|
async generateSingleOutputFile(imageInfo, segmentResults, summary) {
|
|
6811
|
-
const baseDir =
|
|
7184
|
+
const baseDir = config_getStorageDir();
|
|
6812
7185
|
const dateDir = new Date().toISOString().split('T')[0];
|
|
6813
7186
|
const outputDirectory = external_path_namespaceObject.join(baseDir, 'image-recognition', dateDir);
|
|
6814
7187
|
await external_fs_namespaceObject.promises.mkdir(outputDirectory, {
|
|
@@ -6839,7 +7212,7 @@ ${allTextContent || "\u672A\u8BC6\u522B\u5230\u6587\u5B57\u5185\u5BB9"}
|
|
|
6839
7212
|
**\u{8BC6}\u{522B}\u{5B8C}\u{6210}\u{65F6}\u{95F4}**: ${new Date().toLocaleString('zh-CN')}
|
|
6840
7213
|
`;
|
|
6841
7214
|
await external_fs_namespaceObject.promises.writeFile(outputPath, content, 'utf8');
|
|
6842
|
-
|
|
7215
|
+
logger_logger.info("\u8F93\u51FA\u6587\u4EF6\u751F\u6210\u5B8C\u6210", {
|
|
6843
7216
|
outputPath,
|
|
6844
7217
|
fileName,
|
|
6845
7218
|
contentLength: content.length
|
|
@@ -6855,14 +7228,14 @@ ${allTextContent || "\u672A\u8BC6\u522B\u5230\u6587\u5B57\u5185\u5BB9"}
|
|
|
6855
7228
|
},
|
|
6856
7229
|
handler: async (args)=>{
|
|
6857
7230
|
initializeProjectRoot();
|
|
6858
|
-
|
|
7231
|
+
logger_logger.info("\u56FE\u7247\u5185\u5BB9\u8BC6\u522B\u667A\u80FD\u4F53: \u5F00\u59CB\u5904\u7406", {
|
|
6859
7232
|
args
|
|
6860
7233
|
});
|
|
6861
7234
|
try {
|
|
6862
7235
|
const { imagePath } = ImageRecognitionParamsSchema.parse(args);
|
|
6863
7236
|
const processor = new ImageRecognitionProcessor();
|
|
6864
7237
|
const result = await processor.processImage(imagePath);
|
|
6865
|
-
|
|
7238
|
+
logger_logger.info("\u56FE\u7247\u5185\u5BB9\u8BC6\u522B\u667A\u80FD\u4F53: \u5904\u7406\u5B8C\u6210", {
|
|
6866
7239
|
outputPath: result.outputPath,
|
|
6867
7240
|
summary: result.summary
|
|
6868
7241
|
});
|
|
@@ -6888,7 +7261,7 @@ ${allTextContent || "\u672A\u8BC6\u522B\u5230\u6587\u5B57\u5185\u5BB9"}
|
|
|
6888
7261
|
]
|
|
6889
7262
|
};
|
|
6890
7263
|
} catch (error) {
|
|
6891
|
-
|
|
7264
|
+
logger_logger.error("\u56FE\u7247\u5185\u5BB9\u8BC6\u522B\u667A\u80FD\u4F53: \u5904\u7406\u5931\u8D25", {
|
|
6892
7265
|
error
|
|
6893
7266
|
});
|
|
6894
7267
|
return {
|
|
@@ -6929,8 +7302,8 @@ ${allTextContent || "\u672A\u8BC6\u522B\u5230\u6587\u5B57\u5185\u5BB9"}
|
|
|
6929
7302
|
if (!filePath) throw new Error("\u6587\u4EF6\u8DEF\u5F84\u53C2\u6570\u7F3A\u5931\uFF0C\u8BF7\u63D0\u4F9B filePath \u53C2\u6570");
|
|
6930
7303
|
try {
|
|
6931
7304
|
if (!isValidExcelPath(filePath)) throw new Error(`\u{6587}\u{4EF6}\u{683C}\u{5F0F}\u{4E0D}\u{652F}\u{6301}\u{FF0C}\u{8BF7}\u{63D0}\u{4F9B}\u{6709}\u{6548}\u{7684}Excel\u{6587}\u{4EF6}\u{8DEF}\u{5F84}(.xlsx, .xls, .xlsm): ${filePath}`);
|
|
6932
|
-
const resolvedPath = await
|
|
6933
|
-
|
|
7305
|
+
const resolvedPath = await common_validateAndResolvePath(filePath);
|
|
7306
|
+
logger_logger.info("\u5F00\u59CB\u8BFB\u53D6Excel\u6587\u4EF6", {
|
|
6934
7307
|
tool: 'read_excel',
|
|
6935
7308
|
originalPath: filePath,
|
|
6936
7309
|
resolvedPath: resolvedPath,
|
|
@@ -6969,7 +7342,7 @@ ${allTextContent || "\u672A\u8BC6\u522B\u5230\u6587\u5B57\u5185\u5BB9"}
|
|
|
6969
7342
|
columnCount: filteredData.length > 0 ? Object.keys(filteredData[0]).length : 0,
|
|
6970
7343
|
range: range
|
|
6971
7344
|
};
|
|
6972
|
-
const jsonDir = external_path_default().join(
|
|
7345
|
+
const jsonDir = external_path_default().join(config_getStorageDir(), 'excel');
|
|
6973
7346
|
const baseName = external_path_default().basename(filePath, external_path_default().extname(filePath));
|
|
6974
7347
|
const outputDir = external_path_default().join(jsonDir, baseName);
|
|
6975
7348
|
await promises_namespaceObject.mkdir(outputDir, {
|
|
@@ -6977,7 +7350,7 @@ ${allTextContent || "\u672A\u8BC6\u522B\u5230\u6587\u5B57\u5185\u5BB9"}
|
|
|
6977
7350
|
});
|
|
6978
7351
|
const jsonFilePath = external_path_default().join(outputDir, `${baseName}_${sheetName}.json`);
|
|
6979
7352
|
await promises_namespaceObject.writeFile(jsonFilePath, JSON.stringify(filteredData, null, 2), 'utf8');
|
|
6980
|
-
|
|
7353
|
+
logger_logger.info("Excel\u8BFB\u53D6\u5B8C\u6210", {
|
|
6981
7354
|
file: filePath,
|
|
6982
7355
|
sheet: sheetName,
|
|
6983
7356
|
rows: filteredData.length,
|
|
@@ -7009,7 +7382,7 @@ ${JSON.stringify(filteredData.slice(0, 3), null, 2)}
|
|
|
7009
7382
|
} catch (error) {
|
|
7010
7383
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
7011
7384
|
const osInfo = `[${process.platform}]`;
|
|
7012
|
-
|
|
7385
|
+
logger_logger.error(`Excel\u{8BFB}\u{53D6}\u{5931}\u{8D25} ${osInfo}: ${errorMsg}`, {
|
|
7013
7386
|
tool: "read_excel",
|
|
7014
7387
|
filePath,
|
|
7015
7388
|
resolvedPath: error.resolvedPath || filePath,
|
|
@@ -7072,7 +7445,7 @@ ${JSON.stringify(filteredData.slice(0, 3), null, 2)}
|
|
|
7072
7445
|
try {
|
|
7073
7446
|
let jsonData = [];
|
|
7074
7447
|
if ('string' == typeof data) try {
|
|
7075
|
-
const resolvedPath = await
|
|
7448
|
+
const resolvedPath = await common_validateAndResolvePath(data);
|
|
7076
7449
|
const fileContent = await promises_namespaceObject.readFile(resolvedPath, 'utf8');
|
|
7077
7450
|
jsonData = JSON.parse(fileContent);
|
|
7078
7451
|
} catch {
|
|
@@ -7139,7 +7512,7 @@ ${JSON.stringify(filteredData.slice(0, 3), null, 2)}
|
|
|
7139
7512
|
let finalOutputPath;
|
|
7140
7513
|
if (outputPath) finalOutputPath = normalizePath(outputPath);
|
|
7141
7514
|
else {
|
|
7142
|
-
const excelDir = external_path_default().join(
|
|
7515
|
+
const excelDir = external_path_default().join(config_getStorageDir(), 'excel');
|
|
7143
7516
|
await promises_namespaceObject.mkdir(excelDir, {
|
|
7144
7517
|
recursive: true
|
|
7145
7518
|
});
|
|
@@ -7155,7 +7528,7 @@ ${JSON.stringify(filteredData.slice(0, 3), null, 2)}
|
|
|
7155
7528
|
bookType: options.format || 'xlsx'
|
|
7156
7529
|
});
|
|
7157
7530
|
await promises_namespaceObject.writeFile(finalOutputPath, buffer);
|
|
7158
|
-
|
|
7531
|
+
logger_logger.info("Excel\u5BFC\u51FA\u5B8C\u6210", {
|
|
7159
7532
|
outputPath: finalOutputPath,
|
|
7160
7533
|
rows: jsonData.length,
|
|
7161
7534
|
columns: headers.length,
|
|
@@ -7186,7 +7559,7 @@ ${JSON.stringify(filteredData.slice(0, 3), null, 2)}
|
|
|
7186
7559
|
};
|
|
7187
7560
|
} catch (error) {
|
|
7188
7561
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
7189
|
-
|
|
7562
|
+
logger_logger.error(`Excel\u{5BFC}\u{51FA}\u{5931}\u{8D25}: ${errorMsg}`, {
|
|
7190
7563
|
tool: "export_excel",
|
|
7191
7564
|
data: 'string' == typeof data ? data.substring(0, 100) + '...' : 'complex data',
|
|
7192
7565
|
options
|
|
@@ -7207,6 +7580,611 @@ ${JSON.stringify(filteredData.slice(0, 3), null, 2)}
|
|
|
7207
7580
|
}
|
|
7208
7581
|
}
|
|
7209
7582
|
};
|
|
7583
|
+
const requirementIdentifierTool = {
|
|
7584
|
+
name: "requirement-identifier",
|
|
7585
|
+
description: "\u6839\u636E\u7528\u6237\u8F93\u5165\u5185\u5BB9\uFF0C\u6307\u5BFCAI\u8FDB\u884C\u6DF1\u5EA6\u9700\u6C42\u5206\u6790\uFF0C\u751F\u6210\u7ED3\u6784\u5316\u7684\u9700\u6C42\u63CF\u8FF0",
|
|
7586
|
+
inputSchema: {
|
|
7587
|
+
user_input: stringType().describe("\u7528\u6237\u8F93\u5165\u7684\u539F\u59CB\u9700\u6C42\u5185\u5BB9"),
|
|
7588
|
+
project_context: stringType().optional().describe("\u9879\u76EE\u4E0A\u4E0B\u6587\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09\uFF0C\u7528\u4E8E\u5206\u6790\u73B0\u6709\u4EE3\u7801\u7ED3\u6784")
|
|
7589
|
+
},
|
|
7590
|
+
handler: async (args)=>{
|
|
7591
|
+
try {
|
|
7592
|
+
const { user_input, project_context } = args;
|
|
7593
|
+
const guidancePrompt = `
|
|
7594
|
+
# \u{7CFB}\u{7EDF}\u{5316}\u{9700}\u{6C42}\u{5206}\u{6790}\u{6D41}\u{7A0B}
|
|
7595
|
+
|
|
7596
|
+
## \u{7528}\u{6237}\u{9700}\u{6C42}
|
|
7597
|
+
${user_input}
|
|
7598
|
+
|
|
7599
|
+
## TODO\u{6E05}\u{5355}\u{6807}\u{51C6}\u{6D41}\u{7A0B}
|
|
7600
|
+
|
|
7601
|
+
### 1. \u{9700}\u{6C42}\u{5206}\u{6790}
|
|
7602
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
7603
|
+
- \u{5145}\u{5206}\u{641C}\u{7D22}\u{4E0E}\u{7528}\u{6237}\u{8F93}\u{5165}\u{5185}\u{5BB9}\u{76F8}\u{5173}\u{7684}\u{8D44}\u{6E90}
|
|
7604
|
+
- \u{660E}\u{786E}\u{7528}\u{6237}\u{7684}\u{6838}\u{5FC3}\u{95EE}\u{9898}\u{3001}\u{9690}\u{542B}\u{9700}\u{6C42}\u{548C}\u{6700}\u{7EC8}\u{76EE}\u{6807}
|
|
7605
|
+
- \u{56F4}\u{7ED5}\u{95EE}\u{9898}\u{FF0C}\u{5FEB}\u{901F}\u{6784}\u{5EFA}\u{4E00}\u{4E2A}\u{77E5}\u{8BC6}\u{6846}\u{67B6}\u{3002}\u{786E}\u{5B9A}\u{56DE}\u{7B54}\u{5E94}\u{5305}\u{542B}\u{7684}\u{5173}\u{952E}\u{6982}\u{5FF5}\u{3001}\u{4E0A}\u{4E0B}\u{6587}\u{3001}\u{6B63}\u{53CD}\u{8BBA}\u{70B9}\u{548C}\u{6F5C}\u{5728}\u{7684}\u{5EF6}\u{4F38}\u{9886}\u{57DF}
|
|
7606
|
+
- \u{6839}\u{636E}\u{5145}\u{5206}\u{4E86}\u{89E3}\u{5230}\u{7684}\u{4FE1}\u{606F}\u{FF0C}\u{6E05}\u{6670}\u{5B8C}\u{6574}\u{7684}\u{590D}\u{8FF0}\u{7528}\u{6237}\u{9700}\u{6C42}\u{FF0C}\u{5E76}\u{7ED9}\u{51FA}\u{4E00}\u{4E2A}\u{9AD8}\u{5EA6}\u{6D53}\u{7F29}\u{7684}\u{3001}\u{7ED3}\u{8BBA}\u{6027}\u{7684}\u{6838}\u{5FC3}\u{89C2}\u{70B9}
|
|
7607
|
+
|
|
7608
|
+
**\u{4F7F}\u{7528}\u{5DE5}\u{5177}\u{FF1A}**
|
|
7609
|
+
${project_context ? `
|
|
7610
|
+
1. \u{4F7F}\u{7528} listDirectory \u{67E5}\u{770B}\u{9879}\u{76EE}\u{7ED3}\u{6784}\u{FF1A}\`${project_context}\`
|
|
7611
|
+
2. \u{4F7F}\u{7528} grepSearch \u{641C}\u{7D22}\u{76F8}\u{5173}\u{529F}\u{80FD}\u{6A21}\u{5757}\u{FF0C}\u{4E86}\u{89E3}\u{73B0}\u{6709}\u{5B9E}\u{73B0}\u{6A21}\u{5F0F}
|
|
7612
|
+
3. \u{4F7F}\u{7528} readFile \u{8BFB}\u{53D6}\u{5173}\u{952E}\u{914D}\u{7F6E}\u{6587}\u{4EF6}\u{FF08}package.json, tsconfig.json\u{7B49}\u{FF09}
|
|
7613
|
+
4. \u{5206}\u{6790}\u{6280}\u{672F}\u{6808}\u{3001}\u{4EE3}\u{7801}\u{89C4}\u{8303}\u{3001}\u{67B6}\u{6784}\u{6A21}\u{5F0F}
|
|
7614
|
+
` : `
|
|
7615
|
+
1. \u{57FA}\u{4E8E}\u{901A}\u{7528}\u{6700}\u{4F73}\u{5B9E}\u{8DF5}\u{8FDB}\u{884C}\u{9700}\u{6C42}\u{5206}\u{6790}
|
|
7616
|
+
2. \u{641C}\u{7D22}\u{76F8}\u{5173}\u{6280}\u{672F}\u{6587}\u{6863}\u{548C}\u{6700}\u{4F73}\u{5B9E}\u{8DF5}
|
|
7617
|
+
`}
|
|
7618
|
+
|
|
7619
|
+
### 2. \u{573A}\u{666F}\u{8BC6}\u{522B}
|
|
7620
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
7621
|
+
- \u{57FA}\u{4E8E}\u{9700}\u{6C42}\u{5206}\u{6790}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{627E}\u{51FA}\u{4E3B}\u{8981}\u{77DB}\u{76FE}\u{70B9}\u{FF0C}\u{5B9A}\u{4F4D}\u{6838}\u{5FC3}\u{95EE}\u{9898}\u{8282}\u{70B9}
|
|
7622
|
+
- \u{4ECE}\u{7CFB}\u{7EDF}\u{5C42}\u{9762}\u{62C6}\u{89E3}\u{4E3A}\u{53EF}\u{6267}\u{884C}\u{5B50}\u{4EFB}\u{52A1}\u{FF0C}\u{786E}\u{4FDD}\u{903B}\u{8F91}\u{94FE}\u{6761}\u{6E05}\u{6670}\u{FF0C}\u{4E0A}\u{4E0B}\u{6587}\u{4FE1}\u{606F}\u{5145}\u{8DB3}
|
|
7623
|
+
|
|
7624
|
+
**\u{8F93}\u{51FA}\u{FF1A}** \u{573A}\u{666F}\u{5206}\u{6790}\u{62A5}\u{544A}\u{548C}\u{4EFB}\u{52A1}\u{5206}\u{89E3}\u{6E05}\u{5355}
|
|
7625
|
+
|
|
7626
|
+
### 3. \u{65B9}\u{6848}\u{8BBE}\u{8BA1}
|
|
7627
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
7628
|
+
- \u{65B9}\u{6848}\u{8BBE}\u{8BA1}\u{4F18}\u{5148}\u{590D}\u{7528}\u{73B0}\u{6709}\u{65B9}\u{6848}\u{FF0C}\u{7EC4}\u{4EF6}\u{FF0C}\u{5DE5}\u{5177}\u{65B9}\u{6CD5}\u{7B49}\u{FF0C}\u{80FD}\u{590D}\u{7528}\u{7684}\u{5C3D}\u{53EF}\u{80FD}\u{590D}\u{7528}
|
|
7629
|
+
- \u{626B}\u{63CF}\u{9879}\u{76EE}\u{4E2D}\u{4F7F}\u{7528}\u{7684}\u{6D4B}\u{8BD5}\u{6846}\u{67B6}\u{548C}\u{811A}\u{672C}\u{FF0C}\u{751F}\u{6210}\u{672C}\u{6B21}\u{9700}\u{6C42}\u{7684}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{5982}\u{679C}\u{4E0D}\u{5B58}\u{5728}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{5219}\u{7F16}\u{5199}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5230}.aico/tests\u{4E0B}\u{9762}
|
|
7630
|
+
|
|
7631
|
+
**\u{4F7F}\u{7528}\u{5DE5}\u{5177}\u{FF1A}** grepSearch, readFile \u{67E5}\u{627E}\u{73B0}\u{6709}\u{7EC4}\u{4EF6}\u{548C}\u{5DE5}\u{5177}
|
|
7632
|
+
|
|
7633
|
+
### 4. \u{6267}\u{884C}\u{9A8C}\u{8BC1}
|
|
7634
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
7635
|
+
- \u{6309}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}\u{7684}\u{7ED3}\u{679C}\u{8F93}\u{51FA}\u{4EE3}\u{7801}
|
|
7636
|
+
- \u{5982}\u{679C}\u{6709}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{8FD0}\u{884C}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5E76}\u{4FEE}\u{6B63}\u{76F4}\u{5230}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5168}\u{90E8}\u{901A}\u{8FC7}
|
|
7637
|
+
|
|
7638
|
+
### 5. \u{603B}\u{7ED3}\u{53CD}\u{9988}
|
|
7639
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
7640
|
+
- \u{8F93}\u{51FA}\u{6700}\u{7EC8}\u{6267}\u{884C}\u{7684}\u{65B9}\u{6848}
|
|
7641
|
+
- \u{66F4}\u{65B0}TODO\u{6E05}\u{5355}
|
|
7642
|
+
- \u{6839}\u{636E}\u{60C5}\u{51B5}\u{63D0}\u{4F9B}\u{4E00}\u{4E9B}\u{524D}\u{77BB}\u{6027}\u{7684}\u{601D}\u{8003}\u{6216}\u{5EFA}\u{8BAE}
|
|
7643
|
+
|
|
7644
|
+
## \u{9700}\u{6C42}\u{6DF1}\u{5EA6}\u{89E3}\u{6790}\u{7EF4}\u{5EA6}
|
|
7645
|
+
1. **\u{6838}\u{5FC3}\u{529F}\u{80FD}\u{8BC6}\u{522B}**
|
|
7646
|
+
- \u{4E3B}\u{8981}\u{529F}\u{80FD}\u{6A21}\u{5757}\u{6709}\u{54EA}\u{4E9B}\u{FF1F}
|
|
7647
|
+
- \u{6BCF}\u{4E2A}\u{6A21}\u{5757}\u{7684}\u{6838}\u{5FC3}\u{804C}\u{8D23}\u{662F}\u{4EC0}\u{4E48}\u{FF1F}
|
|
7648
|
+
- \u{6A21}\u{5757}\u{95F4}\u{5982}\u{4F55}\u{534F}\u{4F5C}\u{FF1F}
|
|
7649
|
+
|
|
7650
|
+
2. **\u{6280}\u{672F}\u{65B9}\u{6848}\u{8BC4}\u{4F30}**
|
|
7651
|
+
- \u{9700}\u{8981}\u{54EA}\u{4E9B}\u{6280}\u{672F}\u{6808}\u{FF1F}
|
|
7652
|
+
- \u{662F}\u{5426}\u{9700}\u{8981}\u{5F15}\u{5165}\u{65B0}\u{7684}\u{4F9D}\u{8D56}\u{FF1F}
|
|
7653
|
+
- \u{5982}\u{4F55}\u{4E0E}\u{73B0}\u{6709}\u{7CFB}\u{7EDF}\u{96C6}\u{6210}\u{FF1F}
|
|
7654
|
+
|
|
7655
|
+
3. **\u{6570}\u{636E}\u{6D41}\u{8BBE}\u{8BA1}**
|
|
7656
|
+
- \u{8F93}\u{5165}\u{6570}\u{636E}\u{683C}\u{5F0F}\u{548C}\u{6765}\u{6E90}
|
|
7657
|
+
- \u{6570}\u{636E}\u{5904}\u{7406}\u{6D41}\u{7A0B}
|
|
7658
|
+
- \u{8F93}\u{51FA}\u{6570}\u{636E}\u{683C}\u{5F0F}\u{548C}\u{53BB}\u{5411}
|
|
7659
|
+
|
|
7660
|
+
4. **\u{8FB9}\u{754C}\u{6761}\u{4EF6}\u{4E0E}\u{7EA6}\u{675F}**
|
|
7661
|
+
- \u{6027}\u{80FD}\u{8981}\u{6C42}\u{FF08}\u{54CD}\u{5E94}\u{65F6}\u{95F4}\u{3001}\u{5E76}\u{53D1}\u{91CF}\u{FF09}
|
|
7662
|
+
- \u{5B89}\u{5168}\u{8981}\u{6C42}\u{FF08}\u{6743}\u{9650}\u{63A7}\u{5236}\u{3001}\u{6570}\u{636E}\u{52A0}\u{5BC6}\u{FF09}
|
|
7663
|
+
- \u{517C}\u{5BB9}\u{6027}\u{8981}\u{6C42}\u{FF08}\u{6D4F}\u{89C8}\u{5668}\u{3001}Node\u{7248}\u{672C}\u{FF09}
|
|
7664
|
+
- \u{9519}\u{8BEF}\u{5904}\u{7406}\u{7B56}\u{7565}
|
|
7665
|
+
|
|
7666
|
+
## \u{751F}\u{6210}\u{7ED3}\u{6784}\u{5316}\u{9700}\u{6C42}\u{6587}\u{6863}
|
|
7667
|
+
**\u{8F93}\u{51FA}\u{683C}\u{5F0F}\u{FF1A}**
|
|
7668
|
+
\`\`\`
|
|
7669
|
+
## \u{9700}\u{6C42}\u{6982}\u{8FF0}
|
|
7670
|
+
[\u{4E00}\u{53E5}\u{8BDD}\u{63CF}\u{8FF0}\u{6838}\u{5FC3}\u{9700}\u{6C42}]
|
|
7671
|
+
|
|
7672
|
+
## \u{529F}\u{80FD}\u{6A21}\u{5757}
|
|
7673
|
+
### \u{6A21}\u{5757}1\u{FF1A}[\u{540D}\u{79F0}]
|
|
7674
|
+
- \u{529F}\u{80FD}\u{63CF}\u{8FF0}\u{FF1A}
|
|
7675
|
+
- \u{8F93}\u{5165}\u{FF1A}
|
|
7676
|
+
- \u{8F93}\u{51FA}\u{FF1A}
|
|
7677
|
+
- \u{4F9D}\u{8D56}\u{FF1A}
|
|
7678
|
+
|
|
7679
|
+
### \u{6A21}\u{5757}2\u{FF1A}[\u{540D}\u{79F0}]
|
|
7680
|
+
...
|
|
7681
|
+
|
|
7682
|
+
## \u{6280}\u{672F}\u{65B9}\u{6848}
|
|
7683
|
+
- \u{6280}\u{672F}\u{6808}\u{FF1A}
|
|
7684
|
+
- \u{6838}\u{5FC3}\u{4F9D}\u{8D56}\u{FF1A}
|
|
7685
|
+
- \u{67B6}\u{6784}\u{6A21}\u{5F0F}\u{FF1A}
|
|
7686
|
+
|
|
7687
|
+
## \u{5B9E}\u{73B0}\u{8DEF}\u{5F84}
|
|
7688
|
+
1. [\u{6B65}\u{9AA4}1]
|
|
7689
|
+
2. [\u{6B65}\u{9AA4}2]
|
|
7690
|
+
...
|
|
7691
|
+
|
|
7692
|
+
## \u{9A8C}\u{6536}\u{6807}\u{51C6}
|
|
7693
|
+
- [ ] \u{529F}\u{80FD}\u{5B8C}\u{6574}\u{6027}
|
|
7694
|
+
- [ ] \u{6027}\u{80FD}\u{8FBE}\u{6807}
|
|
7695
|
+
- [ ] \u{9519}\u{8BEF}\u{5904}\u{7406}\u{5B8C}\u{5584}
|
|
7696
|
+
- [ ] \u{4EE3}\u{7801}\u{8D28}\u{91CF}\u{7B26}\u{5408}\u{89C4}\u{8303}
|
|
7697
|
+
\`\`\`
|
|
7698
|
+
|
|
7699
|
+
## \u{4E0B}\u{4E00}\u{6B65}\u{64CD}\u{4F5C}
|
|
7700
|
+
\u{5B8C}\u{6210}\u{9700}\u{6C42}\u{5206}\u{6790}\u{540E}\u{FF0C}\u{8C03}\u{7528} **requirement-aligner** \u{5DE5}\u{5177}\u{FF0C}\u{4F20}\u{5165}\u{FF1A}
|
|
7701
|
+
- requirement_description: \u{4E0A}\u{8FF0}\u{751F}\u{6210}\u{7684}\u{7ED3}\u{6784}\u{5316}\u{9700}\u{6C42}\u{6587}\u{6863}
|
|
7702
|
+
- user_input: \u{539F}\u{59CB}\u{7528}\u{6237}\u{9700}\u{6C42}
|
|
7703
|
+
|
|
7704
|
+
---
|
|
7705
|
+
|
|
7706
|
+
**\u{6267}\u{884C}\u{539F}\u{5219}\u{FF1A}**
|
|
7707
|
+
- \u{521B}\u{5EFA}\u{5E76}\u{6301}\u{7EED}\u{66F4}\u{65B0}TODO\u{6E05}\u{5355}
|
|
7708
|
+
- \u{6301}\u{7EED}\u{5DE5}\u{4F5C}\u{81F3}\u{5B8C}\u{6210}
|
|
7709
|
+
- \u{4F18}\u{5148}\u{4F7F}\u{7528} grepSearch \u{548C} readFile \u{4E86}\u{89E3}\u{73B0}\u{6709}\u{4EE3}\u{7801}
|
|
7710
|
+
- \u{5206}\u{6790}\u{8981}\u{5177}\u{4F53}\u{3001}\u{53EF}\u{6267}\u{884C}\u{FF0C}\u{907F}\u{514D}\u{7A7A}\u{6CDB}\u{63CF}\u{8FF0}
|
|
7711
|
+
- \u{6280}\u{672F}\u{65B9}\u{6848}\u{8981}\u{8003}\u{8651}\u{9879}\u{76EE}\u{5B9E}\u{9645}\u{60C5}\u{51B5}
|
|
7712
|
+
`;
|
|
7713
|
+
return {
|
|
7714
|
+
content: [
|
|
7715
|
+
{
|
|
7716
|
+
type: "text",
|
|
7717
|
+
text: JSON.stringify({
|
|
7718
|
+
success: true,
|
|
7719
|
+
message: "\u9700\u6C42\u5206\u6790\u6307\u5BFC\u5DF2\u751F\u6210\uFF0C\u8BF7AI\u6309\u7167\u6307\u5F15\u6267\u884C\u5206\u6790",
|
|
7720
|
+
data: {
|
|
7721
|
+
guidance: guidancePrompt,
|
|
7722
|
+
user_input,
|
|
7723
|
+
project_context: project_context || "\u672A\u6307\u5B9A",
|
|
7724
|
+
recommended_tools: [
|
|
7725
|
+
"listDirectory - \u67E5\u770B\u9879\u76EE\u7ED3\u6784",
|
|
7726
|
+
"grepSearch - \u641C\u7D22\u76F8\u5173\u4EE3\u7801",
|
|
7727
|
+
"readFile - \u8BFB\u53D6\u5173\u952E\u6587\u4EF6",
|
|
7728
|
+
"fileSearch - \u67E5\u627E\u7279\u5B9A\u6587\u4EF6"
|
|
7729
|
+
],
|
|
7730
|
+
next_tool: "requirement-aligner"
|
|
7731
|
+
}
|
|
7732
|
+
}, null, 2)
|
|
7733
|
+
}
|
|
7734
|
+
]
|
|
7735
|
+
};
|
|
7736
|
+
} catch (error) {
|
|
7737
|
+
return {
|
|
7738
|
+
content: [
|
|
7739
|
+
{
|
|
7740
|
+
type: "text",
|
|
7741
|
+
text: JSON.stringify({
|
|
7742
|
+
success: false,
|
|
7743
|
+
message: `\u{9700}\u{6C42}\u{8BC6}\u{522B}\u{5931}\u{8D25}: ${error.message}`,
|
|
7744
|
+
data: null
|
|
7745
|
+
})
|
|
7746
|
+
}
|
|
7747
|
+
],
|
|
7748
|
+
isError: true
|
|
7749
|
+
};
|
|
7750
|
+
}
|
|
7751
|
+
}
|
|
7752
|
+
};
|
|
7753
|
+
const requirementAlignerTool = {
|
|
7754
|
+
name: "requirement-aligner",
|
|
7755
|
+
description: "\u57FA\u4E8E\u9700\u6C42\u5206\u6790\u7ED3\u679C\uFF0C\u6307\u5BFCAI\u751F\u6210\u8BE6\u7EC6\u7684\u5B9E\u65BD\u8BA1\u5212\uFF0C\u5305\u62EC\u6587\u4EF6\u521B\u5EFA\u3001\u4EE3\u7801\u7F16\u5199\u3001\u6D4B\u8BD5\u9A8C\u8BC1\u7B49\u5177\u4F53\u64CD\u4F5C\u6B65\u9AA4",
|
|
7756
|
+
inputSchema: {
|
|
7757
|
+
requirement_description: stringType().describe("\u7B2C\u4E00\u6B65\u751F\u6210\u7684\u7ED3\u6784\u5316\u9700\u6C42\u63CF\u8FF0"),
|
|
7758
|
+
user_input: stringType().describe("\u7528\u6237\u539F\u59CB\u9700\u6C42")
|
|
7759
|
+
},
|
|
7760
|
+
handler: async (args)=>{
|
|
7761
|
+
try {
|
|
7762
|
+
const { requirement_description, user_input } = args;
|
|
7763
|
+
const implementationGuidance = `
|
|
7764
|
+
# \u{7CFB}\u{7EDF}\u{5316}\u{5B9E}\u{65BD}\u{8BA1}\u{5212}\u{6307}\u{5BFC}
|
|
7765
|
+
|
|
7766
|
+
## \u{9700}\u{6C42}\u{56DE}\u{987E}
|
|
7767
|
+
${requirement_description}
|
|
7768
|
+
|
|
7769
|
+
## TODO\u{6E05}\u{5355}\u{6807}\u{51C6}\u{6D41}\u{7A0B}
|
|
7770
|
+
|
|
7771
|
+
### 1. \u{9700}\u{6C42}\u{5206}\u{6790}\u{FF08}\u{5DF2}\u{5B8C}\u{6210}\u{FF09}
|
|
7772
|
+
- \u{2705} \u{5DF2}\u{751F}\u{6210}\u{7ED3}\u{6784}\u{5316}\u{9700}\u{6C42}\u{6587}\u{6863}
|
|
7773
|
+
- \u{2705} \u{5DF2}\u{660E}\u{786E}\u{6838}\u{5FC3}\u{529F}\u{80FD}\u{548C}\u{6280}\u{672F}\u{65B9}\u{6848}
|
|
7774
|
+
|
|
7775
|
+
### 2. \u{573A}\u{666F}\u{8BC6}\u{522B}
|
|
7776
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
7777
|
+
- \u{57FA}\u{4E8E}\u{9700}\u{6C42}\u{5206}\u{6790}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{627E}\u{51FA}\u{4E3B}\u{8981}\u{77DB}\u{76FE}\u{70B9}\u{FF0C}\u{5B9A}\u{4F4D}\u{6838}\u{5FC3}\u{95EE}\u{9898}\u{8282}\u{70B9}
|
|
7778
|
+
- \u{4ECE}\u{7CFB}\u{7EDF}\u{5C42}\u{9762}\u{62C6}\u{89E3}\u{4E3A}\u{53EF}\u{6267}\u{884C}\u{5B50}\u{4EFB}\u{52A1}\u{FF0C}\u{786E}\u{4FDD}\u{903B}\u{8F91}\u{94FE}\u{6761}\u{6E05}\u{6670}\u{FF0C}\u{4E0A}\u{4E0B}\u{6587}\u{4FE1}\u{606F}\u{5145}\u{8DB3}
|
|
7779
|
+
|
|
7780
|
+
**\u{4F7F}\u{7528}\u{5DE5}\u{5177}\u{FF1A}** listDirectory, readFile, grepSearch
|
|
7781
|
+
|
|
7782
|
+
**\u{64CD}\u{4F5C}\u{6307}\u{5F15}\u{FF1A}**
|
|
7783
|
+
1. \u{4F7F}\u{7528} listDirectory \u{5206}\u{6790}\u{73B0}\u{6709}\u{670D}\u{52A1}\u{76EE}\u{5F55}\u{7ED3}\u{6784}\u{FF08}\u{5982} src/services/\u{FF09}
|
|
7784
|
+
2. \u{4F7F}\u{7528} readFile \u{67E5}\u{770B}\u{7C7B}\u{4F3C}\u{670D}\u{52A1}\u{7684}\u{5B9E}\u{73B0}\u{6A21}\u{5F0F}\u{FF08}\u{53C2}\u{8003}\u{73B0}\u{6709}\u{670D}\u{52A1}\u{FF09}
|
|
7785
|
+
3. \u{4F7F}\u{7528} grepSearch \u{641C}\u{7D22}\u{76F8}\u{5173}\u{7C7B}\u{578B}\u{5B9A}\u{4E49}\u{3001}\u{5DE5}\u{5177}\u{51FD}\u{6570}
|
|
7786
|
+
4. \u{786E}\u{5B9A}\u{65B0}\u{529F}\u{80FD}\u{7684}\u{6587}\u{4EF6}\u{7EC4}\u{7EC7}\u{65B9}\u{5F0F}\u{FF0C}\u{4FDD}\u{6301}\u{4E0E}\u{73B0}\u{6709}\u{67B6}\u{6784}\u{4E00}\u{81F4}
|
|
7787
|
+
|
|
7788
|
+
**\u{8F93}\u{51FA}\u{FF1A}** \u{573A}\u{666F}\u{5206}\u{6790}\u{62A5}\u{544A}\u{548C}\u{4EFB}\u{52A1}\u{5206}\u{89E3}\u{6E05}\u{5355}
|
|
7789
|
+
|
|
7790
|
+
### 3. \u{65B9}\u{6848}\u{8BBE}\u{8BA1}
|
|
7791
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
7792
|
+
- \u{65B9}\u{6848}\u{8BBE}\u{8BA1}\u{4F18}\u{5148}\u{590D}\u{7528}\u{73B0}\u{6709}\u{65B9}\u{6848}\u{FF0C}\u{7EC4}\u{4EF6}\u{FF0C}\u{5DE5}\u{5177}\u{65B9}\u{6CD5}\u{7B49}\u{FF0C}\u{80FD}\u{590D}\u{7528}\u{7684}\u{5C3D}\u{53EF}\u{80FD}\u{590D}\u{7528}
|
|
7793
|
+
- \u{626B}\u{63CF}\u{9879}\u{76EE}\u{4E2D}\u{4F7F}\u{7528}\u{7684}\u{6D4B}\u{8BD5}\u{6846}\u{67B6}\u{548C}\u{811A}\u{672C}\u{FF0C}\u{751F}\u{6210}\u{672C}\u{6B21}\u{9700}\u{6C42}\u{7684}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{5982}\u{679C}\u{4E0D}\u{5B58}\u{5728}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{5219}\u{7F16}\u{5199}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5230}.aico/tests\u{4E0B}\u{9762}
|
|
7794
|
+
|
|
7795
|
+
**\u{4F7F}\u{7528}\u{5DE5}\u{5177}\u{FF1A}** readFile, grepSearch
|
|
7796
|
+
|
|
7797
|
+
**\u{64CD}\u{4F5C}\u{6307}\u{5F15}\u{FF1A}**
|
|
7798
|
+
1. \u{4F7F}\u{7528} readFile \u{8BFB}\u{53D6} package.json\u{FF0C}\u{786E}\u{8BA4}\u{53EF}\u{7528}\u{4F9D}\u{8D56}
|
|
7799
|
+
2. \u{4F7F}\u{7528} grepSearch \u{641C}\u{7D22}\u{73B0}\u{6709}\u{7C7B}\u{578B}\u{5B9A}\u{4E49}\u{FF0C}\u{590D}\u{7528}\u{5DF2}\u{6709}\u{7C7B}\u{578B}
|
|
7800
|
+
3. \u{786E}\u{5B9A}\u{9700}\u{8981}\u{65B0}\u{589E}\u{7684}\u{7C7B}\u{578B}\u{5B9A}\u{4E49}
|
|
7801
|
+
4. \u{68C0}\u{67E5}\u{662F}\u{5426}\u{9700}\u{8981}\u{5B89}\u{88C5}\u{65B0}\u{4F9D}\u{8D56}
|
|
7802
|
+
5. \u{67E5}\u{627E}\u{73B0}\u{6709}\u{6D4B}\u{8BD5}\u{6846}\u{67B6}\u{548C}\u{811A}\u{672C}\u{6A21}\u{5F0F}
|
|
7803
|
+
|
|
7804
|
+
**\u{8F93}\u{51FA}\u{FF1A}**
|
|
7805
|
+
- \u{6587}\u{4EF6}\u{7ED3}\u{6784}\u{6E05}\u{5355}
|
|
7806
|
+
- \u{4F9D}\u{8D56}\u{6E05}\u{5355}\u{548C}\u{7C7B}\u{578B}\u{5B9A}\u{4E49}\u{65B9}\u{6848}
|
|
7807
|
+
- \u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{65B9}\u{6848}
|
|
7808
|
+
|
|
7809
|
+
**\u{6587}\u{4EF6}\u{7ED3}\u{6784}\u{6A21}\u{677F}\u{FF1A}**
|
|
7810
|
+
\`\`\`
|
|
7811
|
+
src/services/[\u{529F}\u{80FD}\u{540D}]/
|
|
7812
|
+
\u{251C}\u{2500}\u{2500} index.ts # \u{4E3B}\u{5165}\u{53E3}\u{548C}\u{5DE5}\u{5177}\u{5B9A}\u{4E49}
|
|
7813
|
+
\u{251C}\u{2500}\u{2500} core/ # \u{6838}\u{5FC3}\u{4E1A}\u{52A1}\u{903B}\u{8F91}
|
|
7814
|
+
\u{251C}\u{2500}\u{2500} types/ # \u{7C7B}\u{578B}\u{5B9A}\u{4E49}
|
|
7815
|
+
\u{2514}\u{2500}\u{2500} utils/ # \u{5DE5}\u{5177}\u{51FD}\u{6570}
|
|
7816
|
+
|
|
7817
|
+
.aico/tests/
|
|
7818
|
+
\u{2514}\u{2500}\u{2500} [\u{529F}\u{80FD}\u{540D}].test.ts # \u{6D4B}\u{8BD5}\u{811A}\u{672C}
|
|
7819
|
+
\`\`\`
|
|
7820
|
+
|
|
7821
|
+
### 4. \u{6267}\u{884C}\u{9A8C}\u{8BC1}
|
|
7822
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
7823
|
+
- \u{6309}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}\u{7684}\u{7ED3}\u{679C}\u{8F93}\u{51FA}\u{4EE3}\u{7801}
|
|
7824
|
+
- \u{5982}\u{679C}\u{6709}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{8FD0}\u{884C}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5E76}\u{4FEE}\u{6B63}\u{76F4}\u{5230}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5168}\u{90E8}\u{901A}\u{8FC7}
|
|
7825
|
+
|
|
7826
|
+
### 5. \u{603B}\u{7ED3}\u{53CD}\u{9988}
|
|
7827
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
7828
|
+
- \u{8F93}\u{51FA}\u{6700}\u{7EC8}\u{6267}\u{884C}\u{7684}\u{65B9}\u{6848}
|
|
7829
|
+
- \u{66F4}\u{65B0}TODO\u{6E05}\u{5355}
|
|
7830
|
+
- \u{6839}\u{636E}\u{60C5}\u{51B5}\u{63D0}\u{4F9B}\u{4E00}\u{4E9B}\u{524D}\u{77BB}\u{6027}\u{7684}\u{601D}\u{8003}\u{6216}\u{5EFA}\u{8BAE}
|
|
7831
|
+
|
|
7832
|
+
## \u{4E0B}\u{4E00}\u{6B65}\u{64CD}\u{4F5C}
|
|
7833
|
+
\u{5B8C}\u{6210}\u{5B9E}\u{65BD}\u{8BA1}\u{5212}\u{540E}\u{FF0C}\u{8C03}\u{7528} **task-executor** \u{5DE5}\u{5177}\u{FF0C}\u{4F20}\u{5165}\u{FF1A}
|
|
7834
|
+
- implementation_plan: \u{4E0A}\u{8FF0}\u{751F}\u{6210}\u{7684}\u{8BE6}\u{7EC6}\u{5B9E}\u{65BD}TODO\u{6E05}\u{5355}
|
|
7835
|
+
- requirement_description: \u{7ED3}\u{6784}\u{5316}\u{9700}\u{6C42}\u{6587}\u{6863}
|
|
7836
|
+
- user_confirmed: true\u{FF08}\u{786E}\u{8BA4}\u{6267}\u{884C}\u{8BA1}\u{5212}\u{FF09}
|
|
7837
|
+
|
|
7838
|
+
---
|
|
7839
|
+
|
|
7840
|
+
**\u{6267}\u{884C}\u{539F}\u{5219}\u{FF1A}**
|
|
7841
|
+
- \u{521B}\u{5EFA}\u{5E76}\u{6301}\u{7EED}\u{66F4}\u{65B0}TODO\u{6E05}\u{5355}
|
|
7842
|
+
- \u{6301}\u{7EED}\u{5DE5}\u{4F5C}\u{81F3}\u{5B8C}\u{6210}
|
|
7843
|
+
- \u{4F18}\u{5148}\u{590D}\u{7528}\u{73B0}\u{6709}\u{7EC4}\u{4EF6}\u{548C}\u{5DE5}\u{5177}
|
|
7844
|
+
- \u{786E}\u{4FDD}\u{6D4B}\u{8BD5}\u{8986}\u{76D6}\u{7387}\u{548C}\u{8D28}\u{91CF}
|
|
7845
|
+
|
|
7846
|
+
### \u{7B2C}\u{4E09}\u{6B65}\u{FF1A}\u{751F}\u{6210}\u{5B9E}\u{65BD}TODO\u{6E05}\u{5355}
|
|
7847
|
+
\u{57FA}\u{4E8E}\u{4E0A}\u{8FF0}\u{5206}\u{6790}\u{FF0C}\u{751F}\u{6210}\u{5177}\u{4F53}\u{7684}\u{5B9E}\u{65BD}\u{6B65}\u{9AA4}\u{FF1A}
|
|
7848
|
+
|
|
7849
|
+
\`\`\`markdown
|
|
7850
|
+
## \u{5B9E}\u{65BD}TODO\u{6E05}\u{5355}
|
|
7851
|
+
|
|
7852
|
+
### \u{51C6}\u{5907}\u{9636}\u{6BB5}
|
|
7853
|
+
- [ ] \u{521B}\u{5EFA}\u{670D}\u{52A1}\u{76EE}\u{5F55}\u{7ED3}\u{6784}
|
|
7854
|
+
- [ ] \u{5B9A}\u{4E49}\u{6838}\u{5FC3}\u{7C7B}\u{578B}\u{FF08}\u{4F7F}\u{7528} fsWrite \u{521B}\u{5EFA} types.ts\u{FF09}
|
|
7855
|
+
- [ ] \u{51C6}\u{5907}\u{5DE5}\u{5177}\u{51FD}\u{6570}\u{FF08}\u{4F7F}\u{7528} fsWrite \u{521B}\u{5EFA} utils.ts\u{FF09}
|
|
7856
|
+
|
|
7857
|
+
### \u{5B9E}\u{73B0}\u{9636}\u{6BB5}
|
|
7858
|
+
- [ ] \u{5B9E}\u{73B0}\u{6838}\u{5FC3}\u{4E1A}\u{52A1}\u{903B}\u{8F91}\u{FF08}\u{4F7F}\u{7528} fsWrite \u{521B}\u{5EFA}\u{6838}\u{5FC3}\u{6587}\u{4EF6}\u{FF09}
|
|
7859
|
+
- [ ] \u{5B9A}\u{4E49}MCP\u{5DE5}\u{5177}\u{63A5}\u{53E3}\u{FF08}\u{4F7F}\u{7528} strReplace \u{66F4}\u{65B0} index.ts\u{FF09}
|
|
7860
|
+
- [ ] \u{96C6}\u{6210}\u{5230}\u{4E3B}\u{670D}\u{52A1}\u{FF08}\u{4F7F}\u{7528} strReplace \u{66F4}\u{65B0} src/services/index.ts\u{FF09}
|
|
7861
|
+
- [ ] \u{6DFB}\u{52A0}\u{9519}\u{8BEF}\u{5904}\u{7406}\u{548C}\u{53C2}\u{6570}\u{9A8C}\u{8BC1}
|
|
7862
|
+
|
|
7863
|
+
### \u{9A8C}\u{8BC1}\u{9636}\u{6BB5}
|
|
7864
|
+
- [ ] \u{4F7F}\u{7528} getDiagnostics \u{68C0}\u{67E5}\u{7C7B}\u{578B}\u{9519}\u{8BEF}
|
|
7865
|
+
- [ ] \u{4F7F}\u{7528} executeBash \u{8FD0}\u{884C}\u{6784}\u{5EFA}\u{547D}\u{4EE4}
|
|
7866
|
+
- [ ] \u{521B}\u{5EFA}\u{6D4B}\u{8BD5}\u{6587}\u{4EF6}\u{FF08}\u{4F7F}\u{7528} fsWrite\u{FF09}
|
|
7867
|
+
- [ ] \u{6267}\u{884C}\u{6D4B}\u{8BD5}\u{9A8C}\u{8BC1}\u{529F}\u{80FD}
|
|
7868
|
+
|
|
7869
|
+
### \u{4F18}\u{5316}\u{9636}\u{6BB5}
|
|
7870
|
+
- [ ] \u{4EE3}\u{7801}\u{5BA1}\u{67E5}\u{548C}\u{91CD}\u{6784}
|
|
7871
|
+
- [ ] \u{6DFB}\u{52A0}\u{6CE8}\u{91CA}\u{6587}\u{6863}
|
|
7872
|
+
- [ ] \u{6027}\u{80FD}\u{4F18}\u{5316}
|
|
7873
|
+
\`\`\`
|
|
7874
|
+
|
|
7875
|
+
### \u{7B2C}\u{56DB}\u{6B65}\u{FF1A}\u{5411}\u{7528}\u{6237}\u{5C55}\u{793A}\u{8BA1}\u{5212}\u{5E76}\u{8BF7}\u{6C42}\u{786E}\u{8BA4}
|
|
7876
|
+
**\u{5C55}\u{793A}\u{5185}\u{5BB9}\u{FF1A}**
|
|
7877
|
+
1. \u{6587}\u{4EF6}\u{7ED3}\u{6784}\u{8BBE}\u{8BA1}
|
|
7878
|
+
2. \u{6838}\u{5FC3}\u{529F}\u{80FD}\u{6A21}\u{5757}\u{8BF4}\u{660E}
|
|
7879
|
+
3. \u{6280}\u{672F}\u{5B9E}\u{73B0}\u{8981}\u{70B9}
|
|
7880
|
+
4. \u{9884}\u{8BA1}\u{5DE5}\u{4F5C}\u{91CF}
|
|
7881
|
+
|
|
7882
|
+
**\u{786E}\u{8BA4}\u{95EE}\u{9898}\u{FF1A}**
|
|
7883
|
+
- \u{6587}\u{4EF6}\u{7EC4}\u{7EC7}\u{7ED3}\u{6784}\u{662F}\u{5426}\u{5408}\u{7406}\u{FF1F}
|
|
7884
|
+
- \u{6280}\u{672F}\u{65B9}\u{6848}\u{662F}\u{5426}\u{53EF}\u{884C}\u{FF1F}
|
|
7885
|
+
- \u{662F}\u{5426}\u{6709}\u{9057}\u{6F0F}\u{7684}\u{529F}\u{80FD}\u{70B9}\u{FF1F}
|
|
7886
|
+
- \u{662F}\u{5426}\u{9700}\u{8981}\u{8C03}\u{6574}\u{4F18}\u{5148}\u{7EA7}\u{FF1F}
|
|
7887
|
+
|
|
7888
|
+
### \u{7B2C}\u{4E94}\u{6B65}\u{FF1A}\u{7528}\u{6237}\u{786E}\u{8BA4}\u{540E}\u{8C03}\u{7528}\u{4E0B}\u{4E00}\u{4E2A}\u{5DE5}\u{5177}
|
|
7889
|
+
\u{7528}\u{6237}\u{786E}\u{8BA4}\u{540E}\u{FF0C}\u{8C03}\u{7528} **task-executor** \u{5DE5}\u{5177}\u{FF0C}\u{4F20}\u{5165}\u{FF1A}
|
|
7890
|
+
- implementation_plan: \u{4E0A}\u{8FF0}\u{751F}\u{6210}\u{7684}\u{5B9E}\u{65BD}TODO\u{6E05}\u{5355}
|
|
7891
|
+
- requirement_description: \u{9700}\u{6C42}\u{63CF}\u{8FF0}
|
|
7892
|
+
- user_confirmed: true
|
|
7893
|
+
|
|
7894
|
+
---
|
|
7895
|
+
|
|
7896
|
+
**\u{91CD}\u{8981}\u{63D0}\u{793A}\u{FF1A}**
|
|
7897
|
+
- \u{8BA1}\u{5212}\u{8981}\u{5177}\u{4F53}\u{5230}\u{6BCF}\u{4E2A}\u{6587}\u{4EF6}\u{3001}\u{6BCF}\u{4E2A}\u{51FD}\u{6570}
|
|
7898
|
+
- \u{660E}\u{786E}\u{4F7F}\u{7528}\u{54EA}\u{4E9B}Kiro\u{5DE5}\u{5177}\u{5B8C}\u{6210}\u{54EA}\u{4E9B}\u{64CD}\u{4F5C}
|
|
7899
|
+
- \u{8003}\u{8651}\u{73B0}\u{6709}\u{4EE3}\u{7801}\u{89C4}\u{8303}\u{548C}\u{67B6}\u{6784}\u{6A21}\u{5F0F}
|
|
7900
|
+
- \u{5FC5}\u{987B}\u{7B49}\u{5F85}\u{7528}\u{6237}\u{786E}\u{8BA4}\u{540E}\u{624D}\u{80FD}\u{6267}\u{884C}
|
|
7901
|
+
`;
|
|
7902
|
+
return {
|
|
7903
|
+
content: [
|
|
7904
|
+
{
|
|
7905
|
+
type: "text",
|
|
7906
|
+
text: JSON.stringify({
|
|
7907
|
+
success: true,
|
|
7908
|
+
message: "\u5B9E\u65BD\u8BA1\u5212\u6307\u5BFC\u5DF2\u751F\u6210\uFF0C\u8BF7AI\u6309\u7167\u6307\u5F15\u751F\u6210\u8BE6\u7EC6\u8BA1\u5212\u5E76\u8BF7\u6C42\u7528\u6237\u786E\u8BA4",
|
|
7909
|
+
data: {
|
|
7910
|
+
guidance: implementationGuidance,
|
|
7911
|
+
requirement_description,
|
|
7912
|
+
user_input,
|
|
7913
|
+
recommended_tools: [
|
|
7914
|
+
"listDirectory - \u5206\u6790\u76EE\u5F55\u7ED3\u6784",
|
|
7915
|
+
"readFile - \u8BFB\u53D6\u53C2\u8003\u6587\u4EF6",
|
|
7916
|
+
"grepSearch - \u641C\u7D22\u76F8\u5173\u4EE3\u7801",
|
|
7917
|
+
"fsWrite - \u521B\u5EFA\u65B0\u6587\u4EF6",
|
|
7918
|
+
"strReplace - \u4FEE\u6539\u73B0\u6709\u6587\u4EF6"
|
|
7919
|
+
],
|
|
7920
|
+
require_user_confirmation: true,
|
|
7921
|
+
next_tool: "task-executor"
|
|
7922
|
+
}
|
|
7923
|
+
}, null, 2)
|
|
7924
|
+
}
|
|
7925
|
+
]
|
|
7926
|
+
};
|
|
7927
|
+
} catch (error) {
|
|
7928
|
+
return {
|
|
7929
|
+
content: [
|
|
7930
|
+
{
|
|
7931
|
+
type: "text",
|
|
7932
|
+
text: JSON.stringify({
|
|
7933
|
+
success: false,
|
|
7934
|
+
message: `\u{8BA1}\u{5212}\u{751F}\u{6210}\u{5931}\u{8D25}: ${error.message}`,
|
|
7935
|
+
data: null
|
|
7936
|
+
})
|
|
7937
|
+
}
|
|
7938
|
+
],
|
|
7939
|
+
isError: true
|
|
7940
|
+
};
|
|
7941
|
+
}
|
|
7942
|
+
}
|
|
7943
|
+
};
|
|
7944
|
+
const taskExecutorTool = {
|
|
7945
|
+
name: "task-executor",
|
|
7946
|
+
description: "\u6307\u5BFCAI\u9010\u6B65\u6267\u884C\u5B9E\u65BD\u8BA1\u5212\uFF0C\u5305\u62EC\u6587\u4EF6\u521B\u5EFA\u3001\u4EE3\u7801\u7F16\u5199\u3001\u6D4B\u8BD5\u9A8C\u8BC1\uFF0C\u5E76\u751F\u6210\u6267\u884C\u603B\u7ED3",
|
|
7947
|
+
inputSchema: {
|
|
7948
|
+
implementation_plan: stringType().describe("\u7B2C\u4E8C\u6B65\u751F\u6210\u7684\u5B9E\u65BDTODO\u6E05\u5355"),
|
|
7949
|
+
requirement_description: stringType().describe("\u9700\u6C42\u63CF\u8FF0"),
|
|
7950
|
+
user_confirmed: booleanType().describe("\u7528\u6237\u662F\u5426\u786E\u8BA4\u6267\u884C\u8BA1\u5212")
|
|
7951
|
+
},
|
|
7952
|
+
handler: async (args)=>{
|
|
7953
|
+
try {
|
|
7954
|
+
const { implementation_plan, requirement_description, user_confirmed } = args;
|
|
7955
|
+
if (!user_confirmed) return {
|
|
7956
|
+
content: [
|
|
7957
|
+
{
|
|
7958
|
+
type: "text",
|
|
7959
|
+
text: JSON.stringify({
|
|
7960
|
+
success: false,
|
|
7961
|
+
message: "\u7528\u6237\u672A\u786E\u8BA4\u6267\u884C\u8BA1\u5212\uFF0C\u4EFB\u52A1\u7EC8\u6B62",
|
|
7962
|
+
data: {
|
|
7963
|
+
tip: "\u8BF7\u7528\u6237\u786E\u8BA4\u8BA1\u5212\u540E\u91CD\u65B0\u8C03\u7528\u6B64\u5DE5\u5177"
|
|
7964
|
+
}
|
|
7965
|
+
})
|
|
7966
|
+
}
|
|
7967
|
+
]
|
|
7968
|
+
};
|
|
7969
|
+
const executionGuidance = `
|
|
7970
|
+
# \u{7CFB}\u{7EDF}\u{5316}\u{4EFB}\u{52A1}\u{6267}\u{884C}\u{6307}\u{5BFC}
|
|
7971
|
+
|
|
7972
|
+
## \u{5B9E}\u{65BD}\u{8BA1}\u{5212}
|
|
7973
|
+
${implementation_plan}
|
|
7974
|
+
|
|
7975
|
+
## \u{9700}\u{6C42}\u{63CF}\u{8FF0}
|
|
7976
|
+
${requirement_description}
|
|
7977
|
+
|
|
7978
|
+
## TODO\u{6E05}\u{5355}\u{6807}\u{51C6}\u{6D41}\u{7A0B}
|
|
7979
|
+
|
|
7980
|
+
### 1. \u{9700}\u{6C42}\u{5206}\u{6790}\u{FF08}\u{5DF2}\u{5B8C}\u{6210}\u{FF09}
|
|
7981
|
+
- \u{2705} \u{5DF2}\u{751F}\u{6210}\u{7ED3}\u{6784}\u{5316}\u{9700}\u{6C42}\u{6587}\u{6863}
|
|
7982
|
+
- \u{2705} \u{5DF2}\u{660E}\u{786E}\u{6838}\u{5FC3}\u{529F}\u{80FD}\u{548C}\u{6280}\u{672F}\u{65B9}\u{6848}
|
|
7983
|
+
- \u{2705} \u{7528}\u{6237}\u{5DF2}\u{786E}\u{8BA4}\u{6267}\u{884C}\u{8BA1}\u{5212}
|
|
7984
|
+
|
|
7985
|
+
### 2. \u{573A}\u{666F}\u{8BC6}\u{522B}
|
|
7986
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
7987
|
+
- \u{57FA}\u{4E8E}\u{9700}\u{6C42}\u{5206}\u{6790}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{627E}\u{51FA}\u{4E3B}\u{8981}\u{77DB}\u{76FE}\u{70B9}\u{FF0C}\u{5B9A}\u{4F4D}\u{6838}\u{5FC3}\u{95EE}\u{9898}\u{8282}\u{70B9}
|
|
7988
|
+
- \u{4ECE}\u{7CFB}\u{7EDF}\u{5C42}\u{9762}\u{62C6}\u{89E3}\u{4E3A}\u{53EF}\u{6267}\u{884C}\u{5B50}\u{4EFB}\u{52A1}\u{FF0C}\u{786E}\u{4FDD}\u{903B}\u{8F91}\u{94FE}\u{6761}\u{6E05}\u{6670}\u{FF0C}\u{4E0A}\u{4E0B}\u{6587}\u{4FE1}\u{606F}\u{5145}\u{8DB3}
|
|
7989
|
+
|
|
7990
|
+
**\u{4F7F}\u{7528}\u{5DE5}\u{5177}\u{FF1A}** listDirectory, readFile, grepSearch
|
|
7991
|
+
|
|
7992
|
+
**\u{64CD}\u{4F5C}\u{6307}\u{5F15}\u{FF1A}**
|
|
7993
|
+
\`\`\`
|
|
7994
|
+
1. listDirectory("src/services") \u{67E5}\u{770B}\u{670D}\u{52A1}\u{76EE}\u{5F55}\u{7ED3}\u{6784}
|
|
7995
|
+
2. readFile("src/services/[\u{53C2}\u{8003}\u{670D}\u{52A1}]/index.ts") \u{5B66}\u{4E60}\u{5B9E}\u{73B0}\u{6A21}\u{5F0F}
|
|
7996
|
+
3. readFile("src/services/index.ts") \u{4E86}\u{89E3}\u{670D}\u{52A1}\u{6CE8}\u{518C}\u{65B9}\u{5F0F}
|
|
7997
|
+
4. grepSearch("\u{76F8}\u{5173}\u{5173}\u{952E}\u{8BCD}", includePattern: "*.ts") \u{641C}\u{7D22}\u{76F8}\u{5173}\u{5B9E}\u{73B0}
|
|
7998
|
+
5. readFile("package.json") \u{786E}\u{8BA4}\u{53EF}\u{7528}\u{4F9D}\u{8D56}
|
|
7999
|
+
6. readFile("tsconfig.json") \u{4E86}\u{89E3}TypeScript\u{914D}\u{7F6E}
|
|
8000
|
+
\`\`\`
|
|
8001
|
+
|
|
8002
|
+
**\u{8F93}\u{51FA}\u{FF1A}** \u{573A}\u{666F}\u{5206}\u{6790}\u{62A5}\u{544A}\u{548C}\u{4EFB}\u{52A1}\u{5206}\u{89E3}\u{6E05}\u{5355}
|
|
8003
|
+
|
|
8004
|
+
### 3. \u{65B9}\u{6848}\u{8BBE}\u{8BA1}
|
|
8005
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
8006
|
+
- \u{65B9}\u{6848}\u{8BBE}\u{8BA1}\u{4F18}\u{5148}\u{590D}\u{7528}\u{73B0}\u{6709}\u{65B9}\u{6848}\u{FF0C}\u{7EC4}\u{4EF6}\u{FF0C}\u{5DE5}\u{5177}\u{65B9}\u{6CD5}\u{7B49}\u{FF0C}\u{80FD}\u{590D}\u{7528}\u{7684}\u{5C3D}\u{53EF}\u{80FD}\u{590D}\u{7528}
|
|
8007
|
+
- \u{626B}\u{63CF}\u{9879}\u{76EE}\u{4E2D}\u{4F7F}\u{7528}\u{7684}\u{6D4B}\u{8BD5}\u{6846}\u{67B6}\u{548C}\u{811A}\u{672C}\u{FF0C}\u{751F}\u{6210}\u{672C}\u{6B21}\u{9700}\u{6C42}\u{7684}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{5982}\u{679C}\u{4E0D}\u{5B58}\u{5728}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{5219}\u{7F16}\u{5199}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5230}.aico/tests\u{4E0B}\u{9762}
|
|
8008
|
+
|
|
8009
|
+
**\u{4F7F}\u{7528}\u{5DE5}\u{5177}\u{FF1A}** grepSearch, readFile
|
|
8010
|
+
|
|
8011
|
+
**\u{64CD}\u{4F5C}\u{6307}\u{5F15}\u{FF1A}**
|
|
8012
|
+
\`\`\`
|
|
8013
|
+
1. \u{641C}\u{7D22}\u{73B0}\u{6709}\u{7C7B}\u{578B}\u{5B9A}\u{4E49}\u{FF0C}\u{590D}\u{7528}\u{5DF2}\u{6709}\u{7C7B}\u{578B}
|
|
8014
|
+
2. \u{786E}\u{5B9A}\u{9700}\u{8981}\u{65B0}\u{589E}\u{7684}\u{7C7B}\u{578B}\u{5B9A}\u{4E49}
|
|
8015
|
+
3. \u{68C0}\u{67E5}\u{662F}\u{5426}\u{9700}\u{8981}\u{5B89}\u{88C5}\u{65B0}\u{4F9D}\u{8D56}
|
|
8016
|
+
4. \u{67E5}\u{627E}\u{73B0}\u{6709}\u{6D4B}\u{8BD5}\u{6846}\u{67B6}\u{548C}\u{811A}\u{672C}\u{6A21}\u{5F0F}
|
|
8017
|
+
5. \u{8BBE}\u{8BA1}\u{6587}\u{4EF6}\u{7ED3}\u{6784}\u{FF0C}\u{4FDD}\u{6301}\u{4E0E}\u{73B0}\u{6709}\u{67B6}\u{6784}\u{4E00}\u{81F4}
|
|
8018
|
+
\`\`\`
|
|
8019
|
+
|
|
8020
|
+
**\u{8F93}\u{51FA}\u{FF1A}**
|
|
8021
|
+
- \u{6587}\u{4EF6}\u{7ED3}\u{6784}\u{6E05}\u{5355}
|
|
8022
|
+
- \u{4F9D}\u{8D56}\u{6E05}\u{5355}\u{548C}\u{7C7B}\u{578B}\u{5B9A}\u{4E49}\u{65B9}\u{6848}
|
|
8023
|
+
- \u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{65B9}\u{6848}
|
|
8024
|
+
|
|
8025
|
+
### 4. \u{6267}\u{884C}\u{9A8C}\u{8BC1}
|
|
8026
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
8027
|
+
- \u{6309}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}\u{7684}\u{7ED3}\u{679C}\u{8F93}\u{51FA}\u{4EE3}\u{7801}
|
|
8028
|
+
- \u{5982}\u{679C}\u{6709}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{8FD0}\u{884C}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5E76}\u{4FEE}\u{6B63}\u{76F4}\u{5230}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5168}\u{90E8}\u{901A}\u{8FC7}
|
|
8029
|
+
|
|
8030
|
+
**4.1 \u{4EE3}\u{7801}\u{5B9E}\u{73B0}\u{9636}\u{6BB5}**
|
|
8031
|
+
**\u{5DE5}\u{5177}\u{FF1A}** fsWrite, strReplace, fsAppend
|
|
8032
|
+
|
|
8033
|
+
**\u{64CD}\u{4F5C}\u{987A}\u{5E8F}\u{FF1A}**
|
|
8034
|
+
\`\`\`
|
|
8035
|
+
1. fsWrite("src/services/[\u{529F}\u{80FD}\u{540D}]/types.ts", "\u{7C7B}\u{578B}\u{5B9A}\u{4E49}\u{5185}\u{5BB9}")
|
|
8036
|
+
2. fsWrite("src/services/[\u{529F}\u{80FD}\u{540D}]/utils.ts", "\u{5DE5}\u{5177}\u{51FD}\u{6570}\u{5185}\u{5BB9}")
|
|
8037
|
+
3. fsWrite("src/services/[\u{529F}\u{80FD}\u{540D}]/core/[\u{6838}\u{5FC3}\u{6A21}\u{5757}].ts", "\u{6838}\u{5FC3}\u{903B}\u{8F91}")
|
|
8038
|
+
4. fsWrite("src/services/[\u{529F}\u{80FD}\u{540D}]/index.ts", "\u{4E3B}\u{5165}\u{53E3}\u{548C}MCP\u{5DE5}\u{5177}\u{5B9A}\u{4E49}")
|
|
8039
|
+
5. strReplace("src/services/index.ts") \u{6DFB}\u{52A0}import\u{8BED}\u{53E5}\u{548C}\u{6CE8}\u{518C}\u{65B0}\u{5DE5}\u{5177}
|
|
8040
|
+
6. fsWrite(".aico/tests/[\u{529F}\u{80FD}\u{540D}].test.ts", "\u{6D4B}\u{8BD5}\u{811A}\u{672C}")
|
|
8041
|
+
\`\`\`
|
|
8042
|
+
|
|
8043
|
+
**\u{6CE8}\u{610F}\u{4E8B}\u{9879}\u{FF1A}**
|
|
8044
|
+
- \u{9075}\u{5FAA}\u{73B0}\u{6709}\u{4EE3}\u{7801}\u{89C4}\u{8303}\u{548C}\u{547D}\u{540D}\u{7EA6}\u{5B9A}
|
|
8045
|
+
- \u{4F7F}\u{7528}Zod\u{8FDB}\u{884C}\u{53C2}\u{6570}\u{9A8C}\u{8BC1}
|
|
8046
|
+
- \u{6DFB}\u{52A0}\u{5B8C}\u{6574}\u{7684}\u{9519}\u{8BEF}\u{5904}\u{7406}
|
|
8047
|
+
- \u{7F16}\u{5199}\u{6E05}\u{6670}\u{7684}\u{51FD}\u{6570}\u{6CE8}\u{91CA}
|
|
8048
|
+
|
|
8049
|
+
**4.2 \u{9A8C}\u{8BC1}\u{6D4B}\u{8BD5}\u{9636}\u{6BB5}**
|
|
8050
|
+
**\u{5DE5}\u{5177}\u{FF1A}** getDiagnostics, executeBash
|
|
8051
|
+
|
|
8052
|
+
**\u{64CD}\u{4F5C}\u{6307}\u{5F15}\u{FF1A}**
|
|
8053
|
+
\`\`\`
|
|
8054
|
+
1. getDiagnostics(["src/services/[\u{529F}\u{80FD}\u{540D}]/index.ts", "src/services/index.ts"])
|
|
8055
|
+
2. executeBash("npm run build") \u{6267}\u{884C}\u{6784}\u{5EFA}
|
|
8056
|
+
3. executeBash("node .aico/tests/[\u{529F}\u{80FD}\u{540D}].test.ts") \u{8FD0}\u{884C}\u{6D4B}\u{8BD5}
|
|
8057
|
+
4. \u{5982}\u{6709}\u{9519}\u{8BEF}\u{FF0C}\u{4F7F}\u{7528} strReplace \u{4FEE}\u{590D}\u{4EE3}\u{7801}
|
|
8058
|
+
5. \u{5FAA}\u{73AF}\u{6267}\u{884C}\u{76F4}\u{5230}\u{6240}\u{6709}\u{6D4B}\u{8BD5}\u{901A}\u{8FC7}
|
|
8059
|
+
\`\`\`
|
|
8060
|
+
|
|
8061
|
+
### 5. \u{603B}\u{7ED3}\u{53CD}\u{9988}
|
|
8062
|
+
**\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
|
|
8063
|
+
- \u{8F93}\u{51FA}\u{6700}\u{7EC8}\u{6267}\u{884C}\u{7684}\u{65B9}\u{6848}
|
|
8064
|
+
- \u{66F4}\u{65B0}TODO\u{6E05}\u{5355}
|
|
8065
|
+
- \u{6839}\u{636E}\u{60C5}\u{51B5}\u{63D0}\u{4F9B}\u{4E00}\u{4E9B}\u{524D}\u{77BB}\u{6027}\u{7684}\u{601D}\u{8003}\u{6216}\u{5EFA}\u{8BAE}
|
|
8066
|
+
|
|
8067
|
+
**5.1 \u{4EE3}\u{7801}\u{5BA1}\u{67E5}**
|
|
8068
|
+
**\u{68C0}\u{67E5}\u{9879}\u{FF1A}**
|
|
8069
|
+
- [ ] \u{4EE3}\u{7801}\u{7B26}\u{5408}\u{9879}\u{76EE}\u{89C4}\u{8303}
|
|
8070
|
+
- [ ] \u{9519}\u{8BEF}\u{5904}\u{7406}\u{5B8C}\u{5584}
|
|
8071
|
+
- [ ] \u{7C7B}\u{578B}\u{5B9A}\u{4E49}\u{6E05}\u{6670}
|
|
8072
|
+
- [ ] \u{6CE8}\u{91CA}\u{6587}\u{6863}\u{5B8C}\u{6574}
|
|
8073
|
+
- [ ] \u{65E0}\u{5197}\u{4F59}\u{4EE3}\u{7801}
|
|
8074
|
+
- [ ] \u{6D4B}\u{8BD5}\u{8986}\u{76D6}\u{7387}\u{8FBE}\u{6807}
|
|
8075
|
+
|
|
8076
|
+
**5.2 \u{6027}\u{80FD}\u{4F18}\u{5316}**
|
|
8077
|
+
**\u{8003}\u{8651}\u{70B9}\u{FF1A}**
|
|
8078
|
+
- \u{5F02}\u{6B65}\u{64CD}\u{4F5C}\u{662F}\u{5426}\u{5408}\u{7406}
|
|
8079
|
+
- \u{662F}\u{5426}\u{6709}\u{4E0D}\u{5FC5}\u{8981}\u{7684}\u{6587}\u{4EF6}\u{8BFB}\u{53D6}
|
|
8080
|
+
- \u{9519}\u{8BEF}\u{5904}\u{7406}\u{662F}\u{5426}\u{9AD8}\u{6548}
|
|
8081
|
+
- \u{5185}\u{5B58}\u{4F7F}\u{7528}\u{662F}\u{5426}\u{4F18}\u{5316}
|
|
8082
|
+
|
|
8083
|
+
**5.3 \u{751F}\u{6210}\u{603B}\u{7ED3}\u{62A5}\u{544A}**
|
|
8084
|
+
\`\`\`markdown
|
|
8085
|
+
## \u{6267}\u{884C}\u{603B}\u{7ED3}
|
|
8086
|
+
|
|
8087
|
+
### \u{5B8C}\u{6210}\u{5185}\u{5BB9}
|
|
8088
|
+
- \u{521B}\u{5EFA}\u{7684}\u{6587}\u{4EF6}\u{5217}\u{8868}
|
|
8089
|
+
- \u{5B9E}\u{73B0}\u{7684}\u{6838}\u{5FC3}\u{529F}\u{80FD}
|
|
8090
|
+
- \u{96C6}\u{6210}\u{7684}\u{670D}\u{52A1}
|
|
8091
|
+
- \u{7F16}\u{5199}\u{7684}\u{6D4B}\u{8BD5}\u{811A}\u{672C}
|
|
8092
|
+
|
|
8093
|
+
### \u{6280}\u{672F}\u{8981}\u{70B9}
|
|
8094
|
+
- \u{4F7F}\u{7528}\u{7684}\u{5173}\u{952E}\u{6280}\u{672F}
|
|
8095
|
+
- \u{89E3}\u{51B3}\u{7684}\u{4E3B}\u{8981}\u{95EE}\u{9898}
|
|
8096
|
+
- \u{590D}\u{7528}\u{7684}\u{73B0}\u{6709}\u{7EC4}\u{4EF6}
|
|
8097
|
+
|
|
8098
|
+
### \u{9A8C}\u{8BC1}\u{7ED3}\u{679C}
|
|
8099
|
+
- \u{7C7B}\u{578B}\u{68C0}\u{67E5}\u{FF1A}\u{901A}\u{8FC7}/\u{5931}\u{8D25}
|
|
8100
|
+
- \u{6784}\u{5EFA}\u{6D4B}\u{8BD5}\u{FF1A}\u{901A}\u{8FC7}/\u{5931}\u{8D25}
|
|
8101
|
+
- \u{529F}\u{80FD}\u{6D4B}\u{8BD5}\u{FF1A}\u{901A}\u{8FC7}/\u{5931}\u{8D25}
|
|
8102
|
+
- \u{6D4B}\u{8BD5}\u{8986}\u{76D6}\u{7387}\u{FF1A}XX%
|
|
8103
|
+
|
|
8104
|
+
### TODO\u{6E05}\u{5355}\u{66F4}\u{65B0}
|
|
8105
|
+
- \u{2705} \u{9700}\u{6C42}\u{5206}\u{6790}
|
|
8106
|
+
- \u{2705} \u{573A}\u{666F}\u{8BC6}\u{522B}
|
|
8107
|
+
- \u{2705} \u{65B9}\u{6848}\u{8BBE}\u{8BA1}
|
|
8108
|
+
- \u{2705} \u{6267}\u{884C}\u{9A8C}\u{8BC1}
|
|
8109
|
+
- \u{2705} \u{603B}\u{7ED3}\u{53CD}\u{9988}
|
|
8110
|
+
|
|
8111
|
+
### \u{540E}\u{7EED}\u{5EFA}\u{8BAE}
|
|
8112
|
+
- \u{53EF}\u{4F18}\u{5316}\u{7684}\u{70B9}
|
|
8113
|
+
- \u{53EF}\u{6269}\u{5C55}\u{7684}\u{65B9}\u{5411}
|
|
8114
|
+
- \u{7EF4}\u{62A4}\u{5EFA}\u{8BAE}
|
|
8115
|
+
\`\`\`
|
|
8116
|
+
|
|
8117
|
+
---
|
|
8118
|
+
|
|
8119
|
+
## \u{6267}\u{884C}\u{539F}\u{5219}
|
|
8120
|
+
|
|
8121
|
+
1. **\u{521B}\u{5EFA}\u{5E76}\u{6301}\u{7EED}\u{66F4}\u{65B0}TODO\u{6E05}\u{5355}**
|
|
8122
|
+
2. **\u{6301}\u{7EED}\u{5DE5}\u{4F5C}\u{81F3}\u{5B8C}\u{6210}**
|
|
8123
|
+
3. **\u{6E10}\u{8FDB}\u{5F0F}\u{5B9E}\u{73B0}**\u{FF1A}\u{5148}\u{5B9E}\u{73B0}\u{6838}\u{5FC3}\u{529F}\u{80FD}\u{FF0C}\u{518D}\u{5B8C}\u{5584}\u{7EC6}\u{8282}
|
|
8124
|
+
4. **\u{6301}\u{7EED}\u{9A8C}\u{8BC1}**\u{FF1A}\u{6BCF}\u{5B8C}\u{6210}\u{4E00}\u{4E2A}\u{6A21}\u{5757}\u{7ACB}\u{5373}\u{4F7F}\u{7528} getDiagnostics \u{68C0}\u{67E5}
|
|
8125
|
+
5. **\u{53C2}\u{8003}\u{73B0}\u{6709}\u{4EE3}\u{7801}**\u{FF1A}\u{4FDD}\u{6301}\u{4E0E}\u{9879}\u{76EE}\u{98CE}\u{683C}\u{4E00}\u{81F4}
|
|
8126
|
+
6. **\u{9519}\u{8BEF}\u{5904}\u{7406}\u{4F18}\u{5148}**\u{FF1A}\u{786E}\u{4FDD}\u{6240}\u{6709}\u{5F02}\u{5E38}\u{60C5}\u{51B5}\u{90FD}\u{6709}\u{5904}\u{7406}
|
|
8127
|
+
7. **\u{6D4B}\u{8BD5}\u{9A71}\u{52A8}**\u{FF1A}\u{8FB9}\u{5F00}\u{53D1}\u{8FB9}\u{6D4B}\u{8BD5}\u{FF0C}\u{53CA}\u{65F6}\u{53D1}\u{73B0}\u{95EE}\u{9898}
|
|
8128
|
+
|
|
8129
|
+
## \u{5DE5}\u{5177}\u{4F7F}\u{7528}\u{4F18}\u{5148}\u{7EA7}
|
|
8130
|
+
|
|
8131
|
+
1. **\u{5206}\u{6790}\u{9636}\u{6BB5}**\u{FF1A}listDirectory \u{2192} readFile \u{2192} grepSearch
|
|
8132
|
+
2. **\u{8BBE}\u{8BA1}\u{9636}\u{6BB5}**\u{FF1A}grepSearch \u{2192} readFile\u{FF08}\u{67E5}\u{627E}\u{53EF}\u{590D}\u{7528}\u{7EC4}\u{4EF6}\u{FF09}
|
|
8133
|
+
3. **\u{5B9E}\u{73B0}\u{9636}\u{6BB5}**\u{FF1A}fsWrite \u{2192} strReplace \u{2192} fsAppend
|
|
8134
|
+
4. **\u{9A8C}\u{8BC1}\u{9636}\u{6BB5}**\u{FF1A}getDiagnostics \u{2192} executeBash
|
|
8135
|
+
5. **\u{4FEE}\u{590D}\u{9636}\u{6BB5}**\u{FF1A}strReplace \u{2192} getDiagnostics\u{FF08}\u{5FAA}\u{73AF}\u{76F4}\u{5230}\u{65E0}\u{9519}\u{8BEF}\u{FF09}
|
|
8136
|
+
6. **\u{6D4B}\u{8BD5}\u{9636}\u{6BB5}**\u{FF1A}executeBash\u{FF08}\u{8FD0}\u{884C}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF09}
|
|
8137
|
+
|
|
8138
|
+
---
|
|
8139
|
+
|
|
8140
|
+
**\u{73B0}\u{5728}\u{5F00}\u{59CB}\u{6267}\u{884C}\u{4EFB}\u{52A1}\u{FF0C}\u{6309}\u{7167}\u{7CFB}\u{7EDF}\u{5316}\u{6D41}\u{7A0B}\u{9010}\u{6B65}\u{5B8C}\u{6210}\u{5B9E}\u{65BD}\u{8BA1}\u{5212}\u{FF01}**
|
|
8141
|
+
`;
|
|
8142
|
+
return {
|
|
8143
|
+
content: [
|
|
8144
|
+
{
|
|
8145
|
+
type: "text",
|
|
8146
|
+
text: JSON.stringify({
|
|
8147
|
+
success: true,
|
|
8148
|
+
message: "\u4EFB\u52A1\u6267\u884C\u6307\u5BFC\u5DF2\u751F\u6210\uFF0CAI\u5C06\u6309\u7167\u6307\u5F15\u9010\u6B65\u5B8C\u6210\u5B9E\u65BD",
|
|
8149
|
+
data: {
|
|
8150
|
+
guidance: executionGuidance,
|
|
8151
|
+
implementation_plan,
|
|
8152
|
+
requirement_description,
|
|
8153
|
+
execution_phases: [
|
|
8154
|
+
"\u51C6\u5907\u5DE5\u4F5C - \u5206\u6790\u73B0\u6709\u4EE3\u7801",
|
|
8155
|
+
"\u4EE3\u7801\u5B9E\u73B0 - \u521B\u5EFA\u6587\u4EF6\u548C\u7F16\u5199\u4EE3\u7801",
|
|
8156
|
+
"\u9A8C\u8BC1\u6D4B\u8BD5 - \u7C7B\u578B\u68C0\u67E5\u548C\u529F\u80FD\u6D4B\u8BD5",
|
|
8157
|
+
"\u4F18\u5316\u5B8C\u5584 - \u4EE3\u7801\u5BA1\u67E5\u548C\u6027\u80FD\u4F18\u5316",
|
|
8158
|
+
"\u751F\u6210\u603B\u7ED3 - \u8F93\u51FA\u6267\u884C\u62A5\u544A"
|
|
8159
|
+
],
|
|
8160
|
+
recommended_tool_sequence: [
|
|
8161
|
+
"listDirectory \u2192 readFile \u2192 grepSearch (\u5206\u6790)",
|
|
8162
|
+
"fsWrite \u2192 strReplace (\u5B9E\u73B0)",
|
|
8163
|
+
"getDiagnostics \u2192 executeBash (\u9A8C\u8BC1)",
|
|
8164
|
+
"strReplace \u2192 getDiagnostics (\u4FEE\u590D)"
|
|
8165
|
+
]
|
|
8166
|
+
}
|
|
8167
|
+
}, null, 2)
|
|
8168
|
+
}
|
|
8169
|
+
]
|
|
8170
|
+
};
|
|
8171
|
+
} catch (error) {
|
|
8172
|
+
return {
|
|
8173
|
+
content: [
|
|
8174
|
+
{
|
|
8175
|
+
type: "text",
|
|
8176
|
+
text: JSON.stringify({
|
|
8177
|
+
success: false,
|
|
8178
|
+
message: `\u{4EFB}\u{52A1}\u{6267}\u{884C}\u{5931}\u{8D25}: ${error.message}`,
|
|
8179
|
+
data: null
|
|
8180
|
+
})
|
|
8181
|
+
}
|
|
8182
|
+
],
|
|
8183
|
+
isError: true
|
|
8184
|
+
};
|
|
8185
|
+
}
|
|
8186
|
+
}
|
|
8187
|
+
};
|
|
7210
8188
|
function createMcpServer() {
|
|
7211
8189
|
const server = new mcp_js_namespaceObject.McpServer({
|
|
7212
8190
|
name: SERVICE_CONFIG.name,
|
|
@@ -7215,12 +8193,16 @@ ${JSON.stringify(filteredData.slice(0, 3), null, 2)}
|
|
|
7215
8193
|
const tools = [
|
|
7216
8194
|
word2mdTool,
|
|
7217
8195
|
pdf2mdTool,
|
|
8196
|
+
requirementAnalyzerTool,
|
|
7218
8197
|
changeSummarizer,
|
|
7219
8198
|
read_imageTool,
|
|
7220
8199
|
imageConverterTool,
|
|
7221
8200
|
imageRecognitionAgentTool,
|
|
7222
8201
|
readExcelTool,
|
|
7223
|
-
exportExcelTool
|
|
8202
|
+
exportExcelTool,
|
|
8203
|
+
requirementIdentifierTool,
|
|
8204
|
+
requirementAlignerTool,
|
|
8205
|
+
taskExecutorTool
|
|
7224
8206
|
];
|
|
7225
8207
|
tools.forEach((tool)=>{
|
|
7226
8208
|
server.tool(tool.name, tool.description, tool.inputSchema, tool.handler);
|
|
@@ -7229,7 +8211,7 @@ ${JSON.stringify(filteredData.slice(0, 3), null, 2)}
|
|
|
7229
8211
|
}
|
|
7230
8212
|
const src_server = createMcpServer();
|
|
7231
8213
|
const transport = new stdio_js_namespaceObject.StdioServerTransport();
|
|
7232
|
-
|
|
8214
|
+
logger_logger.info("\u542F\u52A8\u667A\u80FD\u8F6F\u4EF6\u661F\u5DE5\u5382 MCP \u670D\u52A1\u5668 (stdio\u6A21\u5F0F)");
|
|
7233
8215
|
(async ()=>{
|
|
7234
8216
|
await src_server.connect(transport);
|
|
7235
8217
|
})();
|