intention-coding 0.0.7 → 0.0.8
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 +249 -121
- package/dist/index.js +248 -120
- package/dist/prompt/tech.d.ts +1 -0
- package/dist/utils/pack.d.ts +5 -0
- package/dist/utils/storage.d.ts +0 -1
- package/package.json +3 -1
package/dist/index.cjs
CHANGED
|
@@ -148,13 +148,11 @@ const external_winston_namespaceObject = require("winston");
|
|
|
148
148
|
var external_winston_default = /*#__PURE__*/ __webpack_require__.n(external_winston_namespaceObject);
|
|
149
149
|
const external_winston_daily_rotate_file_namespaceObject = require("winston-daily-rotate-file");
|
|
150
150
|
var external_winston_daily_rotate_file_default = /*#__PURE__*/ __webpack_require__.n(external_winston_daily_rotate_file_namespaceObject);
|
|
151
|
-
const external_path_namespaceObject = require("path");
|
|
152
|
-
var external_path_default = /*#__PURE__*/ __webpack_require__.n(external_path_namespaceObject);
|
|
153
151
|
const external_fs_namespaceObject = require("fs");
|
|
154
152
|
var external_fs_default = /*#__PURE__*/ __webpack_require__.n(external_fs_namespaceObject);
|
|
155
|
-
|
|
153
|
+
const config_PROJECT_ROOT = process.env.MCP_STORAGE_DIR || process.cwd();
|
|
156
154
|
const getStorageDir = ()=>{
|
|
157
|
-
const envDir =
|
|
155
|
+
const envDir = config_PROJECT_ROOT + "/.aico";
|
|
158
156
|
if (!external_fs_namespaceObject.existsSync(envDir)) external_fs_namespaceObject.mkdirSync(envDir, {
|
|
159
157
|
recursive: true
|
|
160
158
|
});
|
|
@@ -165,6 +163,8 @@ const SERVICE_CONFIG = {
|
|
|
165
163
|
version: "0.0.1",
|
|
166
164
|
description: "\u8F6F\u4EF6\u5DE5\u7A0B\u5316\u7684\u9700\u6C42\u5206\u6790\uFF0C\u529F\u80FD\u8BBE\u8BA1\uFF0C\u4EE3\u7801\u7F16\u5199\uFF0C\u6D4B\u8BD5\u8FD0\u884C\u548C\u53D1\u5E03\u90E8\u7F72"
|
|
167
165
|
};
|
|
166
|
+
const external_path_namespaceObject = require("path");
|
|
167
|
+
var external_path_default = /*#__PURE__*/ __webpack_require__.n(external_path_namespaceObject);
|
|
168
168
|
const logDir = getStorageDir() + '/logs';
|
|
169
169
|
const levels = {
|
|
170
170
|
error: 0,
|
|
@@ -194,8 +194,8 @@ const transports = [
|
|
|
194
194
|
filename: external_path_default().join(logDir, 'application-%DATE%.log'),
|
|
195
195
|
datePattern: 'YYYY-MM-DD',
|
|
196
196
|
zippedArchive: true,
|
|
197
|
-
maxSize: '
|
|
198
|
-
maxFiles: '
|
|
197
|
+
maxSize: '2m',
|
|
198
|
+
maxFiles: '7d',
|
|
199
199
|
format: fileFormat,
|
|
200
200
|
level: 'info'
|
|
201
201
|
})
|
|
@@ -213,7 +213,7 @@ const logger_logger = external_winston_default().createLogger({
|
|
|
213
213
|
datePattern: 'YYYY-MM-DD',
|
|
214
214
|
zippedArchive: true,
|
|
215
215
|
maxSize: '1m',
|
|
216
|
-
maxFiles: '
|
|
216
|
+
maxFiles: '7d',
|
|
217
217
|
format: fileFormat
|
|
218
218
|
})
|
|
219
219
|
],
|
|
@@ -223,7 +223,7 @@ const logger_logger = external_winston_default().createLogger({
|
|
|
223
223
|
datePattern: 'YYYY-MM-DD',
|
|
224
224
|
zippedArchive: true,
|
|
225
225
|
maxSize: '1m',
|
|
226
|
-
maxFiles: '
|
|
226
|
+
maxFiles: '7d',
|
|
227
227
|
format: fileFormat
|
|
228
228
|
})
|
|
229
229
|
]
|
|
@@ -3917,7 +3917,7 @@ const RequirementManagerParams = objectType({
|
|
|
3917
3917
|
]).describe("\u9700\u6C42\u5206\u7C7B")
|
|
3918
3918
|
});
|
|
3919
3919
|
const ArchitectureDesignerParams = objectType({
|
|
3920
|
-
design_focus: stringType().optional().default("full_architecture").describe("\u8BBE\u8BA1\u91CD\u70B9")
|
|
3920
|
+
design_focus: stringType().optional().default("full_architecture").describe("\u8BBE\u8BA1\u91CD\u70B9,\u9879\u76EE\u67B6\u6784\u8BBE\u8BA1")
|
|
3921
3921
|
});
|
|
3922
3922
|
async function invokeFlow(params, streamCb) {
|
|
3923
3923
|
const { appid = 'app-ESTcrkOPOmkxdrO0120mE4s1', data, timeout = 1800000 } = params;
|
|
@@ -4120,19 +4120,35 @@ const requirementClarifier = {
|
|
|
4120
4120
|
user_input
|
|
4121
4121
|
});
|
|
4122
4122
|
const fileName = sanitizeFileName(analysisContent.length > 10 ? analysisContent.substring(0, 10) : `analysis_${Date.now()}`);
|
|
4123
|
-
const mdDir = external_path_default().join(getStorageDir(), '
|
|
4123
|
+
const mdDir = external_path_default().join(getStorageDir(), 'prd');
|
|
4124
4124
|
await promises_default().mkdir(mdDir, {
|
|
4125
4125
|
recursive: true
|
|
4126
4126
|
});
|
|
4127
4127
|
const mdPath = external_path_default().join(mdDir, `${fileName}.md`);
|
|
4128
4128
|
const mdPathResolved = external_path_default().resolve(mdPath);
|
|
4129
|
-
await
|
|
4129
|
+
const subContents = await getSubAnalysis(analysisContent);
|
|
4130
|
+
let finalContent = analysisContent;
|
|
4131
|
+
let jumpLinks = [];
|
|
4132
|
+
if (subContents.length > 0) {
|
|
4133
|
+
jumpLinks = await saveSubAnalysisFiles(mdDir, subContents);
|
|
4134
|
+
finalContent = addJumpLinks(analysisContent, jumpLinks);
|
|
4135
|
+
logger_logger.info({
|
|
4136
|
+
module: 'requirement_clarifier',
|
|
4137
|
+
message: `\u{6210}\u{529F}\u{5904}\u{7406}${subContents.length}\u{4E2A}\u{7EC6}\u{5206}\u{9879}`,
|
|
4138
|
+
jumpLinks: jumpLinks.map((link)=>({
|
|
4139
|
+
title: link.title,
|
|
4140
|
+
file: external_path_default().basename(link.path)
|
|
4141
|
+
}))
|
|
4142
|
+
});
|
|
4143
|
+
}
|
|
4144
|
+
await promises_default().writeFile(mdPath, finalContent, 'utf8');
|
|
4130
4145
|
logger_logger.info({
|
|
4131
4146
|
module: 'requirement_clarifier',
|
|
4132
4147
|
message: "\u9700\u6C42\u5206\u6790\u6587\u4EF6\u5DF2\u4FDD\u5B58",
|
|
4133
|
-
path: mdPathResolved
|
|
4148
|
+
path: mdPathResolved,
|
|
4149
|
+
hasSubFiles: jumpLinks.length > 0
|
|
4134
4150
|
});
|
|
4135
|
-
return formatAnalysisPrompt(user_input,
|
|
4151
|
+
return formatAnalysisPrompt(user_input, finalContent, mdPathResolved);
|
|
4136
4152
|
} catch (error) {
|
|
4137
4153
|
const errorMsg = `\u{9700}\u{6C42}\u{5206}\u{6790}\u{5931}\u{8D25}: ${error instanceof Error ? error.message : String(error)}`;
|
|
4138
4154
|
logger_logger.error({
|
|
@@ -4167,13 +4183,98 @@ const getAiAnalysis = async (input)=>{
|
|
|
4167
4183
|
throw new Error(`AI\u{5206}\u{6790}\u{8BF7}\u{6C42}\u{5931}\u{8D25}: ${error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"}`);
|
|
4168
4184
|
}
|
|
4169
4185
|
};
|
|
4170
|
-
const
|
|
4186
|
+
const getSubAnalysis = async (content)=>{
|
|
4187
|
+
try {
|
|
4188
|
+
const response = await invokeFlow({
|
|
4189
|
+
appid: 'app-aiEw80lPBus0DfybAGbW8PvX',
|
|
4190
|
+
data: {
|
|
4191
|
+
content
|
|
4192
|
+
}
|
|
4193
|
+
});
|
|
4194
|
+
return response.outputs.result;
|
|
4195
|
+
} catch (error) {
|
|
4196
|
+
const errorMsg = `\u{7EC6}\u{5206}\u{5206}\u{6790}\u{8BF7}\u{6C42}\u{5931}\u{8D25}: ${error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"}`;
|
|
4197
|
+
logger_logger.error({
|
|
4198
|
+
module: 'requirement_clarifier',
|
|
4199
|
+
message: errorMsg,
|
|
4200
|
+
stack: error instanceof Error ? error.stack : void 0
|
|
4201
|
+
});
|
|
4202
|
+
return [];
|
|
4203
|
+
}
|
|
4204
|
+
};
|
|
4205
|
+
const saveSubAnalysisFiles = async (mainDir, contentArray)=>{
|
|
4206
|
+
const subFiles = [];
|
|
4207
|
+
for(let i = 0; i < contentArray.length; i++){
|
|
4208
|
+
const content = contentArray[i];
|
|
4209
|
+
let title = `\u{5B50}\u{529F}\u{80FD}-${i + 1}`;
|
|
4210
|
+
const titleMatch = content.replace(/\n/g, '').match(/^###\s+([\s\S]*?)(?=#|$)/);
|
|
4211
|
+
if (titleMatch) title = titleMatch[1].trim();
|
|
4212
|
+
const safeFileName = `${sanitizeFileName(title)}.md`;
|
|
4213
|
+
const filePath = external_path_default().join(mainDir, safeFileName);
|
|
4214
|
+
try {
|
|
4215
|
+
await promises_default().writeFile(filePath, content, 'utf8');
|
|
4216
|
+
subFiles.push({
|
|
4217
|
+
title,
|
|
4218
|
+
path: filePath
|
|
4219
|
+
});
|
|
4220
|
+
logger_logger.debug({
|
|
4221
|
+
module: 'requirement_clarifier',
|
|
4222
|
+
message: "\u7EC6\u5206\u5206\u6790\u6587\u4EF6\u5DF2\u4FDD\u5B58",
|
|
4223
|
+
path: filePath,
|
|
4224
|
+
title
|
|
4225
|
+
});
|
|
4226
|
+
} catch (error) {
|
|
4227
|
+
logger_logger.error({
|
|
4228
|
+
module: 'requirement_clarifier',
|
|
4229
|
+
message: `\u{4FDD}\u{5B58}\u{7EC6}\u{5206}\u{6587}\u{4EF6}\u{5931}\u{8D25}: ${error instanceof Error ? error.message : String(error)}`,
|
|
4230
|
+
filePath,
|
|
4231
|
+
contentPreview: content.substring(0, 50) + '...'
|
|
4232
|
+
});
|
|
4233
|
+
}
|
|
4234
|
+
}
|
|
4235
|
+
return subFiles;
|
|
4236
|
+
};
|
|
4237
|
+
const addJumpLinks = (mainContent, subFiles)=>{
|
|
4238
|
+
if (!subFiles.length) return mainContent;
|
|
4239
|
+
const titleMap = new Map();
|
|
4240
|
+
subFiles.forEach((file)=>{
|
|
4241
|
+
const simpleTitle = file.title.replace(/[^\w\u4e00-\u9fa5]+/g, '').toLowerCase();
|
|
4242
|
+
titleMap.set(simpleTitle, external_path_default().basename(file.path));
|
|
4243
|
+
});
|
|
4244
|
+
const sections = mainContent.split(/(\n###\s+[^\n]+\n)/);
|
|
4245
|
+
const processedSections = [];
|
|
4246
|
+
for(let i = 0; i < sections.length; i++){
|
|
4247
|
+
const section = sections[i];
|
|
4248
|
+
if (section.startsWith('\n### ')) {
|
|
4249
|
+
const titleMatch = section.match(/###\s+([\s\S]+?)\n/);
|
|
4250
|
+
if (!titleMatch) {
|
|
4251
|
+
processedSections.push(section);
|
|
4252
|
+
continue;
|
|
4253
|
+
}
|
|
4254
|
+
const rawTitle = titleMatch[1].trim();
|
|
4255
|
+
const simpleTitle = rawTitle.replace(/[^\w\u4e00-\u9fa5]+/g, '').toLowerCase();
|
|
4256
|
+
const fileName = titleMap.get(simpleTitle);
|
|
4257
|
+
if (fileName) {
|
|
4258
|
+
const linkedSection = section.replace(/(###\s+)([\s\S]+?)(\n)/, `$1$2 <a href="./${fileName}" style="float:right;">\u{1F4CE}</a>$3`);
|
|
4259
|
+
processedSections.push(linkedSection);
|
|
4260
|
+
titleMap.delete(simpleTitle);
|
|
4261
|
+
continue;
|
|
4262
|
+
}
|
|
4263
|
+
}
|
|
4264
|
+
processedSections.push(section);
|
|
4265
|
+
}
|
|
4266
|
+
if (titleMap.size > 0) {
|
|
4267
|
+
processedSections.push("\n\n### \u8BE6\u7EC6\u5206\u6790\n");
|
|
4268
|
+
titleMap.forEach((fileName, title)=>{
|
|
4269
|
+
processedSections.push(`- [\u{67E5}\u{770B}${title}\u{5206}\u{6790}](./${fileName})\n`);
|
|
4270
|
+
});
|
|
4271
|
+
}
|
|
4272
|
+
return processedSections.join('');
|
|
4273
|
+
};
|
|
4274
|
+
const formatAnalysisPrompt = (userInput, content, filePath)=>`# \u{1F50D} AI\u{9700}\u{6C42}\u{5206}\u{6790}\u{5B8C}\u{6210}
|
|
4171
4275
|
|
|
4172
4276
|
## \u{1F4DD} \u{7528}\u{6237}\u{539F}\u{59CB}\u{9700}\u{6C42}
|
|
4173
4277
|
${userInput}
|
|
4174
|
-
|
|
4175
|
-
## \u{1F4CB} \u{5F53}\u{524D}\u{4E0A}\u{4E0B}\u{6587}
|
|
4176
|
-
${context}
|
|
4177
4278
|
------------------------------
|
|
4178
4279
|
## \u{1F52C} \u{9700}\u{6C42}\u{5206}\u{6790}\u{7ED3}\u{679C}
|
|
4179
4280
|
${content}
|
|
@@ -4231,26 +4332,6 @@ class RequirementStorage {
|
|
|
4231
4332
|
console.error(`\u{274C} \u{4FDD}\u{5B58}\u{9700}\u{6C42}\u{6587}\u{6863}\u{5931}\u{8D25}: ${e}`);
|
|
4232
4333
|
}
|
|
4233
4334
|
}
|
|
4234
|
-
saveHistoryEntry(entryType, content, metadata = {}) {
|
|
4235
|
-
try {
|
|
4236
|
-
const historyEntry = {
|
|
4237
|
-
timestamp: new Date().toISOString(),
|
|
4238
|
-
type: entryType,
|
|
4239
|
-
content,
|
|
4240
|
-
metadata
|
|
4241
|
-
};
|
|
4242
|
-
let history = [];
|
|
4243
|
-
if (external_fs_namespaceObject.existsSync(this.historyFile)) {
|
|
4244
|
-
const data = external_fs_namespaceObject.readFileSync(this.historyFile, "utf8");
|
|
4245
|
-
history = JSON.parse(data);
|
|
4246
|
-
}
|
|
4247
|
-
history.push(historyEntry);
|
|
4248
|
-
external_fs_namespaceObject.writeFileSync(this.historyFile, JSON.stringify(history, null, 2), "utf8");
|
|
4249
|
-
console.log(`\u{2705} \u{5386}\u{53F2}\u{8BB0}\u{5F55}\u{5DF2}\u{4FDD}\u{5B58}: ${entryType}`);
|
|
4250
|
-
} catch (e) {
|
|
4251
|
-
console.error(`\u{274C} \u{4FDD}\u{5B58}\u{5386}\u{53F2}\u{8BB0}\u{5F55}\u{5931}\u{8D25}: ${e}`);
|
|
4252
|
-
}
|
|
4253
|
-
}
|
|
4254
4335
|
exportFinalDocument(currentRequirements) {
|
|
4255
4336
|
try {
|
|
4256
4337
|
const finalDoc = {
|
|
@@ -4363,9 +4444,6 @@ function addRequirementEntry(type, category, content) {
|
|
|
4363
4444
|
requirements_utils_currentRequirements[type] = [
|
|
4364
4445
|
requirementEntry
|
|
4365
4446
|
];
|
|
4366
|
-
requirements_utils_storage.saveHistoryEntry(type, content, {
|
|
4367
|
-
category
|
|
4368
|
-
});
|
|
4369
4447
|
requirements_utils_storage.saveRequirements(requirements_utils_currentRequirements);
|
|
4370
4448
|
return requirements_utils_currentRequirements;
|
|
4371
4449
|
}
|
|
@@ -4404,123 +4482,173 @@ const requirementManagerTool = {
|
|
|
4404
4482
|
return formatRequirementUpdateResponse(category, clarified_info, requirements_utils_currentRequirements, storage.requirementsFile, storage.historyFile);
|
|
4405
4483
|
}
|
|
4406
4484
|
};
|
|
4485
|
+
const external_aico_pack_namespaceObject = require("aico-pack");
|
|
4486
|
+
async function packProject() {
|
|
4487
|
+
const mdDir = external_path_default().join(getStorageDir(), 'tech');
|
|
4488
|
+
await promises_default().mkdir(mdDir, {
|
|
4489
|
+
recursive: true
|
|
4490
|
+
});
|
|
4491
|
+
logger_logger.info(`\u{1F4C2} \u{6B63}\u{5728}\u{5206}\u{6790}\u{5F53}\u{524D}\u{672C}\u{5730}\u{9879}\u{76EE}`);
|
|
4492
|
+
const mdPath = external_path_default().join(mdDir, `\u{9879}\u{76EE}\u{67B6}\u{6784}\u{5206}\u{6790}.md`);
|
|
4493
|
+
const options = {
|
|
4494
|
+
output: mdPath,
|
|
4495
|
+
style: 'markdown',
|
|
4496
|
+
headerText: "\u667A\u80FD\u8F6F\u4EF6\u661F\u5DE5\u5382",
|
|
4497
|
+
fileSummary: true,
|
|
4498
|
+
removeEmptyLines: true,
|
|
4499
|
+
removeComments: true,
|
|
4500
|
+
showLineNumbers: true,
|
|
4501
|
+
compress: true,
|
|
4502
|
+
quiet: true,
|
|
4503
|
+
customPatterns: [
|
|
4504
|
+
"**/*.md",
|
|
4505
|
+
"**/*.log",
|
|
4506
|
+
"**/*.json",
|
|
4507
|
+
"**/*.dockerfile",
|
|
4508
|
+
"**/*.yml",
|
|
4509
|
+
"**/*.yaml",
|
|
4510
|
+
"**/*.sh",
|
|
4511
|
+
"**/*.env",
|
|
4512
|
+
"**/*.env.example",
|
|
4513
|
+
"**/LICENSE"
|
|
4514
|
+
]
|
|
4515
|
+
};
|
|
4516
|
+
await (0, external_aico_pack_namespaceObject.runCli)([
|
|
4517
|
+
config_PROJECT_ROOT
|
|
4518
|
+
], process.cwd(), options);
|
|
4519
|
+
return mdPath;
|
|
4520
|
+
}
|
|
4407
4521
|
const architectureDesignerTool = {
|
|
4408
4522
|
name: "architecture_designer",
|
|
4409
|
-
description: "\u67B6\u6784\u8BBE\u8BA1\
|
|
4523
|
+
description: "\u9879\u76EE\u67B6\u6784\u8BBE\u8BA1\u5E08 - \u57FA\u4E8E\u5B8C\u6574\u9700\u6C42\u751F\u6210\u6700\u4F18\u6280\u672F\u67B6\u6784\u65B9\u6848",
|
|
4410
4524
|
parameters: ArchitectureDesignerParams,
|
|
4411
4525
|
execute: async (args)=>{
|
|
4412
4526
|
const { design_focus = "full_architecture" } = args;
|
|
4413
4527
|
const storage = new RequirementStorage();
|
|
4414
|
-
|
|
4528
|
+
try {
|
|
4529
|
+
const mdPath = await packProject();
|
|
4530
|
+
const architecture_design = `# \u{1F3D7}\u{FE0F} \u{9879}\u{76EE}\u{67B6}\u{6784}\u{8BBE}\u{8BA1}\u{65B9}\u{6848}
|
|
4415
4531
|
|
|
4416
4532
|
## \u{1F3AF} \u{8BBE}\u{8BA1}\u{76EE}\u{6807}
|
|
4417
4533
|
- **\u{8BBE}\u{8BA1}\u{91CD}\u{70B9}**\u{FF1A}${design_focus}
|
|
4418
4534
|
- **\u{4F18}\u{5316}\u{76EE}\u{6807}**\u{FF1A}AI\u{53CB}\u{597D}\u{3001}\u{4F4E}\u{8026}\u{5408}\u{3001}\u{53EF}\u{7EF4}\u{62A4}
|
|
4419
4535
|
|
|
4420
|
-
## \u{
|
|
4421
|
-
|
|
4422
|
-
### 1. \u{4F4E}\u{8026}\u{5408}\u{8BBE}\u{8BA1}\u{539F}\u{5219}
|
|
4423
|
-
- **\u{6A21}\u{5757}\u{72EC}\u{7ACB}\u{6027}**\u{FF1A}\u{6BCF}\u{4E2A}\u{6A21}\u{5757}\u{529F}\u{80FD}\u{5355}\u{4E00}\u{FF0C}\u{8FB9}\u{754C}\u{6E05}\u{6670}
|
|
4424
|
-
- **\u{63A5}\u{53E3}\u{6807}\u{51C6}\u{5316}**\u{FF1A}\u{7EDF}\u{4E00}\u{7684}API\u{63A5}\u{53E3}\u{89C4}\u{8303}
|
|
4425
|
-
- **\u{4F9D}\u{8D56}\u{6700}\u{5C0F}\u{5316}**\u{FF1A}\u{51CF}\u{5C11}\u{6A21}\u{5757}\u{95F4}\u{7684}\u{5F3A}\u{4F9D}\u{8D56}\u{5173}\u{7CFB}
|
|
4426
|
-
- **\u{9519}\u{8BEF}\u{9694}\u{79BB}**\u{FF1A}\u{5355}\u{4E2A}\u{6A21}\u{5757}\u{95EE}\u{9898}\u{4E0D}\u{5F71}\u{54CD}\u{6574}\u{4F53}\u{7CFB}\u{7EDF}
|
|
4536
|
+
## \u{1F4C4} \u{5173}\u{952E}\u{6587}\u{6863}
|
|
4537
|
+
- [\u{1F517} \u{5B8C}\u{6574}\u{67B6}\u{6784}\u{5206}\u{6790}\u{62A5}\u{544A}](${mdPath})
|
|
4427
4538
|
|
|
4428
|
-
|
|
4429
|
-
- **\u{4EE3}\u{7801}\u{53EF}\u{7406}\u{89E3}\u{6027}**\u{FF1A}\u{6E05}\u{6670}\u{7684}\u{547D}\u{540D}\u{548C}\u{6CE8}\u{91CA}\u{89C4}\u{8303}
|
|
4430
|
-
- **\u{6A21}\u{5757}\u{5316}\u{5F00}\u{53D1}**\u{FF1A}\u{907F}\u{514D}\u{5927}\u{6587}\u{4EF6}\u{FF0C}\u{4FBF}\u{4E8E}AI\u{7406}\u{89E3}\u{548C}\u{4FEE}\u{6539}
|
|
4431
|
-
- **\u{6807}\u{51C6}\u{5316}\u{7ED3}\u{6784}**\u{FF1A}\u{7EDF}\u{4E00}\u{7684}\u{9879}\u{76EE}\u{7ED3}\u{6784}\u{548C}\u{4EE3}\u{7801}\u{7EC4}\u{7EC7}
|
|
4432
|
-
- **\u{6E10}\u{8FDB}\u{5F0F}\u{5F00}\u{53D1}**\u{FF1A}\u{652F}\u{6301}\u{5206}\u{9636}\u{6BB5}\u{5B9E}\u{73B0}\u{548C}\u{6D4B}\u{8BD5}
|
|
4433
|
-
|
|
4434
|
-
## \u{1F527} \u{6280}\u{672F}\u{67B6}\u{6784}\u{5EFA}\u{8BAE}
|
|
4539
|
+
## \u{1F916} AI\u{5F00}\u{53D1}\u{6700}\u{4F73}\u{5B9E}\u{8DF5}
|
|
4435
4540
|
|
|
4436
|
-
### \u{
|
|
4437
|
-
**\u{
|
|
4438
|
-
|
|
4439
|
-
|
|
4440
|
-
- UI\u{7EC4}\u{4EF6}\u{FF1A}Ant Design / Material-UI / Tailwind CSS
|
|
4541
|
+
### \u{6A21}\u{5757}\u{5F00}\u{53D1}\u{6307}\u{5BFC}
|
|
4542
|
+
1. **\u{5148}\u{5B9E}\u{73B0}\u{6838}\u{5FC3}\u{903B}\u{8F91}**\u{FF1A}\u{4E13}\u{6CE8}\u{4E3B}\u{8981}\u{529F}\u{80FD}
|
|
4543
|
+
2. **\u{518D}\u{6DFB}\u{52A0}\u{9519}\u{8BEF}\u{5904}\u{7406}**\u{FF1A}\u{5B8C}\u{5584}\u{5F02}\u{5E38}\u{5904}\u{7406}
|
|
4544
|
+
3. **\u{6700}\u{540E}\u{8FDB}\u{884C}\u{4F18}\u{5316}**\u{FF1A}\u{6027}\u{80FD}\u{4F18}\u{5316}\u{548C}\u{4EE3}\u{7801}\u{91CD}\u{6784}
|
|
4441
4545
|
|
|
4442
|
-
### \u{
|
|
4443
|
-
|
|
4444
|
-
- \u{6846}\u{67B6}\u{FF1A}FastAPI / Express.js / Spring Boot
|
|
4445
|
-
- \u{6570}\u{636E}\u{5E93}\u{FF1A}PostgreSQL / MySQL / MongoDB
|
|
4446
|
-
- \u{7F13}\u{5B58}\u{FF1A}Redis / Memcached
|
|
4546
|
+
### \u{80FD}\u{529B}\u{4F7F}\u{7528}\u{6307}\u{5357}
|
|
4547
|
+
> \u{5C06}\u{5B8C}\u{6574}\u{67B6}\u{6784}\u{5206}\u{6790}\u{62A5}\u{544A}\u{4F5C}\u{4E3A}\u{9644}\u{4EF6}\u{53D1}\u{9001}\u{7ED9}AI\u{FF0C}\u{53EF}\u{7528}\u{4E8E}\u{5B8C}\u{6210}\u{5982}\u{4E0B}\u{80FD}\u{529B}\u{FF1A}
|
|
4447
4548
|
|
|
4448
|
-
|
|
4549
|
+
#### \u{5F00}\u{53D1}\u{8005}\u{6307}\u{5357}
|
|
4550
|
+
**\u{63D0}\u{793A}\u{8BCD}**\u{FF1A}
|
|
4551
|
+
\u{521B}\u{5EFA}\u{5305}\u{542B}\u{4EE5}\u{4E0B}\u{5185}\u{5BB9}\u{7684}\u{5F00}\u{53D1}\u{8005}\u{6307}\u{5357}\u{FF1A}
|
|
4552
|
+
1. \u{73AF}\u{5883}\u{642D}\u{5EFA}\u{8BF4}\u{660E}
|
|
4553
|
+
2. \u{9879}\u{76EE}\u{7ED3}\u{6784}\u{6982}\u{89C8}
|
|
4554
|
+
3. \u{5F00}\u{53D1}\u{5DE5}\u{4F5C}\u{6D41}\u{7A0B}
|
|
4555
|
+
4. \u{6D4B}\u{8BD5}\u{65B9}\u{6CD5}
|
|
4556
|
+
5. \u{5E38}\u{89C1}\u{95EE}\u{9898}\u{6392}\u{67E5}\u{6B65}\u{9AA4}
|
|
4449
4557
|
|
|
4450
|
-
|
|
4451
|
-
|
|
4452
|
-
|
|
4453
|
-
|
|
4454
|
-
|
|
4558
|
+
#### API \u{6587}\u{6863}
|
|
4559
|
+
**\u{63D0}\u{793A}\u{8BCD}**\u{FF1A}
|
|
4560
|
+
\u{751F}\u{6210}\u{5168}\u{9762}\u{7684} API \u{6587}\u{6863}\u{FF1A}
|
|
4561
|
+
1. \u{5217}\u{51FA}\u{5E76}\u{63CF}\u{8FF0}\u{6240}\u{6709}\u{516C}\u{5171}\u{7AEF}\u{70B9}
|
|
4562
|
+
2. \u{8BB0}\u{5F55}\u{8BF7}\u{6C42}/\u{54CD}\u{5E94}\u{683C}\u{5F0F}
|
|
4563
|
+
3. \u{5305}\u{542B}\u{4F7F}\u{7528}\u{793A}\u{4F8B}
|
|
4564
|
+
4. \u{8BF4}\u{660E}\u{9650}\u{5236}\u{548C}\u{7EA6}\u{675F}
|
|
4455
4565
|
|
|
4456
|
-
|
|
4457
|
-
|
|
4458
|
-
|
|
4459
|
-
|
|
4566
|
+
#### \u{67B6}\u{6784}\u{6587}\u{6863}
|
|
4567
|
+
**\u{63D0}\u{793A}\u{8BCD}**\u{FF1A}
|
|
4568
|
+
\u{8BB0}\u{5F55}\u{7CFB}\u{7EDF}\u{67B6}\u{6784}\u{FF1A}
|
|
4569
|
+
1. \u{9AD8}\u{5C42}\u{6982}\u{8FF0}
|
|
4570
|
+
2. \u{7EC4}\u{4EF6}\u{4EA4}\u{4E92}
|
|
4571
|
+
3. \u{6570}\u{636E}\u{6D41}\u{7A0B}\u{56FE}
|
|
4572
|
+
4. \u{8BBE}\u{8BA1}\u{51B3}\u{7B56}\u{53CA}\u{7406}\u{7531}
|
|
4573
|
+
5. \u{7CFB}\u{7EDF}\u{9650}\u{5236}\u{548C}\u{7EA6}\u{675F}
|
|
4460
4574
|
|
|
4461
|
-
|
|
4575
|
+
#### \u{4F9D}\u{8D56}\u{9879}\u{5206}\u{6790}
|
|
4576
|
+
**\u{63D0}\u{793A}\u{8BCD}**\u{FF1A}
|
|
4577
|
+
\u{5206}\u{6790}\u{9879}\u{76EE}\u{4F9D}\u{8D56}\u{FF1A}
|
|
4578
|
+
1. \u{8BC6}\u{522B}\u{8FC7}\u{65F6}\u{7684}\u{5305}
|
|
4579
|
+
2. \u{68C0}\u{67E5}\u{5B89}\u{5168}\u{6F0F}\u{6D1E}
|
|
4580
|
+
3. \u{5EFA}\u{8BAE}\u{66FF}\u{4EE3}\u{5305}
|
|
4581
|
+
4. \u{8BC4}\u{5BA1}\u{4F9D}\u{8D56}\u{4F7F}\u{7528}\u{6A21}\u{5F0F}
|
|
4462
4582
|
|
|
4463
|
-
|
|
4464
|
-
- \u{9879}\u{76EE}\u{521D}\u{59CB}\u{5316}\u{548C}\u{73AF}\u{5883}\u{914D}\u{7F6E}
|
|
4465
|
-
- \u{57FA}\u{7840}\u{6846}\u{67B6}\u{4EE3}\u{7801}\u{642D}\u{5EFA}
|
|
4466
|
-
- \u{6570}\u{636E}\u{5E93}\u{8BBE}\u{8BA1}\u{548C}\u{521D}\u{59CB}\u{5316}
|
|
4583
|
+
\u{5305}\u{542B}\u{5177}\u{4F53}\u{7684}\u{5347}\u{7EA7}\u{5EFA}\u{8BAE}\u{3002}
|
|
4467
4584
|
|
|
4468
|
-
|
|
4469
|
-
|
|
4470
|
-
|
|
4471
|
-
|
|
4585
|
+
#### \u{6D4B}\u{8BD5}\u{8986}\u{76D6}\u{7387}
|
|
4586
|
+
**\u{63D0}\u{793A}\u{8BCD}**\u{FF1A}
|
|
4587
|
+
\u{8BC4}\u{5BA1}\u{6D4B}\u{8BD5}\u{8986}\u{76D6}\u{7387}\u{FF1A}
|
|
4588
|
+
1. \u{8BC6}\u{522B}\u{672A}\u{6D4B}\u{8BD5}\u{7684}\u{7EC4}\u{4EF6}
|
|
4589
|
+
2. \u{5EFA}\u{8BAE}\u{989D}\u{5916}\u{7684}\u{6D4B}\u{8BD5}\u{7528}\u{4F8B}
|
|
4590
|
+
3. \u{8BC4}\u{5BA1}\u{6D4B}\u{8BD5}\u{8D28}\u{91CF}
|
|
4591
|
+
4. \u{63A8}\u{8350}\u{6D4B}\u{8BD5}\u{7B56}\u{7565}
|
|
4472
4592
|
|
|
4473
|
-
|
|
4474
|
-
|
|
4475
|
-
|
|
4476
|
-
|
|
4593
|
+
#### \u{4EE3}\u{7801}\u{8D28}\u{91CF}
|
|
4594
|
+
**\u{63D0}\u{793A}\u{8BCD}**\u{FF1A}
|
|
4595
|
+
\u{8BC4}\u{4F30}\u{4EE3}\u{7801}\u{8D28}\u{91CF}\u{5E76}\u{63D0}\u{51FA}\u{6539}\u{8FDB}\u{5EFA}\u{8BAE}\u{FF1A}
|
|
4596
|
+
1. \u{8BC4}\u{5BA1}\u{547D}\u{540D}\u{89C4}\u{8303}
|
|
4597
|
+
2. \u{68C0}\u{67E5}\u{4EE3}\u{7801}\u{7EC4}\u{7EC7}
|
|
4598
|
+
3. \u{8BC4}\u{4F30}\u{9519}\u{8BEF}\u{5904}\u{7406}
|
|
4599
|
+
4. \u{8BC4}\u{5BA1}\u{6CE8}\u{91CA}\u{5B9E}\u{8DF5}
|
|
4477
4600
|
|
|
4478
|
-
|
|
4601
|
+
\u{63D0}\u{4F9B}\u{5177}\u{4F53}\u{7684}\u{826F}\u{597D}\u{548C}\u{95EE}\u{9898}\u{6A21}\u{5F0F}\u{793A}\u{4F8B}\u{3002}
|
|
4479
4602
|
|
|
4480
|
-
|
|
4481
|
-
|
|
4482
|
-
|
|
4483
|
-
|
|
4603
|
+
#### \u{67B6}\u{6784}\u{8BC4}\u{5BA1}
|
|
4604
|
+
**\u{63D0}\u{793A}\u{8BCD}**\u{FF1A}
|
|
4605
|
+
\u{5206}\u{6790}\u{6B64}\u{4EE3}\u{7801}\u{5E93}\u{7684}\u{67B6}\u{6784}\u{FF1A}
|
|
4606
|
+
1. \u{8BC4}\u{4F30}\u{6574}\u{4F53}\u{7ED3}\u{6784}\u{548C}\u{6A21}\u{5F0F}
|
|
4607
|
+
2. \u{8BC6}\u{522B}\u{6F5C}\u{5728}\u{7684}\u{67B6}\u{6784}\u{95EE}\u{9898}
|
|
4608
|
+
3. \u{63D0}\u{51FA}\u{6539}\u{8FDB}\u{53EF}\u{6269}\u{5C55}\u{6027}\u{7684}\u{5EFA}\u{8BAE}
|
|
4609
|
+
4. \u{6807}\u{6CE8}\u{9075}\u{5FAA}\u{6700}\u{4F73}\u{5B9E}\u{8DF5}\u{7684}\u{90E8}\u{5206}
|
|
4484
4610
|
|
|
4485
|
-
|
|
4486
|
-
- GET /api/users - \u{83B7}\u{53D6}\u{7528}\u{6237}\u{5217}\u{8868}
|
|
4487
|
-
- POST /api/users - \u{521B}\u{5EFA}\u{7528}\u{6237}
|
|
4488
|
-
- PUT /api/users/:id - \u{66F4}\u{65B0}\u{7528}\u{6237}
|
|
4489
|
-
- DELETE /api/users/:id - \u{5220}\u{9664}\u{7528}\u{6237}
|
|
4611
|
+
\u{91CD}\u{70B9}\u{5173}\u{6CE8}\u{53EF}\u{7EF4}\u{62A4}\u{6027}\u{548C}\u{6A21}\u{5757}\u{5316}\u{3002}
|
|
4490
4612
|
|
|
4491
|
-
|
|
4613
|
+
#### \u{5B89}\u{5168}\u{6027}\u{8BC4}\u{5BA1}
|
|
4614
|
+
**\u{63D0}\u{793A}\u{8BCD}**\u{FF1A}
|
|
4615
|
+
\u{5BF9}\u{6B64}\u{4EE3}\u{7801}\u{5E93}\u{8FDB}\u{884C}\u{5B89}\u{5168}\u{6027}\u{8BC4}\u{5BA1}\u{FF1A}
|
|
4616
|
+
1. \u{8BC6}\u{522B}\u{6F5C}\u{5728}\u{7684}\u{5B89}\u{5168}\u{6F0F}\u{6D1E}
|
|
4617
|
+
2. \u{68C0}\u{67E5}\u{5E38}\u{89C1}\u{7684}\u{5B89}\u{5168}\u{53CD}\u{6A21}\u{5F0F}
|
|
4618
|
+
3. \u{8BC4}\u{5BA1}\u{9519}\u{8BEF}\u{5904}\u{7406}\u{548C}\u{8F93}\u{5165}\u{9A8C}\u{8BC1}
|
|
4619
|
+
4. \u{8BC4}\u{4F30}\u{4F9D}\u{8D56}\u{9879}\u{7684}\u{5B89}\u{5168}\u{6027}
|
|
4492
4620
|
|
|
4493
|
-
|
|
4494
|
-
1. **\u{4F4E}\u{8026}\u{5408}\u{8BBE}\u{8BA1}**\u{FF1A}\u{6A21}\u{5757}\u{72EC}\u{7ACB}\u{FF0C}\u{4FBF}\u{4E8E}\u{7EF4}\u{62A4}\u{548C}\u{6269}\u{5C55}
|
|
4495
|
-
2. **AI\u{53CB}\u{597D}**\u{FF1A}\u{6E05}\u{6670}\u{7684}\u{7ED3}\u{6784}\u{FF0C}\u{4FBF}\u{4E8E}AI\u{7406}\u{89E3}\u{548C}\u{5F00}\u{53D1}
|
|
4496
|
-
3. **\u{53EF}\u{6269}\u{5C55}\u{6027}**\u{FF1A}\u{652F}\u{6301}\u{4E1A}\u{52A1}\u{589E}\u{957F}\u{548C}\u{529F}\u{80FD}\u{6269}\u{5C55}
|
|
4621
|
+
\u{8BF7}\u{63D0}\u{4F9B}\u{5177}\u{4F53}\u{793A}\u{4F8B}\u{548C}\u{4FEE}\u{590D}\u{6B65}\u{9AA4}\u{3002}
|
|
4497
4622
|
|
|
4498
|
-
|
|
4499
|
-
|
|
4500
|
-
|
|
4501
|
-
|
|
4623
|
+
#### \u{6027}\u{80FD}\u{8BC4}\u{5BA1}
|
|
4624
|
+
**\u{63D0}\u{793A}\u{8BCD}**\u{FF1A}
|
|
4625
|
+
\u{4ECE}\u{6027}\u{80FD}\u{89D2}\u{5EA6}\u{8BC4}\u{5BA1}\u{4EE3}\u{7801}\u{5E93}\u{FF1A}
|
|
4626
|
+
1. \u{8BC6}\u{522B}\u{6027}\u{80FD}\u{74F6}\u{9888}
|
|
4627
|
+
2. \u{68C0}\u{67E5}\u{8D44}\u{6E90}\u{4F7F}\u{7528}\u{60C5}\u{51B5}
|
|
4628
|
+
3. \u{8BC4}\u{5BA1}\u{7B97}\u{6CD5}\u{6548}\u{7387}
|
|
4629
|
+
4. \u{8BC4}\u{4F30}\u{7F13}\u{5B58}\u{7B56}\u{7565}
|
|
4502
4630
|
|
|
4631
|
+
\u{5305}\u{542B}\u{5177}\u{4F53}\u{7684}\u{4F18}\u{5316}\u{5EFA}\u{8BAE}\u{3002}
|
|
4503
4632
|
---
|
|
4504
4633
|
|
|
4505
4634
|
**\u{1F389} \u{67B6}\u{6784}\u{8BBE}\u{8BA1}\u{5B8C}\u{6210}\u{FF01}**
|
|
4506
4635
|
|
|
4507
|
-
\u{8FD9}\u{4E2A}\u{67B6}\u{6784}\u{8BBE}\u{8BA1}\u{65B9}\u{6848}\u{4E13}\u{95E8}\u{9488}\u{5BF9}AI\u{5F00}\u{53D1}\u{8FDB}\u{884C}\u{4E86}\u{4F18}\u{5316}\u{FF0C}\u{786E}\u{4FDD}\u{4F4E}\u{8026}\u{5408}\u{3001}AI\u{53CB}\u{597D}\u{7684}\u{5F00}\u{53D1}\u{4F53}\u{9A8C}\u{FF01}
|
|
4508
|
-
|
|
4509
4636
|
## \u{1F4BE} \u{6587}\u{6863}\u{5B58}\u{50A8}\u{4FE1}\u{606F}
|
|
4510
4637
|
- **\u{67B6}\u{6784}\u{8BBE}\u{8BA1}\u{5DF2}\u{4FDD}\u{5B58}\u{5230}**: \`${storage.requirementsFile}\`
|
|
4511
4638
|
- **\u{5B8C}\u{6574}\u{6587}\u{6863}\u{5BFC}\u{51FA}**: \u{4F7F}\u{7528} \`export_final_document\` \u{5DE5}\u{5177}\u{5BFC}\u{51FA}\u{5B8C}\u{6574}\u{9879}\u{76EE}\u{6587}\u{6863}
|
|
4512
4639
|
`;
|
|
4513
|
-
|
|
4514
|
-
|
|
4515
|
-
|
|
4516
|
-
|
|
4517
|
-
|
|
4518
|
-
|
|
4519
|
-
|
|
4520
|
-
|
|
4521
|
-
})
|
|
4522
|
-
|
|
4523
|
-
|
|
4640
|
+
requirements_utils_currentRequirements.architecture_designs = requirements_utils_currentRequirements.architecture_designs || [];
|
|
4641
|
+
requirements_utils_currentRequirements.architecture_designs.push({
|
|
4642
|
+
timestamp: new Date().toISOString(),
|
|
4643
|
+
design_focus,
|
|
4644
|
+
content: architecture_design
|
|
4645
|
+
});
|
|
4646
|
+
storage.saveRequirements(requirements_utils_currentRequirements);
|
|
4647
|
+
return architecture_design;
|
|
4648
|
+
} catch (error) {
|
|
4649
|
+
logger_logger.error(`\u{274C} \u{67B6}\u{6784}\u{8BBE}\u{8BA1}\u{751F}\u{6210}\u{5931}\u{8D25}: ${error instanceof Error ? error.message : String(error)}`);
|
|
4650
|
+
throw new Error(`\u{67B6}\u{6784}\u{8BBE}\u{8BA1}\u{751F}\u{6210}\u{5931}\u{8D25}: ${error instanceof Error ? error.message : String(error)}`);
|
|
4651
|
+
}
|
|
4524
4652
|
}
|
|
4525
4653
|
};
|
|
4526
4654
|
const exportFinalDocumentTool = {
|
package/dist/index.js
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
import { FastMCP } from "fastmcp";
|
|
3
3
|
import winston from "winston";
|
|
4
4
|
import winston_daily_rotate_file from "winston-daily-rotate-file";
|
|
5
|
-
import path_0, { join } from "path";
|
|
6
5
|
import fs_0, { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
6
|
+
import path_0, { join } from "path";
|
|
7
7
|
import promises, { mkdir, readFile, stat, writeFile } from "fs/promises";
|
|
8
|
+
import { runCli as external_aico_pack_runCli } from "aico-pack";
|
|
8
9
|
import { convertToHtml } from "mammoth";
|
|
9
10
|
import html_to_md from "html-to-md";
|
|
10
11
|
var __webpack_require__ = {};
|
|
@@ -140,9 +141,9 @@ __webpack_require__.d(external_namespaceObject, {
|
|
|
140
141
|
util: ()=>util_util,
|
|
141
142
|
void: ()=>voidType
|
|
142
143
|
});
|
|
143
|
-
|
|
144
|
+
const config_PROJECT_ROOT = process.env.MCP_STORAGE_DIR || process.cwd();
|
|
144
145
|
const getStorageDir = ()=>{
|
|
145
|
-
const envDir =
|
|
146
|
+
const envDir = config_PROJECT_ROOT + "/.aico";
|
|
146
147
|
if (!existsSync(envDir)) mkdirSync(envDir, {
|
|
147
148
|
recursive: true
|
|
148
149
|
});
|
|
@@ -182,8 +183,8 @@ const transports = [
|
|
|
182
183
|
filename: path_0.join(logDir, 'application-%DATE%.log'),
|
|
183
184
|
datePattern: 'YYYY-MM-DD',
|
|
184
185
|
zippedArchive: true,
|
|
185
|
-
maxSize: '
|
|
186
|
-
maxFiles: '
|
|
186
|
+
maxSize: '2m',
|
|
187
|
+
maxFiles: '7d',
|
|
187
188
|
format: fileFormat,
|
|
188
189
|
level: 'info'
|
|
189
190
|
})
|
|
@@ -201,7 +202,7 @@ const logger_logger = winston.createLogger({
|
|
|
201
202
|
datePattern: 'YYYY-MM-DD',
|
|
202
203
|
zippedArchive: true,
|
|
203
204
|
maxSize: '1m',
|
|
204
|
-
maxFiles: '
|
|
205
|
+
maxFiles: '7d',
|
|
205
206
|
format: fileFormat
|
|
206
207
|
})
|
|
207
208
|
],
|
|
@@ -211,7 +212,7 @@ const logger_logger = winston.createLogger({
|
|
|
211
212
|
datePattern: 'YYYY-MM-DD',
|
|
212
213
|
zippedArchive: true,
|
|
213
214
|
maxSize: '1m',
|
|
214
|
-
maxFiles: '
|
|
215
|
+
maxFiles: '7d',
|
|
215
216
|
format: fileFormat
|
|
216
217
|
})
|
|
217
218
|
]
|
|
@@ -3905,7 +3906,7 @@ const RequirementManagerParams = objectType({
|
|
|
3905
3906
|
]).describe("\u9700\u6C42\u5206\u7C7B")
|
|
3906
3907
|
});
|
|
3907
3908
|
const ArchitectureDesignerParams = objectType({
|
|
3908
|
-
design_focus: stringType().optional().default("full_architecture").describe("\u8BBE\u8BA1\u91CD\u70B9")
|
|
3909
|
+
design_focus: stringType().optional().default("full_architecture").describe("\u8BBE\u8BA1\u91CD\u70B9,\u9879\u76EE\u67B6\u6784\u8BBE\u8BA1")
|
|
3909
3910
|
});
|
|
3910
3911
|
async function invokeFlow(params, streamCb) {
|
|
3911
3912
|
const { appid = 'app-ESTcrkOPOmkxdrO0120mE4s1', data, timeout = 1800000 } = params;
|
|
@@ -4106,19 +4107,35 @@ const requirementClarifier = {
|
|
|
4106
4107
|
user_input
|
|
4107
4108
|
});
|
|
4108
4109
|
const fileName = sanitizeFileName(analysisContent.length > 10 ? analysisContent.substring(0, 10) : `analysis_${Date.now()}`);
|
|
4109
|
-
const mdDir = path_0.join(getStorageDir(), '
|
|
4110
|
+
const mdDir = path_0.join(getStorageDir(), 'prd');
|
|
4110
4111
|
await promises.mkdir(mdDir, {
|
|
4111
4112
|
recursive: true
|
|
4112
4113
|
});
|
|
4113
4114
|
const mdPath = path_0.join(mdDir, `${fileName}.md`);
|
|
4114
4115
|
const mdPathResolved = path_0.resolve(mdPath);
|
|
4115
|
-
await
|
|
4116
|
+
const subContents = await getSubAnalysis(analysisContent);
|
|
4117
|
+
let finalContent = analysisContent;
|
|
4118
|
+
let jumpLinks = [];
|
|
4119
|
+
if (subContents.length > 0) {
|
|
4120
|
+
jumpLinks = await saveSubAnalysisFiles(mdDir, subContents);
|
|
4121
|
+
finalContent = addJumpLinks(analysisContent, jumpLinks);
|
|
4122
|
+
logger_logger.info({
|
|
4123
|
+
module: 'requirement_clarifier',
|
|
4124
|
+
message: `\u{6210}\u{529F}\u{5904}\u{7406}${subContents.length}\u{4E2A}\u{7EC6}\u{5206}\u{9879}`,
|
|
4125
|
+
jumpLinks: jumpLinks.map((link)=>({
|
|
4126
|
+
title: link.title,
|
|
4127
|
+
file: path_0.basename(link.path)
|
|
4128
|
+
}))
|
|
4129
|
+
});
|
|
4130
|
+
}
|
|
4131
|
+
await promises.writeFile(mdPath, finalContent, 'utf8');
|
|
4116
4132
|
logger_logger.info({
|
|
4117
4133
|
module: 'requirement_clarifier',
|
|
4118
4134
|
message: "\u9700\u6C42\u5206\u6790\u6587\u4EF6\u5DF2\u4FDD\u5B58",
|
|
4119
|
-
path: mdPathResolved
|
|
4135
|
+
path: mdPathResolved,
|
|
4136
|
+
hasSubFiles: jumpLinks.length > 0
|
|
4120
4137
|
});
|
|
4121
|
-
return formatAnalysisPrompt(user_input,
|
|
4138
|
+
return formatAnalysisPrompt(user_input, finalContent, mdPathResolved);
|
|
4122
4139
|
} catch (error) {
|
|
4123
4140
|
const errorMsg = `\u{9700}\u{6C42}\u{5206}\u{6790}\u{5931}\u{8D25}: ${error instanceof Error ? error.message : String(error)}`;
|
|
4124
4141
|
logger_logger.error({
|
|
@@ -4153,13 +4170,98 @@ const getAiAnalysis = async (input)=>{
|
|
|
4153
4170
|
throw new Error(`AI\u{5206}\u{6790}\u{8BF7}\u{6C42}\u{5931}\u{8D25}: ${error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"}`);
|
|
4154
4171
|
}
|
|
4155
4172
|
};
|
|
4156
|
-
const
|
|
4173
|
+
const getSubAnalysis = async (content)=>{
|
|
4174
|
+
try {
|
|
4175
|
+
const response = await invokeFlow({
|
|
4176
|
+
appid: 'app-aiEw80lPBus0DfybAGbW8PvX',
|
|
4177
|
+
data: {
|
|
4178
|
+
content
|
|
4179
|
+
}
|
|
4180
|
+
});
|
|
4181
|
+
return response.outputs.result;
|
|
4182
|
+
} catch (error) {
|
|
4183
|
+
const errorMsg = `\u{7EC6}\u{5206}\u{5206}\u{6790}\u{8BF7}\u{6C42}\u{5931}\u{8D25}: ${error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"}`;
|
|
4184
|
+
logger_logger.error({
|
|
4185
|
+
module: 'requirement_clarifier',
|
|
4186
|
+
message: errorMsg,
|
|
4187
|
+
stack: error instanceof Error ? error.stack : void 0
|
|
4188
|
+
});
|
|
4189
|
+
return [];
|
|
4190
|
+
}
|
|
4191
|
+
};
|
|
4192
|
+
const saveSubAnalysisFiles = async (mainDir, contentArray)=>{
|
|
4193
|
+
const subFiles = [];
|
|
4194
|
+
for(let i = 0; i < contentArray.length; i++){
|
|
4195
|
+
const content = contentArray[i];
|
|
4196
|
+
let title = `\u{5B50}\u{529F}\u{80FD}-${i + 1}`;
|
|
4197
|
+
const titleMatch = content.replace(/\n/g, '').match(/^###\s+([\s\S]*?)(?=#|$)/);
|
|
4198
|
+
if (titleMatch) title = titleMatch[1].trim();
|
|
4199
|
+
const safeFileName = `${sanitizeFileName(title)}.md`;
|
|
4200
|
+
const filePath = path_0.join(mainDir, safeFileName);
|
|
4201
|
+
try {
|
|
4202
|
+
await promises.writeFile(filePath, content, 'utf8');
|
|
4203
|
+
subFiles.push({
|
|
4204
|
+
title,
|
|
4205
|
+
path: filePath
|
|
4206
|
+
});
|
|
4207
|
+
logger_logger.debug({
|
|
4208
|
+
module: 'requirement_clarifier',
|
|
4209
|
+
message: "\u7EC6\u5206\u5206\u6790\u6587\u4EF6\u5DF2\u4FDD\u5B58",
|
|
4210
|
+
path: filePath,
|
|
4211
|
+
title
|
|
4212
|
+
});
|
|
4213
|
+
} catch (error) {
|
|
4214
|
+
logger_logger.error({
|
|
4215
|
+
module: 'requirement_clarifier',
|
|
4216
|
+
message: `\u{4FDD}\u{5B58}\u{7EC6}\u{5206}\u{6587}\u{4EF6}\u{5931}\u{8D25}: ${error instanceof Error ? error.message : String(error)}`,
|
|
4217
|
+
filePath,
|
|
4218
|
+
contentPreview: content.substring(0, 50) + '...'
|
|
4219
|
+
});
|
|
4220
|
+
}
|
|
4221
|
+
}
|
|
4222
|
+
return subFiles;
|
|
4223
|
+
};
|
|
4224
|
+
const addJumpLinks = (mainContent, subFiles)=>{
|
|
4225
|
+
if (!subFiles.length) return mainContent;
|
|
4226
|
+
const titleMap = new Map();
|
|
4227
|
+
subFiles.forEach((file)=>{
|
|
4228
|
+
const simpleTitle = file.title.replace(/[^\w\u4e00-\u9fa5]+/g, '').toLowerCase();
|
|
4229
|
+
titleMap.set(simpleTitle, path_0.basename(file.path));
|
|
4230
|
+
});
|
|
4231
|
+
const sections = mainContent.split(/(\n###\s+[^\n]+\n)/);
|
|
4232
|
+
const processedSections = [];
|
|
4233
|
+
for(let i = 0; i < sections.length; i++){
|
|
4234
|
+
const section = sections[i];
|
|
4235
|
+
if (section.startsWith('\n### ')) {
|
|
4236
|
+
const titleMatch = section.match(/###\s+([\s\S]+?)\n/);
|
|
4237
|
+
if (!titleMatch) {
|
|
4238
|
+
processedSections.push(section);
|
|
4239
|
+
continue;
|
|
4240
|
+
}
|
|
4241
|
+
const rawTitle = titleMatch[1].trim();
|
|
4242
|
+
const simpleTitle = rawTitle.replace(/[^\w\u4e00-\u9fa5]+/g, '').toLowerCase();
|
|
4243
|
+
const fileName = titleMap.get(simpleTitle);
|
|
4244
|
+
if (fileName) {
|
|
4245
|
+
const linkedSection = section.replace(/(###\s+)([\s\S]+?)(\n)/, `$1$2 <a href="./${fileName}" style="float:right;">\u{1F4CE}</a>$3`);
|
|
4246
|
+
processedSections.push(linkedSection);
|
|
4247
|
+
titleMap.delete(simpleTitle);
|
|
4248
|
+
continue;
|
|
4249
|
+
}
|
|
4250
|
+
}
|
|
4251
|
+
processedSections.push(section);
|
|
4252
|
+
}
|
|
4253
|
+
if (titleMap.size > 0) {
|
|
4254
|
+
processedSections.push("\n\n### \u8BE6\u7EC6\u5206\u6790\n");
|
|
4255
|
+
titleMap.forEach((fileName, title)=>{
|
|
4256
|
+
processedSections.push(`- [\u{67E5}\u{770B}${title}\u{5206}\u{6790}](./${fileName})\n`);
|
|
4257
|
+
});
|
|
4258
|
+
}
|
|
4259
|
+
return processedSections.join('');
|
|
4260
|
+
};
|
|
4261
|
+
const formatAnalysisPrompt = (userInput, content, filePath)=>`# \u{1F50D} AI\u{9700}\u{6C42}\u{5206}\u{6790}\u{5B8C}\u{6210}
|
|
4157
4262
|
|
|
4158
4263
|
## \u{1F4DD} \u{7528}\u{6237}\u{539F}\u{59CB}\u{9700}\u{6C42}
|
|
4159
4264
|
${userInput}
|
|
4160
|
-
|
|
4161
|
-
## \u{1F4CB} \u{5F53}\u{524D}\u{4E0A}\u{4E0B}\u{6587}
|
|
4162
|
-
${context}
|
|
4163
4265
|
------------------------------
|
|
4164
4266
|
## \u{1F52C} \u{9700}\u{6C42}\u{5206}\u{6790}\u{7ED3}\u{679C}
|
|
4165
4267
|
${content}
|
|
@@ -4217,26 +4319,6 @@ class RequirementStorage {
|
|
|
4217
4319
|
console.error(`\u{274C} \u{4FDD}\u{5B58}\u{9700}\u{6C42}\u{6587}\u{6863}\u{5931}\u{8D25}: ${e}`);
|
|
4218
4320
|
}
|
|
4219
4321
|
}
|
|
4220
|
-
saveHistoryEntry(entryType, content, metadata = {}) {
|
|
4221
|
-
try {
|
|
4222
|
-
const historyEntry = {
|
|
4223
|
-
timestamp: new Date().toISOString(),
|
|
4224
|
-
type: entryType,
|
|
4225
|
-
content,
|
|
4226
|
-
metadata
|
|
4227
|
-
};
|
|
4228
|
-
let history = [];
|
|
4229
|
-
if (existsSync(this.historyFile)) {
|
|
4230
|
-
const data = readFileSync(this.historyFile, "utf8");
|
|
4231
|
-
history = JSON.parse(data);
|
|
4232
|
-
}
|
|
4233
|
-
history.push(historyEntry);
|
|
4234
|
-
writeFileSync(this.historyFile, JSON.stringify(history, null, 2), "utf8");
|
|
4235
|
-
console.log(`\u{2705} \u{5386}\u{53F2}\u{8BB0}\u{5F55}\u{5DF2}\u{4FDD}\u{5B58}: ${entryType}`);
|
|
4236
|
-
} catch (e) {
|
|
4237
|
-
console.error(`\u{274C} \u{4FDD}\u{5B58}\u{5386}\u{53F2}\u{8BB0}\u{5F55}\u{5931}\u{8D25}: ${e}`);
|
|
4238
|
-
}
|
|
4239
|
-
}
|
|
4240
4322
|
exportFinalDocument(currentRequirements) {
|
|
4241
4323
|
try {
|
|
4242
4324
|
const finalDoc = {
|
|
@@ -4349,9 +4431,6 @@ function addRequirementEntry(type, category, content) {
|
|
|
4349
4431
|
requirements_utils_currentRequirements[type] = [
|
|
4350
4432
|
requirementEntry
|
|
4351
4433
|
];
|
|
4352
|
-
requirements_utils_storage.saveHistoryEntry(type, content, {
|
|
4353
|
-
category
|
|
4354
|
-
});
|
|
4355
4434
|
requirements_utils_storage.saveRequirements(requirements_utils_currentRequirements);
|
|
4356
4435
|
return requirements_utils_currentRequirements;
|
|
4357
4436
|
}
|
|
@@ -4390,123 +4469,172 @@ const requirementManagerTool = {
|
|
|
4390
4469
|
return formatRequirementUpdateResponse(category, clarified_info, requirements_utils_currentRequirements, storage.requirementsFile, storage.historyFile);
|
|
4391
4470
|
}
|
|
4392
4471
|
};
|
|
4472
|
+
async function packProject() {
|
|
4473
|
+
const mdDir = path_0.join(getStorageDir(), 'tech');
|
|
4474
|
+
await promises.mkdir(mdDir, {
|
|
4475
|
+
recursive: true
|
|
4476
|
+
});
|
|
4477
|
+
logger_logger.info(`\u{1F4C2} \u{6B63}\u{5728}\u{5206}\u{6790}\u{5F53}\u{524D}\u{672C}\u{5730}\u{9879}\u{76EE}`);
|
|
4478
|
+
const mdPath = path_0.join(mdDir, `\u{9879}\u{76EE}\u{67B6}\u{6784}\u{5206}\u{6790}.md`);
|
|
4479
|
+
const options = {
|
|
4480
|
+
output: mdPath,
|
|
4481
|
+
style: 'markdown',
|
|
4482
|
+
headerText: "\u667A\u80FD\u8F6F\u4EF6\u661F\u5DE5\u5382",
|
|
4483
|
+
fileSummary: true,
|
|
4484
|
+
removeEmptyLines: true,
|
|
4485
|
+
removeComments: true,
|
|
4486
|
+
showLineNumbers: true,
|
|
4487
|
+
compress: true,
|
|
4488
|
+
quiet: true,
|
|
4489
|
+
customPatterns: [
|
|
4490
|
+
"**/*.md",
|
|
4491
|
+
"**/*.log",
|
|
4492
|
+
"**/*.json",
|
|
4493
|
+
"**/*.dockerfile",
|
|
4494
|
+
"**/*.yml",
|
|
4495
|
+
"**/*.yaml",
|
|
4496
|
+
"**/*.sh",
|
|
4497
|
+
"**/*.env",
|
|
4498
|
+
"**/*.env.example",
|
|
4499
|
+
"**/LICENSE"
|
|
4500
|
+
]
|
|
4501
|
+
};
|
|
4502
|
+
await external_aico_pack_runCli([
|
|
4503
|
+
config_PROJECT_ROOT
|
|
4504
|
+
], process.cwd(), options);
|
|
4505
|
+
return mdPath;
|
|
4506
|
+
}
|
|
4393
4507
|
const architectureDesignerTool = {
|
|
4394
4508
|
name: "architecture_designer",
|
|
4395
|
-
description: "\u67B6\u6784\u8BBE\u8BA1\
|
|
4509
|
+
description: "\u9879\u76EE\u67B6\u6784\u8BBE\u8BA1\u5E08 - \u57FA\u4E8E\u5B8C\u6574\u9700\u6C42\u751F\u6210\u6700\u4F18\u6280\u672F\u67B6\u6784\u65B9\u6848",
|
|
4396
4510
|
parameters: ArchitectureDesignerParams,
|
|
4397
4511
|
execute: async (args)=>{
|
|
4398
4512
|
const { design_focus = "full_architecture" } = args;
|
|
4399
4513
|
const storage = new RequirementStorage();
|
|
4400
|
-
|
|
4514
|
+
try {
|
|
4515
|
+
const mdPath = await packProject();
|
|
4516
|
+
const architecture_design = `# \u{1F3D7}\u{FE0F} \u{9879}\u{76EE}\u{67B6}\u{6784}\u{8BBE}\u{8BA1}\u{65B9}\u{6848}
|
|
4401
4517
|
|
|
4402
4518
|
## \u{1F3AF} \u{8BBE}\u{8BA1}\u{76EE}\u{6807}
|
|
4403
4519
|
- **\u{8BBE}\u{8BA1}\u{91CD}\u{70B9}**\u{FF1A}${design_focus}
|
|
4404
4520
|
- **\u{4F18}\u{5316}\u{76EE}\u{6807}**\u{FF1A}AI\u{53CB}\u{597D}\u{3001}\u{4F4E}\u{8026}\u{5408}\u{3001}\u{53EF}\u{7EF4}\u{62A4}
|
|
4405
4521
|
|
|
4406
|
-
## \u{
|
|
4522
|
+
## \u{1F4C4} \u{5173}\u{952E}\u{6587}\u{6863}
|
|
4523
|
+
- [\u{1F517} \u{5B8C}\u{6574}\u{67B6}\u{6784}\u{5206}\u{6790}\u{62A5}\u{544A}](${mdPath})
|
|
4407
4524
|
|
|
4408
|
-
|
|
4409
|
-
- **\u{6A21}\u{5757}\u{72EC}\u{7ACB}\u{6027}**\u{FF1A}\u{6BCF}\u{4E2A}\u{6A21}\u{5757}\u{529F}\u{80FD}\u{5355}\u{4E00}\u{FF0C}\u{8FB9}\u{754C}\u{6E05}\u{6670}
|
|
4410
|
-
- **\u{63A5}\u{53E3}\u{6807}\u{51C6}\u{5316}**\u{FF1A}\u{7EDF}\u{4E00}\u{7684}API\u{63A5}\u{53E3}\u{89C4}\u{8303}
|
|
4411
|
-
- **\u{4F9D}\u{8D56}\u{6700}\u{5C0F}\u{5316}**\u{FF1A}\u{51CF}\u{5C11}\u{6A21}\u{5757}\u{95F4}\u{7684}\u{5F3A}\u{4F9D}\u{8D56}\u{5173}\u{7CFB}
|
|
4412
|
-
- **\u{9519}\u{8BEF}\u{9694}\u{79BB}**\u{FF1A}\u{5355}\u{4E2A}\u{6A21}\u{5757}\u{95EE}\u{9898}\u{4E0D}\u{5F71}\u{54CD}\u{6574}\u{4F53}\u{7CFB}\u{7EDF}
|
|
4413
|
-
|
|
4414
|
-
### 2. AI\u{53CB}\u{597D}\u{67B6}\u{6784}\u{539F}\u{5219}
|
|
4415
|
-
- **\u{4EE3}\u{7801}\u{53EF}\u{7406}\u{89E3}\u{6027}**\u{FF1A}\u{6E05}\u{6670}\u{7684}\u{547D}\u{540D}\u{548C}\u{6CE8}\u{91CA}\u{89C4}\u{8303}
|
|
4416
|
-
- **\u{6A21}\u{5757}\u{5316}\u{5F00}\u{53D1}**\u{FF1A}\u{907F}\u{514D}\u{5927}\u{6587}\u{4EF6}\u{FF0C}\u{4FBF}\u{4E8E}AI\u{7406}\u{89E3}\u{548C}\u{4FEE}\u{6539}
|
|
4417
|
-
- **\u{6807}\u{51C6}\u{5316}\u{7ED3}\u{6784}**\u{FF1A}\u{7EDF}\u{4E00}\u{7684}\u{9879}\u{76EE}\u{7ED3}\u{6784}\u{548C}\u{4EE3}\u{7801}\u{7EC4}\u{7EC7}
|
|
4418
|
-
- **\u{6E10}\u{8FDB}\u{5F0F}\u{5F00}\u{53D1}**\u{FF1A}\u{652F}\u{6301}\u{5206}\u{9636}\u{6BB5}\u{5B9E}\u{73B0}\u{548C}\u{6D4B}\u{8BD5}
|
|
4419
|
-
|
|
4420
|
-
## \u{1F527} \u{6280}\u{672F}\u{67B6}\u{6784}\u{5EFA}\u{8BAE}
|
|
4525
|
+
## \u{1F916} AI\u{5F00}\u{53D1}\u{6700}\u{4F73}\u{5B9E}\u{8DF5}
|
|
4421
4526
|
|
|
4422
|
-
### \u{
|
|
4423
|
-
**\u{
|
|
4424
|
-
|
|
4425
|
-
|
|
4426
|
-
- UI\u{7EC4}\u{4EF6}\u{FF1A}Ant Design / Material-UI / Tailwind CSS
|
|
4527
|
+
### \u{6A21}\u{5757}\u{5F00}\u{53D1}\u{6307}\u{5BFC}
|
|
4528
|
+
1. **\u{5148}\u{5B9E}\u{73B0}\u{6838}\u{5FC3}\u{903B}\u{8F91}**\u{FF1A}\u{4E13}\u{6CE8}\u{4E3B}\u{8981}\u{529F}\u{80FD}
|
|
4529
|
+
2. **\u{518D}\u{6DFB}\u{52A0}\u{9519}\u{8BEF}\u{5904}\u{7406}**\u{FF1A}\u{5B8C}\u{5584}\u{5F02}\u{5E38}\u{5904}\u{7406}
|
|
4530
|
+
3. **\u{6700}\u{540E}\u{8FDB}\u{884C}\u{4F18}\u{5316}**\u{FF1A}\u{6027}\u{80FD}\u{4F18}\u{5316}\u{548C}\u{4EE3}\u{7801}\u{91CD}\u{6784}
|
|
4427
4531
|
|
|
4428
|
-
### \u{
|
|
4429
|
-
|
|
4430
|
-
- \u{6846}\u{67B6}\u{FF1A}FastAPI / Express.js / Spring Boot
|
|
4431
|
-
- \u{6570}\u{636E}\u{5E93}\u{FF1A}PostgreSQL / MySQL / MongoDB
|
|
4432
|
-
- \u{7F13}\u{5B58}\u{FF1A}Redis / Memcached
|
|
4532
|
+
### \u{80FD}\u{529B}\u{4F7F}\u{7528}\u{6307}\u{5357}
|
|
4533
|
+
> \u{5C06}\u{5B8C}\u{6574}\u{67B6}\u{6784}\u{5206}\u{6790}\u{62A5}\u{544A}\u{4F5C}\u{4E3A}\u{9644}\u{4EF6}\u{53D1}\u{9001}\u{7ED9}AI\u{FF0C}\u{53EF}\u{7528}\u{4E8E}\u{5B8C}\u{6210}\u{5982}\u{4E0B}\u{80FD}\u{529B}\u{FF1A}
|
|
4433
4534
|
|
|
4434
|
-
|
|
4535
|
+
#### \u{5F00}\u{53D1}\u{8005}\u{6307}\u{5357}
|
|
4536
|
+
**\u{63D0}\u{793A}\u{8BCD}**\u{FF1A}
|
|
4537
|
+
\u{521B}\u{5EFA}\u{5305}\u{542B}\u{4EE5}\u{4E0B}\u{5185}\u{5BB9}\u{7684}\u{5F00}\u{53D1}\u{8005}\u{6307}\u{5357}\u{FF1A}
|
|
4538
|
+
1. \u{73AF}\u{5883}\u{642D}\u{5EFA}\u{8BF4}\u{660E}
|
|
4539
|
+
2. \u{9879}\u{76EE}\u{7ED3}\u{6784}\u{6982}\u{89C8}
|
|
4540
|
+
3. \u{5F00}\u{53D1}\u{5DE5}\u{4F5C}\u{6D41}\u{7A0B}
|
|
4541
|
+
4. \u{6D4B}\u{8BD5}\u{65B9}\u{6CD5}
|
|
4542
|
+
5. \u{5E38}\u{89C1}\u{95EE}\u{9898}\u{6392}\u{67E5}\u{6B65}\u{9AA4}
|
|
4435
4543
|
|
|
4436
|
-
|
|
4437
|
-
|
|
4438
|
-
|
|
4439
|
-
|
|
4440
|
-
|
|
4544
|
+
#### API \u{6587}\u{6863}
|
|
4545
|
+
**\u{63D0}\u{793A}\u{8BCD}**\u{FF1A}
|
|
4546
|
+
\u{751F}\u{6210}\u{5168}\u{9762}\u{7684} API \u{6587}\u{6863}\u{FF1A}
|
|
4547
|
+
1. \u{5217}\u{51FA}\u{5E76}\u{63CF}\u{8FF0}\u{6240}\u{6709}\u{516C}\u{5171}\u{7AEF}\u{70B9}
|
|
4548
|
+
2. \u{8BB0}\u{5F55}\u{8BF7}\u{6C42}/\u{54CD}\u{5E94}\u{683C}\u{5F0F}
|
|
4549
|
+
3. \u{5305}\u{542B}\u{4F7F}\u{7528}\u{793A}\u{4F8B}
|
|
4550
|
+
4. \u{8BF4}\u{660E}\u{9650}\u{5236}\u{548C}\u{7EA6}\u{675F}
|
|
4441
4551
|
|
|
4442
|
-
|
|
4443
|
-
|
|
4444
|
-
|
|
4445
|
-
|
|
4552
|
+
#### \u{67B6}\u{6784}\u{6587}\u{6863}
|
|
4553
|
+
**\u{63D0}\u{793A}\u{8BCD}**\u{FF1A}
|
|
4554
|
+
\u{8BB0}\u{5F55}\u{7CFB}\u{7EDF}\u{67B6}\u{6784}\u{FF1A}
|
|
4555
|
+
1. \u{9AD8}\u{5C42}\u{6982}\u{8FF0}
|
|
4556
|
+
2. \u{7EC4}\u{4EF6}\u{4EA4}\u{4E92}
|
|
4557
|
+
3. \u{6570}\u{636E}\u{6D41}\u{7A0B}\u{56FE}
|
|
4558
|
+
4. \u{8BBE}\u{8BA1}\u{51B3}\u{7B56}\u{53CA}\u{7406}\u{7531}
|
|
4559
|
+
5. \u{7CFB}\u{7EDF}\u{9650}\u{5236}\u{548C}\u{7EA6}\u{675F}
|
|
4446
4560
|
|
|
4447
|
-
|
|
4561
|
+
#### \u{4F9D}\u{8D56}\u{9879}\u{5206}\u{6790}
|
|
4562
|
+
**\u{63D0}\u{793A}\u{8BCD}**\u{FF1A}
|
|
4563
|
+
\u{5206}\u{6790}\u{9879}\u{76EE}\u{4F9D}\u{8D56}\u{FF1A}
|
|
4564
|
+
1. \u{8BC6}\u{522B}\u{8FC7}\u{65F6}\u{7684}\u{5305}
|
|
4565
|
+
2. \u{68C0}\u{67E5}\u{5B89}\u{5168}\u{6F0F}\u{6D1E}
|
|
4566
|
+
3. \u{5EFA}\u{8BAE}\u{66FF}\u{4EE3}\u{5305}
|
|
4567
|
+
4. \u{8BC4}\u{5BA1}\u{4F9D}\u{8D56}\u{4F7F}\u{7528}\u{6A21}\u{5F0F}
|
|
4448
4568
|
|
|
4449
|
-
|
|
4450
|
-
- \u{9879}\u{76EE}\u{521D}\u{59CB}\u{5316}\u{548C}\u{73AF}\u{5883}\u{914D}\u{7F6E}
|
|
4451
|
-
- \u{57FA}\u{7840}\u{6846}\u{67B6}\u{4EE3}\u{7801}\u{642D}\u{5EFA}
|
|
4452
|
-
- \u{6570}\u{636E}\u{5E93}\u{8BBE}\u{8BA1}\u{548C}\u{521D}\u{59CB}\u{5316}
|
|
4569
|
+
\u{5305}\u{542B}\u{5177}\u{4F53}\u{7684}\u{5347}\u{7EA7}\u{5EFA}\u{8BAE}\u{3002}
|
|
4453
4570
|
|
|
4454
|
-
|
|
4455
|
-
|
|
4456
|
-
|
|
4457
|
-
|
|
4571
|
+
#### \u{6D4B}\u{8BD5}\u{8986}\u{76D6}\u{7387}
|
|
4572
|
+
**\u{63D0}\u{793A}\u{8BCD}**\u{FF1A}
|
|
4573
|
+
\u{8BC4}\u{5BA1}\u{6D4B}\u{8BD5}\u{8986}\u{76D6}\u{7387}\u{FF1A}
|
|
4574
|
+
1. \u{8BC6}\u{522B}\u{672A}\u{6D4B}\u{8BD5}\u{7684}\u{7EC4}\u{4EF6}
|
|
4575
|
+
2. \u{5EFA}\u{8BAE}\u{989D}\u{5916}\u{7684}\u{6D4B}\u{8BD5}\u{7528}\u{4F8B}
|
|
4576
|
+
3. \u{8BC4}\u{5BA1}\u{6D4B}\u{8BD5}\u{8D28}\u{91CF}
|
|
4577
|
+
4. \u{63A8}\u{8350}\u{6D4B}\u{8BD5}\u{7B56}\u{7565}
|
|
4458
4578
|
|
|
4459
|
-
|
|
4460
|
-
|
|
4461
|
-
|
|
4462
|
-
|
|
4579
|
+
#### \u{4EE3}\u{7801}\u{8D28}\u{91CF}
|
|
4580
|
+
**\u{63D0}\u{793A}\u{8BCD}**\u{FF1A}
|
|
4581
|
+
\u{8BC4}\u{4F30}\u{4EE3}\u{7801}\u{8D28}\u{91CF}\u{5E76}\u{63D0}\u{51FA}\u{6539}\u{8FDB}\u{5EFA}\u{8BAE}\u{FF1A}
|
|
4582
|
+
1. \u{8BC4}\u{5BA1}\u{547D}\u{540D}\u{89C4}\u{8303}
|
|
4583
|
+
2. \u{68C0}\u{67E5}\u{4EE3}\u{7801}\u{7EC4}\u{7EC7}
|
|
4584
|
+
3. \u{8BC4}\u{4F30}\u{9519}\u{8BEF}\u{5904}\u{7406}
|
|
4585
|
+
4. \u{8BC4}\u{5BA1}\u{6CE8}\u{91CA}\u{5B9E}\u{8DF5}
|
|
4463
4586
|
|
|
4464
|
-
|
|
4587
|
+
\u{63D0}\u{4F9B}\u{5177}\u{4F53}\u{7684}\u{826F}\u{597D}\u{548C}\u{95EE}\u{9898}\u{6A21}\u{5F0F}\u{793A}\u{4F8B}\u{3002}
|
|
4465
4588
|
|
|
4466
|
-
|
|
4467
|
-
|
|
4468
|
-
|
|
4469
|
-
|
|
4589
|
+
#### \u{67B6}\u{6784}\u{8BC4}\u{5BA1}
|
|
4590
|
+
**\u{63D0}\u{793A}\u{8BCD}**\u{FF1A}
|
|
4591
|
+
\u{5206}\u{6790}\u{6B64}\u{4EE3}\u{7801}\u{5E93}\u{7684}\u{67B6}\u{6784}\u{FF1A}
|
|
4592
|
+
1. \u{8BC4}\u{4F30}\u{6574}\u{4F53}\u{7ED3}\u{6784}\u{548C}\u{6A21}\u{5F0F}
|
|
4593
|
+
2. \u{8BC6}\u{522B}\u{6F5C}\u{5728}\u{7684}\u{67B6}\u{6784}\u{95EE}\u{9898}
|
|
4594
|
+
3. \u{63D0}\u{51FA}\u{6539}\u{8FDB}\u{53EF}\u{6269}\u{5C55}\u{6027}\u{7684}\u{5EFA}\u{8BAE}
|
|
4595
|
+
4. \u{6807}\u{6CE8}\u{9075}\u{5FAA}\u{6700}\u{4F73}\u{5B9E}\u{8DF5}\u{7684}\u{90E8}\u{5206}
|
|
4470
4596
|
|
|
4471
|
-
|
|
4472
|
-
- GET /api/users - \u{83B7}\u{53D6}\u{7528}\u{6237}\u{5217}\u{8868}
|
|
4473
|
-
- POST /api/users - \u{521B}\u{5EFA}\u{7528}\u{6237}
|
|
4474
|
-
- PUT /api/users/:id - \u{66F4}\u{65B0}\u{7528}\u{6237}
|
|
4475
|
-
- DELETE /api/users/:id - \u{5220}\u{9664}\u{7528}\u{6237}
|
|
4597
|
+
\u{91CD}\u{70B9}\u{5173}\u{6CE8}\u{53EF}\u{7EF4}\u{62A4}\u{6027}\u{548C}\u{6A21}\u{5757}\u{5316}\u{3002}
|
|
4476
4598
|
|
|
4477
|
-
|
|
4599
|
+
#### \u{5B89}\u{5168}\u{6027}\u{8BC4}\u{5BA1}
|
|
4600
|
+
**\u{63D0}\u{793A}\u{8BCD}**\u{FF1A}
|
|
4601
|
+
\u{5BF9}\u{6B64}\u{4EE3}\u{7801}\u{5E93}\u{8FDB}\u{884C}\u{5B89}\u{5168}\u{6027}\u{8BC4}\u{5BA1}\u{FF1A}
|
|
4602
|
+
1. \u{8BC6}\u{522B}\u{6F5C}\u{5728}\u{7684}\u{5B89}\u{5168}\u{6F0F}\u{6D1E}
|
|
4603
|
+
2. \u{68C0}\u{67E5}\u{5E38}\u{89C1}\u{7684}\u{5B89}\u{5168}\u{53CD}\u{6A21}\u{5F0F}
|
|
4604
|
+
3. \u{8BC4}\u{5BA1}\u{9519}\u{8BEF}\u{5904}\u{7406}\u{548C}\u{8F93}\u{5165}\u{9A8C}\u{8BC1}
|
|
4605
|
+
4. \u{8BC4}\u{4F30}\u{4F9D}\u{8D56}\u{9879}\u{7684}\u{5B89}\u{5168}\u{6027}
|
|
4478
4606
|
|
|
4479
|
-
|
|
4480
|
-
1. **\u{4F4E}\u{8026}\u{5408}\u{8BBE}\u{8BA1}**\u{FF1A}\u{6A21}\u{5757}\u{72EC}\u{7ACB}\u{FF0C}\u{4FBF}\u{4E8E}\u{7EF4}\u{62A4}\u{548C}\u{6269}\u{5C55}
|
|
4481
|
-
2. **AI\u{53CB}\u{597D}**\u{FF1A}\u{6E05}\u{6670}\u{7684}\u{7ED3}\u{6784}\u{FF0C}\u{4FBF}\u{4E8E}AI\u{7406}\u{89E3}\u{548C}\u{5F00}\u{53D1}
|
|
4482
|
-
3. **\u{53EF}\u{6269}\u{5C55}\u{6027}**\u{FF1A}\u{652F}\u{6301}\u{4E1A}\u{52A1}\u{589E}\u{957F}\u{548C}\u{529F}\u{80FD}\u{6269}\u{5C55}
|
|
4607
|
+
\u{8BF7}\u{63D0}\u{4F9B}\u{5177}\u{4F53}\u{793A}\u{4F8B}\u{548C}\u{4FEE}\u{590D}\u{6B65}\u{9AA4}\u{3002}
|
|
4483
4608
|
|
|
4484
|
-
|
|
4485
|
-
|
|
4486
|
-
|
|
4487
|
-
|
|
4609
|
+
#### \u{6027}\u{80FD}\u{8BC4}\u{5BA1}
|
|
4610
|
+
**\u{63D0}\u{793A}\u{8BCD}**\u{FF1A}
|
|
4611
|
+
\u{4ECE}\u{6027}\u{80FD}\u{89D2}\u{5EA6}\u{8BC4}\u{5BA1}\u{4EE3}\u{7801}\u{5E93}\u{FF1A}
|
|
4612
|
+
1. \u{8BC6}\u{522B}\u{6027}\u{80FD}\u{74F6}\u{9888}
|
|
4613
|
+
2. \u{68C0}\u{67E5}\u{8D44}\u{6E90}\u{4F7F}\u{7528}\u{60C5}\u{51B5}
|
|
4614
|
+
3. \u{8BC4}\u{5BA1}\u{7B97}\u{6CD5}\u{6548}\u{7387}
|
|
4615
|
+
4. \u{8BC4}\u{4F30}\u{7F13}\u{5B58}\u{7B56}\u{7565}
|
|
4488
4616
|
|
|
4617
|
+
\u{5305}\u{542B}\u{5177}\u{4F53}\u{7684}\u{4F18}\u{5316}\u{5EFA}\u{8BAE}\u{3002}
|
|
4489
4618
|
---
|
|
4490
4619
|
|
|
4491
4620
|
**\u{1F389} \u{67B6}\u{6784}\u{8BBE}\u{8BA1}\u{5B8C}\u{6210}\u{FF01}**
|
|
4492
4621
|
|
|
4493
|
-
\u{8FD9}\u{4E2A}\u{67B6}\u{6784}\u{8BBE}\u{8BA1}\u{65B9}\u{6848}\u{4E13}\u{95E8}\u{9488}\u{5BF9}AI\u{5F00}\u{53D1}\u{8FDB}\u{884C}\u{4E86}\u{4F18}\u{5316}\u{FF0C}\u{786E}\u{4FDD}\u{4F4E}\u{8026}\u{5408}\u{3001}AI\u{53CB}\u{597D}\u{7684}\u{5F00}\u{53D1}\u{4F53}\u{9A8C}\u{FF01}
|
|
4494
|
-
|
|
4495
4622
|
## \u{1F4BE} \u{6587}\u{6863}\u{5B58}\u{50A8}\u{4FE1}\u{606F}
|
|
4496
4623
|
- **\u{67B6}\u{6784}\u{8BBE}\u{8BA1}\u{5DF2}\u{4FDD}\u{5B58}\u{5230}**: \`${storage.requirementsFile}\`
|
|
4497
4624
|
- **\u{5B8C}\u{6574}\u{6587}\u{6863}\u{5BFC}\u{51FA}**: \u{4F7F}\u{7528} \`export_final_document\` \u{5DE5}\u{5177}\u{5BFC}\u{51FA}\u{5B8C}\u{6574}\u{9879}\u{76EE}\u{6587}\u{6863}
|
|
4498
4625
|
`;
|
|
4499
|
-
|
|
4500
|
-
|
|
4501
|
-
|
|
4502
|
-
|
|
4503
|
-
|
|
4504
|
-
|
|
4505
|
-
|
|
4506
|
-
|
|
4507
|
-
})
|
|
4508
|
-
|
|
4509
|
-
|
|
4626
|
+
requirements_utils_currentRequirements.architecture_designs = requirements_utils_currentRequirements.architecture_designs || [];
|
|
4627
|
+
requirements_utils_currentRequirements.architecture_designs.push({
|
|
4628
|
+
timestamp: new Date().toISOString(),
|
|
4629
|
+
design_focus,
|
|
4630
|
+
content: architecture_design
|
|
4631
|
+
});
|
|
4632
|
+
storage.saveRequirements(requirements_utils_currentRequirements);
|
|
4633
|
+
return architecture_design;
|
|
4634
|
+
} catch (error) {
|
|
4635
|
+
logger_logger.error(`\u{274C} \u{67B6}\u{6784}\u{8BBE}\u{8BA1}\u{751F}\u{6210}\u{5931}\u{8D25}: ${error instanceof Error ? error.message : String(error)}`);
|
|
4636
|
+
throw new Error(`\u{67B6}\u{6784}\u{8BBE}\u{8BA1}\u{751F}\u{6210}\u{5931}\u{8D25}: ${error instanceof Error ? error.message : String(error)}`);
|
|
4637
|
+
}
|
|
4510
4638
|
}
|
|
4511
4639
|
};
|
|
4512
4640
|
const exportFinalDocumentTool = {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const apiPrompt: (path: string) => Promise<string>;
|
package/dist/utils/storage.d.ts
CHANGED
|
@@ -9,7 +9,6 @@ export declare class RequirementStorage {
|
|
|
9
9
|
get storageDirectory(): string;
|
|
10
10
|
loadRequirements(): void;
|
|
11
11
|
saveRequirements(currentRequirements: Requirements): void;
|
|
12
|
-
saveHistoryEntry(entryType: string, content: string, metadata?: Record<string, any>): void;
|
|
13
12
|
exportFinalDocument(currentRequirements: Requirements): string | null;
|
|
14
13
|
private generateMarkdownReport;
|
|
15
14
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "intention-coding",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8",
|
|
4
4
|
"description": "软件工程化的需求分析,功能设计,代码编写,测试运行和发布部署",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -39,10 +39,12 @@
|
|
|
39
39
|
"zod": "3.25.64"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
+
"aico-pack": "2.1.0",
|
|
42
43
|
"fastmcp": "^3.3.0",
|
|
43
44
|
"html-to-md": "^0.8.8",
|
|
44
45
|
"lru-cache": "^11.1.0",
|
|
45
46
|
"mammoth": "^1.9.1",
|
|
47
|
+
"repomix": "^0.3.9",
|
|
46
48
|
"winston": "^3.17.0",
|
|
47
49
|
"winston-daily-rotate-file": "^5.0.0"
|
|
48
50
|
},
|