intention-coding 0.0.6 → 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/config.d.ts +2 -2
- package/dist/index.cjs +260 -142
- package/dist/index.js +259 -138
- package/dist/prompt/tech.d.ts +1 -0
- package/dist/utils/common.d.ts +0 -5
- package/dist/utils/pack.d.ts +5 -0
- package/dist/utils/storage.d.ts +0 -1
- package/package.json +3 -1
package/dist/config.d.ts
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
-
const __rslib_import_meta_url__ = /*#__PURE__*/ function() {
|
|
4
|
-
return 'undefined' == typeof document ? new (require('url'.replace('', ''))).URL('file:' + __filename).href : document.currentScript && document.currentScript.src || new URL('main.js', document.baseURI).href;
|
|
5
|
-
}();
|
|
6
3
|
var __webpack_require__ = {};
|
|
7
4
|
(()=>{
|
|
8
5
|
__webpack_require__.n = (module)=>{
|
|
@@ -151,28 +148,11 @@ const external_winston_namespaceObject = require("winston");
|
|
|
151
148
|
var external_winston_default = /*#__PURE__*/ __webpack_require__.n(external_winston_namespaceObject);
|
|
152
149
|
const external_winston_daily_rotate_file_namespaceObject = require("winston-daily-rotate-file");
|
|
153
150
|
var external_winston_daily_rotate_file_default = /*#__PURE__*/ __webpack_require__.n(external_winston_daily_rotate_file_namespaceObject);
|
|
154
|
-
const external_path_namespaceObject = require("path");
|
|
155
|
-
var external_path_default = /*#__PURE__*/ __webpack_require__.n(external_path_namespaceObject);
|
|
156
151
|
const external_fs_namespaceObject = require("fs");
|
|
157
152
|
var external_fs_default = /*#__PURE__*/ __webpack_require__.n(external_fs_namespaceObject);
|
|
158
|
-
const
|
|
159
|
-
const sanitizeFileName = (input)=>input.replace(/[\\/:*?"<>|\n\r#%&]/g, '').trim().replace(/\s+/g, '_').replace(/_+/g, '_').replace(/^_+|_+$/g, '');
|
|
160
|
-
function removeImagesFromMarkdown(content) {
|
|
161
|
-
let cleaned = content.replace(/!\[.*?\]\(.*?\)/g, '');
|
|
162
|
-
cleaned = cleaned.replace(/<img\b[^>]*>/g, '');
|
|
163
|
-
cleaned = cleaned.replace(/!\[.*?\]\(data:image\/[a-z+]+;base64,[a-zA-Z0-9+/=]+\)/g, '');
|
|
164
|
-
cleaned = cleaned.replace(/\n{3,}/g, '\n\n');
|
|
165
|
-
return cleaned.trim();
|
|
166
|
-
}
|
|
167
|
-
const getPackageJson = ()=>{
|
|
168
|
-
const __filename1 = (0, external_url_namespaceObject.fileURLToPath)(__rslib_import_meta_url__);
|
|
169
|
-
const __dirname = external_path_default().dirname(__filename1);
|
|
170
|
-
const packagePath = external_path_default().join(__dirname, '../../package.json');
|
|
171
|
-
return JSON.parse(external_fs_namespaceObject.readFileSync(packagePath, 'utf8'));
|
|
172
|
-
};
|
|
173
|
-
external_path_default().join(process.cwd(), '.aico');
|
|
153
|
+
const config_PROJECT_ROOT = process.env.MCP_STORAGE_DIR || process.cwd();
|
|
174
154
|
const getStorageDir = ()=>{
|
|
175
|
-
const envDir =
|
|
155
|
+
const envDir = config_PROJECT_ROOT + "/.aico";
|
|
176
156
|
if (!external_fs_namespaceObject.existsSync(envDir)) external_fs_namespaceObject.mkdirSync(envDir, {
|
|
177
157
|
recursive: true
|
|
178
158
|
});
|
|
@@ -180,9 +160,11 @@ const getStorageDir = ()=>{
|
|
|
180
160
|
};
|
|
181
161
|
const SERVICE_CONFIG = {
|
|
182
162
|
name: "\u667A\u80FD\u8F6F\u4EF6\u661F\u5DE5\u5382",
|
|
183
|
-
version:
|
|
184
|
-
description:
|
|
163
|
+
version: "0.0.1",
|
|
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"
|
|
185
165
|
};
|
|
166
|
+
const external_path_namespaceObject = require("path");
|
|
167
|
+
var external_path_default = /*#__PURE__*/ __webpack_require__.n(external_path_namespaceObject);
|
|
186
168
|
const logDir = getStorageDir() + '/logs';
|
|
187
169
|
const levels = {
|
|
188
170
|
error: 0,
|
|
@@ -212,8 +194,8 @@ const transports = [
|
|
|
212
194
|
filename: external_path_default().join(logDir, 'application-%DATE%.log'),
|
|
213
195
|
datePattern: 'YYYY-MM-DD',
|
|
214
196
|
zippedArchive: true,
|
|
215
|
-
maxSize: '
|
|
216
|
-
maxFiles: '
|
|
197
|
+
maxSize: '2m',
|
|
198
|
+
maxFiles: '7d',
|
|
217
199
|
format: fileFormat,
|
|
218
200
|
level: 'info'
|
|
219
201
|
})
|
|
@@ -231,7 +213,7 @@ const logger_logger = external_winston_default().createLogger({
|
|
|
231
213
|
datePattern: 'YYYY-MM-DD',
|
|
232
214
|
zippedArchive: true,
|
|
233
215
|
maxSize: '1m',
|
|
234
|
-
maxFiles: '
|
|
216
|
+
maxFiles: '7d',
|
|
235
217
|
format: fileFormat
|
|
236
218
|
})
|
|
237
219
|
],
|
|
@@ -241,7 +223,7 @@ const logger_logger = external_winston_default().createLogger({
|
|
|
241
223
|
datePattern: 'YYYY-MM-DD',
|
|
242
224
|
zippedArchive: true,
|
|
243
225
|
maxSize: '1m',
|
|
244
|
-
maxFiles: '
|
|
226
|
+
maxFiles: '7d',
|
|
245
227
|
format: fileFormat
|
|
246
228
|
})
|
|
247
229
|
]
|
|
@@ -3918,7 +3900,7 @@ const v3 = external_namespaceObject;
|
|
|
3918
3900
|
const esm = v3;
|
|
3919
3901
|
const RequirementClarifierParams = objectType({
|
|
3920
3902
|
user_input: stringType().describe("\u7528\u6237\u8F93\u5165\u7684\u9700\u6C42\u63CF\u8FF0"),
|
|
3921
|
-
file_path: stringType().describe("\u5982\u679C\u9700\u6C42\u63CF\u8FF0\u6765\u81EA\u6587\u6863\uFF0C\u9700\u8981\u63D0\u4F9B\u6587\u6863\u8F6C\u6362\u4E3Amd\u540E\u7684\u6587\u6863\u7684\u7EDD\u5BF9\u8DEF\u5F84")
|
|
3903
|
+
file_path: stringType().describe("\u5982\u679C\u9700\u6C42\u63CF\u8FF0\u6765\u81EA\u6587\u6863\uFF0C\u9700\u8981\u63D0\u4F9B\u6587\u6863\u8F6C\u6362\u4E3Amd\u683C\u5F0F\u540E\u7684\u6587\u6863\u7684\u7EDD\u5BF9\u8DEF\u5F84")
|
|
3922
3904
|
});
|
|
3923
3905
|
const RequirementManagerParams = objectType({
|
|
3924
3906
|
clarified_info: stringType().describe("\u6F84\u6E05\u540E\u7684\u9700\u6C42\u4FE1\u606F"),
|
|
@@ -3935,7 +3917,7 @@ const RequirementManagerParams = objectType({
|
|
|
3935
3917
|
]).describe("\u9700\u6C42\u5206\u7C7B")
|
|
3936
3918
|
});
|
|
3937
3919
|
const ArchitectureDesignerParams = objectType({
|
|
3938
|
-
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")
|
|
3939
3921
|
});
|
|
3940
3922
|
async function invokeFlow(params, streamCb) {
|
|
3941
3923
|
const { appid = 'app-ESTcrkOPOmkxdrO0120mE4s1', data, timeout = 1800000 } = params;
|
|
@@ -4100,6 +4082,14 @@ function removeCodeBlock(content) {
|
|
|
4100
4082
|
const startRegExp = new RegExp(`^\\\`\\\`\\\`${language}\\n`);
|
|
4101
4083
|
return content.trim().replace(startRegExp, '').replace(/\n?```$/, '');
|
|
4102
4084
|
}
|
|
4085
|
+
const sanitizeFileName = (input)=>input.replace(/[\\/:*?"<>|\n\r#%&]/g, '').trim().replace(/\s+/g, '_').replace(/_+/g, '_').replace(/^_+|_+$/g, '');
|
|
4086
|
+
function removeImagesFromMarkdown(content) {
|
|
4087
|
+
let cleaned = content.replace(/!\[.*?\]\(.*?\)/g, '');
|
|
4088
|
+
cleaned = cleaned.replace(/<img\b[^>]*>/g, '');
|
|
4089
|
+
cleaned = cleaned.replace(/!\[.*?\]\(data:image\/[a-z+]+;base64,[a-zA-Z0-9+/=]+\)/g, '');
|
|
4090
|
+
cleaned = cleaned.replace(/\n{3,}/g, '\n\n');
|
|
4091
|
+
return cleaned.trim();
|
|
4092
|
+
}
|
|
4103
4093
|
const promises_namespaceObject = require("fs/promises");
|
|
4104
4094
|
var promises_default = /*#__PURE__*/ __webpack_require__.n(promises_namespaceObject);
|
|
4105
4095
|
const requirementClarifier = {
|
|
@@ -4130,19 +4120,35 @@ const requirementClarifier = {
|
|
|
4130
4120
|
user_input
|
|
4131
4121
|
});
|
|
4132
4122
|
const fileName = sanitizeFileName(analysisContent.length > 10 ? analysisContent.substring(0, 10) : `analysis_${Date.now()}`);
|
|
4133
|
-
const mdDir = external_path_default().join(getStorageDir(), '
|
|
4123
|
+
const mdDir = external_path_default().join(getStorageDir(), 'prd');
|
|
4134
4124
|
await promises_default().mkdir(mdDir, {
|
|
4135
4125
|
recursive: true
|
|
4136
4126
|
});
|
|
4137
4127
|
const mdPath = external_path_default().join(mdDir, `${fileName}.md`);
|
|
4138
4128
|
const mdPathResolved = external_path_default().resolve(mdPath);
|
|
4139
|
-
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');
|
|
4140
4145
|
logger_logger.info({
|
|
4141
4146
|
module: 'requirement_clarifier',
|
|
4142
4147
|
message: "\u9700\u6C42\u5206\u6790\u6587\u4EF6\u5DF2\u4FDD\u5B58",
|
|
4143
|
-
path: mdPathResolved
|
|
4148
|
+
path: mdPathResolved,
|
|
4149
|
+
hasSubFiles: jumpLinks.length > 0
|
|
4144
4150
|
});
|
|
4145
|
-
return formatAnalysisPrompt(user_input,
|
|
4151
|
+
return formatAnalysisPrompt(user_input, finalContent, mdPathResolved);
|
|
4146
4152
|
} catch (error) {
|
|
4147
4153
|
const errorMsg = `\u{9700}\u{6C42}\u{5206}\u{6790}\u{5931}\u{8D25}: ${error instanceof Error ? error.message : String(error)}`;
|
|
4148
4154
|
logger_logger.error({
|
|
@@ -4177,13 +4183,98 @@ const getAiAnalysis = async (input)=>{
|
|
|
4177
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"}`);
|
|
4178
4184
|
}
|
|
4179
4185
|
};
|
|
4180
|
-
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}
|
|
4181
4275
|
|
|
4182
4276
|
## \u{1F4DD} \u{7528}\u{6237}\u{539F}\u{59CB}\u{9700}\u{6C42}
|
|
4183
4277
|
${userInput}
|
|
4184
|
-
|
|
4185
|
-
## \u{1F4CB} \u{5F53}\u{524D}\u{4E0A}\u{4E0B}\u{6587}
|
|
4186
|
-
${context}
|
|
4187
4278
|
------------------------------
|
|
4188
4279
|
## \u{1F52C} \u{9700}\u{6C42}\u{5206}\u{6790}\u{7ED3}\u{679C}
|
|
4189
4280
|
${content}
|
|
@@ -4241,26 +4332,6 @@ class RequirementStorage {
|
|
|
4241
4332
|
console.error(`\u{274C} \u{4FDD}\u{5B58}\u{9700}\u{6C42}\u{6587}\u{6863}\u{5931}\u{8D25}: ${e}`);
|
|
4242
4333
|
}
|
|
4243
4334
|
}
|
|
4244
|
-
saveHistoryEntry(entryType, content, metadata = {}) {
|
|
4245
|
-
try {
|
|
4246
|
-
const historyEntry = {
|
|
4247
|
-
timestamp: new Date().toISOString(),
|
|
4248
|
-
type: entryType,
|
|
4249
|
-
content,
|
|
4250
|
-
metadata
|
|
4251
|
-
};
|
|
4252
|
-
let history = [];
|
|
4253
|
-
if (external_fs_namespaceObject.existsSync(this.historyFile)) {
|
|
4254
|
-
const data = external_fs_namespaceObject.readFileSync(this.historyFile, "utf8");
|
|
4255
|
-
history = JSON.parse(data);
|
|
4256
|
-
}
|
|
4257
|
-
history.push(historyEntry);
|
|
4258
|
-
external_fs_namespaceObject.writeFileSync(this.historyFile, JSON.stringify(history, null, 2), "utf8");
|
|
4259
|
-
console.log(`\u{2705} \u{5386}\u{53F2}\u{8BB0}\u{5F55}\u{5DF2}\u{4FDD}\u{5B58}: ${entryType}`);
|
|
4260
|
-
} catch (e) {
|
|
4261
|
-
console.error(`\u{274C} \u{4FDD}\u{5B58}\u{5386}\u{53F2}\u{8BB0}\u{5F55}\u{5931}\u{8D25}: ${e}`);
|
|
4262
|
-
}
|
|
4263
|
-
}
|
|
4264
4335
|
exportFinalDocument(currentRequirements) {
|
|
4265
4336
|
try {
|
|
4266
4337
|
const finalDoc = {
|
|
@@ -4373,9 +4444,6 @@ function addRequirementEntry(type, category, content) {
|
|
|
4373
4444
|
requirements_utils_currentRequirements[type] = [
|
|
4374
4445
|
requirementEntry
|
|
4375
4446
|
];
|
|
4376
|
-
requirements_utils_storage.saveHistoryEntry(type, content, {
|
|
4377
|
-
category
|
|
4378
|
-
});
|
|
4379
4447
|
requirements_utils_storage.saveRequirements(requirements_utils_currentRequirements);
|
|
4380
4448
|
return requirements_utils_currentRequirements;
|
|
4381
4449
|
}
|
|
@@ -4414,123 +4482,173 @@ const requirementManagerTool = {
|
|
|
4414
4482
|
return formatRequirementUpdateResponse(category, clarified_info, requirements_utils_currentRequirements, storage.requirementsFile, storage.historyFile);
|
|
4415
4483
|
}
|
|
4416
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
|
+
}
|
|
4417
4521
|
const architectureDesignerTool = {
|
|
4418
4522
|
name: "architecture_designer",
|
|
4419
|
-
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",
|
|
4420
4524
|
parameters: ArchitectureDesignerParams,
|
|
4421
4525
|
execute: async (args)=>{
|
|
4422
4526
|
const { design_focus = "full_architecture" } = args;
|
|
4423
4527
|
const storage = new RequirementStorage();
|
|
4424
|
-
|
|
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}
|
|
4425
4531
|
|
|
4426
4532
|
## \u{1F3AF} \u{8BBE}\u{8BA1}\u{76EE}\u{6807}
|
|
4427
4533
|
- **\u{8BBE}\u{8BA1}\u{91CD}\u{70B9}**\u{FF1A}${design_focus}
|
|
4428
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}
|
|
4429
4535
|
|
|
4430
|
-
## \u{
|
|
4431
|
-
|
|
4432
|
-
### 1. \u{4F4E}\u{8026}\u{5408}\u{8BBE}\u{8BA1}\u{539F}\u{5219}
|
|
4433
|
-
- **\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}
|
|
4434
|
-
- **\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}
|
|
4435
|
-
- **\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}
|
|
4436
|
-
- **\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}
|
|
4437
|
-
|
|
4438
|
-
### 2. AI\u{53CB}\u{597D}\u{67B6}\u{6784}\u{539F}\u{5219}
|
|
4439
|
-
- **\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}
|
|
4440
|
-
- **\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}
|
|
4441
|
-
- **\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}
|
|
4442
|
-
- **\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}
|
|
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})
|
|
4443
4538
|
|
|
4444
|
-
## \u{
|
|
4539
|
+
## \u{1F916} AI\u{5F00}\u{53D1}\u{6700}\u{4F73}\u{5B9E}\u{8DF5}
|
|
4445
4540
|
|
|
4446
|
-
### \u{
|
|
4447
|
-
**\u{
|
|
4448
|
-
|
|
4449
|
-
|
|
4450
|
-
- 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}
|
|
4451
4545
|
|
|
4452
|
-
### \u{
|
|
4453
|
-
|
|
4454
|
-
- \u{6846}\u{67B6}\u{FF1A}FastAPI / Express.js / Spring Boot
|
|
4455
|
-
- \u{6570}\u{636E}\u{5E93}\u{FF1A}PostgreSQL / MySQL / MongoDB
|
|
4456
|
-
- \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}
|
|
4457
4548
|
|
|
4458
|
-
|
|
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}
|
|
4459
4557
|
|
|
4460
|
-
|
|
4461
|
-
|
|
4462
|
-
|
|
4463
|
-
|
|
4464
|
-
|
|
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}
|
|
4465
4565
|
|
|
4466
|
-
|
|
4467
|
-
|
|
4468
|
-
|
|
4469
|
-
|
|
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}
|
|
4470
4574
|
|
|
4471
|
-
|
|
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}
|
|
4472
4582
|
|
|
4473
|
-
|
|
4474
|
-
- \u{9879}\u{76EE}\u{521D}\u{59CB}\u{5316}\u{548C}\u{73AF}\u{5883}\u{914D}\u{7F6E}
|
|
4475
|
-
- \u{57FA}\u{7840}\u{6846}\u{67B6}\u{4EE3}\u{7801}\u{642D}\u{5EFA}
|
|
4476
|
-
- \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}
|
|
4477
4584
|
|
|
4478
|
-
|
|
4479
|
-
|
|
4480
|
-
|
|
4481
|
-
|
|
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}
|
|
4482
4592
|
|
|
4483
|
-
|
|
4484
|
-
|
|
4485
|
-
|
|
4486
|
-
|
|
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}
|
|
4487
4600
|
|
|
4488
|
-
|
|
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}
|
|
4489
4602
|
|
|
4490
|
-
|
|
4491
|
-
|
|
4492
|
-
|
|
4493
|
-
|
|
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}
|
|
4494
4610
|
|
|
4495
|
-
|
|
4496
|
-
- GET /api/users - \u{83B7}\u{53D6}\u{7528}\u{6237}\u{5217}\u{8868}
|
|
4497
|
-
- POST /api/users - \u{521B}\u{5EFA}\u{7528}\u{6237}
|
|
4498
|
-
- PUT /api/users/:id - \u{66F4}\u{65B0}\u{7528}\u{6237}
|
|
4499
|
-
- 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}
|
|
4500
4612
|
|
|
4501
|
-
|
|
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}
|
|
4502
4620
|
|
|
4503
|
-
|
|
4504
|
-
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}
|
|
4505
|
-
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}
|
|
4506
|
-
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}
|
|
4507
4622
|
|
|
4508
|
-
|
|
4509
|
-
|
|
4510
|
-
|
|
4511
|
-
|
|
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}
|
|
4512
4630
|
|
|
4631
|
+
\u{5305}\u{542B}\u{5177}\u{4F53}\u{7684}\u{4F18}\u{5316}\u{5EFA}\u{8BAE}\u{3002}
|
|
4513
4632
|
---
|
|
4514
4633
|
|
|
4515
4634
|
**\u{1F389} \u{67B6}\u{6784}\u{8BBE}\u{8BA1}\u{5B8C}\u{6210}\u{FF01}**
|
|
4516
4635
|
|
|
4517
|
-
\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}
|
|
4518
|
-
|
|
4519
4636
|
## \u{1F4BE} \u{6587}\u{6863}\u{5B58}\u{50A8}\u{4FE1}\u{606F}
|
|
4520
4637
|
- **\u{67B6}\u{6784}\u{8BBE}\u{8BA1}\u{5DF2}\u{4FDD}\u{5B58}\u{5230}**: \`${storage.requirementsFile}\`
|
|
4521
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}
|
|
4522
4639
|
`;
|
|
4523
|
-
|
|
4524
|
-
|
|
4525
|
-
|
|
4526
|
-
|
|
4527
|
-
|
|
4528
|
-
|
|
4529
|
-
|
|
4530
|
-
|
|
4531
|
-
})
|
|
4532
|
-
|
|
4533
|
-
|
|
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
|
+
}
|
|
4534
4652
|
}
|
|
4535
4653
|
};
|
|
4536
4654
|
const exportFinalDocumentTool = {
|
package/dist/index.js
CHANGED
|
@@ -2,10 +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";
|
|
7
|
-
import {
|
|
6
|
+
import path_0, { join } from "path";
|
|
8
7
|
import promises, { mkdir, readFile, stat, writeFile } from "fs/promises";
|
|
8
|
+
import { runCli as external_aico_pack_runCli } from "aico-pack";
|
|
9
9
|
import { convertToHtml } from "mammoth";
|
|
10
10
|
import html_to_md from "html-to-md";
|
|
11
11
|
var __webpack_require__ = {};
|
|
@@ -141,23 +141,9 @@ __webpack_require__.d(external_namespaceObject, {
|
|
|
141
141
|
util: ()=>util_util,
|
|
142
142
|
void: ()=>voidType
|
|
143
143
|
});
|
|
144
|
-
const
|
|
145
|
-
function removeImagesFromMarkdown(content) {
|
|
146
|
-
let cleaned = content.replace(/!\[.*?\]\(.*?\)/g, '');
|
|
147
|
-
cleaned = cleaned.replace(/<img\b[^>]*>/g, '');
|
|
148
|
-
cleaned = cleaned.replace(/!\[.*?\]\(data:image\/[a-z+]+;base64,[a-zA-Z0-9+/=]+\)/g, '');
|
|
149
|
-
cleaned = cleaned.replace(/\n{3,}/g, '\n\n');
|
|
150
|
-
return cleaned.trim();
|
|
151
|
-
}
|
|
152
|
-
const getPackageJson = ()=>{
|
|
153
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
154
|
-
const __dirname = path_0.dirname(__filename);
|
|
155
|
-
const packagePath = path_0.join(__dirname, '../../package.json');
|
|
156
|
-
return JSON.parse(readFileSync(packagePath, 'utf8'));
|
|
157
|
-
};
|
|
158
|
-
path_0.join(process.cwd(), '.aico');
|
|
144
|
+
const config_PROJECT_ROOT = process.env.MCP_STORAGE_DIR || process.cwd();
|
|
159
145
|
const getStorageDir = ()=>{
|
|
160
|
-
const envDir =
|
|
146
|
+
const envDir = config_PROJECT_ROOT + "/.aico";
|
|
161
147
|
if (!existsSync(envDir)) mkdirSync(envDir, {
|
|
162
148
|
recursive: true
|
|
163
149
|
});
|
|
@@ -165,8 +151,8 @@ const getStorageDir = ()=>{
|
|
|
165
151
|
};
|
|
166
152
|
const SERVICE_CONFIG = {
|
|
167
153
|
name: "\u667A\u80FD\u8F6F\u4EF6\u661F\u5DE5\u5382",
|
|
168
|
-
version:
|
|
169
|
-
description:
|
|
154
|
+
version: "0.0.1",
|
|
155
|
+
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"
|
|
170
156
|
};
|
|
171
157
|
const logDir = getStorageDir() + '/logs';
|
|
172
158
|
const levels = {
|
|
@@ -197,8 +183,8 @@ const transports = [
|
|
|
197
183
|
filename: path_0.join(logDir, 'application-%DATE%.log'),
|
|
198
184
|
datePattern: 'YYYY-MM-DD',
|
|
199
185
|
zippedArchive: true,
|
|
200
|
-
maxSize: '
|
|
201
|
-
maxFiles: '
|
|
186
|
+
maxSize: '2m',
|
|
187
|
+
maxFiles: '7d',
|
|
202
188
|
format: fileFormat,
|
|
203
189
|
level: 'info'
|
|
204
190
|
})
|
|
@@ -216,7 +202,7 @@ const logger_logger = winston.createLogger({
|
|
|
216
202
|
datePattern: 'YYYY-MM-DD',
|
|
217
203
|
zippedArchive: true,
|
|
218
204
|
maxSize: '1m',
|
|
219
|
-
maxFiles: '
|
|
205
|
+
maxFiles: '7d',
|
|
220
206
|
format: fileFormat
|
|
221
207
|
})
|
|
222
208
|
],
|
|
@@ -226,7 +212,7 @@ const logger_logger = winston.createLogger({
|
|
|
226
212
|
datePattern: 'YYYY-MM-DD',
|
|
227
213
|
zippedArchive: true,
|
|
228
214
|
maxSize: '1m',
|
|
229
|
-
maxFiles: '
|
|
215
|
+
maxFiles: '7d',
|
|
230
216
|
format: fileFormat
|
|
231
217
|
})
|
|
232
218
|
]
|
|
@@ -3903,7 +3889,7 @@ const v3 = external_namespaceObject;
|
|
|
3903
3889
|
const esm = v3;
|
|
3904
3890
|
const RequirementClarifierParams = objectType({
|
|
3905
3891
|
user_input: stringType().describe("\u7528\u6237\u8F93\u5165\u7684\u9700\u6C42\u63CF\u8FF0"),
|
|
3906
|
-
file_path: stringType().describe("\u5982\u679C\u9700\u6C42\u63CF\u8FF0\u6765\u81EA\u6587\u6863\uFF0C\u9700\u8981\u63D0\u4F9B\u6587\u6863\u8F6C\u6362\u4E3Amd\u540E\u7684\u6587\u6863\u7684\u7EDD\u5BF9\u8DEF\u5F84")
|
|
3892
|
+
file_path: stringType().describe("\u5982\u679C\u9700\u6C42\u63CF\u8FF0\u6765\u81EA\u6587\u6863\uFF0C\u9700\u8981\u63D0\u4F9B\u6587\u6863\u8F6C\u6362\u4E3Amd\u683C\u5F0F\u540E\u7684\u6587\u6863\u7684\u7EDD\u5BF9\u8DEF\u5F84")
|
|
3907
3893
|
});
|
|
3908
3894
|
const RequirementManagerParams = objectType({
|
|
3909
3895
|
clarified_info: stringType().describe("\u6F84\u6E05\u540E\u7684\u9700\u6C42\u4FE1\u606F"),
|
|
@@ -3920,7 +3906,7 @@ const RequirementManagerParams = objectType({
|
|
|
3920
3906
|
]).describe("\u9700\u6C42\u5206\u7C7B")
|
|
3921
3907
|
});
|
|
3922
3908
|
const ArchitectureDesignerParams = objectType({
|
|
3923
|
-
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")
|
|
3924
3910
|
});
|
|
3925
3911
|
async function invokeFlow(params, streamCb) {
|
|
3926
3912
|
const { appid = 'app-ESTcrkOPOmkxdrO0120mE4s1', data, timeout = 1800000 } = params;
|
|
@@ -4085,6 +4071,14 @@ function removeCodeBlock(content) {
|
|
|
4085
4071
|
const startRegExp = new RegExp(`^\\\`\\\`\\\`${language}\\n`);
|
|
4086
4072
|
return content.trim().replace(startRegExp, '').replace(/\n?```$/, '');
|
|
4087
4073
|
}
|
|
4074
|
+
const sanitizeFileName = (input)=>input.replace(/[\\/:*?"<>|\n\r#%&]/g, '').trim().replace(/\s+/g, '_').replace(/_+/g, '_').replace(/^_+|_+$/g, '');
|
|
4075
|
+
function removeImagesFromMarkdown(content) {
|
|
4076
|
+
let cleaned = content.replace(/!\[.*?\]\(.*?\)/g, '');
|
|
4077
|
+
cleaned = cleaned.replace(/<img\b[^>]*>/g, '');
|
|
4078
|
+
cleaned = cleaned.replace(/!\[.*?\]\(data:image\/[a-z+]+;base64,[a-zA-Z0-9+/=]+\)/g, '');
|
|
4079
|
+
cleaned = cleaned.replace(/\n{3,}/g, '\n\n');
|
|
4080
|
+
return cleaned.trim();
|
|
4081
|
+
}
|
|
4088
4082
|
const requirementClarifier = {
|
|
4089
4083
|
name: "requirement_clarifier",
|
|
4090
4084
|
description: "\u9700\u6C42\u5DE5\u7A0B\u5E08 - \u5206\u6790\u7528\u6237\u9700\u6C42\u5B8C\u6574\u6027\uFF0C\u4E3B\u52A8\u53D1\u73B0\u4E0D\u660E\u786E\u7684\u5730\u65B9",
|
|
@@ -4113,19 +4107,35 @@ const requirementClarifier = {
|
|
|
4113
4107
|
user_input
|
|
4114
4108
|
});
|
|
4115
4109
|
const fileName = sanitizeFileName(analysisContent.length > 10 ? analysisContent.substring(0, 10) : `analysis_${Date.now()}`);
|
|
4116
|
-
const mdDir = path_0.join(getStorageDir(), '
|
|
4110
|
+
const mdDir = path_0.join(getStorageDir(), 'prd');
|
|
4117
4111
|
await promises.mkdir(mdDir, {
|
|
4118
4112
|
recursive: true
|
|
4119
4113
|
});
|
|
4120
4114
|
const mdPath = path_0.join(mdDir, `${fileName}.md`);
|
|
4121
4115
|
const mdPathResolved = path_0.resolve(mdPath);
|
|
4122
|
-
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');
|
|
4123
4132
|
logger_logger.info({
|
|
4124
4133
|
module: 'requirement_clarifier',
|
|
4125
4134
|
message: "\u9700\u6C42\u5206\u6790\u6587\u4EF6\u5DF2\u4FDD\u5B58",
|
|
4126
|
-
path: mdPathResolved
|
|
4135
|
+
path: mdPathResolved,
|
|
4136
|
+
hasSubFiles: jumpLinks.length > 0
|
|
4127
4137
|
});
|
|
4128
|
-
return formatAnalysisPrompt(user_input,
|
|
4138
|
+
return formatAnalysisPrompt(user_input, finalContent, mdPathResolved);
|
|
4129
4139
|
} catch (error) {
|
|
4130
4140
|
const errorMsg = `\u{9700}\u{6C42}\u{5206}\u{6790}\u{5931}\u{8D25}: ${error instanceof Error ? error.message : String(error)}`;
|
|
4131
4141
|
logger_logger.error({
|
|
@@ -4160,13 +4170,98 @@ const getAiAnalysis = async (input)=>{
|
|
|
4160
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"}`);
|
|
4161
4171
|
}
|
|
4162
4172
|
};
|
|
4163
|
-
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}
|
|
4164
4262
|
|
|
4165
4263
|
## \u{1F4DD} \u{7528}\u{6237}\u{539F}\u{59CB}\u{9700}\u{6C42}
|
|
4166
4264
|
${userInput}
|
|
4167
|
-
|
|
4168
|
-
## \u{1F4CB} \u{5F53}\u{524D}\u{4E0A}\u{4E0B}\u{6587}
|
|
4169
|
-
${context}
|
|
4170
4265
|
------------------------------
|
|
4171
4266
|
## \u{1F52C} \u{9700}\u{6C42}\u{5206}\u{6790}\u{7ED3}\u{679C}
|
|
4172
4267
|
${content}
|
|
@@ -4224,26 +4319,6 @@ class RequirementStorage {
|
|
|
4224
4319
|
console.error(`\u{274C} \u{4FDD}\u{5B58}\u{9700}\u{6C42}\u{6587}\u{6863}\u{5931}\u{8D25}: ${e}`);
|
|
4225
4320
|
}
|
|
4226
4321
|
}
|
|
4227
|
-
saveHistoryEntry(entryType, content, metadata = {}) {
|
|
4228
|
-
try {
|
|
4229
|
-
const historyEntry = {
|
|
4230
|
-
timestamp: new Date().toISOString(),
|
|
4231
|
-
type: entryType,
|
|
4232
|
-
content,
|
|
4233
|
-
metadata
|
|
4234
|
-
};
|
|
4235
|
-
let history = [];
|
|
4236
|
-
if (existsSync(this.historyFile)) {
|
|
4237
|
-
const data = readFileSync(this.historyFile, "utf8");
|
|
4238
|
-
history = JSON.parse(data);
|
|
4239
|
-
}
|
|
4240
|
-
history.push(historyEntry);
|
|
4241
|
-
writeFileSync(this.historyFile, JSON.stringify(history, null, 2), "utf8");
|
|
4242
|
-
console.log(`\u{2705} \u{5386}\u{53F2}\u{8BB0}\u{5F55}\u{5DF2}\u{4FDD}\u{5B58}: ${entryType}`);
|
|
4243
|
-
} catch (e) {
|
|
4244
|
-
console.error(`\u{274C} \u{4FDD}\u{5B58}\u{5386}\u{53F2}\u{8BB0}\u{5F55}\u{5931}\u{8D25}: ${e}`);
|
|
4245
|
-
}
|
|
4246
|
-
}
|
|
4247
4322
|
exportFinalDocument(currentRequirements) {
|
|
4248
4323
|
try {
|
|
4249
4324
|
const finalDoc = {
|
|
@@ -4356,9 +4431,6 @@ function addRequirementEntry(type, category, content) {
|
|
|
4356
4431
|
requirements_utils_currentRequirements[type] = [
|
|
4357
4432
|
requirementEntry
|
|
4358
4433
|
];
|
|
4359
|
-
requirements_utils_storage.saveHistoryEntry(type, content, {
|
|
4360
|
-
category
|
|
4361
|
-
});
|
|
4362
4434
|
requirements_utils_storage.saveRequirements(requirements_utils_currentRequirements);
|
|
4363
4435
|
return requirements_utils_currentRequirements;
|
|
4364
4436
|
}
|
|
@@ -4397,123 +4469,172 @@ const requirementManagerTool = {
|
|
|
4397
4469
|
return formatRequirementUpdateResponse(category, clarified_info, requirements_utils_currentRequirements, storage.requirementsFile, storage.historyFile);
|
|
4398
4470
|
}
|
|
4399
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
|
+
}
|
|
4400
4507
|
const architectureDesignerTool = {
|
|
4401
4508
|
name: "architecture_designer",
|
|
4402
|
-
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",
|
|
4403
4510
|
parameters: ArchitectureDesignerParams,
|
|
4404
4511
|
execute: async (args)=>{
|
|
4405
4512
|
const { design_focus = "full_architecture" } = args;
|
|
4406
4513
|
const storage = new RequirementStorage();
|
|
4407
|
-
|
|
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}
|
|
4408
4517
|
|
|
4409
4518
|
## \u{1F3AF} \u{8BBE}\u{8BA1}\u{76EE}\u{6807}
|
|
4410
4519
|
- **\u{8BBE}\u{8BA1}\u{91CD}\u{70B9}**\u{FF1A}${design_focus}
|
|
4411
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}
|
|
4412
4521
|
|
|
4413
|
-
## \u{
|
|
4414
|
-
|
|
4415
|
-
### 1. \u{4F4E}\u{8026}\u{5408}\u{8BBE}\u{8BA1}\u{539F}\u{5219}
|
|
4416
|
-
- **\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}
|
|
4417
|
-
- **\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}
|
|
4418
|
-
- **\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}
|
|
4419
|
-
- **\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}
|
|
4420
|
-
|
|
4421
|
-
### 2. AI\u{53CB}\u{597D}\u{67B6}\u{6784}\u{539F}\u{5219}
|
|
4422
|
-
- **\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}
|
|
4423
|
-
- **\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}
|
|
4424
|
-
- **\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}
|
|
4425
|
-
- **\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}
|
|
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})
|
|
4426
4524
|
|
|
4427
|
-
## \u{
|
|
4525
|
+
## \u{1F916} AI\u{5F00}\u{53D1}\u{6700}\u{4F73}\u{5B9E}\u{8DF5}
|
|
4428
4526
|
|
|
4429
|
-
### \u{
|
|
4430
|
-
**\u{
|
|
4431
|
-
|
|
4432
|
-
|
|
4433
|
-
- 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}
|
|
4434
4531
|
|
|
4435
|
-
### \u{
|
|
4436
|
-
|
|
4437
|
-
- \u{6846}\u{67B6}\u{FF1A}FastAPI / Express.js / Spring Boot
|
|
4438
|
-
- \u{6570}\u{636E}\u{5E93}\u{FF1A}PostgreSQL / MySQL / MongoDB
|
|
4439
|
-
- \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}
|
|
4440
4534
|
|
|
4441
|
-
|
|
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}
|
|
4442
4543
|
|
|
4443
|
-
|
|
4444
|
-
|
|
4445
|
-
|
|
4446
|
-
|
|
4447
|
-
|
|
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}
|
|
4448
4551
|
|
|
4449
|
-
|
|
4450
|
-
|
|
4451
|
-
|
|
4452
|
-
|
|
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}
|
|
4453
4560
|
|
|
4454
|
-
|
|
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}
|
|
4455
4568
|
|
|
4456
|
-
|
|
4457
|
-
- \u{9879}\u{76EE}\u{521D}\u{59CB}\u{5316}\u{548C}\u{73AF}\u{5883}\u{914D}\u{7F6E}
|
|
4458
|
-
- \u{57FA}\u{7840}\u{6846}\u{67B6}\u{4EE3}\u{7801}\u{642D}\u{5EFA}
|
|
4459
|
-
- \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}
|
|
4460
4570
|
|
|
4461
|
-
|
|
4462
|
-
|
|
4463
|
-
|
|
4464
|
-
|
|
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}
|
|
4465
4578
|
|
|
4466
|
-
|
|
4467
|
-
|
|
4468
|
-
|
|
4469
|
-
|
|
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}
|
|
4470
4586
|
|
|
4471
|
-
|
|
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}
|
|
4472
4588
|
|
|
4473
|
-
|
|
4474
|
-
|
|
4475
|
-
|
|
4476
|
-
|
|
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}
|
|
4477
4596
|
|
|
4478
|
-
|
|
4479
|
-
- GET /api/users - \u{83B7}\u{53D6}\u{7528}\u{6237}\u{5217}\u{8868}
|
|
4480
|
-
- POST /api/users - \u{521B}\u{5EFA}\u{7528}\u{6237}
|
|
4481
|
-
- PUT /api/users/:id - \u{66F4}\u{65B0}\u{7528}\u{6237}
|
|
4482
|
-
- 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}
|
|
4483
4598
|
|
|
4484
|
-
|
|
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}
|
|
4485
4606
|
|
|
4486
|
-
|
|
4487
|
-
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}
|
|
4488
|
-
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}
|
|
4489
|
-
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}
|
|
4490
4608
|
|
|
4491
|
-
|
|
4492
|
-
|
|
4493
|
-
|
|
4494
|
-
|
|
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}
|
|
4495
4616
|
|
|
4617
|
+
\u{5305}\u{542B}\u{5177}\u{4F53}\u{7684}\u{4F18}\u{5316}\u{5EFA}\u{8BAE}\u{3002}
|
|
4496
4618
|
---
|
|
4497
4619
|
|
|
4498
4620
|
**\u{1F389} \u{67B6}\u{6784}\u{8BBE}\u{8BA1}\u{5B8C}\u{6210}\u{FF01}**
|
|
4499
4621
|
|
|
4500
|
-
\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}
|
|
4501
|
-
|
|
4502
4622
|
## \u{1F4BE} \u{6587}\u{6863}\u{5B58}\u{50A8}\u{4FE1}\u{606F}
|
|
4503
4623
|
- **\u{67B6}\u{6784}\u{8BBE}\u{8BA1}\u{5DF2}\u{4FDD}\u{5B58}\u{5230}**: \`${storage.requirementsFile}\`
|
|
4504
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}
|
|
4505
4625
|
`;
|
|
4506
|
-
|
|
4507
|
-
|
|
4508
|
-
|
|
4509
|
-
|
|
4510
|
-
|
|
4511
|
-
|
|
4512
|
-
|
|
4513
|
-
|
|
4514
|
-
})
|
|
4515
|
-
|
|
4516
|
-
|
|
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
|
+
}
|
|
4517
4638
|
}
|
|
4518
4639
|
};
|
|
4519
4640
|
const exportFinalDocumentTool = {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const apiPrompt: (path: string) => Promise<string>;
|
package/dist/utils/common.d.ts
CHANGED
|
@@ -6,11 +6,6 @@ export declare const sanitizeFileName: (input: string) => string;
|
|
|
6
6
|
* @returns 不含图片的纯文本Markdown
|
|
7
7
|
*/
|
|
8
8
|
export declare function removeImagesFromMarkdown(content: string): string;
|
|
9
|
-
/**
|
|
10
|
-
* 获取package信息
|
|
11
|
-
* @returns
|
|
12
|
-
*/
|
|
13
|
-
export declare const getPackageJson: () => any;
|
|
14
9
|
/**
|
|
15
10
|
* 验证文件路径安全性
|
|
16
11
|
*/
|
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
|
},
|