UNPKG

requirements-analysis

Version:

简化的需求分析MCP服务 - 基于AI软件工程(优化版)6步流程

180 lines (165 loc) 6.39 kB
"use strict"; /** * 文件存储管理 */ Object.defineProperty(exports, "__esModule", { value: true }); exports.FileStorage = void 0; const fs_1 = require("fs"); const path_1 = require("path"); class FileStorage { baseDir; logger; constructor(baseDir = './outputs', logger) { this.baseDir = baseDir; this.logger = logger; } /** * 确保目录存在 */ async ensureDir(dirPath) { try { await fs_1.promises.access(dirPath); } catch { await fs_1.promises.mkdir(dirPath, { recursive: true }); } } /** * 获取项目输出目录 */ getProjectDir(projectName) { // 清理项目名称,移除特殊字符 const cleanName = projectName.replace(/[<>:"/\\|?*]/g, '-').trim(); return (0, path_1.join)(this.baseDir, cleanName); } /** * 保存步骤结果 */ async saveStepResult(session, stepResult) { const projectDir = this.getProjectDir(session.projectInfo.projectName); this.logger.info(`准备保存步骤${stepResult.stepNumber}结果`, session.sessionId, stepResult.stepNumber, { projectDir, fileName: stepResult.filePath }); await this.ensureDir(projectDir); const filePath = (0, path_1.join)(projectDir, stepResult.filePath); // 生成文档内容 const content = this.generateStepDocument(session, stepResult); this.logger.info(`生成文档内容完成`, session.sessionId, stepResult.stepNumber, { filePath, contentLength: content.length }); try { await fs_1.promises.writeFile(filePath, content, 'utf-8'); // 验证文件是否真的被创建 const stats = await fs_1.promises.stat(filePath); this.logger.info(`步骤${stepResult.stepNumber}结果已保存`, session.sessionId, stepResult.stepNumber, { filePath, fileSize: stats.size, absolutePath: require('path').resolve(filePath) }); return filePath; } catch (error) { this.logger.error(`保存步骤${stepResult.stepNumber}结果失败`, session.sessionId, stepResult.stepNumber, { error: error instanceof Error ? error.message : String(error), filePath }); throw error; } } /** * 生成步骤文档内容(优化版:只保存结果) */ generateStepDocument(session, stepResult) { const timestamp = stepResult.timestamp.toLocaleString('zh-CN'); return `# ${stepResult.stepName} ${stepResult.result} --- *生成时间: ${timestamp} | 项目: ${session.projectInfo.projectName} | 步骤: ${stepResult.stepNumber}/6* `; } /** * 读取步骤结果 */ async readStepResult(projectName, stepNumber) { const projectDir = this.getProjectDir(projectName); const fileName = `step${stepNumber}-*.md`; try { const files = await fs_1.promises.readdir(projectDir); const stepFile = files.find(file => file.startsWith(`step${stepNumber}-`)); if (!stepFile) { return null; } const filePath = (0, path_1.join)(projectDir, stepFile); return await fs_1.promises.readFile(filePath, 'utf-8'); } catch { return null; } } /** * 列出项目文件 */ async listProjectFiles(projectName) { const projectDir = this.getProjectDir(projectName); try { const files = await fs_1.promises.readdir(projectDir); return files.filter(file => file.endsWith('.md')).sort(); } catch { return []; } } /** * 获取所有项目 */ async listProjects() { try { await this.ensureDir(this.baseDir); const dirs = await fs_1.promises.readdir(this.baseDir, { withFileTypes: true }); return dirs .filter(dirent => dirent.isDirectory()) .map(dirent => dirent.name) .sort(); } catch { return []; } } /** * 保存项目摘要 */ async saveProjectSummary(session) { const projectDir = this.getProjectDir(session.projectInfo.projectName); await this.ensureDir(projectDir); const summaryPath = (0, path_1.join)(projectDir, 'README.md'); const content = this.generateProjectSummary(session); await fs_1.promises.writeFile(summaryPath, content, 'utf-8'); this.logger.info('项目摘要已保存', session.sessionId, undefined, { summaryPath }); } /** * 生成项目摘要 */ generateProjectSummary(session) { const completedSteps = Array.from(session.stepResults.keys()).sort(); const progress = Math.round((completedSteps.length / session.totalSteps) * 100); return `# ${session.projectInfo.projectName} - 需求分析报告 ## 📋 项目信息 - **项目名称**: ${session.projectInfo.projectName} - **项目类型**: ${session.projectInfo.projectType} - **所属行业**: ${session.projectInfo.industry} - **开始时间**: ${session.startTime.toLocaleString('zh-CN')} - **最后更新**: ${session.lastUpdateTime.toLocaleString('zh-CN')} - **完成进度**: ${progress}% (${completedSteps.length}/${session.totalSteps}) - **状态**: ${session.isComplete ? '已完成' : '进行中'} ## 🎯 项目背景 ${session.projectInfo.background} ## 🚀 核心目标 ${session.projectInfo.objectives} ## 📁 文档列表 ${completedSteps.map(stepNum => { const stepResult = session.stepResults.get(stepNum); return `- [第${stepNum}步:${stepResult?.stepName}](${stepResult?.filePath})`; }).join('\n')} ## 📊 分析流程 1. ✅ 项目基础信息填写 (5分钟) 2. ${completedSteps.includes(2) ? '✅' : '⏳'} AI智能分析项目全貌 (10分钟) 3. ${completedSteps.includes(3) ? '✅' : '⏳'} 生成需求分析文档初版 (10分钟) 4. ${completedSteps.includes(4) ? '✅' : '⏳'} AI质量分析 (8分钟) 5. ${completedSteps.includes(5) ? '✅' : '⏳'} 生成改进建议 (5分钟) 6. ${completedSteps.includes(6) ? '✅' : '⏳'} 生成最终文档 (10分钟) --- *此报告由需求分析MCP服务自动生成* `; } } exports.FileStorage = FileStorage; //# sourceMappingURL=file-storage.js.map