UNPKG

requirements-analysis

Version:

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

124 lines 4.43 kB
"use strict"; /** * 文档引用管理器 * 负责管理步骤间的文档引用和内容传递 */ Object.defineProperty(exports, "__esModule", { value: true }); exports.DocumentReferenceManager = void 0; const fs_1 = require("fs"); const path_1 = require("path"); const logger_1 = require("./logger"); class DocumentReferenceManager { projectDir; logger = new logger_1.Logger(); constructor(projectName) { this.projectDir = (0, path_1.join)('outputs', projectName); } /** * 获取指定步骤的文档内容 */ async getStepDocument(stepNumber) { try { const files = await fs_1.promises.readdir(this.projectDir); const stepFile = files.find(f => f.startsWith(`step${stepNumber}-`)); if (!stepFile) { throw new Error(`Step ${stepNumber} document not found in ${this.projectDir}`); } const filePath = (0, path_1.join)(this.projectDir, stepFile); const content = await fs_1.promises.readFile(filePath, 'utf-8'); this.logger.info(`Successfully loaded step ${stepNumber} document: ${stepFile}`); return content; } catch (error) { this.logger.error(`Failed to load step ${stepNumber} document:`, undefined, undefined, error); throw error; } } /** * 获取多个步骤的文档内容 */ async getMultipleStepDocuments(stepNumbers) { const results = new Map(); for (const stepNumber of stepNumbers) { try { const content = await this.getStepDocument(stepNumber); results.set(stepNumber, content); } catch (error) { this.logger.warn(`Failed to load step ${stepNumber} document, using empty content`); results.set(stepNumber, ''); // 空内容作为降级 } } return results; } /** * 检查步骤文档是否存在 */ async isStepDocumentReady(stepNumber) { try { await this.getStepDocument(stepNumber); return true; } catch { return false; } } /** * 获取项目目录下所有可用的步骤文档 */ async getAvailableStepDocuments() { try { const files = await fs_1.promises.readdir(this.projectDir); const stepFiles = files.filter(f => f.match(/^step\d+-.*\.md$/)); const stepNumbers = stepFiles.map(f => { const match = f.match(/^step(\d+)-/); return match ? parseInt(match[1]) : 0; }).filter(n => n > 0); return stepNumbers.sort((a, b) => a - b); } catch (error) { this.logger.warn('Failed to scan available step documents:', undefined, undefined, error); return []; } } /** * 等待指定步骤的文档就绪 */ async waitForStepDocument(stepNumber, maxWaitTime = 30000) { const startTime = Date.now(); const checkInterval = 1000; // 1秒检查一次 while (Date.now() - startTime < maxWaitTime) { if (await this.isStepDocumentReady(stepNumber)) { return true; } await new Promise(resolve => setTimeout(resolve, checkInterval)); } this.logger.warn(`Timeout waiting for step ${stepNumber} document after ${maxWaitTime}ms`); return false; } /** * 获取文档的基本信息 */ async getDocumentInfo(stepNumber) { try { const files = await fs_1.promises.readdir(this.projectDir); const stepFile = files.find(f => f.startsWith(`step${stepNumber}-`)); if (!stepFile) { return null; } const filePath = (0, path_1.join)(this.projectDir, stepFile); const stats = await fs_1.promises.stat(filePath); return { fileName: stepFile, size: stats.size, lastModified: stats.mtime }; } catch (error) { this.logger.error(`Failed to get document info for step ${stepNumber}:`, undefined, undefined, error); return null; } } } exports.DocumentReferenceManager = DocumentReferenceManager; //# sourceMappingURL=document-reference-manager.js.map