@nick848/sf-cli 1.0.14 → 1.0.15

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../src/commands/new.ts","../src/index.ts","../src/types/index.ts","../src/types/agent.ts","../src/types/mcp.ts","../src/services/config.ts","../src/services/model.ts","../src/types/model.ts","../src/services/adapters/index.ts","../src/services/adapters/base.ts","../src/services/adapters/glm.ts","../src/services/adapters/openai.ts","../src/services/adapters/claude.ts","../src/services/mcp/index.ts","../src/services/mcp/base.ts","../src/services/mcp/lanhu.ts","../src/services/mcp/figma.ts","../src/services/mcp/manager.ts","../src/agents/runner.ts","../src/agents/definitions.ts","../src/agents/executor.ts","../src/agents/index.ts","../src/agents/scheduler.ts","../src/workflow/index.ts","../src/workflow/checkpoint.ts","../src/norms/index.ts","../src/context/index.ts","../src/cli/parser.ts","../src/cli/executor.ts","../src/commands/index.ts","../src/commands/runner.ts","../src/commands/init.ts","../src/commands/help.ts","../src/commands/model.ts","../src/services/index.ts","../src/commands/update.ts","../src/commands/clear.ts","../src/commands/exit.ts","../src/commands/opsx.ts","../src/commands/reference.ts","../src/commands/shell.ts","../src/commands/natural.ts","../src/cli/completer.ts"],"names":["__dirname","path","chalk","path10","fs9","MAX_FILE_SIZE","path2","fsSync","fs","resolve","path3","fs2","fs3","path4","uuidv4","prompt","fs5","path6","path7","fs6","CommandType","fs7","path8","path9","fs8","spawn","path11","readProjectContext","analyzeComplexity","path12","fs11","VERSION","path13","fs12","path14","fs13"],"mappings":"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","file":"index.mjs","sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","/**\n * /new 命令\n * 发起新需求开发,实现自动化工作流\n * \n * 工作流:\n * 1. 项目上下文获取\n * 2. 需求澄清(新增)- 引导开发者明确需求\n * 3. 复杂度评估与角色介入\n * 4. BDD 场景拆解\n * 5. OpenSpec 规格(等待确认)\n * 6. TDD 测试生成 → 开发实现 → 代码审核(自动执行)\n */\n\nimport chalk from 'chalk';\nimport * as fs from 'fs/promises';\nimport * as fsSync from 'fs';\nimport * as path from 'path';\nimport { ExecutorContext } from '../cli/executor';\nimport { CommandResult } from './runner';\nimport { ChatMessage } from '../types/model';\n\n// 配置常量\nconst MAX_FILE_SIZE = 1024 * 1024;\nconst COMPLEXITY_THRESHOLD = 6;\nconst CLARITY_THRESHOLD = 0.6; // 需求清晰度阈值\n\n// 工作流阶段\nexport type WorkflowPhase = \n | 'context' // 项目上下文获取\n | 'clarify' // 需求澄清(新增)\n | 'analysis' // 复杂度评估\n | 'bdd' // BDD 场景拆解\n | 'spec' // OpenSpec 规格\n | 'tdd' // TDD 测试生成\n | 'develop' // 开发实现\n | 'review'; // 代码审核\n\nexport interface ProjectContext {\n name: string;\n type: string;\n framework: string | null;\n techStack: string[];\n description: string;\n devStandards: string;\n agentsMd: string;\n configYaml: string;\n}\n\nexport interface ClarificationQuestion {\n id: string;\n question: string;\n category: 'scope' | 'ui' | 'data' | 'interaction' | 'edge' | 'tech';\n answered: boolean;\n answer?: string;\n}\n\nexport interface BDDScenario {\n feature: string;\n description: string;\n scenarios: {\n name: string;\n given: string[];\n when: string[];\n then: string[];\n }[];\n}\n\nexport interface SpecItem {\n id: string;\n title: string;\n description: string;\n priority: 'high' | 'medium' | 'low';\n files: string[];\n tests: string[];\n}\n\nexport interface WorkflowSession {\n id: string;\n requirement: string;\n refinedRequirement: string; // 澄清后的完整需求\n phase: WorkflowPhase;\n context: ProjectContext | null;\n clarityScore: number; // 需求清晰度 0-1\n clarificationQuestions: ClarificationQuestion[];\n complexity: number;\n bddScenarios: BDDScenario[];\n specItems: SpecItem[];\n testFiles: string[];\n implFiles: string[];\n reviewPassed: boolean;\n createdAt: Date;\n}\n\n// 当前活跃会话\nlet activeSession: WorkflowSession | null = null;\n\n/**\n * 处理 /new 命令\n */\nexport async function handleNew(\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const workingDir = ctx.options.workingDirectory;\n \n // 检查是否有活跃会话\n if (activeSession) {\n return handleActiveSession(ctx);\n }\n \n // 解析需求\n const requirement = args.join(' ').trim();\n \n if (!requirement) {\n return {\n output: chalk.red('请输入需求描述') +\n chalk.gray('\\n用法: /new <需求描述>') +\n chalk.gray('\\n\\n示例:') +\n chalk.gray('\\n /new 实现用户登录功能') +\n chalk.gray('\\n /new 添加数据导出为Excel的功能'),\n };\n }\n \n // 创建新会话\n activeSession = {\n id: generateSessionId(),\n requirement,\n refinedRequirement: requirement,\n phase: 'context',\n context: null,\n clarityScore: 0,\n clarificationQuestions: [],\n complexity: 0,\n bddScenarios: [],\n specItems: [],\n testFiles: [],\n implFiles: [],\n reviewPassed: false,\n createdAt: new Date(),\n };\n \n // 执行工作流\n return executeWorkflow(ctx);\n}\n\n/**\n * 处理活跃会话(等待输入时)\n */\nfunction handleActiveSession(ctx: ExecutorContext): CommandResult {\n if (!activeSession) {\n return { output: chalk.red('没有活跃的工作流') };\n }\n \n const lines: string[] = [];\n \n lines.push(chalk.cyan('📋 当前工作流状态'));\n lines.push('');\n lines.push(chalk.white(`需求: ${activeSession.requirement.slice(0, 60)}${activeSession.requirement.length > 60 ? '...' : ''}`));\n lines.push(chalk.gray(`阶段: ${getPhaseLabel(activeSession.phase)}`));\n lines.push('');\n \n if (activeSession.phase === 'clarify') {\n lines.push(chalk.yellow('⏸️ 等待需求澄清'));\n lines.push(chalk.gray('请回答上述问题,或输入 \"done\" 表示回答完成'));\n } else if (activeSession.phase === 'spec') {\n lines.push(chalk.yellow('⏸️ 等待规格确认'));\n lines.push('');\n lines.push(chalk.green(' y - 确认规格,继续工作流'));\n lines.push(chalk.red(' n - 不满意,重新生成规格'));\n lines.push(chalk.gray(' c - 取消当前工作流'));\n } else {\n lines.push(chalk.yellow('工作流进行中...'));\n lines.push(chalk.gray('输入任意内容继续'));\n }\n \n return { output: lines.join('\\n') };\n}\n\n/**\n * 执行工作流\n */\nasync function executeWorkflow(ctx: ExecutorContext): Promise<CommandResult> {\n if (!activeSession) {\n return { output: chalk.red('没有活跃的工作流') };\n }\n \n const lines: string[] = [];\n \n try {\n // 阶段 1: 项目上下文获取\n if (activeSession.phase === 'context') {\n lines.push(chalk.cyan('━━━ 阶段 1/8: 项目上下文获取 ━━━'));\n lines.push('');\n \n activeSession.context = await readProjectContext(ctx.options.workingDirectory);\n \n lines.push(chalk.gray(` 项目: ${activeSession.context.name}`));\n lines.push(chalk.gray(` 类型: ${activeSession.context.type}`));\n lines.push(chalk.gray(` 框架: ${activeSession.context.framework || '未识别'}`));\n lines.push(chalk.gray(` 技术栈: ${activeSession.context.techStack.join(', ') || '未识别'}`));\n \n if (activeSession.context.devStandards) {\n lines.push(chalk.green(' ✓ 已读取开发规范'));\n }\n \n activeSession.phase = 'clarify';\n }\n \n // 阶段 2: 需求澄清\n if (activeSession.phase === 'clarify') {\n lines.push('');\n lines.push(chalk.cyan('━━━ 阶段 2/8: 需求澄清 ━━━'));\n lines.push('');\n \n // 分析需求清晰度\n const clarityResult = analyzeRequirementClarity(\n activeSession.requirement,\n activeSession.context!\n );\n \n activeSession.clarityScore = clarityResult.score;\n activeSession.clarificationQuestions = clarityResult.questions;\n \n lines.push(chalk.gray(` 需求清晰度: ${Math.round(clarityResult.score * 100)}%`));\n lines.push('');\n \n // 如果需求不够清晰,进入澄清流程\n if (clarityResult.score < CLARITY_THRESHOLD && clarityResult.questions.length > 0) {\n lines.push(chalk.yellow(' 需求不够明确,请补充以下信息:'));\n lines.push('');\n \n const unansweredQuestions = clarityResult.questions.filter(q => !q.answered);\n for (let i = 0; i < Math.min(unansweredQuestions.length, 3); i++) {\n const q = unansweredQuestions[i];\n lines.push(chalk.white(` ${i + 1}. ${q.question}`));\n }\n \n if (unansweredQuestions.length > 3) {\n lines.push(chalk.gray(` ... 还有 ${unansweredQuestions.length - 3} 个问题`));\n }\n \n lines.push('');\n lines.push(chalk.gray(' 请输入回答,或输入 \"done\" 跳过澄清'));\n \n return { output: lines.join('\\n') };\n }\n \n // 需求已足够清晰\n lines.push(chalk.green(' ✓ 需求清晰,继续下一步'));\n activeSession.phase = 'analysis';\n }\n \n // 阶段 3: 复杂度评估\n if (activeSession.phase === 'analysis') {\n lines.push('');\n lines.push(chalk.cyan('━━━ 阶段 3/8: 复杂度评估 ━━━'));\n lines.push('');\n \n activeSession.complexity = analyzeComplexity(\n activeSession.refinedRequirement,\n activeSession.context!\n );\n \n const complexityBar = generateComplexityBar(activeSession.complexity);\n lines.push(chalk.gray(` 复杂度: ${complexityBar} ${activeSession.complexity}/10`));\n \n if (activeSession.complexity >= COMPLEXITY_THRESHOLD) {\n lines.push(chalk.yellow(' 判定: 复杂需求,建议架构师介入'));\n } else {\n lines.push(chalk.green(' 判定: 简单需求,直接进入规格拆解'));\n }\n \n activeSession.phase = 'bdd';\n }\n \n // 阶段 4: BDD 场景拆解\n if (activeSession.phase === 'bdd') {\n lines.push('');\n lines.push(chalk.cyan('━━━ 阶段 4/8: BDD 场景拆解 ━━━'));\n lines.push('');\n \n activeSession.bddScenarios = generateBDDScenarios(\n activeSession.refinedRequirement,\n activeSession.context!,\n activeSession.clarificationQuestions\n );\n \n for (const scenario of activeSession.bddScenarios) {\n lines.push(chalk.white(` Feature: ${scenario.feature}`));\n for (const s of scenario.scenarios.slice(0, 3)) {\n lines.push(chalk.gray(` - ${s.name}`));\n }\n if (scenario.scenarios.length > 3) {\n lines.push(chalk.gray(` ... 共 ${scenario.scenarios.length} 个场景`));\n }\n }\n \n activeSession.phase = 'spec';\n }\n \n // 阶段 5: OpenSpec 规格(暂停等待确认)\n if (activeSession.phase === 'spec') {\n lines.push('');\n lines.push(chalk.cyan('━━━ 阶段 5/8: OpenSpec 规格 ━━━'));\n lines.push('');\n \n activeSession.specItems = generateSpecItems(\n activeSession.refinedRequirement,\n activeSession.context!,\n activeSession.bddScenarios,\n activeSession.clarificationQuestions\n );\n \n // 保存规格文件\n const specPath = await saveSpecFile(ctx.options.workingDirectory, activeSession);\n lines.push(chalk.green(' ✓ 规格文件已生成'));\n lines.push(chalk.gray(` 路径: ${specPath}`));\n lines.push('');\n \n // 显示任务概览\n lines.push(chalk.cyan(' 任务概览:'));\n for (const item of activeSession.specItems.slice(0, 5)) {\n const icon = item.priority === 'high' ? '🔴' : item.priority === 'medium' ? '🟡' : '🟢';\n lines.push(chalk.gray(` ${icon} [${item.id}] ${item.title}`));\n }\n if (activeSession.specItems.length > 5) {\n lines.push(chalk.gray(` ... 共 ${activeSession.specItems.length} 个任务`));\n }\n \n // 暂停等待确认\n lines.push('');\n lines.push(chalk.yellow.bold('⏸️ 等待规格确认'));\n lines.push('');\n lines.push(chalk.green(' y - 确认规格,继续工作流'));\n lines.push(chalk.red(' n - 不满意,重新生成规格'));\n lines.push(chalk.gray(' c - 取消当前工作流'));\n \n return { output: lines.join('\\n') };\n }\n \n // 阶段 6: TDD 测试生成\n if (activeSession.phase === 'tdd') {\n lines.push('');\n lines.push(chalk.cyan('━━━ 阶段 6/8: TDD 测试生成 ━━━'));\n lines.push('');\n \n activeSession.testFiles = await generateTests(ctx.options.workingDirectory, activeSession);\n \n lines.push(chalk.green(' ✓ 测试文件已生成'));\n for (const file of activeSession.testFiles) {\n lines.push(chalk.gray(` - ${file}`));\n }\n \n activeSession.phase = 'develop';\n // 不返回,继续执行开发阶段\n }\n \n // 阶段 7: 开发实现(自动执行)\n if (activeSession.phase === 'develop') {\n lines.push('');\n lines.push(chalk.cyan('━━━ 阶段 7/8: 开发实现 ━━━'));\n lines.push('');\n \n lines.push(chalk.yellow(' 🚀 正在调用 AI 生成代码...'));\n \n try {\n // 调用 AI 生成代码\n const developResult = await executeDevelopment(ctx, activeSession);\n \n if (developResult.success) {\n lines.push(chalk.green(' ✓ 代码生成完成'));\n for (const file of developResult.files) {\n lines.push(chalk.gray(` - ${file}`));\n }\n activeSession.implFiles = developResult.files;\n activeSession.phase = 'review';\n // 不返回,继续执行审核阶段\n } else {\n lines.push(chalk.red(` ✗ 代码生成失败: ${developResult.error}`));\n lines.push(chalk.gray(' 请手动实现代码后输入 continue 继续'));\n return { output: lines.join('\\n') };\n }\n } catch (error) {\n lines.push(chalk.red(` ✗ 开发阶段出错: ${(error as Error).message}`));\n lines.push(chalk.gray(' 请手动实现代码后输入 continue 继续'));\n return { output: lines.join('\\n') };\n }\n }\n \n // 阶段 8: 代码审核(自动执行)\n if (activeSession.phase === 'review') {\n lines.push('');\n lines.push(chalk.cyan('━━━ 阶段 8/8: 代码审核 ━━━'));\n lines.push('');\n \n lines.push(chalk.yellow(' 🔍 正在进行代码审核...'));\n \n try {\n // 调用 AI 进行代码审核\n const reviewResult = await executeReview(ctx, activeSession);\n \n if (reviewResult.passed) {\n lines.push(chalk.green(' ✓ 代码审核通过'));\n if (reviewResult.suggestions.length > 0) {\n lines.push(chalk.gray(' 建议:'));\n for (const s of reviewResult.suggestions.slice(0, 3)) {\n lines.push(chalk.gray(` - ${s}`));\n }\n }\n \n // 自动归档\n await archiveWorkflow(ctx.options.workingDirectory);\n const summary = activeSession.refinedRequirement;\n activeSession = null;\n \n lines.push('');\n lines.push(chalk.green.bold('🎉 工作流已完成!'));\n lines.push(chalk.gray(`需求: ${summary.slice(0, 60)}${summary.length > 60 ? '...' : ''}`));\n lines.push('');\n lines.push(chalk.cyan('使用 /new <需求> 开始新的工作流'));\n \n return { output: lines.join('\\n') };\n } else {\n lines.push(chalk.red(' ✗ 代码审核未通过'));\n lines.push(chalk.gray(' 问题:'));\n for (const issue of reviewResult.issues.slice(0, 5)) {\n lines.push(chalk.red(` - ${issue}`));\n }\n lines.push('');\n lines.push(chalk.yellow(' 请修复问题后输入 y 重新审核'));\n lines.push(chalk.gray(' 或输入 n 回退到规格阶段'));\n \n // 保持 review 阶段,等待用户操作\n return { output: lines.join('\\n') };\n }\n } catch (error) {\n lines.push(chalk.red(` ✗ 审核阶段出错: ${(error as Error).message}`));\n lines.push(chalk.gray(' 输入 pass 强制通过,或 fix 修复问题'));\n return { output: lines.join('\\n') };\n }\n }\n \n return { output: lines.join('\\n') };\n \n } catch (error) {\n lines.push(chalk.red(`错误: ${(error as Error).message}`));\n return { output: lines.join('\\n') };\n }\n}\n\n/**\n * 处理用户输入\n */\nexport async function handleWorkflowInput(\n input: string,\n ctx: ExecutorContext\n): Promise<CommandResult | null> {\n if (!activeSession) return null;\n \n const trimmed = input.trim().toLowerCase();\n \n // 取消工作流\n if (trimmed === 'c' || trimmed === 'cancel' || trimmed === '取消') {\n activeSession = null;\n return {\n output: chalk.yellow('✓ 工作流已取消'),\n };\n }\n \n // 需求澄清阶段\n if (activeSession.phase === 'clarify') {\n if (trimmed === 'done' || trimmed === '完成' || trimmed === '跳过' || trimmed === 'skip') {\n // 使用当前已收集的信息生成精炼需求\n activeSession.refinedRequirement = buildRefinedRequirement(activeSession);\n activeSession.phase = 'analysis';\n return executeWorkflow(ctx);\n }\n \n // 处理用户回答 - 记录答案\n const answeredCount = activeSession.clarificationQuestions.filter(q => q.answered).length;\n const unansweredQuestions = activeSession.clarificationQuestions.filter(q => !q.answered);\n \n if (unansweredQuestions.length > 0) {\n // 回答第一个未回答的问题\n const question = unansweredQuestions[0];\n question.answer = input.trim();\n question.answered = true;\n \n // 更新精炼需求\n activeSession.refinedRequirement = buildRefinedRequirement(activeSession);\n \n // 检查是否还有未回答的问题\n const remaining = activeSession.clarificationQuestions.filter(q => !q.answered);\n if (remaining.length > 0) {\n // 更新清晰度\n activeSession.clarityScore = calculateClarityScore(activeSession.clarificationQuestions);\n \n const lines: string[] = [];\n lines.push(chalk.green(' ✓ 已记录'));\n lines.push('');\n lines.push(chalk.yellow(' 继续回答:'));\n \n for (let i = 0; i < Math.min(remaining.length, 3); i++) {\n const q = remaining[i];\n lines.push(chalk.white(` ${i + 1}. ${q.question}`));\n }\n \n lines.push('');\n lines.push(chalk.gray(' 输入回答,或 \"done\" 跳过'));\n \n return { output: lines.join('\\n') };\n }\n \n // 所有问题已回答\n activeSession.clarityScore = 1;\n activeSession.phase = 'analysis';\n return executeWorkflow(ctx);\n }\n \n // 没有待回答的问题,继续\n activeSession.phase = 'analysis';\n return executeWorkflow(ctx);\n }\n \n // 规格确认阶段\n if (activeSession.phase === 'spec') {\n if (trimmed === 'y' || trimmed === 'yes' || trimmed === '确认') {\n activeSession.phase = 'tdd';\n return executeWorkflow(ctx);\n }\n \n if (trimmed === 'n' || trimmed === 'no' || trimmed === '重新') {\n // 重新生成规格\n activeSession.bddScenarios = generateBDDScenarios(\n activeSession.refinedRequirement,\n activeSession.context!,\n activeSession.clarificationQuestions\n );\n activeSession.specItems = generateSpecItems(\n activeSession.refinedRequirement,\n activeSession.context!,\n activeSession.bddScenarios,\n activeSession.clarificationQuestions\n );\n \n const specPath = await saveSpecFile(ctx.options.workingDirectory, activeSession);\n \n return {\n output: chalk.cyan('🔄 规格已重新生成') +\n chalk.gray(`\\n路径: ${specPath}`) +\n chalk.yellow('\\n\\n请确认:') +\n chalk.green('\\n y - 确认规格') +\n chalk.red('\\n n - 再次重新生成'),\n };\n }\n }\n \n // 开发阶段(如果自动开发失败,等待手动完成)\n if (activeSession.phase === 'develop') {\n if (trimmed === 'continue' || trimmed === '继续' || trimmed === 'done' || trimmed === '完成') {\n activeSession.phase = 'review';\n return executeWorkflow(ctx);\n }\n }\n \n // 审核阶段(处理重新审核或回退)\n if (activeSession.phase === 'review') {\n // 强制通过\n if (trimmed === 'pass' || trimmed === '通过' || trimmed === '强制通过') {\n await archiveWorkflow(ctx.options.workingDirectory);\n const summary = activeSession.refinedRequirement;\n activeSession = null;\n \n return {\n output: chalk.green('✓ 工作流已完成') +\n chalk.gray(`\\n需求: ${summary.slice(0, 60)}${summary.length > 60 ? '...' : ''}`) +\n chalk.cyan('\\n\\n使用 /new <需求> 开始新的工作流'),\n };\n }\n \n // 重新审核(修复问题后)\n if (trimmed === 'y' || trimmed === 'yes' || trimmed === '重新审核' || trimmed === 'retry') {\n return executeWorkflow(ctx);\n }\n \n // 回退到规格阶段\n if (trimmed === 'n' || trimmed === 'no' || trimmed === '回退' || trimmed === 'rollback') {\n activeSession.phase = 'spec';\n return executeWorkflow(ctx);\n }\n \n // 手动修复标记\n if (trimmed === 'fix' || trimmed === '修复') {\n return {\n output: chalk.yellow('📝 请手动修复代码问题') +\n chalk.gray('\\n修复完成后输入 y 重新审核') +\n chalk.gray('\\n或输入 n 回退到规格阶段'),\n };\n }\n }\n \n return null; // 不是工作流相关输入\n}\n\n/**\n * 分析需求清晰度\n */\nfunction analyzeRequirementClarity(\n requirement: string,\n context: ProjectContext\n): { score: number; questions: ClarificationQuestion[] } {\n const questions: ClarificationQuestion[] = [];\n let score = 0.5; // 基础分\n \n // 1. 检查需求长度\n if (requirement.length < 10) {\n score -= 0.2;\n questions.push({\n id: 'q-length',\n question: '需求描述较短,能否详细说明具体要实现什么功能?',\n category: 'scope',\n answered: false,\n });\n } else if (requirement.length >= 50) {\n score += 0.1;\n }\n \n // 2. 检查是否有明确的动作/目标\n const actionKeywords = ['实现', '添加', '修改', '删除', '优化', '修复', '重构', '开发', '创建', '设计'];\n const hasAction = actionKeywords.some(kw => requirement.includes(kw));\n if (!hasAction) {\n score -= 0.15;\n questions.push({\n id: 'q-action',\n question: '这是一个新功能、修改还是修复?请说明具体要做什么。',\n category: 'scope',\n answered: false,\n });\n } else {\n score += 0.1;\n }\n \n // 3. 检查是否有UI/界面相关描述\n if (requirement.match(/界面|页面|组件|按钮|表单|弹窗|布局|样式|UI/)) {\n score += 0.1;\n \n // 检查是否有具体的UI位置描述\n if (!requirement.match(/在.*页面|在.*位置|显示在|位于/)) {\n questions.push({\n id: 'q-ui-position',\n question: '这个功能应该放在哪个页面或位置?',\n category: 'ui',\n answered: false,\n });\n }\n } else {\n // 没有UI关键词,可能是纯逻辑功能\n questions.push({\n id: 'q-ui-need',\n question: '这个功能需要用户界面吗?如果需要,大概长什么样?',\n category: 'ui',\n answered: false,\n });\n }\n \n // 4. 检查是否有数据相关描述\n if (requirement.match(/数据|存储|保存|读取|API|接口|数据库|缓存/)) {\n score += 0.1;\n \n // 检查是否有数据来源说明\n if (!requirement.match(/从.*获取|调用.*接口|读取.*数据|来源/)) {\n questions.push({\n id: 'q-data-source',\n question: '数据从哪里来?是调用API、本地存储还是其他来源?',\n category: 'data',\n answered: false,\n });\n }\n }\n \n // 5. 检查是否有交互/用户操作描述\n if (requirement.match(/点击|输入|选择|拖动|滑动|交互|操作/)) {\n score += 0.1;\n } else {\n // 根据需求类型判断是否需要交互描述\n if (hasAction && requirement.match(/功能|特性|模块/)) {\n questions.push({\n id: 'q-interaction',\n question: '用户如何操作这个功能?有什么交互流程?',\n category: 'interaction',\n answered: false,\n });\n }\n }\n \n // 6. 检查是否有边界情况考虑\n if (requirement.match(/异常|错误|失败|边界|特殊情况|空值|验证/)) {\n score += 0.15;\n } else {\n // 对于功能性需求,询问边界情况\n if (requirement.match(/功能|输入|表单|数据/)) {\n questions.push({\n id: 'q-edge',\n question: '有什么特殊情况或边界条件需要处理?比如输入为空、数据加载失败等。',\n category: 'edge',\n answered: false,\n });\n }\n }\n \n // 7. 检查是否有参考链接\n if (requirement.match(/https?:\\/\\/|参考|参照|类似/)) {\n score += 0.15;\n }\n \n // 8. 根据项目上下文调整\n if (context.framework) {\n // 有框架信息,减少技术相关问题\n score += 0.05;\n }\n \n // 限制问题数量(最多5个)\n const limitedQuestions = questions.slice(0, 5);\n \n // 最终得分限制在 0-1 之间\n score = Math.max(0, Math.min(1, score));\n \n return { score, questions: limitedQuestions };\n}\n\n/**\n * 计算当前清晰度分数\n */\nfunction calculateClarityScore(questions: ClarificationQuestion[]): number {\n const answered = questions.filter(q => q.answered).length;\n if (questions.length === 0) return 1;\n return 0.5 + (answered / questions.length) * 0.5;\n}\n\n/**\n * 构建精炼后的需求描述\n */\nfunction buildRefinedRequirement(session: WorkflowSession): string {\n const parts: string[] = [session.requirement];\n \n for (const q of session.clarificationQuestions) {\n if (q.answered && q.answer) {\n parts.push(`\\n【${getCategoryLabel(q.category)}】${q.answer}`);\n }\n }\n \n return parts.join('');\n}\n\n/**\n * 获取分类标签\n */\nfunction getCategoryLabel(category: ClarificationQuestion['category']): string {\n const labels: Record<string, string> = {\n scope: '范围',\n ui: '界面',\n data: '数据',\n interaction: '交互',\n edge: '边界',\n tech: '技术',\n };\n return labels[category] || category;\n}\n\n/**\n * 执行开发实现(调用 AI)\n */\ninterface DevelopmentResult {\n success: boolean;\n files: string[];\n error?: string;\n}\n\nasync function executeDevelopment(\n ctx: ExecutorContext,\n session: WorkflowSession\n): Promise<DevelopmentResult> {\n const workingDir = ctx.options.workingDirectory;\n const files: string[] = [];\n \n try {\n // 构建开发提示词\n const systemPrompt = buildDevelopmentPrompt(session);\n \n // 调用 AI 模型\n const messages: ChatMessage[] = [\n {\n role: 'system',\n content: `你是一个专业的前端开发工程师。请根据需求规格生成代码实现。\n\n要求:\n1. 生成完整、可运行的代码\n2. 遵循项目现有的代码风格和规范\n3. 使用项目指定的技术栈\n4. 代码要有适当的注释\n5. 返回格式:每个文件用 \\`\\`\\`filename 代码 \\`\\`\\` 包裹\n\n项目信息:\n- 名称: ${session.context?.name}\n- 框架: ${session.context?.framework || '未指定'}\n- 技术栈: ${session.context?.techStack.join(', ') || '未指定'}\n\n${session.context?.devStandards ? `开发规范:\\n${session.context.devStandards.slice(0, 2000)}` : ''}`,\n },\n {\n role: 'user',\n content: systemPrompt,\n },\n ];\n \n const response = await ctx.modelService.sendMessage(messages, {\n temperature: 0.3,\n maxTokens: 8000,\n agent: 'frontend-dev',\n });\n \n // 解析 AI 返回的代码\n const codeBlocks = parseCodeBlocks(response.content);\n \n // 写入文件\n for (const block of codeBlocks) {\n const filePath = path.join(workingDir, block.filename);\n const dir = path.dirname(filePath);\n \n // 确保目录存在\n await fs.mkdir(dir, { recursive: true });\n \n // 写入文件\n await fs.writeFile(filePath, block.code, 'utf-8');\n files.push(block.filename);\n }\n \n // 如果没有解析到代码块,生成一个基础文件\n if (files.length === 0) {\n // 生成一个简单的实现文件\n const implDir = path.join(workingDir, 'src', 'features');\n await fs.mkdir(implDir, { recursive: true });\n \n const featureName = session.specItems[0]?.title || 'feature';\n const fileName = `${featureName.replace(/[^a-zA-Z0-9]/g, '_')}.ts`;\n const filePath = path.join(implDir, fileName);\n \n const stubCode = `/**\n * ${session.requirement}\n * \n * TODO: 此文件由 AI 自动生成,请根据需求完善实现\n */\n\nexport function ${featureName.replace(/[^a-zA-Z0-9]/g, '')}() {\n // TODO: 实现功能\n console.log('${featureName} - 待实现');\n}\n`;\n \n await fs.writeFile(filePath, stubCode, 'utf-8');\n files.push(`src/features/${fileName}`);\n }\n \n return { success: true, files };\n } catch (error) {\n return {\n success: false,\n files: [],\n error: (error as Error).message,\n };\n }\n}\n\n/**\n * 构建开发提示词\n */\nfunction buildDevelopmentPrompt(session: WorkflowSession): string {\n const lines: string[] = [];\n \n lines.push('## 需求描述');\n lines.push(session.refinedRequirement);\n lines.push('');\n \n lines.push('## BDD 场景');\n for (const scenario of session.bddScenarios) {\n lines.push(`### ${scenario.feature}`);\n for (const s of scenario.scenarios) {\n lines.push(`- ${s.name}`);\n }\n }\n lines.push('');\n \n lines.push('## 任务列表');\n for (const item of session.specItems) {\n lines.push(`- [${item.id}] ${item.title}: ${item.description}`);\n }\n lines.push('');\n \n lines.push('请根据以上需求规格生成代码实现。');\n \n return lines.join('\\n');\n}\n\n/**\n * 解析代码块\n */\nfunction parseCodeBlocks(content: string): { filename: string; code: string }[] {\n const blocks: { filename: string; code: string }[] = [];\n \n // 匹配 ```filename ... ```\n const regex = /```(\\S+)\\n([\\s\\S]*?)```/g;\n let match;\n \n while ((match = regex.exec(content)) !== null) {\n const filename = match[1];\n const code = match[2].trim();\n \n // 跳过非代码块(如 ```text, ```json 等)\n if (['text', 'json', 'markdown', 'md'].includes(filename.toLowerCase())) {\n continue;\n }\n \n blocks.push({ filename, code });\n }\n \n return blocks;\n}\n\n/**\n * 执行代码审核(调用 AI)\n */\ninterface ReviewResult {\n passed: boolean;\n issues: string[];\n suggestions: string[];\n}\n\nasync function executeReview(\n ctx: ExecutorContext,\n session: WorkflowSession\n): Promise<ReviewResult> {\n const workingDir = ctx.options.workingDirectory;\n const issues: string[] = [];\n const suggestions: string[] = [];\n \n try {\n // 读取生成的代码文件\n const codeContents: string[] = [];\n for (const file of session.implFiles) {\n try {\n const content = await fs.readFile(path.join(workingDir, file), 'utf-8');\n codeContents.push(`// ${file}\\n${content}`);\n } catch {\n // 文件可能不存在\n }\n }\n \n // 读取测试文件\n const testContents: string[] = [];\n for (const file of session.testFiles) {\n try {\n const content = await fs.readFile(path.join(workingDir, file), 'utf-8');\n testContents.push(`// ${file}\\n${content}`);\n } catch {\n // 文件可能不存在\n }\n }\n \n // 构建审核提示词\n const messages: ChatMessage[] = [\n {\n role: 'system',\n content: `你是一个专业的代码审核专家。请审核以下代码实现是否符合需求规格。\n\n审核标准:\n1. 代码是否正确实现了需求规格中的功能\n2. 代码质量(可读性、可维护性)\n3. 潜在的 bug 和边界情况处理\n4. 代码风格是否符合项目规范\n5. 测试覆盖是否充分\n\n返回格式:\n- 如果通过审核,返回 \"审核通过\" 并列出改进建议\n- 如果不通过,列出具体问题\n\n项目信息:\n- 框架: ${session.context?.framework || '未指定'}\n- 技术栈: ${session.context?.techStack.join(', ') || '未指定'}\n\n${session.context?.devStandards ? `开发规范:\\n${session.context.devStandards.slice(0, 1000)}` : ''}`,\n },\n {\n role: 'user',\n content: `## 需求规格\n${session.refinedRequirement}\n\n## 任务列表\n${session.specItems.map(item => `- [${item.id}] ${item.title}`).join('\\n')}\n\n## 实现代码\n${codeContents.join('\\n\\n') || '(无代码文件)'}\n\n## 测试代码\n${testContents.join('\\n\\n') || '(无测试文件)'}\n\n请审核以上代码实现。`,\n },\n ];\n \n const response = await ctx.modelService.sendMessage(messages, {\n temperature: 0.2,\n maxTokens: 2000,\n agent: 'code-reviewer',\n });\n \n const result = response.content;\n \n // 解析审核结果\n const passed = result.includes('审核通过') || \n result.includes('通过') || \n !result.includes('不通过');\n \n // 提取问题和建议\n const issueMatches = result.match(/问题[::]\\s*([\\s\\S]*?)(?=建议|$)/i);\n if (issueMatches) {\n const issueList = issueMatches[1].split(/[\\n-]/).filter(s => s.trim());\n issues.push(...issueList.map(s => s.trim()).filter(s => s));\n }\n \n const suggestionMatches = result.match(/建议[::]\\s*([\\s\\S]*?)$/i);\n if (suggestionMatches) {\n const suggestionList = suggestionMatches[1].split(/[\\n-]/).filter(s => s.trim());\n suggestions.push(...suggestionList.map(s => s.trim()).filter(s => s));\n }\n \n // 如果没有解析到,从整体内容提取\n if (issues.length === 0 && !passed) {\n const lines = result.split('\\n').filter(l => l.includes('问题') || l.includes('错误') || l.includes('缺陷'));\n issues.push(...lines.map(l => l.replace(/^[-*]\\s*/, '').trim()).filter(l => l));\n }\n \n if (suggestions.length === 0) {\n const lines = result.split('\\n').filter(l => l.includes('建议') || l.includes('改进') || l.includes('优化'));\n suggestions.push(...lines.map(l => l.replace(/^[-*]\\s*/, '').trim()).filter(l => l));\n }\n \n return { passed, issues, suggestions };\n } catch (error) {\n // 如果审核出错,默认通过(让开发者可以继续)\n suggestions.push(`审核过程出错: ${(error as Error).message}`);\n return { passed: true, issues, suggestions };\n }\n}\n\n/**\n * 读取项目上下文\n */\nasync function readProjectContext(workingDir: string): Promise<ProjectContext> {\n const context: ProjectContext = {\n name: path.basename(workingDir),\n type: 'unknown',\n framework: null,\n techStack: [],\n description: '',\n devStandards: '',\n agentsMd: '',\n configYaml: '',\n };\n \n // 读取 AGENTS.md\n const agentsPath = path.join(workingDir, 'AGENTS.md');\n try {\n const stats = await fs.stat(agentsPath);\n if (stats.size <= MAX_FILE_SIZE) {\n context.agentsMd = await fs.readFile(agentsPath, 'utf-8');\n \n // 解析项目信息\n const nameMatch = context.agentsMd.match(/\\|\\s*项目名称\\s*\\|\\s*([^\\s|]+)/);\n if (nameMatch) context.name = nameMatch[1];\n \n const typeMatch = context.agentsMd.match(/\\|\\s*项目类型\\s*\\|\\s*([^\\s|]+)/);\n if (typeMatch) context.type = typeMatch[1];\n \n const frameworkMatch = context.agentsMd.match(/\\|\\s*技术框架\\s*\\|\\s*([^\\s|]+)/);\n if (frameworkMatch && frameworkMatch[1] !== '待识别') {\n context.framework = frameworkMatch[1];\n }\n }\n } catch { /* ignore */ }\n \n // 读取 config.yaml\n const configPath = path.join(workingDir, 'openspec', 'config.yaml');\n try {\n const stats = await fs.stat(configPath);\n if (stats.size <= MAX_FILE_SIZE) {\n context.configYaml = await fs.readFile(configPath, 'utf-8');\n \n const nameMatch = context.configYaml.match(/name:\\s*(.+)/);\n if (nameMatch) context.name = nameMatch[1].trim();\n \n const typeMatch = context.configYaml.match(/type:\\s*(.+)/);\n if (typeMatch) context.type = typeMatch[1].trim();\n \n const frameworkMatch = context.configYaml.match(/framework:\\s*(.+)/);\n if (frameworkMatch && frameworkMatch[1].trim() !== 'null') {\n context.framework = frameworkMatch[1].trim();\n }\n \n // 解析技术栈\n const techStackMatch = context.configYaml.match(/techStack:\\s*([\\s\\S]+?)(?=\\n\\w)/);\n if (techStackMatch) {\n const techLines = techStackMatch[1].match(/-\\s*(.+)/g);\n if (techLines) {\n context.techStack = techLines.map(l => l.replace(/-\\s*/, '').trim());\n }\n }\n }\n } catch { /* ignore */ }\n \n // 读取开发规范\n const devStandardsPath = path.join(workingDir, '.sf-cli', 'norms', 'devstanded.md');\n try {\n const stats = await fs.stat(devStandardsPath);\n if (stats.size <= MAX_FILE_SIZE) {\n context.devStandards = await fs.readFile(devStandardsPath, 'utf-8');\n }\n } catch { /* ignore */ }\n \n return context;\n}\n\n/**\n * 分析复杂度\n */\nfunction analyzeComplexity(requirement: string, context: ProjectContext): number {\n let score = 3;\n \n // 需求长度\n if (requirement.length > 100) score += 1;\n if (requirement.length > 200) score += 1;\n \n // 复杂关键词\n const complexKeywords = ['架构', '重构', '迁移', '集成', '系统', '模块', '工作流', '流程', '权限', '安全'];\n for (const keyword of complexKeywords) {\n if (requirement.includes(keyword)) score += 1;\n }\n \n // 简单关键词\n const simpleKeywords = ['修复', '调整', '优化', '更新', '添加', '样式', '文本'];\n for (const keyword of simpleKeywords) {\n if (requirement.includes(keyword)) score -= 0.5;\n }\n \n // 多功能\n const connectors = ['和', '以及', '同时', '另外', '此外', '、'];\n for (const conn of connectors) {\n const count = (requirement.match(new RegExp(conn, 'g')) || []).length;\n score += count * 0.3;\n }\n \n // URL 引用\n if (requirement.match(/https?:\\/\\//)) score += 0.5;\n \n // 项目框架未知\n if (!context.framework) score += 0.5;\n \n return Math.max(1, Math.min(10, Math.round(score)));\n}\n\n/**\n * 生成 BDD 场景\n */\nfunction generateBDDScenarios(\n requirement: string,\n context: ProjectContext,\n questions: ClarificationQuestion[]\n): BDDScenario[] {\n const scenarios: BDDScenario[] = [];\n \n // 从澄清问答中提取信息\n const uiAnswer = questions.find(q => q.category === 'ui' && q.answered)?.answer;\n const interactionAnswer = questions.find(q => q.category === 'interaction' && q.answered)?.answer;\n const edgeAnswer = questions.find(q => q.category === 'edge' && q.answered)?.answer;\n \n // 提取关键功能\n const features = extractFeatures(requirement);\n \n for (const feature of features) {\n const scenario: BDDScenario = {\n feature: feature.title,\n description: feature.description,\n scenarios: [],\n };\n \n // 生成基本场景\n scenario.scenarios.push({\n name: `正常流程: ${feature.title}`,\n given: [`用户进入相关页面`],\n when: [`用户执行 \"${feature.title}\" 操作`],\n then: [`系统应正确处理并返回预期结果`],\n });\n \n // 如果有交互描述,添加交互场景\n if (interactionAnswer) {\n scenario.scenarios.push({\n name: `交互流程: 用户操作`,\n given: [`用户进入功能界面`],\n when: [`用户按照以下流程操作: ${interactionAnswer}`],\n then: [`系统响应并完成功能`],\n });\n }\n \n // 添加边界场景\n if (feature.hasInput || edgeAnswer) {\n scenario.scenarios.push({\n name: `边界情况: 异常处理`,\n given: [`用户进入功能界面`],\n when: [`发生异常情况${edgeAnswer ? `: ${edgeAnswer}` : ''}`],\n then: [`系统应正确处理异常并给出提示`],\n });\n }\n \n scenarios.push(scenario);\n }\n \n return scenarios;\n}\n\n/**\n * 提取功能点\n */\nfunction extractFeatures(requirement: string): { title: string; description: string; hasInput: boolean }[] {\n const features: { title: string; description: string; hasInput: boolean }[] = [];\n \n // URL 分析\n const urlMatch = requirement.match(/https?:\\/\\/[^\\s]+/);\n if (urlMatch) {\n features.push({\n title: '参考界面分析',\n description: `分析参考界面 ${urlMatch[0]}`,\n hasInput: false,\n });\n }\n \n // 功能关键词\n const featurePatterns = [\n { pattern: /排盘|计算|算法/, title: '核心算法实现', hasInput: true },\n { pattern: /界面|UI|页面|显示|展示/, title: '界面开发', hasInput: true },\n { pattern: /表格|列表/, title: '数据展示', hasInput: false },\n { pattern: /图表|图形|可视化/, title: '图表可视化', hasInput: false },\n { pattern: /表单|输入/, title: '表单处理', hasInput: true },\n { pattern: /登录|注册|认证/, title: '用户认证', hasInput: true },\n { pattern: /接口|API/, title: 'API 接口', hasInput: false },\n { pattern: /存储|缓存/, title: '数据存储', hasInput: false },\n { pattern: /导出|下载/, title: '导出功能', hasInput: false },\n { pattern: /配置|设置/, title: '配置管理', hasInput: true },\n ];\n \n for (const { pattern, title, hasInput } of featurePatterns) {\n if (pattern.test(requirement)) {\n features.push({\n title,\n description: `${title}相关功能`,\n hasInput,\n });\n }\n }\n \n // 确保至少有一个功能\n if (features.length === 0) {\n features.push({\n title: '核心功能实现',\n description: requirement,\n hasInput: true,\n });\n }\n \n return features;\n}\n\n/**\n * 生成规格项\n */\nfunction generateSpecItems(\n requirement: string,\n context: ProjectContext,\n bddScenarios: BDDScenario[],\n questions: ClarificationQuestion[]\n): SpecItem[] {\n const items: SpecItem[] = [];\n let id = 1;\n \n for (const scenario of bddScenarios) {\n items.push({\n id: `T${id.toString().padStart(3, '0')}`,\n title: scenario.feature,\n description: scenario.description,\n priority: id <= 2 ? 'high' : 'medium',\n files: [],\n tests: [],\n });\n id++;\n }\n \n // 添加测试任务\n items.push({\n id: `T${id.toString().padStart(3, '0')}`,\n title: '单元测试',\n description: '编写测试用例确保功能正确性',\n priority: 'medium',\n files: [],\n tests: [],\n });\n \n return items;\n}\n\n/**\n * 保存规格文件\n */\nasync function saveSpecFile(workingDir: string, session: WorkflowSession): Promise<string> {\n const specDir = path.join(workingDir, 'openspec', 'changes');\n await fs.mkdir(specDir, { recursive: true });\n \n const specPath = path.join(specDir, `${session.id}-spec.md`);\n \n const content = formatSpecFile(session);\n await fs.writeFile(specPath, content, 'utf-8');\n \n return specPath;\n}\n\n/**\n * 格式化规格文件\n */\nfunction formatSpecFile(session: WorkflowSession): string {\n const lines: string[] = [];\n \n lines.push(`# 需求规格: ${session.requirement.slice(0, 50)}`);\n lines.push('');\n lines.push(`> 变更ID: ${session.id}`);\n lines.push(`> 需求清晰度: ${Math.round(session.clarityScore * 100)}%`);\n lines.push(`> 复杂度: ${session.complexity}/10`);\n lines.push(`> 生成时间: ${session.createdAt.toISOString()}`);\n lines.push('');\n lines.push('---');\n lines.push('');\n \n // 精炼需求\n if (session.refinedRequirement !== session.requirement) {\n lines.push('## 需求详情');\n lines.push('');\n lines.push(session.refinedRequirement);\n lines.push('');\n lines.push('---');\n lines.push('');\n }\n \n // 澄清问答\n if (session.clarificationQuestions.some(q => q.answered)) {\n lines.push('## 需求澄清');\n lines.push('');\n for (const q of session.clarificationQuestions) {\n if (q.answered) {\n lines.push(`**Q: ${q.question}**`);\n lines.push(`A: ${q.answer}`);\n lines.push('');\n }\n }\n lines.push('---');\n lines.push('');\n }\n \n // BDD 场景\n lines.push('## BDD 场景');\n lines.push('');\n \n for (const scenario of session.bddScenarios) {\n lines.push(`### Feature: ${scenario.feature}`);\n lines.push('');\n \n for (const s of scenario.scenarios) {\n lines.push(`**Scenario: ${s.name}**`);\n for (const g of s.given) lines.push(` Given ${g}`);\n for (const w of s.when) lines.push(` When ${w}`);\n for (const t of s.then) lines.push(` Then ${t}`);\n lines.push('');\n }\n }\n \n // 任务列表\n lines.push('## 任务列表');\n lines.push('');\n \n for (const item of session.specItems) {\n const priority = item.priority === 'high' ? '🔴' : item.priority === 'medium' ? '🟡' : '🟢';\n lines.push(`- [ ] ${priority} [${item.id}] ${item.title}`);\n }\n \n lines.push('');\n lines.push('---');\n lines.push('');\n lines.push('**确认状态**: ⏳ 等待确认');\n \n return lines.join('\\n');\n}\n\n/**\n * 生成测试文件\n */\nasync function generateTests(workingDir: string, session: WorkflowSession): Promise<string[]> {\n const testDir = path.join(workingDir, 'tests');\n await fs.mkdir(testDir, { recursive: true });\n \n const testFiles: string[] = [];\n \n // 为每个 BDD 场景生成测试文件\n for (const scenario of session.bddScenarios) {\n const testName = scenario.feature.replace(/[^a-zA-Z0-9\\u4e00-\\u9fa5]/g, '_');\n const testPath = path.join(testDir, `${testName}.test.ts`);\n \n const content = generateTestFile(scenario);\n await fs.writeFile(testPath, content, 'utf-8');\n testFiles.push(`tests/${testName}.test.ts`);\n }\n \n return testFiles;\n}\n\n/**\n * 生成测试文件内容\n */\nfunction generateTestFile(scenario: BDDScenario): string {\n const lines: string[] = [];\n \n lines.push(`import { describe, it, expect } from 'vitest';`);\n lines.push('');\n lines.push(`describe('${scenario.feature}', () => {`);\n \n for (const s of scenario.scenarios) {\n lines.push(` it('${s.name}', () => {`);\n lines.push(` // Given: ${s.given.join(', ')}`);\n lines.push(` // When: ${s.when.join(', ')}`);\n lines.push(` // Then: ${s.then.join(', ')}`);\n lines.push(` expect(true).toBe(true); // TODO: 实现测试`);\n lines.push(` });`);\n lines.push('');\n }\n \n lines.push(`});`);\n \n return lines.join('\\n');\n}\n\n/**\n * 归档工作流\n */\nasync function archiveWorkflow(workingDir: string): Promise<void> {\n if (!activeSession) return;\n \n const archiveDir = path.join(workingDir, 'openspec', 'spec');\n await fs.mkdir(archiveDir, { recursive: true });\n \n const archivePath = path.join(archiveDir, `${activeSession.id}.md`);\n \n const content = `# 归档: ${activeSession.requirement.slice(0, 50)}\n\n> 归档时间: ${new Date().toISOString()}\n> 需求清晰度: ${Math.round(activeSession.clarityScore * 100)}%\n> 复杂度: ${activeSession.complexity}/10\n\n## 需求详情\n\n${activeSession.refinedRequirement}\n\n## 完成情况\n\n- [x] 项目上下文获取\n- [x] 需求澄清\n- [x] 复杂度评估\n- [x] BDD 场景拆解\n- [x] OpenSpec 规格\n- [x] TDD 测试生成\n- [x] 开发实现\n- [x] 代码审核\n\n## 测试文件\n\n${activeSession.testFiles.map(f => `- ${f}`).join('\\n') || '无'}\n`;\n \n await fs.writeFile(archivePath, content, 'utf-8');\n}\n\n/**\n * 工具函数\n */\nfunction generateSessionId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).slice(2, 6);\n return `WF-${timestamp}-${random}`.toUpperCase();\n}\n\nfunction generateComplexityBar(score: number): string {\n const filled = Math.round(score / 2);\n const empty = 5 - filled;\n return '█'.repeat(filled) + '░'.repeat(empty);\n}\n\nfunction getPhaseLabel(phase: WorkflowPhase): string {\n const labels: Record<WorkflowPhase, string> = {\n context: '项目上下文获取',\n clarify: '需求澄清',\n analysis: '复杂度评估',\n bdd: 'BDD 场景拆解',\n spec: 'OpenSpec 规格',\n tdd: 'TDD 测试生成',\n develop: '开发实现',\n review: '代码审核',\n };\n return labels[phase];\n}\n\n/**\n * 导出\n */\nexport function getActiveSession(): WorkflowSession | null {\n return activeSession;\n}\n\nexport function clearActiveSession(): void {\n activeSession = null;\n}\n\nexport default handleNew;","/**\n * sf-cli - 专为前端开发设计的AI驱动CLI工具\n * \n * 导出核心模块,支持作为库使用\n */\n\n// 核心类型(已包含 agent 和 mcp 类型)\nexport * from './types';\n\n// 服务\nexport { ConfigManager } from './services/config';\nexport { ModelService } from './services/model';\nexport * from './services/mcp';\n\n// Agent 系统\nexport { runAgent, getAgent, listAgents, getAgentsForStep } from './agents/runner';\nexport { AgentExecutor, createAgentExecutor } from './agents/executor';\nexport * from './agents';\n\n// 工作流引擎\nexport { WorkflowEngine, ConfirmationRequiredError } from './workflow';\nexport * from './workflow/checkpoint';\n\n// 规范学习\nexport { NormsManager } from './norms';\n\n// 上下文管理\nexport { ContextManager } from './context';\n\n// CLI 相关\nexport { CommandParser, CommandType } from './cli/parser';\nexport { CommandExecutor } from './cli/executor';\nexport { Completer } from './cli/completer';\n","/**\n * 类型定义 - 核心类型\n */\n\n// Agent 相关类型\nexport * from './agent';\n\n// MCP 相关类型\nexport * from './mcp';\n\n// 配置相关\nexport interface CLIConfig {\n model: string;\n apiKey: string;\n apiEndpoint?: string;\n yolo: boolean;\n locale: string;\n theme: 'light' | 'dark' | 'auto';\n}\n\n// 工作流相关\nexport type WorkflowStep =\n | 'explore' \n | 'new' \n | 'continue' \n | 'apply' \n | 'archive'\n | 'propose';\n\n// 新工作流阶段\nexport type WorkflowPhase =\n | 'context' // 项目上下文获取\n | 'clarify' // 需求澄清\n | 'analysis' // 复杂度评估\n | 'bdd' // BDD 场景拆解\n | 'spec' // OpenSpec 规格\n | 'tdd' // TDD 测试生成\n | 'develop' // 开发实现\n | 'review'; // 代码审核\n\nexport type WorkflowType = 'complex' | 'simple';\n\nexport type WorkflowStatus = 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';\n\nexport interface WorkflowState {\n id: string;\n type: WorkflowType;\n currentStep: WorkflowStep;\n steps: WorkflowStepRecord[];\n requirement: string;\n title?: string;\n complexity: number;\n artifacts: string[];\n status: WorkflowStatus;\n createdAt: Date;\n updatedAt?: Date;\n completedAt?: Date;\n cancelledAt?: Date;\n cancelReason?: string;\n}\n\nexport interface WorkflowStepRecord {\n step: WorkflowStep;\n status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';\n startedAt?: Date;\n completedAt?: Date;\n output?: string;\n agent?: 'frontend-dev' | 'code-reviewer' | 'architect' | 'tester';\n}\nexport interface WorkflowTransition {\n from: WorkflowStep;\n to: WorkflowStep;\n timestamp: Date;\n reason?: string;\n}\n\nexport interface ChangeRecord {\n id: string;\n title: string;\n status: WorkflowStatus;\n created: Date;\n completed?: Date;\n complexity: number;\n workflow: WorkflowType;\n spec?: string;\n summary?: string;\n}\n\n// 上下文相关\nexport interface ContextMessage {\n role: 'system' | 'user' | 'assistant' | 'tool';\n content: string;\n tokens?: number;\n}\n\nexport interface ContextState {\n messages: ContextMessage[];\n totalTokens: number;\n limit: number;\n}\n\n// 任务相关\nexport interface Task {\n id: string;\n type: 'feature' | 'bugfix' | 'refactor' | 'docs';\n description: string;\n status: 'pending' | 'in_progress' | 'review' | 'completed' | 'archived';\n complexity: number;\n workflow: WorkflowState;\n files: string[];\n createdAt: Date;\n updatedAt: Date;\n}\n\n// 文件操作相关\nexport interface FileOperation {\n type: 'read' | 'write' | 'edit' | 'delete';\n path: string;\n content?: string;\n changes?: FileChange[];\n}\n\nexport interface FileChange {\n startLine: number;\n endLine: number;\n oldContent: string;\n newContent: string;\n}\n\n// Token统计\nexport interface TokenUsage {\n input: number;\n output: number;\n total: number;\n byAgent: Partial<Record<'frontend-dev' | 'code-reviewer' | 'architect' | 'tester', number>>;\n byStep: Partial<Record<WorkflowStep, number>>;\n}\n\n// 健康度报告\nexport interface HealthReport {\n overallScore: number;\n categories: {\n quality: number;\n security: number;\n performance: number;\n maintainability: number;\n };\n issues: HealthIssue[];\n suggestions: string[];\n generatedAt: Date;\n}\n\nexport interface HealthIssue {\n severity: 'error' | 'warning' | 'info';\n category: string;\n file: string;\n line: number;\n message: string;\n suggestion?: string;\n}\n\n// 规范学习\nexport interface DevStandard {\n id: string;\n category: string;\n description: string;\n weight: number;\n source: 'code-analysis' | 'conversation' | 'forced';\n examples: string[];\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface StandardWeight {\n standardId: string;\n weight: number;\n occurrences: number;\n lastOccurrence: Date;\n}","/**\n * Agent 系统类型定义\n */\n\nimport { WorkflowStep } from './index';\nimport { ChatMessage } from './model';\n\n// ==================== Agent 基础类型 ====================\n\nexport type AgentId = 'frontend-dev' | 'code-reviewer' | 'architect' | 'tester';\n\nexport type AgentStatus = 'idle' | 'running' | 'completed' | 'failed' | 'cancelled';\n\nexport type AgentTriggerType = 'manual' | 'workflow' | 'intent' | 'event';\n\n// ==================== Agent 工具定义 ====================\n\nexport type ToolPermissionLevel = 'full' | 'limited' | 'confirm' | 'none';\n\nexport interface AgentTool {\n name: string;\n description: string;\n permission: ToolPermissionLevel;\n parameters?: Record<string, unknown>;\n}\n\n// ==================== Agent 能力定义 ====================\n\nexport interface AgentCapability {\n id: string;\n name: string;\n description: string;\n inputSchema?: Record<string, unknown>;\n outputSchema?: Record<string, unknown>;\n}\n\n// ==================== Agent 触发器 ====================\n\nexport interface AgentTrigger {\n type: AgentTriggerType;\n condition: {\n workflowStep?: WorkflowStep;\n intent?: string[];\n event?: string;\n };\n priority: number;\n}\n\n// ==================== Agent 约束条件 ====================\n\nexport interface AgentConstraints {\n files?: {\n maxFileSize?: number;\n maxFilesPerTask?: number;\n allowedExtensions?: string[];\n protectedPaths?: string[];\n };\n code?: {\n maxLineLength?: number;\n maxFunctionLength?: number;\n maxFileLines?: number;\n requireTypes?: boolean;\n requireTests?: boolean;\n };\n dependencies?: {\n allowedLicenses?: string[];\n requireApproval?: string[];\n blacklist?: string[];\n };\n behavior?: {\n requireConfirmation?: string[];\n autoCommit?: boolean;\n autoPush?: boolean;\n };\n}\n\n// ==================== Agent 定义 ====================\n\nexport interface AgentDefinition {\n id: AgentId;\n name: string;\n description: string;\n icon: string;\n version: string;\n role: string;\n capabilities: AgentCapability[];\n tools: AgentTool[];\n triggers: AgentTrigger[];\n constraints: AgentConstraints;\n \n // Prompt 相关\n systemPrompt: string;\n taskPromptTemplate: string;\n \n // 输出处理\n outputFormat?: {\n type: 'text' | 'json' | 'markdown';\n schema?: Record<string, unknown>;\n };\n}\n\n// ==================== Agent 执行上下文 ====================\n\nexport interface ProjectContext {\n agentsMd: string;\n configYaml: string;\n devStandards: string;\n}\n\nexport interface AgentExecutionContext {\n taskId: string;\n workflowId?: string;\n workflowStep?: WorkflowStep;\n requirement: string;\n files?: string[];\n context?: string;\n norms?: string[];\n previousOutput?: string;\n projectContext?: ProjectContext; // 项目上下文(AGENTS.md, config.yaml, devstanded.md)\n}\n\n// ==================== Agent 执行结果 ====================\n\nexport interface AgentExecutionResult {\n success: boolean;\n output: string;\n structuredOutput?: Record<string, unknown>;\n filesChanged?: string[];\n tokensUsed: {\n input: number;\n output: number;\n };\n duration: number;\n error?: string;\n suggestions?: string[];\n}\n\n// ==================== Agent 会话状态 ====================\n\nexport interface AgentSession {\n id: string;\n agentId: AgentId;\n status: AgentStatus;\n context: AgentExecutionContext;\n messages: ChatMessage[];\n result?: AgentExecutionResult;\n startedAt: Date;\n completedAt?: Date;\n}\n\n// ==================== Agent 调度请求 ====================\n\nexport interface AgentScheduleRequest {\n agentId: AgentId;\n context: AgentExecutionContext;\n options?: {\n timeout?: number;\n maxRetries?: number;\n streamOutput?: boolean;\n onProgress?: (chunk: string) => void;\n };\n}\n\n// ==================== Agent 注册表 ====================\n\nexport interface AgentRegistry {\n agents: Map<AgentId, AgentDefinition>;\n customAgents: Map<string, AgentDefinition>;\n}\n\n// ==================== 工具函数类型 ====================\n\nexport interface ToolExecutor {\n name: string;\n execute: (params: Record<string, unknown>, context: AgentExecutionContext) => Promise<unknown>;\n}\n\n// ==================== Agent 事件 ====================\n\nexport interface AgentEvent {\n type: 'started' | 'progress' | 'completed' | 'failed' | 'cancelled';\n agentId: AgentId;\n sessionId: string;\n timestamp: Date;\n data?: unknown;\n}\n","/**\n * MCP (Model Context Protocol) 相关类型定义\n */\n\n// ==================== MCP 工具定义 ====================\n\nexport interface MCPToolSchema {\n name: string;\n description: string;\n inputSchema: {\n type: 'object';\n properties: Record<string, {\n type: string;\n description: string;\n enum?: string[];\n }>;\n required?: string[];\n };\n}\n\nexport interface MCPToolCall {\n name: string;\n arguments: Record<string, unknown>;\n}\n\nexport interface MCPToolResult {\n content: Array<{\n type: 'text' | 'image' | 'resource';\n text?: string;\n data?: string;\n mimeType?: string;\n }>;\n isError?: boolean;\n}\n\n// ==================== MCP 资源定义 ====================\n\nexport interface MCPResource {\n uri: string;\n name: string;\n description?: string;\n mimeType?: string;\n}\n\nexport interface MCPResourceContent {\n uri: string;\n mimeType?: string;\n text?: string;\n blob?: string;\n}\n\n// ==================== MCP 服务配置 ====================\n\nexport type MCPTransportType = 'stdio' | 'http' | 'websocket';\n\nexport interface MCPServerConfig {\n name: string;\n transport: MCPTransportType;\n command?: string; // for stdio\n args?: string[]; // for stdio\n url?: string; // for http/websocket\n env?: Record<string, string>;\n timeout?: number;\n retryAttempts?: number;\n}\n\nexport interface MCPClientConfig {\n servers: MCPServerConfig[];\n defaultTimeout?: number;\n}\n\n// ==================== MCP 连接状态 ====================\n\nexport type MCPConnectionStatus = 'disconnected' | 'connecting' | 'connected' | 'error';\n\nexport interface MCPConnectionState {\n serverName: string;\n status: MCPConnectionStatus;\n error?: string;\n lastConnected?: Date;\n toolsAvailable: string[];\n resourcesAvailable: string[];\n}\n\n// ==================== 设计稿相关类型 ====================\n\nexport interface DesignSpec {\n id: string;\n name: string;\n platform: 'lanhu' | 'figma';\n url: string;\n width: number;\n height: number;\n scale: number;\n layers: DesignLayer[];\n styles: DesignStyle;\n assets: DesignAsset[];\n extractedAt: Date;\n}\n\nexport interface DesignLayer {\n id: string;\n name: string;\n type: 'frame' | 'group' | 'text' | 'shape' | 'image';\n x: number;\n y: number;\n width: number;\n height: number;\n visible: boolean;\n opacity: number;\n children?: DesignLayer[];\n styles?: Partial<DesignStyle>;\n text?: string;\n}\n\nexport interface DesignStyle {\n colors: DesignColor[];\n typography: DesignTypography[];\n spacing: DesignSpacing[];\n borders: DesignBorder[];\n shadows: DesignShadow[];\n}\n\nexport interface DesignColor {\n name?: string;\n value: string;\n usage?: string;\n}\n\nexport interface DesignTypography {\n fontFamily: string;\n fontSize: number;\n fontWeight: number;\n lineHeight: number;\n letterSpacing?: number;\n textAlign?: 'left' | 'center' | 'right';\n}\n\nexport interface DesignSpacing {\n type: 'margin' | 'padding' | 'gap';\n value: number;\n unit: 'px' | 'rem' | '%';\n}\n\nexport interface DesignBorder {\n width: number;\n style: 'solid' | 'dashed' | 'dotted';\n color: string;\n radius?: number;\n}\n\nexport interface DesignShadow {\n type: 'box' | 'text';\n x: number;\n y: number;\n blur: number;\n spread?: number;\n color: string;\n}\n\nexport interface DesignAsset {\n id: string;\n name: string;\n type: 'image' | 'icon' | 'svg';\n url: string;\n width?: number;\n height?: number;\n format?: string;\n}\n\n// ==================== 设计稿解析结果 ====================\n\nexport interface DesignParseResult {\n success: boolean;\n spec?: DesignSpec;\n componentCode?: string;\n styleCode?: string;\n errors?: string[];\n warnings?: string[];\n}\n\n// ==================== MCP 服务接口 ====================\n\nexport interface IMCPAdapter {\n readonly name: string;\n readonly platform: 'lanhu' | 'figma';\n \n initialize(config: MCPServerConfig): Promise<void>;\n connect(): Promise<void>;\n disconnect(): Promise<void>;\n isConnected(): boolean;\n \n listTools(): Promise<MCPToolSchema[]>;\n callTool(call: MCPToolCall): Promise<MCPToolResult>;\n \n listResources(): Promise<MCPResource[]>;\n readResource(uri: string): Promise<MCPResourceContent>;\n \n // 设计稿特有方法\n getDesignSpec(url: string): Promise<DesignSpec>;\n extractStyles(spec: DesignSpec): Promise<DesignStyle>;\n generateCode(spec: DesignSpec, options?: CodeGenOptions): Promise<string>;\n}\n\nexport interface CodeGenOptions {\n framework?: 'react' | 'vue' | 'html';\n styleType?: 'css' | 'scss' | 'tailwind' | 'styled-components';\n componentType?: 'functional' | 'class';\n typescript?: boolean;\n}\n\n// ==================== MCP 管理器 ====================\n\nexport interface MCPManagerState {\n adapters: Map<string, IMCPAdapter>;\n connections: Map<string, MCPConnectionState>;\n}\n","/**\n * 配置管理服务\n * 管理CLI配置的加载、保存和访问\n * API Key 使用加密存储\n */\n\nimport * as fs from 'fs/promises';\nimport * as fsSync from 'fs';\nimport * as path from 'path';\nimport * as crypto from 'crypto';\nimport * as os from 'os';\nimport { CLIConfig } from '../types';\n\nconst DEFAULT_CONFIG: CLIConfig = {\n model: 'GLM-5',\n apiKey: '',\n yolo: false,\n locale: 'zh-CN',\n theme: 'auto',\n};\n\nconst ALGORITHM = 'aes-256-gcm';\nconst IV_LENGTH = 16;\nconst AUTH_TAG_LENGTH = 16;\nconst KEY_DIR = '.sf-cli';\nconst KEY_FILE = '.key';\n\n/**\n * 获取或创建加密密钥\n * 首次运行时生成随机密钥并安全存储\n */\nfunction getOrCreateEncryptionKey(): Buffer {\n const keyPath = path.join(os.homedir(), KEY_DIR, KEY_FILE);\n \n try {\n // 尝试读取已有密钥\n if (fsSync.existsSync(keyPath)) {\n const keyBase64 = fsSync.readFileSync(keyPath, 'utf-8').trim();\n return Buffer.from(keyBase64, 'base64');\n }\n } catch {\n // 读取失败,重新生成\n }\n \n // 生成新的随机密钥\n const key = crypto.randomBytes(32);\n \n try {\n // 确保目录存在\n const keyDir = path.dirname(keyPath);\n if (!fsSync.existsSync(keyDir)) {\n fsSync.mkdirSync(keyDir, { recursive: true, mode: 0o700 });\n }\n \n // 写入密钥文件,设置严格权限\n fsSync.writeFileSync(keyPath, key.toString('base64'), {\n mode: 0o600, // 仅所有者可读写\n encoding: 'utf-8',\n });\n \n return key;\n } catch {\n // 文件系统不可用时,使用机器标识作为备选方案\n const machineId = [\n os.hostname(),\n os.platform(),\n os.arch(),\n process.env.USERNAME || process.env.USER || 'default',\n ].join('-');\n return crypto.createHash('sha256').update(machineId).digest();\n }\n}\n\nexport class ConfigManager {\n private config: CLIConfig;\n private configPath: string = '';\n private projectPath: string = '';\n private encryptionKey: Buffer;\n\n constructor() {\n this.config = { ...DEFAULT_CONFIG };\n this.encryptionKey = getOrCreateEncryptionKey();\n }\n\n async load(projectPath: string): Promise<void> {\n this.projectPath = projectPath;\n this.configPath = path.join(projectPath, '.sf-cli', 'config.json');\n \n try {\n const content = await fs.readFile(this.configPath, 'utf-8');\n const loaded = JSON.parse(content);\n \n // 解密 API Key\n if (loaded.apiKey && loaded.apiKeyEncrypted) {\n loaded.apiKey = this.decrypt(loaded.apiKey);\n delete loaded.apiKeyEncrypted;\n }\n \n this.config = { ...DEFAULT_CONFIG, ...loaded };\n } catch {\n // 配置文件不存在,使用默认配置\n this.config = { ...DEFAULT_CONFIG };\n }\n }\n\n async save(): Promise<void> {\n if (!this.configPath) return;\n \n const configToSave = { ...this.config };\n \n // 加密 API Key\n if (configToSave.apiKey) {\n const encrypted = this.encrypt(configToSave.apiKey);\n configToSave.apiKey = encrypted;\n (configToSave as any).apiKeyEncrypted = true;\n }\n \n await fs.mkdir(path.dirname(this.configPath), { recursive: true });\n await fs.writeFile(\n this.configPath, \n JSON.stringify(configToSave, null, 2),\n 'utf-8'\n );\n }\n\n get<K extends keyof CLIConfig>(key: K): CLIConfig[K] {\n return this.config[key];\n }\n\n set<K extends keyof CLIConfig>(key: K, value: CLIConfig[K]): void {\n this.config[key] = value;\n }\n\n getAll(): CLIConfig {\n return { ...this.config };\n }\n\n update(updates: Partial<CLIConfig>): void {\n this.config = { ...this.config, ...updates };\n }\n\n /**\n * 加密敏感数据\n */\n private encrypt(text: string): string {\n const iv = crypto.randomBytes(IV_LENGTH);\n const cipher = crypto.createCipheriv(ALGORITHM, this.encryptionKey, iv);\n \n let encrypted = cipher.update(text, 'utf8', 'base64');\n encrypted += cipher.final('base64');\n \n const authTag = cipher.getAuthTag();\n \n // 格式: iv:authTag:encrypted\n return `${iv.toString('base64')}:${authTag.toString('base64')}:${encrypted}`;\n }\n\n /**\n * 解密敏感数据\n */\n private decrypt(encryptedData: string): string {\n try {\n const parts = encryptedData.split(':');\n if (parts.length !== 3) {\n // 旧格式(未加密),直接返回\n return encryptedData;\n }\n \n const [ivBase64, authTagBase64, encrypted] = parts;\n const iv = Buffer.from(ivBase64!, 'base64');\n const authTag = Buffer.from(authTagBase64!, 'base64');\n \n const decipher = crypto.createDecipheriv(ALGORITHM, this.encryptionKey, iv);\n decipher.setAuthTag(authTag);\n \n let decrypted = decipher.update(encrypted!, 'base64', 'utf8');\n decrypted += decipher.final('utf8');\n \n return decrypted;\n } catch {\n // 解密失败,返回空字符串\n return '';\n }\n }\n}\n\nexport default ConfigManager;\n","/**\n * AI模型调用服务\n * 统一的模型调用接口,管理多个模型适配器\n */\n\nimport {\n IModelAdapter,\n ModelConfig,\n ModelProvider,\n ChatMessage,\n ChatResponse,\n StreamChunk,\n RequestOptions,\n ModelError,\n TokenStats,\n TokenUsage,\n getModelInfo,\n} from '../types/model';\nimport { createAdapter } from './adapters';\nimport { ConfigManager } from './config';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\n\nexport class ModelService {\n private adapters: Map<ModelProvider, IModelAdapter> = new Map();\n private currentConfig: ModelConfig | null = null;\n private stats: TokenStats;\n private configManager: ConfigManager;\n private statsPath: string = '';\n\n constructor(configManager: ConfigManager) {\n this.configManager = configManager;\n this.stats = {\n totalInput: 0,\n totalOutput: 0,\n byModel: {},\n byAgent: {},\n byDate: {},\n };\n }\n\n /**\n * 初始化服务\n */\n async initialize(statsDir: string): Promise<void> {\n this.statsPath = path.join(statsDir, 'tokens');\n \n // 加载已有统计\n await this.loadStats();\n \n // 初始化当前配置的模型\n const model = this.configManager.get('model');\n const apiKey = this.configManager.get('apiKey');\n \n if (model && apiKey) {\n await this.configureModel({\n provider: this.getProviderFromModel(model),\n model,\n apiKey,\n });\n }\n }\n\n /**\n * 配置模型\n */\n async configureModel(config: ModelConfig): Promise<void> {\n // 获取或创建适配器\n let adapter = this.adapters.get(config.provider);\n \n if (!adapter) {\n adapter = createAdapter(config.provider);\n this.adapters.set(config.provider, adapter);\n }\n \n // 初始化适配器\n await adapter.initialize(config);\n \n // 保存配置\n this.currentConfig = config;\n this.configManager.set('model', config.model);\n this.configManager.set('apiKey', config.apiKey);\n await this.configManager.save();\n }\n\n /**\n * 发送消息\n */\n async sendMessage(\n messages: ChatMessage[],\n options?: RequestOptions & { agent?: string }\n ): Promise<ChatResponse> {\n if (!this.currentConfig) {\n throw new Error('模型未配置,请先执行 /model 命令');\n }\n\n const adapter = this.adapters.get(this.currentConfig.provider);\n if (!adapter || !adapter.isInitialized()) {\n throw new Error('模型适配器未初始化');\n }\n\n try {\n const response = await adapter.sendMessage(messages, options);\n \n // 更新统计\n this.updateStats(response.usage, {\n model: this.currentConfig.model,\n agent: options?.agent,\n });\n \n // 异步保存统计\n this.saveStats().catch(() => {});\n \n return response;\n } catch (error) {\n throw this.wrapError(error);\n }\n }\n\n /**\n * 流式发送消息\n */\n async *streamMessage(\n messages: ChatMessage[],\n options?: RequestOptions & { agent?: string }\n ): AsyncGenerator<StreamChunk> {\n if (!this.currentConfig) {\n throw new Error('模型未配置,请先执行 /model 命令');\n }\n\n const adapter = this.adapters.get(this.currentConfig.provider);\n if (!adapter || !adapter.isInitialized()) {\n throw new Error('模型适配器未初始化');\n }\n\n let totalTokens = 0;\n\n try {\n for await (const chunk of adapter.streamMessage(messages, options)) {\n totalTokens += chunk.delta.length; // 粗略估算\n yield chunk;\n }\n\n // 更新统计\n const inputTokens = adapter.countTokens(\n messages.map(m => m.content).join('\\n')\n );\n this.updateStats(\n { inputTokens, outputTokens: Math.ceil(totalTokens / 4), totalTokens: 0 },\n { model: this.currentConfig.model, agent: options?.agent }\n );\n \n // 异步保存统计\n this.saveStats().catch(() => {});\n } catch (error) {\n throw this.wrapError(error);\n }\n }\n\n /**\n * 计算Token数量\n */\n countTokens(text: string): number {\n if (!this.currentConfig) {\n // 返回粗略估算\n return Math.ceil(text.length / 4);\n }\n\n const adapter = this.adapters.get(this.currentConfig.provider);\n return adapter?.countTokens(text) || Math.ceil(text.length / 4);\n }\n\n /**\n * 获取当前模型\n */\n getCurrentModel(): string | null {\n return this.currentConfig?.model || null;\n }\n\n /**\n * 获取当前提供商\n */\n getCurrentProvider(): ModelProvider | null {\n return this.currentConfig?.provider || null;\n }\n\n /**\n * 获取Token统计\n */\n getStats(): TokenStats {\n return { ...this.stats };\n }\n\n /**\n * 获取今日统计\n */\n getTodayStats(): TokenUsage {\n const today = new Date().toISOString().split('T')[0];\n return this.stats.byDate[today] || { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n }\n\n /**\n * 重置统计\n */\n resetStats(): void {\n this.stats = {\n totalInput: 0,\n totalOutput: 0,\n byModel: {},\n byAgent: {},\n byDate: {},\n };\n this.saveStats().catch(() => {});\n }\n\n /**\n * 验证API Key\n */\n async validateApiKey(provider: ModelProvider, apiKey: string): Promise<boolean> {\n let adapter = this.adapters.get(provider);\n \n if (!adapter) {\n adapter = createAdapter(provider);\n }\n \n return adapter.validateApiKey(apiKey);\n }\n\n // ==================== 私有方法 ====================\n\n private getProviderFromModel(modelId: string): ModelProvider {\n const info = getModelInfo(modelId);\n return info?.provider || 'openai';\n }\n\n private updateStats(\n usage: TokenUsage,\n context: { model: string; agent?: string }\n ): void {\n // 更新总计\n this.stats.totalInput += usage.inputTokens;\n this.stats.totalOutput += usage.outputTokens;\n\n // 按模型统计\n if (!this.stats.byModel[context.model]) {\n this.stats.byModel[context.model] = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n }\n this.stats.byModel[context.model].inputTokens += usage.inputTokens;\n this.stats.byModel[context.model].outputTokens += usage.outputTokens;\n this.stats.byModel[context.model].totalTokens += usage.totalTokens;\n\n // 按Agent统计\n if (context.agent) {\n if (!this.stats.byAgent[context.agent]) {\n this.stats.byAgent[context.agent] = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n }\n this.stats.byAgent[context.agent].inputTokens += usage.inputTokens;\n this.stats.byAgent[context.agent].outputTokens += usage.outputTokens;\n this.stats.byAgent[context.agent].totalTokens += usage.totalTokens;\n }\n\n // 按日期统计\n const today = new Date().toISOString().split('T')[0];\n if (!this.stats.byDate[today]) {\n this.stats.byDate[today] = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n }\n this.stats.byDate[today].inputTokens += usage.inputTokens;\n this.stats.byDate[today].outputTokens += usage.outputTokens;\n this.stats.byDate[today].totalTokens += usage.totalTokens;\n }\n\n private async loadStats(): Promise<void> {\n if (!this.statsPath) return;\n \n try {\n const dailyPath = path.join(this.statsPath, 'daily.json');\n const totalPath = path.join(this.statsPath, 'total.json');\n \n const [daily, total] = await Promise.all([\n fs.readFile(dailyPath, 'utf-8').catch(() => '{}'),\n fs.readFile(totalPath, 'utf-8').catch(() => '{\"totalInput\":0,\"totalOutput\":0}'),\n ]);\n \n const dailyData = JSON.parse(daily);\n const totalData = JSON.parse(total);\n \n this.stats.byDate = dailyData;\n this.stats.totalInput = totalData.totalInput || 0;\n this.stats.totalOutput = totalData.totalOutput || 0;\n } catch {\n // 忽略加载错误\n }\n }\n\n private async saveStats(): Promise<void> {\n if (!this.statsPath) return;\n \n try {\n await fs.mkdir(this.statsPath, { recursive: true });\n \n const dailyPath = path.join(this.statsPath, 'daily.json');\n const totalPath = path.join(this.statsPath, 'total.json');\n \n await Promise.all([\n fs.writeFile(dailyPath, JSON.stringify(this.stats.byDate, null, 2)),\n fs.writeFile(totalPath, JSON.stringify({\n totalInput: this.stats.totalInput,\n totalOutput: this.stats.totalOutput,\n })),\n ]);\n } catch {\n // 忽略保存错误\n }\n }\n\n private wrapError(error: unknown): ModelError {\n if (error instanceof ModelError) {\n return error;\n }\n \n const err = error as Error;\n \n // 根据错误信息判断类型\n if (err.message.includes('timeout')) {\n return new ModelError('TIMEOUT', err.message, { retryable: true });\n }\n \n if (err.message.includes('network') || err.message.includes('ECONNREFUSED')) {\n return new ModelError('NETWORK_ERROR', err.message, { retryable: true });\n }\n \n return new ModelError('UNKNOWN_ERROR', err.message, { retryable: false });\n }\n}\n\nexport default ModelService;\n","/**\n * AI模型相关类型定义\n */\n\n// ==================== 消息相关 ====================\n\nexport type MessageRole = 'system' | 'user' | 'assistant' | 'tool';\n\nexport interface ToolCall {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n}\n\nexport interface ChatMessage {\n role: MessageRole;\n content: string;\n name?: string;\n toolCalls?: ToolCall[];\n toolCallId?: string;\n}\n\n// ==================== 响应相关 ====================\n\nexport type FinishReason = 'stop' | 'length' | 'tool_call' | 'content_filter' | 'error' | 'end_turn' | 'max_tokens' | 'stop_sequence';\n\nexport interface TokenUsage {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n}\n\nexport interface ChatResponse {\n id: string;\n model: string;\n content: string;\n toolCalls?: ToolCall[];\n usage: TokenUsage;\n finishReason: FinishReason;\n latency?: number;\n}\n\nexport interface StreamChunk {\n id: string;\n model: string;\n delta: string;\n finishReason?: FinishReason;\n}\n\n// ==================== 配置相关 ====================\n\nexport type ModelProvider = 'glm' | 'openai' | 'anthropic' | 'qwen' | 'deepseek';\n\nexport interface ModelConfig {\n provider: ModelProvider;\n model: string;\n apiKey: string;\n apiEndpoint?: string;\n temperature?: number;\n maxTokens?: number;\n timeout?: number;\n retries?: number;\n}\n\nexport interface ModelInfo {\n id: string;\n name: string;\n provider: ModelProvider;\n description: string;\n contextWindow: number;\n maxOutputTokens: number;\n supportsTools: boolean;\n supportsVision: boolean;\n}\n\n// ==================== 请求选项 ====================\n\nexport interface RequestOptions {\n temperature?: number;\n maxTokens?: number;\n topP?: number;\n stopSequences?: string[];\n tools?: ToolDefinition[];\n toolChoice?: 'auto' | 'none' | { type: 'function'; function: { name: string } };\n systemPrompt?: string;\n timeout?: number;\n}\n\nexport interface ToolDefinition {\n type: 'function';\n function: {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n };\n}\n\n// ==================== 适配器接口 ====================\n\nexport interface IModelAdapter {\n readonly name: string;\n readonly provider: ModelProvider;\n readonly models: ModelInfo[];\n \n initialize(config: ModelConfig): Promise<void>;\n sendMessage(\n messages: ChatMessage[], \n options?: RequestOptions\n ): Promise<ChatResponse>;\n streamMessage(\n messages: ChatMessage[], \n options?: RequestOptions\n ): AsyncGenerator<StreamChunk>;\n countTokens(text: string): number;\n validateApiKey(apiKey: string): Promise<boolean>;\n isInitialized(): boolean;\n}\n\n// ==================== 错误相关 ====================\n\nexport type ModelErrorCode = \n | 'INVALID_API_KEY'\n | 'RATE_LIMIT'\n | 'CONTEXT_TOO_LONG'\n | 'TIMEOUT'\n | 'NETWORK_ERROR'\n | 'MODEL_NOT_FOUND'\n | 'CONTENT_FILTER'\n | 'UNKNOWN_ERROR';\n\nexport class ModelError extends Error {\n code: ModelErrorCode;\n provider?: ModelProvider;\n originalError?: unknown;\n retryable: boolean;\n\n constructor(\n code: ModelErrorCode,\n message: string,\n options?: {\n provider?: ModelProvider;\n originalError?: unknown;\n retryable?: boolean;\n }\n ) {\n super(message);\n this.name = 'ModelError';\n this.code = code;\n this.provider = options?.provider;\n this.originalError = options?.originalError;\n this.retryable = options?.retryable ?? false;\n }\n}\n\n// 兼容旧接口的类型\nexport type { ModelError as ModelErrorInterface };\n\n// ==================== 统计相关 ====================\n\nexport interface TokenStats {\n totalInput: number;\n totalOutput: number;\n byModel: Record<string, TokenUsage>;\n byAgent: Record<string, TokenUsage>;\n byDate: Record<string, TokenUsage>;\n}\n\nexport interface CostEstimate {\n inputCost: number;\n outputCost: number;\n totalCost: number;\n currency: string;\n}\n\n// ==================== 可用模型列表 ====================\n\nexport const AVAILABLE_MODELS: ModelInfo[] = [\n {\n id: 'GLM-5',\n name: 'GLM-5',\n provider: 'glm',\n description: '智谱AI旗舰模型,综合能力强,中文优化',\n contextWindow: 128000,\n maxOutputTokens: 4096,\n supportsTools: true,\n supportsVision: true,\n },\n {\n id: 'gpt-4o',\n name: 'GPT-4o',\n provider: 'openai',\n description: 'OpenAI最新旗舰模型,多模态支持',\n contextWindow: 128000,\n maxOutputTokens: 4096,\n supportsTools: true,\n supportsVision: true,\n },\n {\n id: 'gpt-4-turbo',\n name: 'GPT-4 Turbo',\n provider: 'openai',\n description: 'GPT-4加速版,性能与成本平衡',\n contextWindow: 128000,\n maxOutputTokens: 4096,\n supportsTools: true,\n supportsVision: true,\n },\n {\n id: 'claude-3-opus',\n name: 'Claude 3 Opus',\n provider: 'anthropic',\n description: 'Anthropic最强模型,长上下文支持',\n contextWindow: 200000,\n maxOutputTokens: 4096,\n supportsTools: true,\n supportsVision: true,\n },\n {\n id: 'claude-3-sonnet',\n name: 'Claude 3 Sonnet',\n provider: 'anthropic',\n description: '平衡性能与成本,适合日常使用',\n contextWindow: 200000,\n maxOutputTokens: 4096,\n supportsTools: true,\n supportsVision: true,\n },\n {\n id: 'qwen-max',\n name: '通义千问 Max',\n provider: 'qwen',\n description: '阿里云旗舰模型,国内部署',\n contextWindow: 32000,\n maxOutputTokens: 2000,\n supportsTools: true,\n supportsVision: false,\n },\n {\n id: 'deepseek-coder',\n name: 'DeepSeek Coder',\n provider: 'deepseek',\n description: '专注代码生成,编程优化',\n contextWindow: 16000,\n maxOutputTokens: 4096,\n supportsTools: false,\n supportsVision: false,\n },\n];\n\nexport function getModelInfo(modelId: string): ModelInfo | undefined {\n return AVAILABLE_MODELS.find(m => m.id === modelId);\n}\n\nexport function getModelsByProvider(provider: ModelProvider): ModelInfo[] {\n return AVAILABLE_MODELS.filter(m => m.provider === provider);\n}\n","/**\n * 模型适配器导出\n */\n\nexport { BaseAdapter } from './base';\nexport { GLMAdapter } from './glm';\nexport { OpenAIAdapter } from './openai';\nexport { ClaudeAdapter } from './claude';\n\nimport { IModelAdapter, ModelProvider, ModelConfig } from '../../types/model';\nimport { GLMAdapter } from './glm';\nimport { OpenAIAdapter } from './openai';\nimport { ClaudeAdapter } from './claude';\n\n// DeepSeek API 端点\nconst DEEPSEEK_API_ENDPOINT = 'https://api.deepseek.com/v1';\n\n/**\n * 根据提供商创建适配器实例\n */\nexport function createAdapter(provider: ModelProvider): IModelAdapter {\n switch (provider) {\n case 'glm':\n return new GLMAdapter();\n case 'openai':\n return new OpenAIAdapter();\n case 'anthropic':\n return new ClaudeAdapter();\n case 'qwen':\n // TODO: 实现 QwenAdapter\n throw new Error('Qwen适配器尚未实现');\n case 'deepseek':\n // DeepSeek 使用 OpenAI 兼容接口\n return createDeepSeekAdapter();\n default:\n throw new Error(`未知的模型提供商: ${provider}`);\n }\n}\n\n/**\n * DeepSeek 适配器 (基于OpenAI兼容接口)\n */\nfunction createDeepSeekAdapter(): IModelAdapter {\n const adapter = new OpenAIAdapter();\n let initialized = false;\n let config: ModelConfig | null = null;\n \n return {\n get name() { return 'DeepSeek'; },\n get provider() { return 'deepseek' as ModelProvider; },\n get models() { return adapter.models; },\n \n async initialize(modelConfig: ModelConfig): Promise<void> {\n // 强制使用 DeepSeek 端点\n config = {\n ...modelConfig,\n apiEndpoint: DEEPSEEK_API_ENDPOINT,\n };\n await adapter.initialize(config);\n initialized = true;\n },\n \n async sendMessage(messages, options) {\n return adapter.sendMessage(messages, options);\n },\n \n async *streamMessage(messages, options) {\n yield* adapter.streamMessage(messages, options);\n },\n \n countTokens(text) {\n return adapter.countTokens(text);\n },\n \n async validateApiKey(apiKey: string): Promise<boolean> {\n // 使用 DeepSeek 端点验证 API Key\n try {\n const response = await fetch(`${DEEPSEEK_API_ENDPOINT}/models`, {\n headers: {\n 'Authorization': `Bearer ${apiKey}`,\n },\n });\n return response.ok;\n } catch {\n return false;\n }\n },\n \n isInitialized() {\n return initialized;\n },\n };\n}\n","/**\n * 模型适配器基类\n * 提供通用的适配器实现逻辑\n */\n\nimport {\n IModelAdapter,\n ModelConfig,\n ModelInfo,\n ModelProvider,\n ChatMessage,\n ChatResponse,\n StreamChunk,\n RequestOptions,\n ModelError,\n TokenUsage,\n} from '../../types/model';\nimport { encoding_for_model } from 'tiktoken';\n\nexport abstract class BaseAdapter implements IModelAdapter {\n abstract readonly name: string;\n abstract readonly provider: ModelProvider;\n abstract readonly models: ModelInfo[];\n\n protected config: ModelConfig | null = null;\n protected initialized = false;\n\n async initialize(config: ModelConfig): Promise<void> {\n this.config = config;\n await this.onInitialize();\n this.initialized = true;\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n abstract sendMessage(\n messages: ChatMessage[],\n options?: RequestOptions\n ): Promise<ChatResponse>;\n\n abstract streamMessage(\n messages: ChatMessage[],\n options?: RequestOptions\n ): AsyncGenerator<StreamChunk>;\n\n abstract validateApiKey(apiKey: string): Promise<boolean>;\n\n /**\n * 子类可重写的初始化钩子\n */\n protected async onInitialize(): Promise<void> {\n // 默认空实现,子类可重写\n }\n\n /**\n * 计算Token数量\n */\n countTokens(text: string): number {\n try {\n const encoding = encoding_for_model('gpt-4');\n const tokens = encoding.encode(text);\n encoding.free(); // 释放资源\n return tokens.length;\n } catch {\n // 如果tiktoken失败,使用简单估算\n return Math.ceil(text.length / 4);\n }\n }\n\n /**\n * 计算消息列表的总Token数\n */\n protected countMessagesTokens(messages: ChatMessage[]): number {\n let total = 0;\n for (const msg of messages) {\n total += this.countTokens(msg.content);\n if (msg.name) {\n total += this.countTokens(msg.name);\n }\n if (msg.toolCalls) {\n for (const tc of msg.toolCalls) {\n total += this.countTokens(tc.function.name);\n total += this.countTokens(tc.function.arguments);\n }\n }\n }\n return total;\n }\n\n /**\n * 估算响应Token数量(简单估算)\n */\n protected estimateOutputTokens(options?: RequestOptions): number {\n return options?.maxTokens || 4096;\n }\n\n /**\n * 构建基本用法统计\n */\n protected buildUsage(\n inputTokens: number,\n outputTokens: number\n ): TokenUsage {\n return {\n inputTokens,\n outputTokens,\n totalTokens: inputTokens + outputTokens,\n };\n }\n\n /**\n * 创建错误对象\n */\n protected createError(\n code: ModelError['code'],\n message: string,\n originalError?: unknown\n ): ModelError {\n const retryable = ['RATE_LIMIT', 'TIMEOUT', 'NETWORK_ERROR'].includes(code);\n return new ModelError(code, message, {\n provider: this.provider,\n originalError,\n retryable,\n });\n }\n\n /**\n * 获取API端点\n */\n protected getApiEndpoint(): string {\n return this.config?.apiEndpoint || this.getDefaultEndpoint();\n }\n\n /**\n * 获取默认API端点(子类实现)\n */\n protected abstract getDefaultEndpoint(): string;\n\n /**\n * 获取超时时间\n */\n protected getTimeout(): number {\n return this.config?.timeout || 60000;\n }\n\n /**\n * 获取重试次数\n */\n protected getRetries(): number {\n return this.config?.retries || 3;\n }\n\n /**\n * 带重试的请求执行\n */\n protected async withRetry<T>(\n fn: () => Promise<T>,\n retries: number = this.getRetries()\n ): Promise<T> {\n let lastError: unknown;\n \n for (let i = 0; i <= retries; i++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n \n // 检查是否可重试\n const modelError = error as ModelError;\n if (!modelError.retryable || i === retries) {\n throw error;\n }\n \n // 等待一段时间后重试\n await this.delay(1000 * (i + 1));\n }\n }\n \n throw lastError;\n }\n\n /**\n * 延迟工具函数\n */\n protected delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n}\n","/**\n * GLM-5 适配器\n * 智谱AI GLM-5模型适配器\n */\n\nimport { BaseAdapter } from './base';\nimport {\n ModelConfig,\n ModelInfo,\n ModelProvider,\n ChatMessage,\n ChatResponse,\n StreamChunk,\n RequestOptions,\n AVAILABLE_MODELS,\n ModelError,\n FinishReason,\n} from '../../types/model';\n\n// GLM API 响应类型\ninterface GLMResponse {\n id?: string;\n choices?: Array<{\n message?: {\n content?: string;\n tool_calls?: Array<{\n id?: string;\n function?: {\n name?: string;\n arguments?: string | object;\n };\n }>;\n };\n finish_reason?: string;\n }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n };\n}\n\nexport class GLMAdapter extends BaseAdapter {\n readonly name = 'GLM-5';\n readonly provider: ModelProvider = 'glm';\n readonly models: ModelInfo[] = AVAILABLE_MODELS.filter(\n m => m.provider === 'glm'\n );\n\n private client: unknown = null;\n\n protected getDefaultEndpoint(): string {\n return 'https://open.bigmodel.cn/api/paas/v4';\n }\n\n protected async onInitialize(): Promise<void> {\n // 初始化智谱AI客户端 - 使用 HTTP API\n this.client = null;\n }\n\n async sendMessage(\n messages: ChatMessage[],\n options?: RequestOptions\n ): Promise<ChatResponse> {\n const startTime = Date.now();\n \n const response = await this.withRetry(async () => {\n const res = await fetch(`${this.getApiEndpoint()}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.config!.apiKey}`,\n },\n body: JSON.stringify({\n model: this.config!.model,\n messages: this.formatMessages(messages),\n temperature: options?.temperature ?? this.config!.temperature ?? 0.7,\n max_tokens: options?.maxTokens ?? this.config!.maxTokens ?? 4096,\n top_p: options?.topP,\n stop: options?.stopSequences,\n tools: options?.tools,\n tool_choice: options?.toolChoice,\n }),\n signal: AbortSignal.timeout(this.getTimeout()),\n });\n\n if (!res.ok) {\n const error = await res.json().catch(() => ({}));\n throw this.handleError(res.status, error);\n }\n\n return res.json() as Promise<GLMResponse>;\n });\n\n const latency = Date.now() - startTime;\n \n return {\n id: response.id || `glm-${Date.now()}`,\n model: this.config!.model,\n content: response.choices?.[0]?.message?.content || '',\n toolCalls: this.parseToolCalls(response.choices?.[0]?.message?.tool_calls),\n usage: this.buildUsage(\n response.usage?.prompt_tokens || this.countMessagesTokens(messages),\n response.usage?.completion_tokens || 0\n ),\n finishReason: (response.choices?.[0]?.finish_reason || 'stop') as FinishReason,\n latency,\n };\n }\n\n async *streamMessage(\n messages: ChatMessage[],\n options?: RequestOptions\n ): AsyncGenerator<StreamChunk> {\n const response = await fetch(`${this.getApiEndpoint()}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.config!.apiKey}`,\n },\n body: JSON.stringify({\n model: this.config!.model,\n messages: this.formatMessages(messages),\n temperature: options?.temperature ?? this.config!.temperature ?? 0.7,\n max_tokens: options?.maxTokens ?? this.config!.maxTokens ?? 4096,\n stream: true,\n }),\n signal: AbortSignal.timeout(this.getTimeout()),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw this.handleError(response.status, error);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('无法获取响应流');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed === 'data: [DONE]') continue;\n \n if (trimmed.startsWith('data: ')) {\n try {\n const json = JSON.parse(trimmed.slice(6));\n const delta = json.choices?.[0]?.delta?.content || '';\n const finishReason = json.choices?.[0]?.finish_reason;\n\n if (delta || finishReason) {\n yield {\n id: json.id || `glm-stream-${Date.now()}`,\n model: this.config!.model,\n delta,\n finishReason: finishReason as FinishReason,\n };\n }\n } catch {\n // 忽略解析错误\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n async validateApiKey(apiKey: string): Promise<boolean> {\n try {\n const response = await fetch(`${this.getApiEndpoint()}/models`, {\n headers: {\n 'Authorization': `Bearer ${apiKey}`,\n },\n });\n return response.ok;\n } catch {\n return false;\n }\n }\n\n private formatMessages(messages: ChatMessage[]): Array<{\n role: string;\n content: string;\n name?: string;\n }> {\n return messages.map(msg => ({\n role: msg.role,\n content: msg.content,\n ...(msg.name && { name: msg.name }),\n }));\n }\n\n private parseToolCalls(toolCalls: unknown): any[] | undefined {\n if (!toolCalls || !Array.isArray(toolCalls)) return undefined;\n \n return toolCalls.map(tc => ({\n id: tc.id || `tc-${Date.now()}`,\n type: 'function' as const,\n function: {\n name: tc.function?.name || '',\n arguments: typeof tc.function?.arguments === 'string' \n ? tc.function.arguments \n : JSON.stringify(tc.function?.arguments || {}),\n },\n }));\n }\n\n private handleError(status: number, error: any): ModelError {\n const message = error?.error?.message || `HTTP ${status}`;\n \n switch (status) {\n case 401:\n return this.createError('INVALID_API_KEY', message, error);\n case 429:\n return this.createError('RATE_LIMIT', message, error);\n case 400:\n if (message.includes('context') || message.includes('token')) {\n return this.createError('CONTEXT_TOO_LONG', message, error);\n }\n return this.createError('UNKNOWN_ERROR', message, error);\n default:\n return this.createError('UNKNOWN_ERROR', message, error);\n }\n }\n}\n\nexport default GLMAdapter;\n","/**\n * OpenAI 适配器\n * 支持 GPT-4o, GPT-4 Turbo 等模型\n */\n\nimport { BaseAdapter } from './base';\nimport {\n ModelConfig,\n ModelInfo,\n ModelProvider,\n ChatMessage,\n ChatResponse,\n StreamChunk,\n RequestOptions,\n AVAILABLE_MODELS,\n ModelError,\n} from '../../types/model';\n\n// OpenAI API 响应类型\ninterface OpenAIResponse {\n id?: string;\n choices?: Array<{\n message?: {\n content?: string;\n tool_calls?: Array<{\n id?: string;\n function?: {\n name?: string;\n arguments?: string;\n };\n }>;\n };\n finish_reason?: string;\n }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n };\n}\n\nexport class OpenAIAdapter extends BaseAdapter {\n readonly name = 'OpenAI';\n readonly provider: ModelProvider = 'openai';\n readonly models: ModelInfo[] = AVAILABLE_MODELS.filter(\n m => m.provider === 'openai'\n );\n\n protected getDefaultEndpoint(): string {\n return 'https://api.openai.com/v1';\n }\n\n async sendMessage(\n messages: ChatMessage[],\n options?: RequestOptions\n ): Promise<ChatResponse> {\n const startTime = Date.now();\n \n const requestBody: Record<string, unknown> = {\n model: this.config!.model,\n messages: this.formatMessages(messages),\n temperature: options?.temperature ?? this.config!.temperature ?? 0.7,\n max_tokens: options?.maxTokens ?? this.config!.maxTokens ?? 4096,\n top_p: options?.topP,\n stop: options?.stopSequences,\n };\n\n if (options?.tools) {\n requestBody.tools = options.tools;\n requestBody.tool_choice = options.toolChoice || 'auto';\n }\n\n const response = await this.withRetry(async () => {\n const res = await fetch(`${this.getApiEndpoint()}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.config!.apiKey}`,\n },\n body: JSON.stringify(requestBody),\n signal: AbortSignal.timeout(this.getTimeout()),\n });\n\n if (!res.ok) {\n const error = await res.json().catch(() => ({}));\n throw this.handleError(res.status, error);\n }\n\n return res.json() as Promise<OpenAIResponse>;\n });\n\n const latency = Date.now() - startTime;\n const choice = response.choices?.[0];\n \n return {\n id: response.id || `openai-${Date.now()}`,\n model: this.config!.model,\n content: choice?.message?.content || '',\n toolCalls: this.parseToolCalls(choice?.message?.tool_calls),\n usage: this.buildUsage(\n response.usage?.prompt_tokens || this.countMessagesTokens(messages),\n response.usage?.completion_tokens || 0\n ),\n finishReason: this.mapFinishReason(choice?.finish_reason),\n latency,\n };\n }\n\n async *streamMessage(\n messages: ChatMessage[],\n options?: RequestOptions\n ): AsyncGenerator<StreamChunk> {\n const requestBody: Record<string, unknown> = {\n model: this.config!.model,\n messages: this.formatMessages(messages),\n temperature: options?.temperature ?? this.config!.temperature ?? 0.7,\n max_tokens: options?.maxTokens ?? this.config!.maxTokens ?? 4096,\n stream: true,\n };\n\n const response = await fetch(`${this.getApiEndpoint()}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.config!.apiKey}`,\n },\n body: JSON.stringify(requestBody),\n signal: AbortSignal.timeout(this.getTimeout()),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw this.handleError(response.status, error);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('无法获取响应流');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed === 'data: [DONE]') continue;\n \n if (trimmed.startsWith('data: ')) {\n try {\n const json = JSON.parse(trimmed.slice(6));\n const delta = json.choices?.[0]?.delta?.content || '';\n const finishReason = json.choices?.[0]?.finish_reason;\n\n if (delta || finishReason) {\n yield {\n id: json.id || `openai-stream-${Date.now()}`,\n model: this.config!.model,\n delta,\n finishReason: this.mapFinishReason(finishReason),\n };\n }\n } catch {\n // 忽略解析错误\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n async validateApiKey(apiKey: string): Promise<boolean> {\n try {\n const response = await fetch(`${this.getApiEndpoint()}/models`, {\n headers: {\n 'Authorization': `Bearer ${apiKey}`,\n },\n });\n return response.ok;\n } catch {\n return false;\n }\n }\n\n private formatMessages(messages: ChatMessage[]): Array<{\n role: string;\n content: string;\n name?: string;\n }> {\n return messages.map(msg => ({\n role: msg.role,\n content: msg.content,\n ...(msg.name && { name: msg.name }),\n }));\n }\n\n private parseToolCalls(toolCalls: unknown): any[] | undefined {\n if (!toolCalls || !Array.isArray(toolCalls)) return undefined;\n \n return toolCalls.map(tc => ({\n id: tc.id || `tc-${Date.now()}`,\n type: 'function' as const,\n function: {\n name: tc.function?.name || '',\n arguments: tc.function?.arguments || '',\n },\n }));\n }\n\n private mapFinishReason(reason: string | undefined): any {\n switch (reason) {\n case 'stop': return 'stop';\n case 'length': return 'length';\n case 'tool_calls': return 'tool_call';\n case 'content_filter': return 'content_filter';\n default: return 'stop';\n }\n }\n\n private handleError(status: number, error: any): ModelError {\n const message = error?.error?.message || `HTTP ${status}`;\n \n switch (status) {\n case 401:\n return this.createError('INVALID_API_KEY', message, error);\n case 429:\n return this.createError('RATE_LIMIT', message, error);\n case 400:\n if (message.includes('context') || message.includes('maximum')) {\n return this.createError('CONTEXT_TOO_LONG', message, error);\n }\n return this.createError('UNKNOWN_ERROR', message, error);\n default:\n return this.createError('UNKNOWN_ERROR', message, error);\n }\n }\n}\n\nexport default OpenAIAdapter;\n","/**\n * Anthropic Claude 适配器\n * 支持 Claude 3 Opus, Claude 3 Sonnet 等模型\n */\n\nimport { BaseAdapter } from './base';\nimport {\n ModelConfig,\n ModelInfo,\n ModelProvider,\n ChatMessage,\n ChatResponse,\n StreamChunk,\n RequestOptions,\n AVAILABLE_MODELS,\n ModelError,\n} from '../../types/model';\n\n// Claude API 响应类型\ninterface ClaudeResponse {\n id?: string;\n content?: Array<{\n type: string;\n text?: string;\n name?: string;\n input?: unknown;\n }>;\n usage?: {\n input_tokens?: number;\n output_tokens?: number;\n };\n stop_reason?: string;\n}\n\nexport class ClaudeAdapter extends BaseAdapter {\n readonly name = 'Claude';\n readonly provider: ModelProvider = 'anthropic';\n readonly models: ModelInfo[] = AVAILABLE_MODELS.filter(\n m => m.provider === 'anthropic'\n );\n\n protected getDefaultEndpoint(): string {\n return 'https://api.anthropic.com/v1';\n }\n\n async sendMessage(\n messages: ChatMessage[],\n options?: RequestOptions\n ): Promise<ChatResponse> {\n const startTime = Date.now();\n \n // Claude API 需要分离 system 消息\n const { system, chatMessages } = this.separateSystemMessage(messages);\n \n const requestBody: Record<string, unknown> = {\n model: this.config!.model,\n messages: this.formatMessages(chatMessages),\n max_tokens: options?.maxTokens ?? this.config!.maxTokens ?? 4096,\n temperature: options?.temperature ?? this.config!.temperature ?? 0.7,\n };\n\n if (system || options?.systemPrompt) {\n requestBody.system = options?.systemPrompt || system;\n }\n\n if (options?.tools) {\n requestBody.tools = this.formatTools(options.tools);\n requestBody.tool_choice = { type: 'auto' };\n }\n\n const response = await this.withRetry(async () => {\n const res = await fetch(`${this.getApiEndpoint()}/messages`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': this.config!.apiKey,\n 'anthropic-version': '2023-06-01',\n },\n body: JSON.stringify(requestBody),\n signal: AbortSignal.timeout(this.getTimeout()),\n });\n\n if (!res.ok) {\n const error = await res.json().catch(() => ({}));\n throw this.handleError(res.status, error);\n }\n\n return res.json() as Promise<ClaudeResponse>;\n });\n\n const latency = Date.now() - startTime;\n \n return {\n id: response.id || `claude-${Date.now()}`,\n model: this.config!.model,\n content: this.extractContent(response.content),\n toolCalls: this.parseToolCalls(response.content),\n usage: this.buildUsage(\n response.usage?.input_tokens || this.countMessagesTokens(messages),\n response.usage?.output_tokens || 0\n ),\n finishReason: this.mapFinishReason(response.stop_reason),\n latency,\n };\n }\n\n async *streamMessage(\n messages: ChatMessage[],\n options?: RequestOptions\n ): AsyncGenerator<StreamChunk> {\n const { system, chatMessages } = this.separateSystemMessage(messages);\n \n const requestBody: Record<string, unknown> = {\n model: this.config!.model,\n messages: this.formatMessages(chatMessages),\n max_tokens: options?.maxTokens ?? this.config!.maxTokens ?? 4096,\n stream: true,\n };\n\n if (system || options?.systemPrompt) {\n requestBody.system = options?.systemPrompt || system;\n }\n\n const response = await fetch(`${this.getApiEndpoint()}/messages`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': this.config!.apiKey,\n 'anthropic-version': '2023-06-01',\n },\n body: JSON.stringify(requestBody),\n signal: AbortSignal.timeout(this.getTimeout()),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw this.handleError(response.status, error);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('无法获取响应流');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || !trimmed.startsWith('data: ')) continue;\n \n try {\n const json = JSON.parse(trimmed.slice(6));\n \n if (json.type === 'content_block_delta') {\n const delta = json.delta?.text || '';\n if (delta) {\n yield {\n id: json.id || `claude-stream-${Date.now()}`,\n model: this.config!.model,\n delta,\n };\n }\n } else if (json.type === 'message_delta') {\n if (json.delta?.stop_reason) {\n yield {\n id: json.id || `claude-stream-${Date.now()}`,\n model: this.config!.model,\n delta: '',\n finishReason: this.mapFinishReason(json.delta.stop_reason),\n };\n }\n }\n } catch {\n // 忽略解析错误\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n async validateApiKey(apiKey: string): Promise<boolean> {\n try {\n const response = await fetch(`${this.getApiEndpoint()}/messages`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n 'anthropic-version': '2023-06-01',\n },\n body: JSON.stringify({\n model: 'claude-3-haiku-20240307',\n max_tokens: 1,\n messages: [{ role: 'user', content: 'hi' }],\n }),\n });\n return response.ok || response.status === 400; // 400 也表示key有效\n } catch {\n return false;\n }\n }\n\n private separateSystemMessage(messages: ChatMessage[]): {\n system: string;\n chatMessages: ChatMessage[];\n } {\n const systemMessages = messages.filter(m => m.role === 'system');\n const chatMessages = messages.filter(m => m.role !== 'system');\n \n return {\n system: systemMessages.map(m => m.content).join('\\n\\n'),\n chatMessages,\n };\n }\n\n private formatMessages(messages: ChatMessage[]): Array<{\n role: 'user' | 'assistant';\n content: string | Array<{ type: string; text?: string; source?: unknown }>;\n }> {\n const formatted: Array<{\n role: 'user' | 'assistant';\n content: string | Array<{ type: string; text?: string }>;\n }> = [];\n\n for (const msg of messages) {\n if (msg.role === 'user' || msg.role === 'assistant') {\n formatted.push({\n role: msg.role,\n content: msg.content,\n });\n }\n }\n\n return formatted;\n }\n\n private formatTools(tools: any[]): any[] {\n return tools.map(tool => ({\n name: tool.function.name,\n description: tool.function.description,\n input_schema: tool.function.parameters,\n }));\n }\n\n private extractContent(content?: ClaudeResponse['content']): string {\n if (!content || !Array.isArray(content)) return '';\n \n return content\n .filter((block) => block.type === 'text')\n .map((block) => block.text || '')\n .join('');\n }\n\n private parseToolCalls(content?: ClaudeResponse['content']): any[] | undefined {\n if (!content || !Array.isArray(content)) return undefined;\n \n const toolUses = content.filter((block) => block.type === 'tool_use');\n \n if (toolUses.length === 0) return undefined;\n \n return toolUses.map((block) => ({\n id: (block as any).id || `tc-${Date.now()}`,\n type: 'function' as const,\n function: {\n name: block.name || '',\n arguments: JSON.stringify(block.input || {}),\n },\n }));\n }\n\n private mapFinishReason(reason: string | undefined): any {\n switch (reason) {\n case 'end_turn': return 'stop';\n case 'max_tokens': return 'length';\n case 'tool_use': return 'tool_call';\n case 'stop_sequence': return 'stop';\n default: return 'stop';\n }\n }\n\n private handleError(status: number, error: any): ModelError {\n const message = error?.error?.message || error?.message || `HTTP ${status}`;\n \n switch (status) {\n case 401:\n return this.createError('INVALID_API_KEY', message, error);\n case 429:\n return this.createError('RATE_LIMIT', message, error);\n case 400:\n if (message.includes('prompt is too long') || message.includes('max_tokens')) {\n return this.createError('CONTEXT_TOO_LONG', message, error);\n }\n return this.createError('UNKNOWN_ERROR', message, error);\n default:\n return this.createError('UNKNOWN_ERROR', message, error);\n }\n }\n}\n\nexport default ClaudeAdapter;\n","/**\n * MCP 服务模块入口\n */\n\n// 类型导出\nexport * from '../../types/mcp';\n\n// 基础类\nexport { MCPAdapterBase } from './base';\n\n// 适配器\nexport { LanhuMCPAdapter } from './lanhu';\nexport { FigmaMCPAdapter } from './figma';\n\n// 管理器\nexport { MCPManager, createMCPManager } from './manager';\n","/**\n * MCP 服务基础类\n * 提供 MCP 协议通信的基础能力\n */\n\nimport { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';\nimport {\n MCPServerConfig,\n MCPToolSchema,\n MCPToolCall,\n MCPToolResult,\n MCPResource,\n MCPResourceContent,\n MCPConnectionStatus,\n IMCPAdapter,\n} from '../../types/mcp';\n\n/**\n * MCP 客户端基类\n */\nexport abstract class MCPAdapterBase implements IMCPAdapter {\n abstract readonly name: string;\n abstract readonly platform: 'lanhu' | 'figma';\n\n protected client: Client | null = null;\n protected transport: StdioClientTransport | null = null;\n protected config: MCPServerConfig | null = null;\n protected connectionStatus: MCPConnectionStatus = 'disconnected';\n protected tools: MCPToolSchema[] = [];\n protected resources: MCPResource[] = [];\n\n /**\n * 初始化适配器\n */\n async initialize(config: MCPServerConfig): Promise<void> {\n this.config = config;\n }\n\n /**\n * 连接到 MCP 服务器\n */\n async connect(): Promise<void> {\n if (!this.config) {\n throw new Error('适配器未初始化,请先调用 initialize()');\n }\n\n this.connectionStatus = 'connecting';\n\n try {\n // 创建传输层\n if (this.config.transport === 'stdio') {\n // 构建环境变量,过滤掉 undefined 值\n const envVars: Record<string, string> = {};\n for (const [key, value] of Object.entries(process.env)) {\n if (value !== undefined) {\n envVars[key] = value;\n }\n }\n if (this.config.env) {\n for (const [key, value] of Object.entries(this.config.env)) {\n if (value !== undefined) {\n envVars[key] = value;\n }\n }\n }\n\n this.transport = new StdioClientTransport({\n command: this.config.command || 'node',\n args: this.config.args || [],\n env: envVars,\n });\n\n // 创建客户端\n this.client = new Client(\n { name: this.name, version: '1.0.0' },\n { capabilities: {} }\n );\n\n // 连接\n await this.client.connect(this.transport);\n } else {\n throw new Error(`不支持的传输类型: ${this.config.transport}`);\n }\n\n // 获取可用工具和资源\n await this.refreshCapabilities();\n\n this.connectionStatus = 'connected';\n } catch (error) {\n this.connectionStatus = 'error';\n throw error;\n }\n }\n\n /**\n * 断开连接\n */\n async disconnect(): Promise<void> {\n if (this.client) {\n await this.client.close();\n this.client = null;\n }\n if (this.transport) {\n this.transport = null;\n }\n this.connectionStatus = 'disconnected';\n this.tools = [];\n this.resources = [];\n }\n\n /**\n * 检查是否已连接\n */\n isConnected(): boolean {\n return this.connectionStatus === 'connected' && this.client !== null;\n }\n\n /**\n * 获取连接状态\n */\n getConnectionStatus(): MCPConnectionStatus {\n return this.connectionStatus;\n }\n\n /**\n * 获取可用工具列表\n */\n async listTools(): Promise<MCPToolSchema[]> {\n if (!this.isConnected() || !this.client) {\n throw new Error('未连接到 MCP 服务器');\n }\n\n const response = await this.client.listTools();\n this.tools = response.tools.map(tool => ({\n name: tool.name,\n description: tool.description || '',\n inputSchema: tool.inputSchema as MCPToolSchema['inputSchema'],\n }));\n\n return this.tools;\n }\n\n /**\n * 调用工具\n */\n async callTool(call: MCPToolCall): Promise<MCPToolResult> {\n if (!this.isConnected() || !this.client) {\n throw new Error('未连接到 MCP 服务器');\n }\n\n const response = await this.client.callTool({\n name: call.name,\n arguments: call.arguments,\n });\n\n // 类型断言处理 SDK 返回值\n const resp = response as {\n content: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n isError?: boolean;\n };\n\n return {\n content: resp.content.map(item => {\n if (item.type === 'text') {\n return { type: 'text' as const, text: item.text || '' };\n }\n if (item.type === 'image') {\n return { type: 'image' as const, data: item.data || '', mimeType: item.mimeType };\n }\n return { type: 'text' as const, text: JSON.stringify(item) };\n }),\n isError: resp.isError,\n };\n }\n\n /**\n * 获取可用资源列表\n */\n async listResources(): Promise<MCPResource[]> {\n if (!this.isConnected() || !this.client) {\n throw new Error('未连接到 MCP 服务器');\n }\n\n const response = await this.client.listResources();\n this.resources = response.resources.map(resource => ({\n uri: resource.uri,\n name: resource.name,\n description: resource.description,\n mimeType: resource.mimeType,\n }));\n\n return this.resources;\n }\n\n /**\n * 读取资源内容\n */\n async readResource(uri: string): Promise<MCPResourceContent> {\n if (!this.isConnected() || !this.client) {\n throw new Error('未连接到 MCP 服务器');\n }\n\n const response = await this.client.readResource({ uri });\n \n // 类型断言处理 SDK 返回值\n const resp = response as {\n contents: Array<{\n uri: string;\n mimeType?: string;\n text?: string;\n blob?: string;\n }>;\n };\n \n const content = resp.contents[0];\n\n return {\n uri: content.uri,\n mimeType: content.mimeType,\n text: content.text,\n blob: content.blob,\n };\n }\n\n /**\n * 刷新能力列表\n */\n protected async refreshCapabilities(): Promise<void> {\n try {\n await this.listTools();\n await this.listResources();\n } catch {\n // 忽略错误,某些服务器可能不支持工具或资源\n }\n }\n\n /**\n * 获取工具\n */\n getTool(name: string): MCPToolSchema | undefined {\n return this.tools.find(t => t.name === name);\n }\n\n /**\n * 检查工具是否可用\n */\n hasTool(name: string): boolean {\n return this.tools.some(t => t.name === name);\n }\n\n // 子类必须实现的抽象方法\n abstract getDesignSpec(url: string): Promise<import('../../types/mcp').DesignSpec>;\n abstract extractStyles(spec: import('../../types/mcp').DesignSpec): Promise<import('../../types/mcp').DesignStyle>;\n abstract generateCode(\n spec: import('../../types/mcp').DesignSpec,\n options?: import('../../types/mcp').CodeGenOptions\n ): Promise<string>;\n}\n\nexport default MCPAdapterBase;\n","/**\n * 蓝湖 MCP 适配器\n * 通过 MCP 协议连接蓝湖设计平台\n */\n\nimport {\n DesignSpec,\n DesignLayer,\n DesignStyle,\n DesignColor,\n DesignTypography,\n DesignAsset,\n MCPServerConfig,\n MCPToolCall,\n CodeGenOptions,\n} from '../../types/mcp';\nimport { MCPAdapterBase } from './base';\n\n/**\n * 蓝湖 MCP 适配器\n * \n * 配置示例:\n * {\n * name: 'lanhu',\n * transport: 'stdio',\n * command: 'npx',\n * args: ['-y', '@lanhu/mcp-server'],\n * env: {\n * LANHU_TOKEN: 'your-token',\n * }\n * }\n */\nexport class LanhuMCPAdapter extends MCPAdapterBase {\n readonly name = 'lanhu';\n readonly platform = 'lanhu' as const;\n\n /**\n * 初始化适配器\n */\n override async initialize(config: MCPServerConfig): Promise<void> {\n if (!config.env?.LANHU_TOKEN && !process.env.LANHU_TOKEN) {\n console.warn('警告: 未设置 LANHU_TOKEN,某些功能可能受限');\n }\n await super.initialize(config);\n }\n\n /**\n * 获取设计稿规格\n */\n async getDesignSpec(url: string): Promise<DesignSpec> {\n if (!this.isConnected()) {\n throw new Error('未连接到蓝湖 MCP 服务器');\n }\n\n // 调用蓝湖 MCP 工具获取设计稿\n const result = await this.callTool({\n name: 'get_design_spec',\n arguments: { url },\n });\n\n if (result.isError) {\n throw new Error(`获取设计稿失败: ${result.content[0]?.text || '未知错误'}`);\n }\n\n // 解析返回的设计规格\n const specData = JSON.parse(result.content[0]?.text || '{}');\n \n return this.parseDesignSpec(specData, url);\n }\n\n /**\n * 解析设计规格\n */\n private parseDesignSpec(data: any, url: string): DesignSpec {\n return {\n id: data.id || this.extractIdFromUrl(url),\n name: data.name || '未命名设计稿',\n platform: 'lanhu',\n url,\n width: data.width || 0,\n height: data.height || 0,\n scale: data.scale || 1,\n layers: this.parseLayers(data.layers || []),\n styles: this.parseStyles(data.styles || {}),\n assets: this.parseAssets(data.assets || []),\n extractedAt: new Date(),\n };\n }\n\n /**\n * 解析图层\n */\n private parseLayers(layers: any[]): DesignLayer[] {\n return layers.map(layer => ({\n id: layer.id || '',\n name: layer.name || '未命名图层',\n type: this.parseLayerType(layer.type),\n x: layer.x || 0,\n y: layer.y || 0,\n width: layer.width || 0,\n height: layer.height || 0,\n visible: layer.visible !== false,\n opacity: layer.opacity ?? 1,\n children: layer.children ? this.parseLayers(layer.children) : undefined,\n styles: layer.styles ? this.parseLayerStyles(layer.styles) : undefined,\n text: layer.text,\n }));\n }\n\n /**\n * 解析图层类型\n */\n private parseLayerType(type: string): DesignLayer['type'] {\n const typeMap: Record<string, DesignLayer['type']> = {\n 'FRAME': 'frame',\n 'GROUP': 'group',\n 'TEXT': 'text',\n 'SHAPE': 'shape',\n 'IMAGE': 'image',\n };\n return typeMap[type?.toUpperCase()] || 'shape';\n }\n\n /**\n * 解析图层样式\n */\n private parseLayerStyles(styles: any): Partial<DesignStyle> {\n const result: Partial<DesignStyle> = {};\n\n if (styles.backgroundColor || styles.fill) {\n result.colors = [{\n value: styles.backgroundColor || styles.fill,\n usage: 'background',\n }];\n }\n\n if (styles.fontSize || styles.fontFamily) {\n result.typography = [{\n fontFamily: styles.fontFamily || 'system-ui',\n fontSize: styles.fontSize || 14,\n fontWeight: styles.fontWeight || 400,\n lineHeight: styles.lineHeight || 1.5,\n letterSpacing: styles.letterSpacing,\n textAlign: styles.textAlign,\n }];\n }\n\n return result;\n }\n\n /**\n * 解析样式\n */\n private parseStyles(styles: any): DesignStyle {\n return {\n colors: this.parseColors(styles.colors || []),\n typography: this.parseTypography(styles.typography || []),\n spacing: styles.spacing || [],\n borders: styles.borders || [],\n shadows: styles.shadows || [],\n };\n }\n\n /**\n * 解析颜色\n */\n private parseColors(colors: any[]): DesignColor[] {\n return colors.map(color => ({\n name: color.name,\n value: color.value || color.hex || '#000000',\n usage: color.usage,\n }));\n }\n\n /**\n * 解析排版\n */\n private parseTypography(typography: any[]): DesignTypography[] {\n return typography.map(typo => ({\n fontFamily: typo.fontFamily || 'system-ui',\n fontSize: typo.fontSize || 14,\n fontWeight: typo.fontWeight || 400,\n lineHeight: typo.lineHeight || 1.5,\n letterSpacing: typo.letterSpacing,\n textAlign: typo.textAlign,\n }));\n }\n\n /**\n * 解析资源\n */\n private parseAssets(assets: any[]): DesignAsset[] {\n return assets.map(asset => ({\n id: asset.id || '',\n name: asset.name || '未命名资源',\n type: this.parseAssetType(asset.type),\n url: asset.url || '',\n width: asset.width,\n height: asset.height,\n format: asset.format,\n }));\n }\n\n /**\n * 解析资源类型\n */\n private parseAssetType(type: string): DesignAsset['type'] {\n const typeMap: Record<string, DesignAsset['type']> = {\n 'IMAGE': 'image',\n 'ICON': 'icon',\n 'SVG': 'svg',\n };\n return typeMap[type?.toUpperCase()] || 'image';\n }\n\n /**\n * 从 URL 提取 ID\n */\n private extractIdFromUrl(url: string): string {\n const match = url.match(/\\/([a-zA-Z0-9]+)(?:\\?|$)/);\n return match ? match[1] : `lanhu-${Date.now()}`;\n }\n\n /**\n * 提取样式\n */\n async extractStyles(spec: DesignSpec): Promise<DesignStyle> {\n // 收集所有颜色和排版样式\n const colors: DesignColor[] = [...spec.styles.colors];\n const typography: DesignTypography[] = [...spec.styles.typography];\n\n // 从图层中提取样式\n const extractFromLayers = (layers: DesignLayer[]) => {\n for (const layer of layers) {\n if (layer.styles?.colors) {\n colors.push(...layer.styles.colors);\n }\n if (layer.styles?.typography) {\n typography.push(...layer.styles.typography);\n }\n if (layer.children) {\n extractFromLayers(layer.children);\n }\n }\n };\n\n extractFromLayers(spec.layers);\n\n // 去重\n const uniqueColors = this.deduplicateColors(colors);\n const uniqueTypography = this.deduplicateTypography(typography);\n\n return {\n colors: uniqueColors,\n typography: uniqueTypography,\n spacing: spec.styles.spacing,\n borders: spec.styles.borders,\n shadows: spec.styles.shadows,\n };\n }\n\n /**\n * 颜色去重\n */\n private deduplicateColors(colors: DesignColor[]): DesignColor[] {\n const seen = new Set<string>();\n return colors.filter(color => {\n const key = color.value.toLowerCase();\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n }\n\n /**\n * 排版去重\n */\n private deduplicateTypography(typography: DesignTypography[]): DesignTypography[] {\n const seen = new Set<string>();\n return typography.filter(typo => {\n const key = `${typo.fontFamily}-${typo.fontSize}-${typo.fontWeight}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n }\n\n /**\n * 生成代码\n */\n async generateCode(\n spec: DesignSpec,\n options: CodeGenOptions = {}\n ): Promise<string> {\n const {\n framework = 'react',\n styleType = 'css',\n typescript = true,\n } = options;\n\n // 如果 MCP 服务器支持代码生成工具\n if (this.hasTool('generate_code')) {\n const result = await this.callTool({\n name: 'generate_code',\n arguments: {\n spec: JSON.stringify(spec),\n framework,\n styleType,\n typescript,\n },\n });\n\n if (!result.isError && result.content[0]?.text) {\n return result.content[0].text;\n }\n }\n\n // 本地代码生成\n return this.generateCodeLocally(spec, options);\n }\n\n /**\n * 本地代码生成\n */\n private generateCodeLocally(\n spec: DesignSpec,\n options: CodeGenOptions\n ): string {\n const { framework = 'react', styleType = 'css', typescript = true } = options;\n\n const componentName = this.toComponentName(spec.name);\n const ext = typescript ? 'tsx' : 'jsx';\n\n // 生成样式\n const styleCode = this.generateStyleCode(spec, styleType, componentName);\n\n // 生成组件\n const componentCode = this.generateComponentCode(spec, {\n framework,\n styleType,\n componentName,\n typescript,\n });\n\n if (styleType === 'tailwind') {\n return componentCode;\n }\n\n return `${styleCode}\\n\\n${componentCode}`;\n }\n\n /**\n * 生成样式代码\n */\n private generateStyleCode(\n spec: DesignSpec,\n styleType: string,\n componentName: string\n ): string {\n if (styleType === 'tailwind') {\n return '';\n }\n\n if (styleType === 'styled-components') {\n return `import styled from 'styled-components';\n\nexport const Container = styled.div\\`\n width: ${spec.width}px;\n height: ${spec.height}px;\n position: relative;\n\\`;`;\n }\n\n const selector = styleType === 'scss' ? `.${componentName}` : `.${componentName}`;\n\n return `${styleType === 'scss' ? '' : '/* styles.css */'}\n${selector} {\n width: ${spec.width}px;\n height: ${spec.height}px;\n position: relative;\n}`;\n }\n\n /**\n * 生成组件代码\n */\n private generateComponentCode(\n spec: DesignSpec,\n options: {\n framework: string;\n styleType: string;\n componentName: string;\n typescript: boolean;\n }\n ): string {\n const { componentName, styleType, typescript } = options;\n const propsType = typescript ? ': React.FC' : '';\n\n const imports = this.generateImports(styleType, componentName);\n const layers = this.generateLayersCode(spec.layers, styleType);\n\n return `${imports}\n\nexport const ${componentName}${propsType} = () => {\n return (\n <div className=\"${styleType === 'tailwind' ? 'relative' : componentName}\"${styleType === 'styled-components' ? ' as={Container}' : ''}>\n${layers}\n </div>\n );\n};\n\nexport default ${componentName};`;\n }\n\n /**\n * 生成导入语句\n */\n private generateImports(styleType: string, componentName: string): string {\n const imports: string[] = [\"import React from 'react';\"];\n\n if (styleType === 'styled-components') {\n imports.push(`import { Container } from './styles';`);\n } else if (styleType === 'css' || styleType === 'scss') {\n imports.push(`import './styles.${styleType === 'scss' ? 'scss' : 'css'}';`);\n }\n\n return imports.join('\\n');\n }\n\n /**\n * 生成图层代码\n */\n private generateLayersCode(layers: DesignLayer[], styleType: string): string {\n return layers.map(layer => {\n const style = styleType === 'tailwind'\n ? this.generateTailwindClasses(layer)\n : this.generateInlineStyles(layer);\n\n const children = layer.children\n ? this.generateLayersCode(layer.children, styleType)\n : '';\n\n if (layer.type === 'text' && layer.text) {\n return ` <span style={${style}}>${layer.text}</span>`;\n }\n\n if (layer.type === 'image') {\n const asset = layer.name;\n return ` <img src=\"/assets/${asset}\" alt=\"${layer.name}\" style={${style}} />`;\n }\n\n const tag = layer.type === 'group' ? 'div' : 'div';\n const className = styleType === 'tailwind' ? ` className=\"${style}\"` : ` style={${style}}`;\n\n return children\n ? ` <${tag}${className}>\\n${children}\\n </${tag}>`\n : ` <${tag}${className} />`;\n }).join('\\n');\n }\n\n /**\n * 生成 Tailwind 类名\n */\n private generateTailwindClasses(layer: DesignLayer): string {\n const classes: string[] = ['absolute'];\n\n classes.push(`left-[${layer.x}px]`);\n classes.push(`top-[${layer.y}px]`);\n classes.push(`w-[${layer.width}px]`);\n classes.push(`h-[${layer.height}px]`);\n\n return classes.join(' ');\n }\n\n /**\n * 生成内联样式\n */\n private generateInlineStyles(layer: DesignLayer): string {\n const styles: string[] = [\n `position: 'absolute'`,\n `left: ${layer.x}`,\n `top: ${layer.y}`,\n `width: ${layer.width}`,\n `height: ${layer.height}`,\n ];\n\n return `{ ${styles.join(', ')} }`;\n }\n\n /**\n * 转换为组件名\n */\n private toComponentName(name: string): string {\n return name\n .replace(/[^a-zA-Z0-9\\u4e00-\\u9fa5]/g, ' ')\n .split(/\\s+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join('')\n .replace(/[\\u4e00-\\u9fa5]/g, '') || 'Component';\n }\n}\n\nexport default LanhuMCPAdapter;\n","/**\n * Figma MCP 适配器\n * 通过 MCP 协议连接 Figma 设计平台\n */\n\nimport {\n DesignSpec,\n DesignLayer,\n DesignStyle,\n DesignColor,\n DesignTypography,\n DesignAsset,\n MCPServerConfig,\n CodeGenOptions,\n} from '../../types/mcp';\nimport { MCPAdapterBase } from './base';\n\n/**\n * Figma MCP 适配器\n * \n * 配置示例:\n * {\n * name: 'figma',\n * transport: 'stdio',\n * command: 'npx',\n * args: ['-y', '@figma/mcp-server'],\n * env: {\n * FIGMA_ACCESS_TOKEN: 'your-token',\n * }\n * }\n */\nexport class FigmaMCPAdapter extends MCPAdapterBase {\n readonly name = 'figma';\n readonly platform = 'figma' as const;\n\n /**\n * 初始化适配器\n */\n override async initialize(config: MCPServerConfig): Promise<void> {\n if (!config.env?.FIGMA_ACCESS_TOKEN && !process.env.FIGMA_ACCESS_TOKEN) {\n console.warn('警告: 未设置 FIGMA_ACCESS_TOKEN,某些功能可能受限');\n }\n await super.initialize(config);\n }\n\n /**\n * 获取设计稿规格\n */\n async getDesignSpec(url: string): Promise<DesignSpec> {\n if (!this.isConnected()) {\n throw new Error('未连接到 Figma MCP 服务器');\n }\n\n // 解析 Figma URL 获取 file key 和 node id\n const { fileKey, nodeId } = this.parseFigmaUrl(url);\n\n // 调用 Figma MCP 工具获取设计稿\n const result = await this.callTool({\n name: 'get_figma_design',\n arguments: { fileKey, nodeId },\n });\n\n if (result.isError) {\n throw new Error(`获取设计稿失败: ${result.content[0]?.text || '未知错误'}`);\n }\n\n // 解析返回的设计规格\n const specData = JSON.parse(result.content[0]?.text || '{}');\n \n return this.parseDesignSpec(specData, url, fileKey, nodeId);\n }\n\n /**\n * 解析 Figma URL\n */\n private parseFigmaUrl(url: string): { fileKey: string; nodeId: string } {\n // Figma URL 格式: https://www.figma.com/file/{fileKey}/{fileName}?node-id={nodeId}\n const fileMatch = url.match(/\\/file\\/([a-zA-Z0-9]+)/);\n const nodeMatch = url.match(/node-id=([a-zA-Z0-9-]+)/);\n\n if (!fileMatch) {\n throw new Error('无效的 Figma URL: 无法解析 file key');\n }\n\n return {\n fileKey: fileMatch[1],\n nodeId: nodeMatch ? nodeMatch[1].replace('-', ':') : '',\n };\n }\n\n /**\n * 解析设计规格\n */\n private parseDesignSpec(\n data: any,\n url: string,\n fileKey: string,\n nodeId: string\n ): DesignSpec {\n const document = data.document || data;\n \n return {\n id: nodeId || fileKey,\n name: document.name || '未命名设计稿',\n platform: 'figma',\n url,\n width: document.absoluteBoundingBox?.width || 0,\n height: document.absoluteBoundingBox?.height || 0,\n scale: 1,\n layers: this.parseFigmaLayers(document.children || []),\n styles: this.extractStylesFromDocument(document),\n assets: this.parseAssets(data.assets || []),\n extractedAt: new Date(),\n };\n }\n\n /**\n * 解析 Figma 图层\n */\n private parseFigmaLayers(nodes: any[]): DesignLayer[] {\n return nodes.map(node => {\n const bbox = node.absoluteBoundingBox || node.boundingBox || {};\n \n return {\n id: node.id,\n name: node.name || '未命名图层',\n type: this.mapFigmaNodeType(node.type),\n x: bbox.x || 0,\n y: bbox.y || 0,\n width: bbox.width || 0,\n height: bbox.height || 0,\n visible: node.visible !== false,\n opacity: node.opacity ?? 1,\n children: node.children ? this.parseFigmaLayers(node.children) : undefined,\n styles: this.extractLayerStyles(node),\n text: node.characters || undefined,\n };\n });\n }\n\n /**\n * 映射 Figma 节点类型\n */\n private mapFigmaNodeType(type: string): DesignLayer['type'] {\n const typeMap: Record<string, DesignLayer['type']> = {\n 'FRAME': 'frame',\n 'GROUP': 'group',\n 'TEXT': 'text',\n 'RECTANGLE': 'shape',\n 'ELLIPSE': 'shape',\n 'VECTOR': 'shape',\n 'LINE': 'shape',\n 'IMAGE': 'image',\n };\n return typeMap[type?.toUpperCase()] || 'shape';\n }\n\n /**\n * 提取图层样式\n */\n private extractLayerStyles(node: any): Partial<DesignStyle> | undefined {\n const styles: Partial<DesignStyle> = {};\n\n // 填充颜色\n if (node.fills && node.fills.length > 0) {\n const fill = node.fills[0];\n if (fill.type === 'SOLID' && fill.color) {\n styles.colors = [{\n value: this.rgbaToHex(fill.color, fill.opacity),\n usage: 'fill',\n }];\n }\n }\n\n // 描边\n if (node.strokes && node.strokes.length > 0) {\n const stroke = node.strokes[0];\n if (stroke.type === 'SOLID' && stroke.color) {\n styles.borders = [{\n width: node.strokeWeight || 1,\n style: 'solid',\n color: this.rgbaToHex(stroke.color, stroke.opacity),\n radius: node.cornerRadius,\n }];\n }\n }\n\n // 文字样式\n if (node.style) {\n styles.typography = [{\n fontFamily: node.style.fontFamily || 'Inter',\n fontSize: node.style.fontSize || 14,\n fontWeight: node.style.fontWeight || 400,\n lineHeight: node.style.lineHeightPx\n ? node.style.lineHeightPx / (node.style.fontSize || 14)\n : 1.5,\n letterSpacing: node.style.letterSpacing,\n textAlign: node.style.textAlignHorizontal?.toLowerCase() as any,\n }];\n }\n\n // 阴影\n if (node.effects && node.effects.length > 0) {\n const shadows = node.effects\n .filter((e: any) => e.type === 'DROP_SHADOW' && e.visible !== false)\n .map((e: any) => ({\n type: 'box' as const,\n x: e.offset?.x || 0,\n y: e.offset?.y || 0,\n blur: e.radius || 0,\n spread: e.spread || 0,\n color: this.rgbaToHex(e.color, 1),\n }));\n if (shadows.length > 0) {\n styles.shadows = shadows;\n }\n }\n\n return Object.keys(styles).length > 0 ? styles : undefined;\n }\n\n /**\n * 从文档提取全局样式\n */\n private extractStylesFromDocument(document: any): DesignStyle {\n const styles: DesignStyle = {\n colors: [],\n typography: [],\n spacing: [],\n borders: [],\n shadows: [],\n };\n\n // 递归提取所有样式\n const traverse = (node: any) => {\n const layerStyles = this.extractLayerStyles(node);\n if (layerStyles?.colors) {\n styles.colors.push(...layerStyles.colors);\n }\n if (layerStyles?.typography) {\n styles.typography.push(...layerStyles.typography);\n }\n if (layerStyles?.borders) {\n styles.borders.push(...layerStyles.borders);\n }\n if (layerStyles?.shadows) {\n styles.shadows.push(...layerStyles.shadows);\n }\n\n if (node.children) {\n node.children.forEach(traverse);\n }\n };\n\n traverse(document);\n\n // 去重\n styles.colors = this.deduplicateColors(styles.colors);\n styles.typography = this.deduplicateTypography(styles.typography);\n\n return styles;\n }\n\n /**\n * RGBA 转 Hex\n */\n private rgbaToHex(color: { r: number; g: number; b: number }, opacity?: number): string {\n const r = Math.round(color.r * 255);\n const g = Math.round(color.g * 255);\n const b = Math.round(color.b * 255);\n const a = opacity !== undefined ? Math.round(opacity * 255) : 255;\n\n if (a < 255) {\n return `rgba(${r}, ${g}, ${b}, ${(a / 255).toFixed(2)})`;\n }\n\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\n }\n\n /**\n * 解析资源\n */\n private parseAssets(assets: any[]): DesignAsset[] {\n return assets.map(asset => ({\n id: asset.id || '',\n name: asset.name || '未命名资源',\n type: this.mapAssetType(asset.contentType),\n url: asset.url || '',\n width: asset.width,\n height: asset.height,\n format: asset.format,\n }));\n }\n\n /**\n * 映射资源类型\n */\n private mapAssetType(contentType: string): DesignAsset['type'] {\n if (contentType?.includes('svg')) return 'svg';\n if (contentType?.includes('icon')) return 'icon';\n return 'image';\n }\n\n /**\n * 颜色去重\n */\n private deduplicateColors(colors: DesignColor[]): DesignColor[] {\n const seen = new Set<string>();\n return colors.filter(color => {\n const key = color.value.toLowerCase();\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n }\n\n /**\n * 排版去重\n */\n private deduplicateTypography(typography: DesignTypography[]): DesignTypography[] {\n const seen = new Set<string>();\n return typography.filter(typo => {\n const key = `${typo.fontFamily}-${typo.fontSize}-${typo.fontWeight}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n }\n\n /**\n * 提取样式\n */\n async extractStyles(spec: DesignSpec): Promise<DesignStyle> {\n // 如果 MCP 服务器支持样式提取\n if (this.hasTool('extract_styles')) {\n const result = await this.callTool({\n name: 'extract_styles',\n arguments: { specId: spec.id },\n });\n\n if (!result.isError && result.content[0]?.text) {\n return JSON.parse(result.content[0].text);\n }\n }\n\n // 使用已提取的样式\n return spec.styles;\n }\n\n /**\n * 生成代码\n */\n async generateCode(\n spec: DesignSpec,\n options: CodeGenOptions = {}\n ): Promise<string> {\n const {\n framework = 'react',\n styleType = 'css',\n typescript = true,\n } = options;\n\n // 如果 MCP 服务器支持代码生成\n if (this.hasTool('generate_code')) {\n const result = await this.callTool({\n name: 'generate_code',\n arguments: {\n specId: spec.id,\n framework,\n styleType,\n typescript,\n },\n });\n\n if (!result.isError && result.content[0]?.text) {\n return result.content[0].text;\n }\n }\n\n // 本地代码生成(复用蓝湖的实现)\n return this.generateCodeLocally(spec, options);\n }\n\n /**\n * 本地代码生成\n */\n private generateCodeLocally(\n spec: DesignSpec,\n options: CodeGenOptions\n ): string {\n const { framework = 'react', styleType = 'css', typescript = true } = options;\n\n const componentName = this.toComponentName(spec.name);\n const imports = this.generateImports(styleType);\n const propsType = typescript ? ': React.FC' : '';\n\n // 生成 JSX\n const jsx = this.generateJSX(spec.layers, styleType, 2);\n\n if (styleType === 'tailwind') {\n return `${imports}\n\nexport const ${componentName}${propsType} = () => {\n return (\n <div className=\"relative w-[${spec.width}px] h-[${spec.height}px]\">\n${jsx}\n </div>\n );\n};\n\nexport default ${componentName};`;\n }\n\n if (styleType === 'styled-components') {\n const styledComponents = this.generateStyledComponents(spec);\n return `${imports}\n${styledComponents}\n\nexport const ${componentName}${propsType} = () => {\n return (\n <Container>\n${jsx}\n </Container>\n );\n};\n\nexport default ${componentName};`;\n }\n\n const cssStyles = this.generateCSSStyles(spec, componentName);\n return `/* styles.css */\n${cssStyles}\n\n/* ${componentName}.tsx */\n${imports}\nimport './styles.css';\n\nexport const ${componentName}${propsType} = () => {\n return (\n <div className=\"${componentName}\">\n${jsx}\n </div>\n );\n};\n\nexport default ${componentName};`;\n }\n\n /**\n * 生成导入语句\n */\n private generateImports(styleType: string): string {\n return \"import React from 'react';\";\n }\n\n /**\n * 生成 JSX\n */\n private generateJSX(\n layers: DesignLayer[],\n styleType: string,\n indent: number\n ): string {\n const spaces = ' '.repeat(indent);\n\n return layers.map(layer => {\n const style = styleType === 'tailwind'\n ? this.generateTailwindStyle(layer)\n : styleType === 'styled-components'\n ? ''\n : ` style={${this.generateInlineStyle(layer)}}`;\n\n const className = styleType === 'tailwind' ? ` className=\"${this.generateTailwindStyle(layer)}\"` : '';\n\n if (layer.type === 'text' && layer.text) {\n return `${spaces}<span${className}${style}>${layer.text}</span>`;\n }\n\n const children = layer.children\n ? `\\n${this.generateJSX(layer.children, styleType, indent + 2)}\\n${spaces}`\n : '';\n\n return `${spaces}<div${className}${style}>${children}</div>`;\n }).join('\\n');\n }\n\n /**\n * 生成 Tailwind 样式类\n */\n private generateTailwindStyle(layer: DesignLayer): string {\n const classes = ['absolute', `left-[${layer.x}px]`, `top-[${layer.y}px]`, `w-[${layer.width}px]`, `h-[${layer.height}px]`];\n \n if (layer.styles?.colors?.[0]) {\n const color = layer.styles.colors[0].value;\n if (color.startsWith('#')) {\n classes.push(`bg-[${color}]`);\n }\n }\n\n return classes.join(' ');\n }\n\n /**\n * 生成内联样式\n */\n private generateInlineStyle(layer: DesignLayer): string {\n const styles: string[] = [\n `position: 'absolute'`,\n `left: ${layer.x}`,\n `top: ${layer.y}`,\n `width: ${layer.width}`,\n `height: ${layer.height}`,\n ];\n\n if (layer.styles?.colors?.[0]) {\n styles.push(`backgroundColor: '${layer.styles.colors[0].value}'`);\n }\n\n return `{ ${styles.join(', ')} }`;\n }\n\n /**\n * 生成 Styled Components\n */\n private generateStyledComponents(spec: DesignSpec): string {\n return `import styled from 'styled-components';\n\nconst Container = styled.div\\`\n position: relative;\n width: ${spec.width}px;\n height: ${spec.height}px;\n\\`;`;\n }\n\n /**\n * 生成 CSS 样式\n */\n private generateCSSStyles(spec: DesignSpec, componentName: string): string {\n return `.${componentName} {\n position: relative;\n width: ${spec.width}px;\n height: ${spec.height}px;\n}`;\n }\n\n /**\n * 转换为组件名\n */\n private toComponentName(name: string): string {\n return name\n .replace(/[^a-zA-Z0-9\\s]/g, '')\n .split(/\\s+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('') || 'Component';\n }\n}\n\nexport default FigmaMCPAdapter;\n","/**\n * MCP 服务管理器\n * 统一管理所有 MCP 服务连接\n */\n\nimport {\n MCPServerConfig,\n MCPClientConfig,\n MCPConnectionState,\n MCPConnectionStatus,\n MCPToolSchema,\n MCPToolCall,\n MCPToolResult,\n IMCPAdapter,\n DesignSpec,\n DesignStyle,\n CodeGenOptions,\n} from '../../types/mcp';\nimport { MCPAdapterBase } from './base';\nimport { LanhuMCPAdapter } from './lanhu';\nimport { FigmaMCPAdapter } from './figma';\n\n/**\n * MCP 管理器\n */\nexport class MCPManager {\n private adapters: Map<string, IMCPAdapter> = new Map();\n private connectionStates: Map<string, MCPConnectionState> = new Map();\n private configs: Map<string, MCPServerConfig> = new Map();\n\n constructor() {}\n\n /**\n * 注册 MCP 服务器\n */\n async registerServer(config: MCPServerConfig): Promise<void> {\n if (this.adapters.has(config.name)) {\n throw new Error(`MCP 服务器已注册: ${config.name}`);\n }\n\n // 创建适配器实例\n const adapter = this.createAdapter(config);\n await adapter.initialize(config);\n\n this.adapters.set(config.name, adapter);\n this.configs.set(config.name, config);\n\n // 初始化连接状态\n this.connectionStates.set(config.name, {\n serverName: config.name,\n status: 'disconnected',\n toolsAvailable: [],\n resourcesAvailable: [],\n });\n }\n\n /**\n * 创建适配器\n */\n private createAdapter(config: MCPServerConfig): IMCPAdapter {\n // 根据配置名称推断平台类型\n if (config.name.includes('lanhu') || config.name === '蓝湖') {\n return new LanhuMCPAdapter();\n }\n if (config.name.includes('figma')) {\n return new FigmaMCPAdapter();\n }\n\n // 默认使用通用适配器\n return new GenericMCPAdapter(config.name);\n }\n\n /**\n * 连接到指定服务器\n */\n async connect(serverName: string): Promise<void> {\n const adapter = this.adapters.get(serverName);\n if (!adapter) {\n throw new Error(`未找到 MCP 服务器: ${serverName}`);\n }\n\n const state = this.connectionStates.get(serverName)!;\n state.status = 'connecting';\n\n try {\n await adapter.connect();\n state.status = 'connected';\n state.lastConnected = new Date();\n state.toolsAvailable = (await adapter.listTools()).map(t => t.name);\n state.resourcesAvailable = (await adapter.listResources()).map(r => r.name);\n } catch (error) {\n state.status = 'error';\n state.error = (error as Error).message;\n throw error;\n }\n }\n\n /**\n * 连接所有服务器\n */\n async connectAll(): Promise<Map<string, Error | null>> {\n const results = new Map<string, Error | null>();\n\n for (const [name] of this.adapters) {\n try {\n await this.connect(name);\n results.set(name, null);\n } catch (error) {\n results.set(name, error as Error);\n }\n }\n\n return results;\n }\n\n /**\n * 断开指定服务器\n */\n async disconnect(serverName: string): Promise<void> {\n const adapter = this.adapters.get(serverName);\n if (!adapter) return;\n\n await adapter.disconnect();\n\n const state = this.connectionStates.get(serverName);\n if (state) {\n state.status = 'disconnected';\n state.toolsAvailable = [];\n state.resourcesAvailable = [];\n }\n }\n\n /**\n * 断开所有服务器\n */\n async disconnectAll(): Promise<void> {\n for (const [name] of this.adapters) {\n await this.disconnect(name);\n }\n }\n\n /**\n * 获取连接状态\n */\n getConnectionState(serverName: string): MCPConnectionState | undefined {\n return this.connectionStates.get(serverName);\n }\n\n /**\n * 获取所有连接状态\n */\n getAllConnectionStates(): MCPConnectionState[] {\n return Array.from(this.connectionStates.values());\n }\n\n /**\n * 获取适配器\n */\n getAdapter(serverName: string): IMCPAdapter | undefined {\n return this.adapters.get(serverName);\n }\n\n /**\n * 获取蓝湖适配器\n */\n getLanhuAdapter(): LanhuMCPAdapter | undefined {\n for (const adapter of this.adapters.values()) {\n if (adapter.platform === 'lanhu') {\n return adapter as LanhuMCPAdapter;\n }\n }\n return undefined;\n }\n\n /**\n * 获取 Figma 适配器\n */\n getFigmaAdapter(): FigmaMCPAdapter | undefined {\n for (const adapter of this.adapters.values()) {\n if (adapter.platform === 'figma') {\n return adapter as FigmaMCPAdapter;\n }\n }\n return undefined;\n }\n\n /**\n * 调用工具\n */\n async callTool(\n serverName: string,\n call: MCPToolCall\n ): Promise<MCPToolResult> {\n const adapter = this.adapters.get(serverName);\n if (!adapter) {\n throw new Error(`未找到 MCP 服务器: ${serverName}`);\n }\n\n if (!adapter.isConnected()) {\n throw new Error(`MCP 服务器未连接: ${serverName}`);\n }\n\n return adapter.callTool(call);\n }\n\n /**\n * 获取设计稿\n */\n async getDesignSpec(url: string): Promise<DesignSpec> {\n // 根据URL判断使用哪个平台\n if (url.includes('lanhuapp.com') || url.includes('蓝湖')) {\n const adapter = this.getLanhuAdapter();\n if (!adapter || !adapter.isConnected()) {\n throw new Error('蓝湖 MCP 服务未连接');\n }\n return adapter.getDesignSpec(url);\n }\n\n if (url.includes('figma.com')) {\n const adapter = this.getFigmaAdapter();\n if (!adapter || !adapter.isConnected()) {\n throw new Error('Figma MCP 服务未连接');\n }\n return adapter.getDesignSpec(url);\n }\n\n throw new Error(`不支持的设计平台 URL: ${url}`);\n }\n\n /**\n * 生成代码\n */\n async generateCode(\n spec: DesignSpec,\n options?: CodeGenOptions\n ): Promise<string> {\n let adapter: IMCPAdapter | undefined;\n\n if (spec.platform === 'lanhu') {\n adapter = this.getLanhuAdapter();\n } else if (spec.platform === 'figma') {\n adapter = this.getFigmaAdapter();\n }\n\n if (!adapter || !adapter.isConnected()) {\n throw new Error(`${spec.platform} MCP 服务未连接`);\n }\n\n return adapter.generateCode(spec, options);\n }\n\n /**\n * 列出所有可用工具\n */\n listAllTools(): Map<string, MCPToolSchema[]> {\n const result = new Map<string, MCPToolSchema[]>();\n\n for (const [name, adapter] of this.adapters) {\n if (adapter.isConnected()) {\n const state = this.connectionStates.get(name);\n if (state) {\n // 这里需要重新获取完整工具信息\n adapter.listTools().then(tools => {\n result.set(name, tools);\n }).catch(() => {\n result.set(name, []);\n });\n }\n }\n }\n\n return result;\n }\n\n /**\n * 检查服务器是否可用\n */\n isServerAvailable(serverName: string): boolean {\n const adapter = this.adapters.get(serverName);\n return adapter?.isConnected() ?? false;\n }\n\n /**\n * 获取已注册的服务器列表\n */\n getRegisteredServers(): string[] {\n return Array.from(this.adapters.keys());\n }\n}\n\n/**\n * 通用 MCP 适配器(用于未知平台)\n */\nclass GenericMCPAdapter extends MCPAdapterBase {\n constructor(serverName: string) {\n super();\n this._name = serverName;\n this._platform = 'lanhu'; // 默认值\n }\n\n private _name: string = '';\n private _platform: 'lanhu' | 'figma' = 'lanhu';\n\n get name(): string {\n return this._name;\n }\n\n get platform(): 'lanhu' | 'figma' {\n return this._platform;\n }\n\n async getDesignSpec(url: string): Promise<DesignSpec> {\n throw new Error('通用适配器不支持设计稿获取');\n }\n\n async extractStyles(spec: DesignSpec): Promise<DesignStyle> {\n throw new Error('通用适配器不支持样式提取');\n }\n\n async generateCode(spec: DesignSpec, options?: CodeGenOptions): Promise<string> {\n throw new Error('通用适配器不支持代码生成');\n }\n}\n\n/**\n * 创建 MCP 管理器实例\n */\nexport function createMCPManager(): MCPManager {\n return new MCPManager();\n}\n\nexport default MCPManager;\n","/**\n * Agent 运行器\n * 简化的 Agent 调度入口,提供统一的 Agent 执行接口\n */\n\nimport chalk from 'chalk';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { AgentId, AgentDefinition, AgentExecutionContext, AgentExecutionResult, ProjectContext } from '../types/agent';\nimport { ExecutorContext } from '../cli/executor';\nimport { getAgentDefinition, getAllAgents, getAgentsForWorkflowStep } from './definitions';\n\n// 简单的结果类型(向后兼容)\nexport interface AgentResult {\n output: string;\n contextUsed: number;\n}\n\n/**\n * 加载项目上下文\n */\nasync function loadProjectContext(workingDirectory: string): Promise<ProjectContext> {\n const context: ProjectContext = {\n agentsMd: '',\n configYaml: '',\n devStandards: '',\n };\n\n try {\n context.agentsMd = await fs.readFile(path.join(workingDirectory, 'AGENTS.md'), 'utf-8');\n } catch { /* ignore */ }\n\n try {\n context.configYaml = await fs.readFile(path.join(workingDirectory, 'openspec', 'config.yaml'), 'utf-8');\n } catch { /* ignore */ }\n\n try {\n context.devStandards = await fs.readFile(path.join(workingDirectory, '.sf-cli', 'norms', 'devstanded.md'), 'utf-8');\n } catch { /* ignore */ }\n\n return context;\n}\n\n/**\n * 运行 Agent(简化版)\n */\nexport async function runAgent(\n agentId: string,\n args: string[],\n ctx: ExecutorContext\n): Promise<AgentResult> {\n const agent = getAgentDefinition(agentId as AgentId);\n \n if (!agent) {\n return {\n output: chalk.red(`未知的Agent: ${agentId}`) +\n chalk.gray('\\n内置Agent: ') +\n chalk.cyan('frontend-dev, code-reviewer, architect, tester'),\n contextUsed: 0,\n };\n }\n\n // 加载项目上下文\n const projectContext = await loadProjectContext(ctx.options.workingDirectory);\n\n // 构建执行上下文\n const context: AgentExecutionContext = {\n taskId: `task-${Date.now()}`,\n requirement: args.join(' ') || '无具体需求描述',\n context: ctx.contextManager?.getStatusString() || undefined,\n norms: ctx.normsManager?.getEffectiveStandards().map((n: { description: string }) => n.description) || [],\n files: [],\n projectContext, // 注入项目上下文\n };\n\n // 检查模型是否配置\n if (!ctx.modelService?.getCurrentModel()) {\n return {\n output: chalk.yellow('模型未配置') +\n chalk.gray('\\n请先使用 ') +\n chalk.cyan('/model') +\n chalk.gray(' 命令配置AI模型'),\n contextUsed: 0,\n };\n }\n\n try {\n // 使用简化的执行逻辑\n const messages = buildSimpleMessages(agent, context);\n const response = await ctx.modelService.sendMessage(messages, {\n agent: agentId,\n temperature: 0.7,\n maxTokens: 4096,\n });\n\n return {\n output: formatAgentOutput(agent, response.content),\n contextUsed: response.usage.inputTokens + response.usage.outputTokens,\n };\n } catch (error) {\n const err = error as Error;\n return {\n output: chalk.red(`执行失败: ${err.message}`),\n contextUsed: 0,\n };\n }\n}\n\n/**\n * 获取 Agent 定义\n */\nexport function getAgent(agentId: AgentId): AgentDefinition | undefined {\n return getAgentDefinition(agentId);\n}\n\n/**\n * 列出所有 Agent\n */\nexport function listAgents(): AgentDefinition[] {\n return getAllAgents();\n}\n\n/**\n * 获取工作流阶段对应的 Agent\n */\nexport function getAgentsForStep(step: string): AgentDefinition[] {\n return getAgentsForWorkflowStep(step);\n}\n\n// ==================== 私有辅助函数 ====================\n\n/**\n * 构建简单的消息列表\n */\nfunction buildSimpleMessages(\n agent: AgentDefinition,\n context: AgentExecutionContext\n): Array<{ role: 'system' | 'user' | 'assistant'; content: string }> {\n const messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }> = [];\n\n // 系统提示(注入项目上下文)\n let systemPrompt = agent.systemPrompt;\n \n if (context.projectContext) {\n systemPrompt += '\\n\\n---\\n\\n## 项目上下文(必须阅读)\\n\\n';\n \n if (context.projectContext.agentsMd) {\n systemPrompt += `### AGENTS.md 项目文档\\n\\n${summarizeContext(context.projectContext.agentsMd, 2000)}\\n\\n`;\n }\n \n if (context.projectContext.configYaml) {\n systemPrompt += `### config.yaml 项目配置\\n\\n\\`\\`\\`yaml\\n${context.projectContext.configYaml}\\n\\`\\`\\`\\n\\n`;\n }\n }\n\n messages.push({\n role: 'system',\n content: systemPrompt,\n });\n\n // 任务提示(注入规范)\n let taskPrompt = agent.taskPromptTemplate\n .replace('{{requirement}}', context.requirement)\n .replace('{{context}}', context.context || '无额外上下文')\n .replace('{{norms}}', buildNormsText(context))\n .replace('{{files}}', context.files?.join('\\n') || '暂无相关文件')\n .replace('{{previousOutput}}', context.previousOutput || '无上一步输出');\n\n messages.push({\n role: 'user',\n content: taskPrompt,\n });\n\n return messages;\n}\n\n/**\n * 构建规范文本\n */\nfunction buildNormsText(context: AgentExecutionContext): string {\n let normsText = '';\n \n // 注入 devstanded.md 规范(强制参考)\n if (context.projectContext?.devStandards) {\n normsText += '## 项目开发规范 (devstanded.md) - 必须遵循\\n\\n';\n normsText += extractKeyStandards(context.projectContext.devStandards);\n }\n \n // 追加额外规范\n if (context.norms?.length) {\n normsText += '\\n\\n## 额外规范要求\\n\\n' + context.norms.join('\\n');\n }\n \n return normsText || '暂无特定规范要求';\n}\n\n/**\n * 摘要上下文(限制长度)\n */\nfunction summarizeContext(content: string, maxLength: number): string {\n if (content.length <= maxLength) {\n return content;\n }\n \n const lines = content.split('\\n');\n const summary: string[] = [];\n let currentLength = 0;\n \n for (const line of lines) {\n if (currentLength + line.length + 1 > maxLength) {\n break;\n }\n summary.push(line);\n currentLength += line.length + 1;\n }\n \n return summary.join('\\n') + '\\n\\n... (内容已截断,请阅读完整文档了解详情)';\n}\n\n/**\n * 提取关键规范\n */\nfunction extractKeyStandards(devStandards: string): string {\n if (!devStandards) {\n return '暂无项目规范';\n }\n\n const lines = devStandards.split('\\n');\n const standards: string[] = [];\n let currentStandard = '';\n let inStandard = false;\n\n for (const line of lines) {\n if (line.startsWith('### ')) {\n if (currentStandard) {\n standards.push(currentStandard);\n }\n currentStandard = line.replace('### ', '').trim();\n inStandard = true;\n } else if (inStandard && line.startsWith('| 等级 |')) {\n const levelMatch = line.match(/\\| 等级 \\| (\\S+) \\|/);\n if (levelMatch) {\n currentStandard += ` [${levelMatch[1]}]`;\n }\n } else if (line.startsWith('---')) {\n if (currentStandard) {\n standards.push(currentStandard);\n currentStandard = '';\n }\n inStandard = false;\n }\n }\n\n const highPriority = standards.filter(s => s.includes('[强制]'));\n const mediumPriority = standards.filter(s => s.includes('[推荐]'));\n const lowPriority = standards.filter(s => s.includes('[参考]'));\n\n let result = '';\n \n if (highPriority.length > 0) {\n result += '### 强制规范\\n' + highPriority.map(s => `- ${s.replace(' [强制]', '')}`).join('\\n') + '\\n\\n';\n }\n \n if (mediumPriority.length > 0) {\n result += '### 推荐规范\\n' + mediumPriority.map(s => `- ${s.replace(' [推荐]', '')}`).join('\\n') + '\\n\\n';\n }\n \n if (lowPriority.length > 0) {\n result += '### 参考规范\\n' + lowPriority.map(s => `- ${s.replace(' [参考]', '')}`).join('\\n') + '\\n';\n }\n\n return result || devStandards.slice(0, 2000);\n}\n\n/**\n * 格式化 Agent 输出\n */\nfunction formatAgentOutput(agent: AgentDefinition, content: string): string {\n const header = chalk.cyan(`${agent.icon} ${agent.name}`) +\n chalk.gray(` (v${agent.version})`);\n \n const divider = chalk.gray('─'.repeat(50));\n \n return `${header}\\n${divider}\\n\\n${content}`;\n}\n\nexport default { runAgent, getAgent, listAgents, getAgentsForStep };","/**\n * 内置 Agent 定义\n * 包含每个 Agent 的角色、能力、工具权限和 Prompt 模板\n */\n\nimport { AgentDefinition, AgentId } from '../types/agent';\n\n/**\n * 前端开发 Agent\n * 负责代码实现、组件开发、样式编写\n */\nexport const FRONTEND_DEV_AGENT: AgentDefinition = {\n id: 'frontend-dev',\n name: '前端开发',\n description: '执行前端代码开发任务,包括组件实现、样式编写、逻辑开发',\n icon: '💻',\n version: '1.0.0',\n role: '你是一名资深前端开发工程师,精通 React、Vue、TypeScript、CSS等技术。你负责根据需求和设计稿实现高质量的前端代码。',\n \n capabilities: [\n {\n id: 'component-dev',\n name: '组件开发',\n description: '根据设计稿实现 React/Vue 组件',\n },\n {\n id: 'style-writing',\n name: '样式编写',\n description: '编写 CSS/SCSS/Tailwind 样式',\n },\n {\n id: 'logic-dev',\n name: '逻辑开发',\n description: '实现业务逻辑和状态管理',\n },\n {\n id: 'api-integration',\n name: 'API集成',\n description: '集成后端 API 接口',\n },\n ],\n \n tools: [\n { name: 'read_file', description: '读取文件内容', permission: 'full' },\n { name: 'write_file', description: '写入文件内容', permission: 'full' },\n { name: 'replace', description: '编辑文件内容', permission: 'full' },\n { name: 'glob', description: '搜索文件', permission: 'full' },\n { name: 'search_file_content', description: '搜索文件内容', permission: 'full' },\n { name: 'list_directory', description: '列出目录内容', permission: 'full' },\n { name: 'run_shell_command', description: '执行Shell命令', permission: 'confirm' },\n // MCP 设计工具\n { name: 'mcp_lanhu_get_design', description: '从蓝湖获取设计稿', permission: 'full' },\n { name: 'mcp_lanhu_get_layer', description: '从蓝湖获取设计图层', permission: 'full' },\n { name: 'mcp_lanhu_export_asset', description: '从蓝湖导出设计资源', permission: 'full' },\n { name: 'mcp_figma_get_design', description: '从Figma获取设计稿', permission: 'full' },\n { name: 'mcp_figma_get_component', description: '从Figma获取组件信息', permission: 'full' },\n ],\n \n triggers: [\n { type: 'workflow', condition: { workflowStep: 'new' }, priority: 10 },\n { type: 'workflow', condition: { workflowStep: 'continue' }, priority: 10 },\n { type: 'manual', condition: {}, priority: 5 },\n ],\n \n constraints: {\n files: {\n maxFileSize: 1048576, // 1MB\n maxFilesPerTask: 50,\n protectedPaths: ['node_modules', '.git', 'dist'],\n },\n code: {\n maxLineLength: 120,\n maxFunctionLength: 100,\n requireTypes: true,\n },\n behavior: {\n requireConfirmation: ['run_shell_command'],\n autoCommit: false,\n },\n },\n \n systemPrompt: `你是一名资深前端开发工程师,专注于高质量代码实现。\n\n## 你的职责\n- 根据需求和设计规范实现前端代码\n- 遵循项目既有的编码规范和模式\n- 确保代码可读性、可维护性和性能\n\n## 工作原则\n1. 先理解现有代码结构,再进行开发\n2. 优先使用项目中已有的组件和工具\n3. 保持代码风格一致性\n4. 添加必要的类型定义和注释\n\n## 输出要求\n- 提供清晰的实现说明\n- 列出修改/新增的文件\n- 说明关键设计决策`,\n \n taskPromptTemplate: `## 任务\n{{requirement}}\n\n## 上下文\n{{context}}\n\n## 相关规范\n{{norms}}\n\n## 已有文件\n{{files}}\n\n## 上一步输出\n{{previousOutput}}\n\n请根据以上信息实现需求,确保代码质量和规范遵循。`,\n \n outputFormat: {\n type: 'markdown',\n },\n};\n\n/**\n * 代码审核 Agent\n * 负责代码质量检查、安全审查、最佳实践建议、回归测试\n */\nexport const CODE_REVIEWER_AGENT: AgentDefinition = {\n id: 'code-reviewer',\n name: '代码审核',\n description: '审核代码质量、安全性和规范性,执行回归测试,提供改进建议',\n icon: '🔍',\n version: '1.1.0',\n role: '你是一名资深代码审核专家,专注于代码质量、安全性和最佳实践。你负责审查代码、执行回归测试并提供改进建议。',\n \n capabilities: [\n {\n id: 'quality-review',\n name: '质量审查',\n description: '检查代码质量、可读性、可维护性',\n },\n {\n id: 'security-review',\n name: '安全审查',\n description: '检查安全漏洞和风险',\n },\n {\n id: 'best-practice',\n name: '最佳实践',\n description: '提供代码改进建议',\n },\n {\n id: 'performance-review',\n name: '性能审查',\n description: '检查性能问题和优化建议',\n },\n {\n id: 'regression-test',\n name: '回归测试',\n description: '执行测试套件,确保修改不破坏已有功能',\n },\n {\n id: 'coverage-analysis',\n name: '覆盖率分析',\n description: '分析测试覆盖率并提供改进建议',\n },\n ],\n \n tools: [\n { name: 'read_file', description: '读取文件内容', permission: 'full' },\n { name: 'glob', description: '搜索文件', permission: 'full' },\n { name: 'search_file_content', description: '搜索文件内容', permission: 'full' },\n { name: 'list_directory', description: '列出目录内容', permission: 'full' },\n { name: 'run_shell_command', description: '执行测试命令', permission: 'confirm' },\n ],\n \n triggers: [\n { type: 'workflow', condition: { workflowStep: 'apply' }, priority: 10 },\n { type: 'manual', condition: {}, priority: 5 },\n ],\n \n constraints: {\n files: {\n protectedPaths: ['node_modules', '.git'],\n },\n behavior: {\n requireConfirmation: ['run_shell_command'],\n autoCommit: false,\n },\n },\n \n systemPrompt: `你是一名资深代码审核专家,专注于代码质量和安全性审查。\n\n## 你的职责\n- 审查代码质量和可维护性\n- 检查安全漏洞和风险\n- 执行回归测试,确保修改不破坏已有功能\n- 提供具体的改进建议\n- 确保遵循最佳实践\n\n## 审查维度\n1. **代码质量**: 可读性、可维护性、复杂度\n2. **安全性**: XSS、注入、敏感数据处理\n3. **性能**: 算法效率、内存使用、渲染优化\n4. **规范性**: 命名、格式、注释\n5. **测试覆盖**: 回归测试结果、覆盖率分析\n\n## 回归测试流程\n1. 执行 \\`npm test -- --run\\` 运行测试套件\n2. 分析测试结果,识别失败的测试用例\n3. 如果测试失败,阻止归档并提示修复\n4. 提供覆盖率报告和改进建议\n\n## 输出格式\n### 回归测试结果\n- 测试通过/失败状态\n- 通过/失败数量\n- 覆盖率百分比\n\n### 审查结果\n- 通过/需修改/不通过\n\n### 问题列表\n| 级别 | 文件 | 行号 | 问题描述 | 建议修复 |\n|------|------|------|----------|----------|\n\n### 改进建议\n- 建议项1\n- 建议项2\n\n### 总体评价\n对代码整体质量的评价和建议。`,\n \n taskPromptTemplate: `## 审查范围\n{{requirement}}\n\n## 待审查文件\n{{files}}\n\n## 项目规范\n{{norms}}\n\n## 上下文\n{{context}}\n\n请对以上文件进行全面审查,执行回归测试,并提供详细的审查报告和改进建议。`,\n \n outputFormat: {\n type: 'markdown',\n },\n};\n\n/**\n * 架构师 Agent\n * 负责技术方案设计、架构决策、技术选型\n */\nexport const ARCHITECT_AGENT: AgentDefinition = {\n id: 'architect',\n name: '资深前端架构师',\n description: '负责架构设计、技术方案、技术决策',\n icon: '🏗️',\n version: '1.0.0',\n role: '你是一名资深前端架构师,精通前端架构设计、性能优化、工程化。你负责制定技术方案和架构决策。',\n \n capabilities: [\n {\n id: 'architecture-design',\n name: '架构设计',\n description: '设计系统架构和模块划分',\n },\n {\n id: 'tech-decision',\n name: '技术决策',\n description: '技术选型和方案评估',\n },\n {\n id: 'performance-opt',\n name: '性能优化',\n description: '性能分析和优化方案',\n },\n {\n id: 'code-review',\n name: '架构审查',\n description: '审查代码架构合理性',\n },\n ],\n \n tools: [\n { name: 'read_file', description: '读取文件内容', permission: 'full' },\n { name: 'glob', description: '搜索文件', permission: 'full' },\n { name: 'search_file_content', description: '搜索文件内容', permission: 'full' },\n { name: 'list_directory', description: '列出目录内容', permission: 'full' },\n // MCP 设计工具\n { name: 'mcp_lanhu_get_design', description: '从蓝湖获取设计稿', permission: 'full' },\n { name: 'mcp_figma_get_design', description: '从Figma获取设计稿', permission: 'full' },\n ],\n \n triggers: [\n { type: 'workflow', condition: { workflowStep: 'explore' }, priority: 8 },\n { type: 'manual', condition: {}, priority: 5 },\n ],\n \n constraints: {\n files: {\n protectedPaths: ['node_modules', '.git'],\n },\n behavior: {\n autoCommit: false,\n },\n },\n \n systemPrompt: `你是一名资深前端架构师,专注于技术方案设计和架构决策。\n\n## 你的职责\n- 分析需求,设计技术方案\n- 制定架构决策和技术选型\n- 提供性能优化建议\n- 评估技术风险\n\n## 设计原则\n1. **简单优先**: 避免过度设计\n2. **可扩展性**: 考虑未来演进\n3. **可维护性**: 降低维护成本\n4. **性能优先**: 关注用户体验\n\n## 输出格式\n### 技术方案概述\n简要描述方案核心思路\n\n### 架构设计\n- 模块划分\n- 数据流\n- 关键接口\n\n### 技术选型\n| 场景 | 选择 | 理由 |\n|------|------|------|\n\n### 风险评估\n- 风险点\n- 应对方案\n\n### 实现建议\n给开发者的具体建议`,\n \n taskPromptTemplate: `## 需求\n{{requirement}}\n\n## 项目上下文\n{{context}}\n\n## 现有架构\n{{files}}\n\n## 技术约束\n{{norms}}\n\n请根据以上信息设计技术方案,提供架构设计和技术决策。`,\n \n outputFormat: {\n type: 'markdown',\n },\n};\n\n/**\n * 测试 Agent\n * 负责测试用例编写、测试执行、测试报告\n */\nexport const TESTER_AGENT: AgentDefinition = {\n id: 'tester',\n name: '测试',\n description: '编写测试用例、执行测试、生成测试报告',\n icon: '🧪',\n version: '1.0.0',\n role: '你是一名资深测试工程师,精通前端测试技术。你负责编写测试用例、执行测试并生成报告。',\n \n capabilities: [\n {\n id: 'unit-test',\n name: '单元测试',\n description: '编写和执行单元测试',\n },\n {\n id: 'integration-test',\n name: '集成测试',\n description: '编写和执行集成测试',\n },\n {\n id: 'e2e-test',\n name: '端到端测试',\n description: '编写和执行E2E测试',\n },\n {\n id: 'test-report',\n name: '测试报告',\n description: '生成测试报告和分析',\n },\n ],\n \n tools: [\n { name: 'read_file', description: '读取文件内容', permission: 'full' },\n { name: 'write_file', description: '写入测试文件', permission: 'full' },\n { name: 'glob', description: '搜索文件', permission: 'full' },\n { name: 'search_file_content', description: '搜索文件内容', permission: 'full' },\n { name: 'run_shell_command', description: '执行测试命令', permission: 'confirm' },\n ],\n \n triggers: [\n { type: 'workflow', condition: { workflowStep: 'continue' }, priority: 5 },\n { type: 'manual', condition: {}, priority: 5 },\n ],\n \n constraints: {\n files: {\n maxFileSize: 524288, // 512KB\n protectedPaths: ['node_modules', '.git', 'dist', 'src'],\n },\n behavior: {\n requireConfirmation: ['run_shell_command'],\n autoCommit: false,\n },\n },\n \n systemPrompt: `你是一名资深测试工程师,专注于前端测试。\n\n## 你的职责\n- 编写高质量的测试用例\n- 执行测试并分析结果\n- 提供测试覆盖率报告\n- 发现和报告缺陷\n\n## 测试原则\n1. **覆盖率优先**: 确保关键路径覆盖\n2. **边界测试**: 关注边界条件\n3. **可读性**: 测试代码要清晰易懂\n4. **独立性**: 测试用例相互独立\n\n## 输出格式\n### 测试概述\n测试范围和策略说明\n\n### 测试用例\n\\`\\`\\`typescript\n// 测试代码\n\\`\\`\\`\n\n### 测试结果\n| 用例 | 状态 | 说明 |\n|------|------|------|\n\n### 覆盖率报告\n覆盖率统计和分析\n\n### 问题列表\n发现的问题和建议`,\n \n taskPromptTemplate: `## 测试目标\n{{requirement}}\n\n## 待测试代码\n{{files}}\n\n## 测试框架\n{{context}}\n\n## 测试规范\n{{norms}}\n\n请根据以上信息编写测试用例并执行测试。`,\n \n outputFormat: {\n type: 'markdown',\n },\n};\n\n/**\n * 所有内置 Agent 的映射表\n */\nexport const BUILTIN_AGENTS: Record<AgentId, AgentDefinition> = {\n 'frontend-dev': FRONTEND_DEV_AGENT,\n 'code-reviewer': CODE_REVIEWER_AGENT,\n 'architect': ARCHITECT_AGENT,\n 'tester': TESTER_AGENT,\n};\n\n/**\n * 获取 Agent 定义\n */\nexport function getAgentDefinition(id: AgentId): AgentDefinition | undefined {\n return BUILTIN_AGENTS[id];\n}\n\n/**\n * 获取所有内置 Agent\n */\nexport function getAllAgents(): AgentDefinition[] {\n return Object.values(BUILTIN_AGENTS);\n}\n\n/**\n * 根据工作流阶段获取应触发的 Agent\n */\nexport function getAgentsForWorkflowStep(step: string): AgentDefinition[] {\n return Object.values(BUILTIN_AGENTS).filter(agent =>\n agent.triggers.some(\n trigger => trigger.type === 'workflow' && trigger.condition.workflowStep === step\n )\n );\n}\n","/**\n * Agent 执行引擎\n * 负责调度和执行 Agent,包括 Prompt 构建、模型调用、工具执行\n */\n\nimport { v4 as uuidv4 } from 'uuid';\nimport {\n AgentId,\n AgentDefinition,\n AgentExecutionContext,\n AgentExecutionResult,\n AgentSession,\n AgentStatus,\n AgentScheduleRequest,\n AgentEvent,\n} from '../types/agent';\nimport { ChatMessage } from '../types/model';\nimport { ModelService } from '../services/model';\nimport { getAgentDefinition, BUILTIN_AGENTS } from './definitions';\nimport { NormsManager } from '../norms';\nimport { ContextManager } from '../context';\n\n/**\n * Agent 执行器\n */\nexport class AgentExecutor {\n private modelService: ModelService;\n private normsManager: NormsManager;\n private contextManager: ContextManager;\n private sessions: Map<string, AgentSession> = new Map();\n private eventListeners: Set<(event: AgentEvent) => void> = new Set();\n\n constructor(\n modelService: ModelService,\n normsManager: NormsManager,\n contextManager: ContextManager\n ) {\n this.modelService = modelService;\n this.normsManager = normsManager;\n this.contextManager = contextManager;\n }\n\n /**\n * 执行 Agent\n */\n async execute(request: AgentScheduleRequest): Promise<AgentExecutionResult> {\n const { agentId, context, options } = request;\n const agent = getAgentDefinition(agentId);\n\n if (!agent) {\n return {\n success: false,\n output: `未知的Agent: ${agentId}`,\n tokensUsed: { input: 0, output: 0 },\n duration: 0,\n error: `Agent not found: ${agentId}`,\n };\n }\n\n // 创建会话\n const session = this.createSession(agentId, context);\n this.sessions.set(session.id, session);\n\n const startTime = Date.now();\n\n try {\n // 发送事件\n this.emitEvent({\n type: 'started',\n agentId,\n sessionId: session.id,\n timestamp: new Date(),\n });\n\n // 构建 Prompt\n const messages = await this.buildMessages(agent, context);\n\n // 调用模型\n const response = await this.modelService.sendMessage(messages, {\n agent: agentId,\n temperature: 0.7,\n maxTokens: 4096,\n });\n\n // 更新会话消息\n session.messages.push({\n role: 'assistant',\n content: response.content,\n });\n\n // 解析输出\n const result = this.parseOutput(agent, response.content, response.usage);\n\n // 更新会话状态\n session.status = 'completed';\n session.completedAt = new Date();\n session.result = result;\n\n // 发送事件\n this.emitEvent({\n type: 'completed',\n agentId,\n sessionId: session.id,\n timestamp: new Date(),\n data: result,\n });\n\n result.duration = Date.now() - startTime;\n return result;\n } catch (error) {\n const err = error as Error;\n session.status = 'failed';\n session.completedAt = new Date();\n\n // 发送事件\n this.emitEvent({\n type: 'failed',\n agentId,\n sessionId: session.id,\n timestamp: new Date(),\n data: err.message,\n });\n\n return {\n success: false,\n output: `执行失败: ${err.message}`,\n tokensUsed: { input: 0, output: 0 },\n duration: Date.now() - startTime,\n error: err.message,\n };\n }\n }\n\n /**\n * 流式执行 Agent\n */\n async *executeStream(\n request: AgentScheduleRequest\n ): AsyncGenerator<string, AgentExecutionResult, unknown> {\n const { agentId, context } = request;\n const agent = getAgentDefinition(agentId);\n\n if (!agent) {\n yield `错误: 未知的Agent ${agentId}`;\n return {\n success: false,\n output: `未知的Agent: ${agentId}`,\n tokensUsed: { input: 0, output: 0 },\n duration: 0,\n error: `Agent not found: ${agentId}`,\n };\n }\n\n // 创建会话\n const session = this.createSession(agentId, context);\n this.sessions.set(session.id, session);\n\n const startTime = Date.now();\n let fullContent = '';\n\n try {\n // 发送事件\n this.emitEvent({\n type: 'started',\n agentId,\n sessionId: session.id,\n timestamp: new Date(),\n });\n\n // 构建 Prompt\n const messages = await this.buildMessages(agent, context);\n\n // 流式调用模型\n for await (const chunk of this.modelService.streamMessage(messages, {\n agent: agentId,\n temperature: 0.7,\n maxTokens: 4096,\n })) {\n fullContent += chunk.delta;\n yield chunk.delta;\n }\n\n // 解析输出\n const result = this.parseOutput(\n agent,\n fullContent,\n { inputTokens: 0, outputTokens: 0, totalTokens: 0 }\n );\n\n // 更新会话状态\n session.status = 'completed';\n session.completedAt = new Date();\n session.result = result;\n session.messages.push({\n role: 'assistant',\n content: fullContent,\n });\n\n // 发送事件\n this.emitEvent({\n type: 'completed',\n agentId,\n sessionId: session.id,\n timestamp: new Date(),\n data: result,\n });\n\n result.duration = Date.now() - startTime;\n return result;\n } catch (error) {\n const err = error as Error;\n session.status = 'failed';\n session.completedAt = new Date();\n\n yield `\\n执行失败: ${err.message}`;\n\n return {\n success: false,\n output: fullContent + `\\n错误: ${err.message}`,\n tokensUsed: { input: 0, output: 0 },\n duration: Date.now() - startTime,\n error: err.message,\n };\n }\n }\n\n /**\n * 获取会话状态\n */\n getSession(sessionId: string): AgentSession | undefined {\n return this.sessions.get(sessionId);\n }\n\n /**\n * 取消执行\n */\n cancel(sessionId: string): boolean {\n const session = this.sessions.get(sessionId);\n if (session && session.status === 'running') {\n session.status = 'cancelled';\n session.completedAt = new Date();\n\n this.emitEvent({\n type: 'cancelled',\n agentId: session.agentId,\n sessionId,\n timestamp: new Date(),\n });\n\n return true;\n }\n return false;\n }\n\n /**\n * 添加事件监听器\n */\n addEventListener(listener: (event: AgentEvent) => void): void {\n this.eventListeners.add(listener);\n }\n\n /**\n * 移除事件监听器\n */\n removeEventListener(listener: (event: AgentEvent) => void): void {\n this.eventListeners.delete(listener);\n }\n\n // ==================== 私有方法 ====================\n\n /**\n * 创建会话\n */\n private createSession(\n agentId: AgentId,\n context: AgentExecutionContext\n ): AgentSession {\n return {\n id: uuidv4(),\n agentId,\n status: 'running',\n context,\n messages: [],\n startedAt: new Date(),\n };\n }\n\n /**\n * 构建消息列表\n */\n private async buildMessages(\n agent: AgentDefinition,\n context: AgentExecutionContext\n ): Promise<ChatMessage[]> {\n const messages: ChatMessage[] = [];\n\n // 1. 系统提示\n let systemPrompt = agent.systemPrompt;\n\n // 注入项目上下文(AGENTS.md + config.yaml)\n if (context.projectContext) {\n systemPrompt += '\\n\\n---\\n\\n## 项目上下文\\n\\n';\n \n if (context.projectContext.agentsMd) {\n systemPrompt += `### AGENTS.md 摘要\\n\\n${this.summarizeContext(context.projectContext.agentsMd, 2000)}\\n\\n`;\n }\n \n if (context.projectContext.configYaml) {\n systemPrompt += `### config.yaml 配置\\n\\n\\`\\`\\`yaml\\n${context.projectContext.configYaml}\\n\\`\\`\\`\\n\\n`;\n }\n }\n\n messages.push({\n role: 'system',\n content: systemPrompt,\n });\n\n // 2. 构建任务提示\n const taskPrompt = this.buildTaskPrompt(agent, context);\n messages.push({\n role: 'user',\n content: taskPrompt,\n });\n\n return messages;\n }\n\n /**\n * 摘要上下文(限制长度)\n */\n private summarizeContext(content: string, maxLength: number): string {\n if (content.length <= maxLength) {\n return content;\n }\n \n // 提取关键部分:标题和前几段\n const lines = content.split('\\n');\n const summary: string[] = [];\n let currentLength = 0;\n \n for (const line of lines) {\n if (currentLength + line.length + 1 > maxLength) {\n break;\n }\n summary.push(line);\n currentLength += line.length + 1;\n }\n \n return summary.join('\\n') + '\\n\\n... (内容已截断,请阅读完整 AGENTS.md 了解详情)';\n }\n\n /**\n * 提取关键规范(从 devstanded.md)\n */\n private extractKeyStandards(devStandards: string): string {\n if (!devStandards) {\n return '暂无项目规范';\n }\n\n // 提取所有规范标题和描述\n const lines = devStandards.split('\\n');\n const standards: string[] = [];\n let currentStandard = '';\n let inStandard = false;\n\n for (const line of lines) {\n // 检测规范标题(### 开头)\n if (line.startsWith('### ')) {\n if (currentStandard) {\n standards.push(currentStandard);\n }\n currentStandard = line.replace('### ', '').trim();\n inStandard = true;\n } else if (inStandard && line.startsWith('| 等级 |')) {\n // 提取等级\n const levelMatch = line.match(/\\| 等级 \\| (\\S+) \\|/);\n if (levelMatch) {\n currentStandard += ` [${levelMatch[1]}]`;\n }\n } else if (line.startsWith('---')) {\n if (currentStandard) {\n standards.push(currentStandard);\n currentStandard = '';\n }\n inStandard = false;\n }\n }\n\n // 格式化输出\n const highPriority = standards.filter(s => s.includes('[强制]'));\n const mediumPriority = standards.filter(s => s.includes('[推荐]'));\n const lowPriority = standards.filter(s => s.includes('[参考]'));\n\n let result = '';\n \n if (highPriority.length > 0) {\n result += '### 强制规范\\n' + highPriority.map(s => `- ${s.replace(' [强制]', '')}`).join('\\n') + '\\n\\n';\n }\n \n if (mediumPriority.length > 0) {\n result += '### 推荐规范\\n' + mediumPriority.map(s => `- ${s.replace(' [推荐]', '')}`).join('\\n') + '\\n\\n';\n }\n \n if (lowPriority.length > 0) {\n result += '### 参考规范\\n' + lowPriority.map(s => `- ${s.replace(' [参考]', '')}`).join('\\n') + '\\n';\n }\n\n return result || devStandards.slice(0, 2000);\n }\n\n /**\n * 构建任务提示\n */\n private buildTaskPrompt(\n agent: AgentDefinition,\n context: AgentExecutionContext\n ): string {\n let prompt = agent.taskPromptTemplate;\n\n // 替换占位符\n prompt = prompt.replace('{{requirement}}', context.requirement);\n prompt = prompt.replace('{{context}}', context.context || '无额外上下文');\n \n // 规范信息 - 优先使用项目规范文档\n let normsText = '';\n \n // 注入 devstanded.md 规范(强制参考)\n if (context.projectContext?.devStandards) {\n normsText += '## 项目开发规范 (devstanded.md)\\n\\n';\n normsText += this.extractKeyStandards(context.projectContext.devStandards);\n }\n \n // 追加额外规范\n if (context.norms?.length) {\n normsText += '\\n\\n## 额外规范要求\\n\\n' + context.norms.join('\\n');\n }\n \n if (!normsText) {\n normsText = '暂无特定规范要求';\n }\n \n prompt = prompt.replace('{{norms}}', normsText);\n \n // 文件信息\n const filesText = context.files?.length\n ? context.files.join('\\n')\n : '暂无相关文件';\n prompt = prompt.replace('{{files}}', filesText);\n \n // 上一步输出\n prompt = prompt.replace(\n '{{previousOutput}}',\n context.previousOutput || '无上一步输出'\n );\n\n return prompt;\n }\n\n /**\n * 解析输出\n */\n private parseOutput(\n agent: AgentDefinition,\n content: string,\n usage: { inputTokens: number; outputTokens: number; totalTokens: number }\n ): AgentExecutionResult {\n // 提取修改的文件(简单的正则匹配)\n const filePatterns = [\n /(?:修改|新增|更新|删除)[文件]?\\s*[::]\\s*`?([^\\s`]+\\.(ts|tsx|js|jsx|vue|css|scss|html|json))`?/gi,\n /(?:file|path)[::]\\s*`?([^\\s`]+\\.(ts|tsx|js|jsx|vue|css|scss|html|json))`?/gi,\n ];\n\n const filesChanged: string[] = [];\n for (const pattern of filePatterns) {\n let match;\n while ((match = pattern.exec(content)) !== null) {\n if (match[1] && !filesChanged.includes(match[1])) {\n filesChanged.push(match[1]);\n }\n }\n }\n\n // 提取建议\n const suggestionsPattern = /(?:建议|建议改进|suggestions?)[::]\\s*\\n((?:[-*]\\s*.+\\n?)+)/gi;\n const suggestions: string[] = [];\n let suggestionsMatch;\n while ((suggestionsMatch = suggestionsPattern.exec(content)) !== null) {\n const items = suggestionsMatch[1].split(/\\n/).filter(Boolean);\n items.forEach(item => {\n const cleaned = item.replace(/^[-*]\\s*/, '').trim();\n if (cleaned) suggestions.push(cleaned);\n });\n }\n\n return {\n success: true,\n output: content,\n filesChanged,\n tokensUsed: {\n input: usage.inputTokens,\n output: usage.outputTokens,\n },\n duration: 0,\n suggestions,\n };\n }\n\n /**\n * 发送事件\n */\n private emitEvent(event: AgentEvent): void {\n for (const listener of this.eventListeners) {\n try {\n listener(event);\n } catch {\n // 忽略监听器错误\n }\n }\n }\n}\n\n/**\n * 创建默认的 Agent 执行器\n */\nexport function createAgentExecutor(\n modelService: ModelService,\n normsManager: NormsManager,\n contextManager: ContextManager\n): AgentExecutor {\n return new AgentExecutor(modelService, normsManager, contextManager);\n}\n\nexport default AgentExecutor;\n","/**\n * Agent 模块入口\n */\n\n// 类型导出\nexport * from '../types/agent';\n\n// Agent 定义\nexport {\n BUILTIN_AGENTS,\n FRONTEND_DEV_AGENT,\n CODE_REVIEWER_AGENT,\n ARCHITECT_AGENT,\n TESTER_AGENT,\n getAgentDefinition,\n getAllAgents,\n getAgentsForWorkflowStep,\n} from './definitions';\n\n// Agent 执行\nexport { AgentExecutor, createAgentExecutor } from './executor';\n\n// Agent 调度\nexport {\n AgentScheduler,\n createAgentScheduler,\n ScheduleStrategy,\n ScheduleConfig,\n ScheduleResult,\n SCHEDULE_RULES,\n getScheduleRuleDescription,\n} from './scheduler';\n\n// 简化的运行接口\nexport {\n runAgent,\n getAgent,\n listAgents,\n getAgentsForStep,\n AgentResult,\n} from './runner';","/**\n * Agent 自动调度器\n * 根据工作流阶段自动触发对应的 Agent 执行\n */\n\nimport { WorkflowStep, WorkflowState } from '../types';\nimport { AgentId, AgentExecutionContext, AgentExecutionResult } from '../types/agent';\nimport { AgentExecutor } from './executor';\nimport { getAgentsForWorkflowStep, getAgentDefinition } from './definitions';\n\n/**\n * 调度策略\n */\nexport type ScheduleStrategy = 'auto' | 'recommend' | 'manual';\n\n/**\n * 调度配置\n */\nexport interface ScheduleConfig {\n agent: AgentId;\n strategy: ScheduleStrategy;\n waitForResult: boolean;\n requireConfirmation: boolean;\n fallbackAgent?: AgentId;\n}\n\n/**\n * 调度结果\n */\nexport interface ScheduleResult {\n scheduled: boolean;\n agent?: AgentId;\n strategy: ScheduleStrategy;\n result?: AgentExecutionResult;\n message: string;\n}\n\n/**\n * 工作流阶段 → Agent 调度规则\n * \n * 设计原则:\n * - explore 阶段:架构师分析需求,输出技术方案\n * - new 阶段:前端开发实现核心代码\n * - continue 阶段:前端开发继续迭代\n * - apply 阶段:代码审核检查质量\n */\nexport const SCHEDULE_RULES: Partial<Record<WorkflowStep, ScheduleConfig>> = {\n 'explore': {\n agent: 'architect',\n strategy: 'auto',\n waitForResult: true,\n requireConfirmation: false,\n },\n 'new': {\n agent: 'frontend-dev',\n strategy: 'auto',\n waitForResult: true,\n requireConfirmation: false,\n },\n 'continue': {\n agent: 'frontend-dev',\n strategy: 'auto',\n waitForResult: false,\n requireConfirmation: false,\n },\n 'apply': {\n agent: 'code-reviewer',\n strategy: 'auto',\n waitForResult: true,\n requireConfirmation: false,\n },\n};\n\n/**\n * Agent 调度器\n */\nexport class AgentScheduler {\n private executor: AgentExecutor;\n private lastScheduleResult: ScheduleResult | null = null;\n private onSchedule?: (result: ScheduleResult) => void;\n\n constructor(executor: AgentExecutor) {\n this.executor = executor;\n }\n\n /**\n * 设置调度回调\n */\n setOnSchedule(callback: (result: ScheduleResult) => void): void {\n this.onSchedule = callback;\n }\n\n /**\n * 根据工作流阶段调度 Agent\n */\n async scheduleForStep(\n step: WorkflowStep,\n state: WorkflowState,\n options?: {\n strategy?: ScheduleStrategy;\n context?: Partial<AgentExecutionContext>;\n }\n ): Promise<ScheduleResult> {\n const rule = SCHEDULE_RULES[step];\n\n if (!rule) {\n return {\n scheduled: false,\n strategy: 'manual',\n message: `阶段 ${step} 无自动调度规则,可手动调用 Agent`,\n };\n }\n\n // 覆盖策略\n const strategy = options?.strategy || rule.strategy;\n\n // 如果是推荐模式,只返回推荐信息\n if (strategy === 'recommend') {\n return {\n scheduled: false,\n agent: rule.agent,\n strategy: 'recommend',\n message: `推荐使用 $${rule.agent} 执行当前阶段任务`,\n };\n }\n\n // 如果是手动模式,返回提示\n if (strategy === 'manual') {\n return {\n scheduled: false,\n agent: rule.agent,\n strategy: 'manual',\n message: `可手动调用 $${rule.agent} 执行任务`,\n };\n }\n\n // 自动执行\n return this.executeAgent(rule, state, options?.context);\n }\n\n /**\n * 执行 Agent\n */\n private async executeAgent(\n config: ScheduleConfig,\n state: WorkflowState,\n additionalContext?: Partial<AgentExecutionContext>\n ): Promise<ScheduleResult> {\n const agent = getAgentDefinition(config.agent);\n\n if (!agent) {\n return {\n scheduled: false,\n agent: config.agent,\n strategy: 'auto',\n message: `Agent ${config.agent} 不存在`,\n };\n }\n\n // 构建执行上下文\n const context: AgentExecutionContext = {\n taskId: state.id,\n workflowId: state.id,\n workflowStep: state.currentStep,\n requirement: state.requirement,\n files: state.artifacts,\n context: additionalContext?.context,\n norms: additionalContext?.norms,\n previousOutput: additionalContext?.previousOutput,\n };\n\n try {\n // 执行 Agent\n const result = await this.executor.execute({\n agentId: config.agent,\n context,\n });\n\n const scheduleResult: ScheduleResult = {\n scheduled: true,\n agent: config.agent,\n strategy: 'auto',\n result,\n message: result.success\n ? `$${config.agent} 执行完成`\n : `$${config.agent} 执行失败: ${result.error}`,\n };\n\n this.lastScheduleResult = scheduleResult;\n\n // 触发回调\n if (this.onSchedule) {\n this.onSchedule(scheduleResult);\n }\n\n return scheduleResult;\n } catch (error) {\n const err = error as Error;\n return {\n scheduled: false,\n agent: config.agent,\n strategy: 'auto',\n message: `$${config.agent} 执行异常: ${err.message}`,\n };\n }\n }\n\n /**\n * 获取阶段的调度配置\n */\n getScheduleConfig(step: WorkflowStep): ScheduleConfig | undefined {\n return SCHEDULE_RULES[step];\n }\n\n /**\n * 获取阶段的推荐 Agent\n */\n getRecommendedAgent(step: WorkflowStep): AgentId | undefined {\n const rule = SCHEDULE_RULES[step];\n return rule?.agent;\n }\n\n /**\n * 获取所有调度规则\n */\n getAllScheduleRules(): Partial<Record<WorkflowStep, ScheduleConfig>> {\n return { ...SCHEDULE_RULES };\n }\n\n /**\n * 获取上次调度结果\n */\n getLastScheduleResult(): ScheduleResult | null {\n return this.lastScheduleResult;\n }\n\n /**\n * 判断阶段是否需要自动调度\n */\n shouldAutoSchedule(step: WorkflowStep): boolean {\n const rule = SCHEDULE_RULES[step];\n return rule?.strategy === 'auto';\n }\n\n /**\n * 获取阶段可用的 Agent 列表\n */\n getAvailableAgents(step: WorkflowStep): AgentId[] {\n const agents = getAgentsForWorkflowStep(step);\n return agents.map(a => a.id);\n }\n}\n\n/**\n * 创建调度器\n */\nexport function createAgentScheduler(executor: AgentExecutor): AgentScheduler {\n return new AgentScheduler(executor);\n}\n\n/**\n * 获取调度规则描述\n */\nexport function getScheduleRuleDescription(step: WorkflowStep): string {\n const rule = SCHEDULE_RULES[step];\n \n if (!rule) {\n return `阶段 ${step} 无自动调度规则`;\n }\n\n const agent = getAgentDefinition(rule.agent);\n const strategyText = {\n 'auto': '自动执行',\n 'recommend': '推荐执行',\n 'manual': '手动执行',\n };\n\n return `${strategyText[rule.strategy]} $${rule.agent} (${agent?.name})`;\n}\n\nexport default AgentScheduler;\n","/**\n * OpenSpec 工作流引擎\n * 管理工作流状态、状态转换、确认点、回滚\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport {\n WorkflowStep,\n WorkflowType,\n WorkflowState,\n WorkflowStepRecord,\n WorkflowTransition,\n} from '../types';\nimport {\n ConfirmationManager,\n ConfirmationPoint,\n ConfirmationPointType,\n ROLLBACK_RULES,\n RollbackReason,\n} from './checkpoint';\n\n// 状态转换规则\nconst TRANSITIONS: Record<WorkflowStep, WorkflowStep[]> = {\n 'explore': ['new'],\n 'new': ['continue', 'apply'],\n 'continue': ['apply', 'continue'],\n 'propose': ['apply'],\n 'apply': ['archive'],\n 'archive': [],\n};\n\n// 复杂流程步骤\nconst COMPLEX_STEPS: WorkflowStep[] = ['explore', 'new', 'continue', 'apply', 'archive'];\n\n// 简单流程步骤\nconst SIMPLE_STEPS: WorkflowStep[] = ['propose', 'apply', 'archive'];\n\n// 快照记录\nexport interface WorkflowSnapshot {\n step: WorkflowStep;\n timestamp: Date;\n state: WorkflowState;\n artifacts: string[];\n}\n\nexport interface RollbackResult {\n success: boolean;\n from: WorkflowStep;\n to: WorkflowStep | null;\n message: string;\n snapshot?: WorkflowSnapshot;\n}\n\nexport interface ConfirmationResult {\n required: boolean;\n confirmed: boolean;\n point?: ConfirmationPoint;\n}\n\nexport class WorkflowEngine {\n private state: WorkflowState | null = null;\n private projectPath: string = '';\n private openspecPath: string = '';\n private confirmationManager: ConfirmationManager;\n private snapshots: Map<WorkflowStep, WorkflowSnapshot> = new Map();\n private projectContext: string = ''; // AGENTS.md 内容\n private projectConfig: string = ''; // config.yaml 内容\n private devStandards: string = ''; // devstanded.md 内容\n\n constructor() {\n this.confirmationManager = new ConfirmationManager();\n }\n\n /**\n * 初始化工作流引擎\n */\n async initialize(projectPath: string): Promise<void> {\n this.projectPath = projectPath;\n this.openspecPath = path.join(projectPath, 'openspec');\n \n await this.ensureDirectories();\n await this.loadProjectContext();\n await this.restoreState();\n await this.restoreSnapshots();\n }\n\n /**\n * 加载项目上下文(AGENTS.md 和 config.yaml)\n */\n private async loadProjectContext(): Promise<void> {\n // 加载 AGENTS.md\n const agentsMdPath = path.join(this.projectPath, 'AGENTS.md');\n try {\n this.projectContext = await fs.readFile(agentsMdPath, 'utf-8');\n } catch {\n this.projectContext = '';\n }\n\n // 加载 config.yaml\n const configPath = path.join(this.openspecPath, 'config.yaml');\n try {\n this.projectConfig = await fs.readFile(configPath, 'utf-8');\n } catch {\n this.projectConfig = '';\n }\n\n // 加载 devstanded.md\n const devstandedPath = path.join(this.projectPath, '.sf-cli', 'norms', 'devstanded.md');\n try {\n this.devStandards = await fs.readFile(devstandedPath, 'utf-8');\n } catch {\n this.devStandards = '';\n }\n }\n\n /**\n * 获取项目上下文\n */\n getProjectContext(): { agentsMd: string; configYaml: string; devStandards: string } {\n return {\n agentsMd: this.projectContext,\n configYaml: this.projectConfig,\n devStandards: this.devStandards,\n };\n }\n\n /**\n * 获取规格文件路径\n */\n getSpecFilePath(): string | null {\n if (!this.state) return null;\n return path.join(this.openspecPath, 'changes', `${this.state.id}-spec.md`);\n }\n\n /**\n * 检查规格文件是否存在\n */\n async hasSpecFile(): Promise<boolean> {\n const specPath = this.getSpecFilePath();\n if (!specPath) return false;\n \n try {\n await fs.access(specPath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * 启动新工作流\n */\n async start(\n requirement: string,\n complexity: number,\n options?: { title?: string }\n ): Promise<WorkflowState> {\n const type: WorkflowType = complexity >= 6 ? 'complex' : 'simple';\n const steps = type === 'complex' ? COMPLEX_STEPS : SIMPLE_STEPS;\n const initialStep = steps[0];\n \n const changeId = await this.generateChangeId();\n \n this.state = {\n id: changeId,\n type,\n currentStep: initialStep,\n steps: steps.map((step, index) => ({\n step,\n status: index === 0 ? 'running' : 'pending',\n startedAt: index === 0 ? new Date() : undefined,\n })),\n requirement,\n complexity,\n title: options?.title || requirement.slice(0, 50),\n artifacts: [],\n status: 'running',\n createdAt: new Date(),\n };\n \n // 清空快照和确认状态\n this.snapshots.clear();\n this.confirmationManager.clearAllConfirmations();\n \n await this.createSnapshot();\n await this.createChangeRecord();\n await this.saveState();\n \n return this.state;\n }\n\n /**\n * 检查转换是否需要确认\n */\n checkConfirmationNeeded(from: WorkflowStep, to: WorkflowStep): ConfirmationResult {\n const point = this.confirmationManager.getConfirmationPointForTransition(from, to);\n \n if (!point) {\n return { required: false, confirmed: true };\n }\n \n const confirmed = this.confirmationManager.isConfirmed(point.type);\n \n return {\n required: point.required,\n confirmed,\n point,\n };\n }\n\n /**\n * 确认检查点\n */\n confirm(type: ConfirmationPointType, comment?: string): void {\n this.confirmationManager.confirm(type, comment);\n }\n\n /**\n * 获取确认点信息\n */\n getConfirmationPoint(type: ConfirmationPointType): ConfirmationPoint | undefined {\n return this.confirmationManager.getConfirmationPoint(type);\n }\n\n /**\n * 获取当前转换需要的确认点\n */\n getCurrentConfirmationPoint(): ConfirmationPoint | undefined {\n if (!this.state) return undefined;\n \n const allowed = this.getAllowedTransitions();\n for (const target of allowed) {\n const point = this.confirmationManager.getConfirmationPointForTransition(\n this.state.currentStep,\n target\n );\n if (point && !this.confirmationManager.isConfirmed(point.type)) {\n return point;\n }\n }\n \n return undefined;\n }\n\n /**\n * 执行状态转换\n */\n async transition(\n targetStep: WorkflowStep,\n reason?: string\n ): Promise<WorkflowTransition> {\n if (!this.state) {\n throw new Error('没有活跃的工作流');\n }\n \n const currentStep = this.state.currentStep;\n const allowedTargets = TRANSITIONS[currentStep];\n \n if (!allowedTargets.includes(targetStep)) {\n throw new Error(\n `无效的状态转换: ${currentStep} → ${targetStep}。` +\n `允许的转换: ${allowedTargets.join(', ')}`\n );\n }\n \n // 检查是否需要确认\n const confirmationResult = this.checkConfirmationNeeded(currentStep, targetStep);\n \n if (confirmationResult.required && !confirmationResult.confirmed) {\n throw new ConfirmationRequiredError(\n `需要确认: ${confirmationResult.point?.name}`,\n confirmationResult.point!\n );\n }\n \n // 标记当前步骤完成\n const currentStepRecord = this.state.steps.find(s => s.step === currentStep);\n if (currentStepRecord) {\n currentStepRecord.status = 'completed';\n currentStepRecord.completedAt = new Date();\n }\n \n // 标记目标步骤开始\n const targetStepRecord = this.state.steps.find(s => s.step === targetStep);\n if (targetStepRecord) {\n targetStepRecord.status = 'running';\n targetStepRecord.startedAt = new Date();\n }\n \n this.state.currentStep = targetStep;\n this.state.updatedAt = new Date();\n \n await this.createSnapshot();\n await this.saveState();\n await this.updateChangeRecord();\n \n return {\n from: currentStep,\n to: targetStep,\n timestamp: new Date(),\n reason,\n };\n }\n\n /**\n * 获取可回滚的目标阶段\n */\n getRollbackTargets(): WorkflowStep[] {\n if (!this.state) return [];\n \n const allTargets = ROLLBACK_RULES[this.state.currentStep] || [];\n \n // 过滤出当前工作流中存在的阶段\n const workflowSteps = this.state.type === 'complex' ? COMPLEX_STEPS : SIMPLE_STEPS;\n \n return allTargets.filter(target => workflowSteps.includes(target));\n }\n\n /**\n * 检查是否可以回滚到指定阶段\n */\n canRollbackTo(targetStep: WorkflowStep): boolean {\n const targets = this.getRollbackTargets();\n return targets.includes(targetStep);\n }\n\n /**\n * 执行回滚\n */\n async rollback(\n targetStep: WorkflowStep,\n reason: RollbackReason,\n description?: string\n ): Promise<RollbackResult> {\n if (!this.state) {\n return {\n success: false,\n from: 'explore',\n to: null,\n message: '没有活跃的工作流',\n };\n }\n \n const currentStep = this.state.currentStep;\n const allowedTargets = ROLLBACK_RULES[currentStep];\n \n if (!allowedTargets || !allowedTargets.includes(targetStep)) {\n return {\n success: false,\n from: currentStep,\n to: targetStep,\n message: `无法从 ${currentStep} 回滚到 ${targetStep}`,\n };\n }\n \n // 获取快照\n const snapshot = this.snapshots.get(targetStep);\n \n if (!snapshot) {\n return {\n success: false,\n from: currentStep,\n to: targetStep,\n message: `找不到阶段 ${targetStep} 的快照`,\n };\n }\n \n // 恢复状态\n const previousState = this.state;\n this.state = {\n ...snapshot.state,\n createdAt: previousState.createdAt,\n updatedAt: new Date(),\n };\n \n // 重置步骤状态\n const stepOrder = this.state.type === 'complex' ? COMPLEX_STEPS : SIMPLE_STEPS;\n const targetIndex = stepOrder.indexOf(targetStep);\n \n for (let i = 0; i < this.state.steps.length; i++) {\n const step = this.state.steps[i];\n const stepIndex = stepOrder.indexOf(step.step);\n \n if (stepIndex < targetIndex) {\n // 目标阶段之前的步骤保持完成状态\n step.status = 'completed';\n } else if (stepIndex === targetIndex) {\n // 目标阶段设为运行中\n step.status = 'running';\n step.startedAt = new Date();\n step.completedAt = undefined;\n } else {\n // 目标阶段之后的步骤重置为待执行\n step.status = 'pending';\n step.startedAt = undefined;\n step.completedAt = undefined;\n }\n }\n \n // 恢复产物\n this.state.artifacts = snapshot.artifacts;\n \n // 清除相关确认状态\n const confirmationsToClear = this.confirmationManager.getConfirmationsToClear(targetStep);\n for (const type of confirmationsToClear) {\n this.confirmationManager.clearConfirmation(type);\n }\n \n await this.saveState();\n await this.updateChangeRecord('rolled-back');\n \n return {\n success: true,\n from: currentStep,\n to: targetStep,\n message: `已回滚: ${currentStep} → ${targetStep},原因: ${description || reason}`,\n snapshot,\n };\n }\n\n /**\n * 获取回滚原因描述\n */\n getRollbackReasonDescription(reason: RollbackReason): string {\n const descriptions: Record<RollbackReason, string> = {\n 'code-review-failed': '代码审查未通过',\n 'requirement-changed': '需求变更',\n 'design-issue': '设计问题',\n 'user-request': '用户请求',\n };\n return descriptions[reason];\n }\n\n /**\n * 获取当前状态\n */\n getState(): WorkflowState | null {\n return this.state;\n }\n\n /**\n * 获取所有活跃工作流\n */\n async getAllActiveWorkflows(): Promise<WorkflowState[]> {\n const workflows: WorkflowState[] = [];\n \n // 读取 openspec/changes 目录中的所有变更记录\n const changesDir = path.join(this.openspecPath, 'changes');\n \n try {\n const files = await fs.readdir(changesDir);\n \n for (const file of files) {\n if (!file.endsWith('.md') || file.includes('-spec.md')) continue;\n \n const filePath = path.join(changesDir, file);\n const content = await fs.readFile(filePath, 'utf-8');\n \n // 解析变更记录\n const state = this.parseChangeRecord(content);\n if (state && state.status === 'running') {\n workflows.push(state);\n }\n }\n } catch {\n // 目录不存在或读取失败\n }\n \n // 如果当前有活跃状态,确保包含在内\n if (this.state && !workflows.find(w => w.id === this.state?.id)) {\n workflows.unshift(this.state);\n }\n \n return workflows;\n }\n\n /**\n * 解析变更记录\n */\n private parseChangeRecord(content: string): WorkflowState | null {\n try {\n const idMatch = content.match(/^id:\\s*(.+)$/m);\n const titleMatch = content.match(/^title:\\s*(.+)$/m);\n const statusMatch = content.match(/^status:\\s*(.+)$/m);\n const complexityMatch = content.match(/^complexity:\\s*(\\d+)/m);\n const workflowMatch = content.match(/^workflow:\\s*(.+)$/m);\n \n // 解析需求\n const requirementMatch = content.match(/## 变更概述\\s*\\n+([\\s\\S]+?)(?=\\n##|$)/);\n \n if (!idMatch || !titleMatch) return null;\n \n return {\n id: idMatch[1].trim(),\n title: titleMatch[1].trim(),\n status: (statusMatch?.[1].trim() || 'running') as 'running' | 'completed' | 'cancelled',\n requirement: requirementMatch?.[1].trim() || '',\n complexity: parseInt(complexityMatch?.[1] || '5', 10),\n type: (workflowMatch?.[1].trim() || 'simple') as 'simple' | 'complex',\n currentStep: 'propose', // 默认值,实际值需要从状态文件读取\n steps: [],\n artifacts: [],\n createdAt: new Date(),\n };\n } catch {\n return null;\n }\n }\n\n /**\n * 切换到指定工作流\n */\n async switchTo(changeId: string): Promise<boolean> {\n // 保存当前状态\n if (this.state) {\n await this.saveState();\n }\n \n // 查找目标工作流状态文件\n const statePath = path.join(this.openspecPath, '.workflow-states', `${changeId}.json`);\n \n try {\n const content = await fs.readFile(statePath, 'utf-8');\n this.state = JSON.parse(content, (key, value) => {\n if (key.endsWith('At') && typeof value === 'string') {\n return new Date(value);\n }\n return value;\n });\n \n // 恢复快照\n await this.restoreSnapshots();\n \n return true;\n } catch {\n // 尝试从变更记录恢复\n const changesDir = path.join(this.openspecPath, 'changes');\n const changeFile = path.join(changesDir, `${changeId}.md`);\n \n try {\n const content = await fs.readFile(changeFile, 'utf-8');\n const parsed = this.parseChangeRecord(content);\n \n if (parsed && parsed.status === 'running') {\n this.state = parsed;\n return true;\n }\n } catch {\n // 忽略\n }\n \n return false;\n }\n }\n\n /**\n * 获取允许的下一步\n */\n getAllowedTransitions(): WorkflowStep[] {\n if (!this.state) return [];\n return TRANSITIONS[this.state.currentStep] || [];\n }\n\n /**\n * 获取快照历史\n */\n getSnapshots(): WorkflowSnapshot[] {\n return Array.from(this.snapshots.values()).sort(\n (a, b) => a.timestamp.getTime() - b.timestamp.getTime()\n );\n }\n\n /**\n * 完成当前步骤\n */\n async completeCurrentStep(artifacts?: string[]): Promise<void> {\n if (!this.state) return;\n \n const currentStepRecord = this.state.steps.find(\n s => s.step === this.state!.currentStep\n );\n \n if (currentStepRecord) {\n currentStepRecord.status = 'completed';\n currentStepRecord.completedAt = new Date();\n }\n \n if (artifacts) {\n this.state.artifacts.push(...artifacts);\n }\n \n await this.createSnapshot();\n await this.saveState();\n }\n\n /**\n * 归档工作流\n */\n async archive(summary: string): Promise<void> {\n if (!this.state) return;\n \n const changeId = this.state.id;\n \n for (const step of this.state.steps) {\n if (step.status !== 'completed') {\n step.status = 'completed';\n step.completedAt = new Date();\n }\n }\n \n this.state.status = 'completed';\n this.state.completedAt = new Date();\n \n await this.createSpecDocument(summary);\n await this.updateChangeRecord('archived');\n await this.saveState();\n \n const changesDir = path.join(this.openspecPath, 'changes');\n const archiveDir = path.join(changesDir, 'archive');\n const changeFile = path.join(changesDir, `${changeId}.md`);\n const archiveFile = path.join(archiveDir, `${changeId}.md`);\n\n await fs.mkdir(archiveDir, { recursive: true });\n await fs.rename(changeFile, archiveFile).catch(() => {});\n \n this.state = null;\n this.snapshots.clear();\n this.confirmationManager.clearAllConfirmations();\n }\n\n /**\n * 取消工作流\n */\n async cancel(reason: string): Promise<void> {\n if (!this.state) return;\n \n this.state.status = 'cancelled';\n this.state.cancelledAt = new Date();\n this.state.cancelReason = reason;\n \n await this.updateChangeRecord('cancelled');\n await this.saveState();\n \n this.state = null;\n this.snapshots.clear();\n this.confirmationManager.clearAllConfirmations();\n }\n\n // ==================== 私有方法 ====================\n\n private async ensureDirectories(): Promise<void> {\n const changesDir = path.join(this.openspecPath, 'changes');\n const archiveDir = path.join(changesDir, 'archive');\n const specDir = path.join(this.openspecPath, 'spec');\n const statesDir = path.join(this.openspecPath, '.workflow-states');\n \n await fs.mkdir(archiveDir, { recursive: true });\n await fs.mkdir(specDir, { recursive: true });\n await fs.mkdir(statesDir, { recursive: true });\n }\n\n private async restoreState(): Promise<void> {\n // 先尝试读取活跃工作流ID\n const activePath = path.join(this.openspecPath, '.workflow-active.json');\n let activeId: string | null = null;\n \n try {\n const activeContent = await fs.readFile(activePath, 'utf-8');\n const activeData = JSON.parse(activeContent);\n activeId = activeData.activeId;\n } catch {\n // 忽略\n }\n \n // 如果有活跃ID,尝试读取对应的状态文件\n if (activeId) {\n const statePath = path.join(this.openspecPath, '.workflow-states', `${activeId}.json`);\n try {\n const content = await fs.readFile(statePath, 'utf-8');\n this.state = JSON.parse(content, (key, value) => {\n if (key.endsWith('At') && typeof value === 'string') {\n return new Date(value);\n }\n return value;\n });\n return;\n } catch {\n // 忽略,继续尝试旧格式\n }\n }\n \n // 尝试读取旧格式状态文件\n const oldStatePath = path.join(this.openspecPath, '.workflow-state.json');\n try {\n const content = await fs.readFile(oldStatePath, 'utf-8');\n this.state = JSON.parse(content, (key, value) => {\n if (key.endsWith('At') && typeof value === 'string') {\n return new Date(value);\n }\n return value;\n });\n \n // 迁移到新格式\n if (this.state) {\n await this.saveState();\n await fs.unlink(oldStatePath).catch(() => {});\n }\n } catch (e) {\n const err = e as NodeJS.ErrnoException;\n if (err.code !== 'ENOENT') {\n console.warn('警告: 工作流状态文件已损坏,将重新开始');\n }\n this.state = null;\n }\n }\n\n private async saveState(): Promise<void> {\n if (!this.state) return;\n \n // 保存到工作流特定文件\n const statesDir = path.join(this.openspecPath, '.workflow-states');\n await fs.mkdir(statesDir, { recursive: true });\n \n const statePath = path.join(statesDir, `${this.state.id}.json`);\n await fs.writeFile(statePath, JSON.stringify(this.state, null, 2));\n \n // 同时保存当前激活的工作流ID\n const activePath = path.join(this.openspecPath, '.workflow-active.json');\n await fs.writeFile(activePath, JSON.stringify({ activeId: this.state.id }, null, 2));\n }\n\n private async restoreSnapshots(): Promise<void> {\n const snapshotsPath = path.join(this.openspecPath, '.workflow-snapshots.json');\n \n try {\n const content = await fs.readFile(snapshotsPath, 'utf-8');\n const data = JSON.parse(content, (key, value) => {\n if (key === 'timestamp' && typeof value === 'string') {\n return new Date(value);\n }\n return value;\n });\n \n if (Array.isArray(data)) {\n this.snapshots = new Map(data.map((s: WorkflowSnapshot) => [s.step, s]));\n }\n } catch {\n this.snapshots = new Map();\n }\n }\n\n private async saveSnapshots(): Promise<void> {\n const snapshotsPath = path.join(this.openspecPath, '.workflow-snapshots.json');\n const data = Array.from(this.snapshots.values());\n await fs.writeFile(snapshotsPath, JSON.stringify(data, null, 2));\n }\n\n private async createSnapshot(): Promise<void> {\n if (!this.state) return;\n \n const snapshot: WorkflowSnapshot = {\n step: this.state.currentStep,\n timestamp: new Date(),\n state: JSON.parse(JSON.stringify(this.state)),\n artifacts: [...this.state.artifacts],\n };\n \n this.snapshots.set(snapshot.step, snapshot);\n await this.saveSnapshots();\n }\n\n private async generateChangeId(): Promise<string> {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).slice(2, 6);\n return `CHG-${timestamp}-${random}`.toUpperCase();\n }\n\n private async createChangeRecord(): Promise<void> {\n if (!this.state) return;\n \n const changePath = path.join(this.openspecPath, 'changes', `${this.state.id}.md`);\n await fs.writeFile(changePath, this.formatChangeRecord());\n }\n\n private async updateChangeRecord(status?: string): Promise<void> {\n if (!this.state) return;\n \n if (status) {\n (this.state.status as any) = status;\n }\n \n const changePath = path.join(this.openspecPath, 'changes', `${this.state.id}.md`);\n await fs.writeFile(changePath, this.formatChangeRecord());\n }\n\n private formatChangeRecord(): string {\n if (!this.state) return '';\n \n const formatStepTime = (date: Date | string | undefined): string => {\n if (!date) return '-';\n if (typeof date === 'string') return date;\n return date.toISOString();\n };\n\n return `# Change: ${this.state.title}\n\nid: ${this.state.id}\ntitle: ${this.state.title}\nstatus: ${this.state.status}\ncreated: ${this.state.createdAt.toISOString()}\n${this.state.completedAt ? `completed: ${formatStepTime(this.state.completedAt)}` : ''}\ncomplexity: ${this.state.complexity}/10\nworkflow: ${this.state.type}\nspec: spec/${this.state.id}.md\n\n---\n\n## 变更概述\n\n${this.state.requirement}\n\n## 工作流执行记录\n\n| 阶段 | 开始时间 | 结束时间 | 状态 |\n|------|----------|----------|------|\n${this.state.steps.map(s => `| ${s.step} | ${formatStepTime(s.startedAt)} | ${formatStepTime(s.completedAt)} | ${s.status} |`).join('\\n')}\n\n## 产物文件\n\n${this.state.artifacts.map(a => `- ${a}`).join('\\n') || '暂无'}\n`;\n }\n\n private async createSpecDocument(summary: string): Promise<void> {\n if (!this.state) return;\n \n const specPath = path.join(this.openspecPath, 'spec', `${this.state.id}.md`);\n \n const content = `# Spec: ${this.state.title}\n\n> 变更ID: ${this.state.id}\n> 归档时间: ${new Date().toISOString()}\n> 工作流类型: ${this.state.type}\n\n---\n\n## 概述\n\n${this.state.requirement}\n\n## 实现总结\n\n${summary}\n\n## 验收结果\n\n${this.state.steps.map(s => `- [${s.status === 'completed' ? 'x' : ' '}] ${s.step}`).join('\\n')}\n\n## 相关文件\n\n${this.state.artifacts.map(a => `- ${a}`).join('\\n') || '暂无'}\n`;\n \n await fs.writeFile(specPath, content);\n }\n}\n\n/**\n * 确认点需要确认错误\n */\nexport class ConfirmationRequiredError extends Error {\n constructor(\n message: string,\n public readonly point: ConfirmationPoint\n ) {\n super(message);\n this.name = 'ConfirmationRequiredError';\n }\n}\n\nexport default WorkflowEngine;\n","/**\n * 工作流确认点系统\n * 在关键节点要求开发者确认才能继续\n */\n\nimport { WorkflowStep } from '../types';\n\n/**\n * 确认点类型\n */\nexport type ConfirmationPointType = \n | 'spec-review' // 规范拆解确认\n | 'architecture' // 架构调整确认\n | 'code-review'; // 代码审查确认\n\n/**\n * 确认点定义\n */\nexport interface ConfirmationPoint {\n type: ConfirmationPointType;\n name: string;\n description: string;\n triggerStep: WorkflowStep; // 触发阶段(该阶段完成后)\n targetStep: WorkflowStep; // 目标阶段(确认后进入)\n required: boolean; // 是否必须确认\n timeout?: number; // 超时时间(毫秒),超时后自动通过\n}\n\n/**\n * 确认状态\n */\nexport interface ConfirmationStatus {\n type: ConfirmationPointType;\n confirmed: boolean;\n confirmedAt?: Date;\n confirmedBy?: string;\n comment?: string;\n}\n\n// 默认确认点配置\nconst DEFAULT_CONFIRMATION_POINTS: ConfirmationPoint[] = [\n {\n type: 'spec-review',\n name: '规格确认',\n description: '规格拆分已完成,请确认规格文件后继续',\n triggerStep: 'explore',\n targetStep: 'new',\n required: true,\n },\n {\n type: 'spec-review',\n name: '规格确认',\n description: '规格拆分已完成,请确认规格文件后继续',\n triggerStep: 'propose',\n targetStep: 'apply',\n required: true,\n },\n {\n type: 'architecture',\n name: '架构调整确认',\n description: '设计方案已完成,请确认架构设计是否合理',\n triggerStep: 'new',\n targetStep: 'continue',\n required: true,\n },\n {\n type: 'code-review',\n name: '代码审查确认',\n description: '代码审查已完成,请确认是否可以归档',\n triggerStep: 'apply',\n targetStep: 'archive',\n required: true,\n },\n];\n\n/**\n * 回滚规则\n * 定义从哪些阶段可以回滚到哪些阶段\n * \n * 复杂流程: explore → new → continue → apply → archive\n * 简单流程: propose → apply → archive\n */\nexport const ROLLBACK_RULES: Record<WorkflowStep, WorkflowStep[]> = {\n 'explore': [], // 初始阶段不可回滚\n 'new': ['explore'], // 可回滚到 explore\n 'continue': ['new', 'explore'], // 可回滚到 new 或 explore\n 'propose': ['propose'], // 可重新生成规格(回滚到自身)\n 'apply': ['new', 'explore', 'propose'], // 代码审查未通过,可回滚到 new/explore (复杂) 或 propose (简单)\n 'archive': [], // 已归档不可回滚\n};\n\n/**\n * 回滚原因类型\n */\nexport type RollbackReason = \n | 'code-review-failed' // 代码审查未通过\n | 'requirement-changed' // 需求变更\n | 'design-issue' // 设计问题\n | 'user-request'; // 用户请求\n\n/**\n * 回滚请求\n */\nexport interface RollbackRequest {\n fromStep: WorkflowStep;\n toStep: WorkflowStep;\n reason: RollbackReason;\n description: string;\n timestamp: Date;\n}\n\n/**\n * 确认点管理器\n */\nexport class ConfirmationManager {\n private confirmationPoints: ConfirmationPoint[];\n private confirmations: Map<ConfirmationPointType, ConfirmationStatus> = new Map();\n\n constructor(customPoints?: ConfirmationPoint[]) {\n this.confirmationPoints = customPoints || DEFAULT_CONFIRMATION_POINTS;\n }\n\n /**\n * 获取指定阶段的确认点\n */\n getConfirmationPointForTransition(from: WorkflowStep, to: WorkflowStep): ConfirmationPoint | undefined {\n return this.confirmationPoints.find(\n point => point.triggerStep === from && point.targetStep === to\n );\n }\n\n /**\n * 检查是否需要确认\n */\n needsConfirmation(from: WorkflowStep, to: WorkflowStep): boolean {\n const point = this.getConfirmationPointForTransition(from, to);\n return point !== undefined && point.required;\n }\n\n /**\n * 获取确认点详情\n */\n getConfirmationPoint(type: ConfirmationPointType): ConfirmationPoint | undefined {\n return this.confirmationPoints.find(point => point.type === type);\n }\n\n /**\n * 记录确认\n */\n confirm(type: ConfirmationPointType, comment?: string): ConfirmationStatus {\n const status: ConfirmationStatus = {\n type,\n confirmed: true,\n confirmedAt: new Date(),\n comment,\n };\n this.confirmations.set(type, status);\n return status;\n }\n\n /**\n * 获取确认状态\n */\n getConfirmationStatus(type: ConfirmationPointType): ConfirmationStatus | undefined {\n return this.confirmations.get(type);\n }\n\n /**\n * 检查确认点是否已确认\n */\n isConfirmed(type: ConfirmationPointType): boolean {\n const status = this.confirmations.get(type);\n return status?.confirmed ?? false;\n }\n\n /**\n * 清除确认状态(用于回滚后)\n */\n clearConfirmation(type: ConfirmationPointType): void {\n this.confirmations.delete(type);\n }\n\n /**\n * 清除所有确认状态\n */\n clearAllConfirmations(): void {\n this.confirmations.clear();\n }\n\n /**\n * 获取所有确认点\n */\n getAllConfirmationPoints(): ConfirmationPoint[] {\n return [...this.confirmationPoints];\n }\n\n /**\n * 获取指定阶段需要清除的确认点\n */\n getConfirmationsToClear(targetStep: WorkflowStep): ConfirmationPointType[] {\n const types: ConfirmationPointType[] = [];\n \n for (const point of this.confirmationPoints) {\n // 如果回滚目标在该确认点之前,需要清除该确认\n const stepOrder: WorkflowStep[] = ['explore', 'new', 'continue', 'propose', 'apply', 'archive'];\n const targetIndex = stepOrder.indexOf(targetStep);\n const triggerIndex = stepOrder.indexOf(point.triggerStep);\n \n if (triggerIndex >= targetIndex) {\n types.push(point.type);\n }\n }\n \n return types;\n }\n}\n\n/**\n * 生成确认提示消息\n */\nexport function generateConfirmationPrompt(point: ConfirmationPoint): string {\n let prompt = `📋 ${point.name}\\n\\n`;\n prompt += `${point.description}\\n\\n`;\n prompt += `确认选项:\\n`;\n prompt += ` y - 确认继续\\n`;\n prompt += ` n - 拒绝,暂停流程\\n`;\n prompt += ` r - 请求修改\\n`;\n \n if (!point.required) {\n prompt += `\\n提示: 此确认点为非必须项`;\n }\n \n return prompt;\n}\n\n/**\n * 生成回滚选项提示\n */\nexport function generateRollbackPrompt(fromStep: WorkflowStep): string {\n const allowedTargets = ROLLBACK_RULES[fromStep] || [];\n \n if (allowedTargets.length === 0) {\n return `当前阶段 ${fromStep} 不支持回滚`;\n }\n \n let prompt = `🔄 回滚选项\\n\\n`;\n prompt += `当前阶段: ${fromStep}\\n`;\n prompt += `可回滚到:\\n`;\n \n for (const target of allowedTargets) {\n prompt += ` ${target}\\n`;\n }\n \n prompt += `\\n请选择回滚目标阶段`;\n \n return prompt;\n}\n\nexport default ConfirmationManager;","/**\n * 规范学习系统\n * 从代码分析和对话中学习开发规范\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { DevStandard, StandardWeight } from '../types';\n\n// 配置常量\nconst MAX_FILE_SIZE = 1024 * 1024; // 1MB\nconst MAX_FILES_TO_SCAN = 500;\nconst IGNORED_DIRS = ['node_modules', 'dist', 'build', '.git', 'coverage', '.next', '.nuxt'];\nconst SCAN_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx', '.vue', '.css', '.scss', '.less', '.md'];\n\nexport interface NormsConfig {\n projectPath: string;\n normsDir: string;\n}\n\nexport interface PatternOccurrence {\n patternId: string;\n timestamp: Date;\n source: 'code-analysis' | 'conversation' | 'forced';\n context: string;\n filePath?: string;\n}\n\nexport interface ScanResult {\n filesScanned: number;\n patternsFound: number;\n standardsExtracted: number;\n duration: number;\n errors: string[];\n}\n\nexport interface ValidationResult {\n isValid: boolean;\n violations: StandardViolation[];\n suggestions: string[];\n}\n\nexport interface StandardViolation {\n standardId: string;\n description: string;\n severity: 'error' | 'warning' | 'info';\n suggestion: string;\n}\n\nexport interface StandardHint {\n standardId: string;\n category: string;\n hint: string;\n weight: number;\n}\n\n/**\n * 规范管理器\n * 负责从代码和对话中学习开发规范\n */\nexport class NormsManager {\n private config: NormsConfig;\n private standards: Map<string, DevStandard> = new Map();\n private weights: Map<string, StandardWeight> = new Map();\n private occurrences: PatternOccurrence[] = [];\n private initialized: boolean = false;\n\n constructor(config: NormsConfig) {\n this.config = config;\n }\n\n async initialize(): Promise<void> {\n if (this.initialized) return;\n \n await this.ensureNormsDir();\n await this.loadStandards();\n await this.loadWeights();\n this.initialized = true;\n }\n\n /**\n * 扫描整个项目\n */\n async scanProject(projectPath: string): Promise<ScanResult> {\n const startTime = Date.now();\n const result: ScanResult = {\n filesScanned: 0,\n patternsFound: 0,\n standardsExtracted: 0,\n duration: 0,\n errors: [],\n };\n\n try {\n const files = await this.collectProjectFiles(projectPath);\n \n for (const filePath of files.slice(0, MAX_FILES_TO_SCAN)) {\n try {\n const stats = await fs.stat(filePath);\n if (stats.size > MAX_FILE_SIZE) {\n continue;\n }\n\n const content = await fs.readFile(filePath, 'utf-8');\n const patterns = await this.learnFromFile(filePath, content);\n result.patternsFound += patterns.length;\n result.filesScanned++;\n } catch (e) {\n const err = e as NodeJS.ErrnoException;\n result.errors.push(`${filePath}: ${err.message}`);\n }\n }\n\n // 提取有效规范\n result.standardsExtracted = this.getEffectiveStandards().length;\n \n // 保存结果\n await this.saveStandards();\n await this.saveWeights();\n await this.updateDevStandedMd();\n \n } catch (error) {\n result.errors.push((error as Error).message);\n }\n\n result.duration = Date.now() - startTime;\n return result;\n }\n\n /**\n * 从单个文件学习规范\n */\n async learnFromFile(filePath: string, content: string): Promise<DevStandard[]> {\n const ext = path.extname(filePath);\n const patterns = this.extractPatterns(filePath, content, ext);\n \n for (const pattern of patterns) {\n await this.recordOccurrence({\n patternId: pattern.id,\n timestamp: new Date(),\n source: 'code-analysis',\n context: `文件: ${filePath}`,\n filePath,\n });\n }\n \n return patterns;\n }\n\n /**\n * 从对话中沉淀规范\n */\n async learnFromConversation(\n message: string,\n response: string\n ): Promise<DevStandard[]> {\n const extractedStandards = this.extractStandardsFromConversation(\n message,\n response\n );\n \n for (const standard of extractedStandards) {\n await this.addOrUpdateStandard(standard);\n }\n \n return extractedStandards;\n }\n\n /**\n * 添加强制规范\n */\n async addForcedStandard(standard: Omit<DevStandard, 'source' | 'weight' | 'createdAt' | 'updatedAt'>): Promise<void> {\n const fullStandard: DevStandard = {\n ...standard,\n source: 'forced',\n weight: 95,\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n \n this.standards.set(fullStandard.id, fullStandard);\n this.weights.set(fullStandard.id, {\n standardId: fullStandard.id,\n weight: 95,\n occurrences: 1,\n lastOccurrence: new Date(),\n });\n \n await this.saveStandards();\n await this.saveWeights();\n }\n\n /**\n * 获取适用规范\n */\n getApplicableStandards(context: string): DevStandard[] {\n const allStandards = this.getEffectiveStandards();\n const contextLower = context.toLowerCase();\n \n return allStandards.filter(standard => {\n // 根据上下文关键词过滤\n const category = standard.category.toLowerCase();\n \n if (contextLower.includes('react') && category === 'react') return true;\n if (contextLower.includes('vue') && category === 'vue') return true;\n if (contextLower.includes('typescript') && category === 'typescript') return true;\n if (contextLower.includes('css') && category === 'style') return true;\n if (contextLower.includes('test') && category === 'testing') return true;\n if (contextLower.includes('security') && category === 'security') return true;\n \n // 通用规范总是返回\n if (category === 'best-practice' || category === 'standard') return true;\n \n return false;\n });\n }\n\n /**\n * 验证代码是否符合规范\n */\n validateAgainstStandards(code: string, standards?: DevStandard[]): ValidationResult {\n // 默认使用所有有效规范(权重>=50)\n const targetStandards = standards || this.getEffectiveStandards(50);\n const violations: StandardViolation[] = [];\n const suggestions: string[] = [];\n\n for (const standard of targetStandards) {\n const violation = this.checkViolation(code, standard);\n if (violation) {\n violations.push(violation);\n }\n }\n\n // 生成建议\n for (const standard of this.getEffectiveStandards(50)) {\n if (!violations.some(v => v.standardId === standard.id)) {\n suggestions.push(`建议: ${standard.description}`);\n }\n }\n\n return {\n isValid: violations.filter(v => v.severity === 'error').length === 0,\n violations,\n suggestions: suggestions.slice(0, 5),\n };\n }\n\n /**\n * 获取规范提示\n */\n getStandardHints(context: string): StandardHint[] {\n const standards = this.getApplicableStandards(context);\n \n return standards.map(standard => ({\n standardId: standard.id,\n category: standard.category,\n hint: standard.description,\n weight: standard.weight,\n }));\n }\n\n /**\n * 记录规范出现\n */\n async recordOccurrence(occurrence: PatternOccurrence): Promise<void> {\n this.occurrences.push(occurrence);\n \n // 更新权重\n const existingWeight = this.weights.get(occurrence.patternId);\n if (existingWeight) {\n existingWeight.occurrences += 1;\n existingWeight.weight = this.calculateWeight(existingWeight, occurrence.source);\n existingWeight.lastOccurrence = occurrence.timestamp;\n } else {\n this.weights.set(occurrence.patternId, {\n standardId: occurrence.patternId,\n weight: this.getInitialWeight(occurrence.source),\n occurrences: 1,\n lastOccurrence: occurrence.timestamp,\n });\n }\n }\n\n /**\n * 获取有效规范(按权重排序)\n */\n getEffectiveStandards(minWeight: number = 50): DevStandard[] {\n const effective: DevStandard[] = [];\n \n for (const [id, standard] of this.standards) {\n const weight = this.weights.get(id);\n if (weight && weight.weight >= minWeight) {\n effective.push({\n ...standard,\n weight: weight.weight,\n });\n }\n }\n \n return effective.sort((a, b) => b.weight - a.weight);\n }\n\n /**\n * 每周汇总更新\n */\n async weeklyAggregate(): Promise<void> {\n const weekId = this.getWeekId();\n const report = this.generateWeeklyReport();\n \n await this.saveWeeklyReport(weekId, report);\n await this.updateDevStandedMd();\n this.cleanupOldOccurrences();\n \n await this.saveStandards();\n await this.saveWeights();\n }\n\n // ==================== 私有方法 ====================\n\n /**\n * 提取代码模式\n */\n private extractPatterns(filePath: string, content: string, ext: string): DevStandard[] {\n const patterns: DevStandard[] = [];\n\n // TypeScript 模式\n if (['.ts', '.tsx'].includes(ext)) {\n patterns.push(...this.extractTypeScriptPatterns(content));\n // TypeScript 文件也检查 JavaScript 模式\n patterns.push(...this.extractJavaScriptPatterns(content));\n }\n\n // JavaScript 模式\n if (['.js', '.jsx'].includes(ext)) {\n patterns.push(...this.extractJavaScriptPatterns(content));\n }\n\n // React 模式 (.tsx 和 .jsx 文件)\n if (['.tsx', '.jsx'].includes(ext)) {\n patterns.push(...this.extractReactPatterns(content));\n }\n\n // Vue 模式\n if (ext === '.vue') {\n patterns.push(...this.extractVuePatterns(content));\n }\n\n // CSS 模式\n if (['.css', '.scss', '.less'].includes(ext)) {\n patterns.push(...this.extractStylePatterns(content, ext));\n }\n\n // Markdown 模式\n if (ext === '.md') {\n patterns.push(...this.extractMarkdownPatterns(content));\n }\n\n // 通用模式(所有文件)\n patterns.push(...this.extractCommonPatterns(content, filePath));\n\n return patterns;\n }\n\n /**\n * TypeScript 模式检测\n */\n private extractTypeScriptPatterns(content: string): DevStandard[] {\n const patterns: DevStandard[] = [];\n\n // 类型定义\n if (this.hasTypeAnnotations(content)) {\n patterns.push(this.createPattern(\n 'ts-type-annotations',\n 'typescript',\n '函数参数和返回值需要类型定义'\n ));\n }\n\n // 泛型使用\n if (/<\\w+>/.test(content)) {\n patterns.push(this.createPattern(\n 'ts-generics',\n 'typescript',\n '使用泛型增强类型安全性'\n ));\n }\n\n // 接口定义\n if (/interface\\s+\\w+/.test(content)) {\n patterns.push(this.createPattern(\n 'ts-interfaces',\n 'typescript',\n '使用接口定义数据结构'\n ));\n }\n\n // 类型守卫\n if (/is\\s+\\w+\\s*\\)|typeof\\s+\\w+\\s*===|instanceof\\s+\\w+/.test(content)) {\n patterns.push(this.createPattern(\n 'ts-type-guards',\n 'typescript',\n '使用类型守卫进行运行时类型检查'\n ));\n }\n\n // 枚举使用\n if (/enum\\s+\\w+/.test(content)) {\n patterns.push(this.createPattern(\n 'ts-enums',\n 'typescript',\n '使用枚举定义常量集合'\n ));\n }\n\n // 可选链和空值合并\n if (/\\?\\.|\\?\\?/.test(content)) {\n patterns.push(this.createPattern(\n 'ts-null-safety',\n 'typescript',\n '使用可选链和空值合并运算符处理空值'\n ));\n }\n\n return patterns;\n }\n\n /**\n * JavaScript 模式检测\n */\n private extractJavaScriptPatterns(content: string): DevStandard[] {\n const patterns: DevStandard[] = [];\n\n // ES模块导入\n if (/import\\s+.*from/.test(content)) {\n patterns.push(this.createPattern(\n 'js-esm-import',\n 'best-practice',\n '使用ES模块语法导入'\n ));\n }\n\n // 解构赋值\n if (/const\\s*\\{[^}]+\\}\\s*=|const\\s*\\[[^\\]]+\\]\\s*=/.test(content)) {\n patterns.push(this.createPattern(\n 'js-destructuring',\n 'best-practice',\n '使用解构赋值简化代码'\n ));\n }\n\n // 箭头函数\n if (/=>\\s*{|\\w+\\s*=>\\s*\\w/.test(content)) {\n patterns.push(this.createPattern(\n 'js-arrow-functions',\n 'best-practice',\n '使用箭头函数定义回调'\n ));\n }\n\n // async/await\n if (/async\\s+function|async\\s+\\w+\\s*\\(|await\\s+/.test(content)) {\n patterns.push(this.createPattern(\n 'js-async-await',\n 'best-practice',\n '使用async/await处理异步操作'\n ));\n }\n\n return patterns;\n }\n\n /**\n * React 模式检测\n */\n private extractReactPatterns(content: string): DevStandard[] {\n const patterns: DevStandard[] = [];\n\n // React 导入\n if (/import\\s+.*React.*from\\s+['\"]react['\"]/i.test(content)) {\n patterns.push(this.createPattern(\n 'react-import',\n 'react',\n '使用React模块导入'\n ));\n }\n\n // React.FC 类型\n if (/React\\.FC|React\\.FunctionComponent/i.test(content)) {\n patterns.push(this.createPattern(\n 'react-fc-type',\n 'react',\n '使用React.FC定义组件类型'\n ));\n }\n\n // Hooks 使用\n if (/use[A-Z]\\w+\\s*\\(/.test(content)) {\n patterns.push(this.createPattern(\n 'react-hooks',\n 'react',\n '使用React Hooks'\n ));\n }\n\n // useState\n if (/useState\\s*</.test(content)) {\n patterns.push(this.createPattern(\n 'react-usestate-typed',\n 'react',\n 'useState使用泛型指定类型'\n ));\n }\n\n // useEffect\n if (/useEffect\\s*\\(/.test(content)) {\n patterns.push(this.createPattern(\n 'react-useeffect',\n 'react',\n '使用useEffect处理副作用'\n ));\n }\n\n // useCallback/useMemo\n if (/useCallback|useMemo/.test(content)) {\n patterns.push(this.createPattern(\n 'react-memoization',\n 'react',\n '使用useCallback/useMemo优化性能'\n ));\n }\n\n // JSX 返回\n if (/=>\\s*\\([\\s\\S]*?<[\\w]/.test(content) || /=>\\s*<[\\w]/.test(content)) {\n patterns.push(this.createPattern(\n 'react-jsx-return',\n 'react',\n '组件返回JSX'\n ));\n }\n\n return patterns;\n }\n\n /**\n * Vue 模式检测\n */\n private extractVuePatterns(content: string): DevStandard[] {\n const patterns: DevStandard[] = [];\n\n // 组合式API\n if (/<script\\s+setup|setup\\s*\\(\\)/.test(content)) {\n patterns.push(this.createPattern(\n 'vue-composition-api',\n 'vue',\n '使用组合式API (Composition API)'\n ));\n }\n\n // ref/reactive\n if (/ref\\(|reactive\\(/.test(content)) {\n patterns.push(this.createPattern(\n 'vue-reactivity',\n 'vue',\n '使用ref/reactive定义响应式数据'\n ));\n }\n\n // computed\n if (/computed\\s*\\(/.test(content)) {\n patterns.push(this.createPattern(\n 'vue-computed',\n 'vue',\n '使用computed定义计算属性'\n ));\n }\n\n // 生命周期钩子\n if (/onMounted|onUnmounted|onUpdated|onBeforeMount/.test(content)) {\n patterns.push(this.createPattern(\n 'vue-lifecycle-hooks',\n 'vue',\n '使用组合式API生命周期钩子'\n ));\n }\n\n // Props定义\n if (/defineProps|props\\s*:/.test(content)) {\n patterns.push(this.createPattern(\n 'vue-props',\n 'vue',\n '明确定义组件Props'\n ));\n }\n\n // Emits定义\n if (/defineEmits|emits\\s*:/.test(content)) {\n patterns.push(this.createPattern(\n 'vue-emits',\n 'vue',\n '明确定义组件Emits'\n ));\n }\n\n return patterns;\n }\n\n /**\n * 样式模式检测\n */\n private extractStylePatterns(content: string, ext: string): DevStandard[] {\n const patterns: DevStandard[] = [];\n\n // CSS模块\n if (ext === '.css' && /\\.module\\.css$/.test(content) || /composes\\s*:/.test(content)) {\n patterns.push(this.createPattern(\n 'css-modules',\n 'style',\n '使用CSS Modules进行样式隔离'\n ));\n }\n\n // BEM命名\n if (/\\w+__\\w+|\\\\w+--\\w+/.test(content)) {\n patterns.push(this.createPattern(\n 'css-bem',\n 'style',\n '使用BEM命名规范'\n ));\n }\n\n // CSS变量\n if (/--[a-z][\\w-]*\\s*:/.test(content)) {\n patterns.push(this.createPattern(\n 'css-variables',\n 'style',\n '使用CSS变量定义主题'\n ));\n }\n\n // Flexbox/Grid\n if (/display\\s*:\\s*flex|display\\s*:\\s*grid/.test(content)) {\n patterns.push(this.createPattern(\n 'css-modern-layout',\n 'style',\n '使用Flexbox/Grid布局'\n ));\n }\n\n // SCSS特性\n if (ext === '.scss' && /@mixin|@include|@extend|\\$[\\w-]+/.test(content)) {\n patterns.push(this.createPattern(\n 'scss-features',\n 'style',\n '使用SCSS预处理器特性'\n ));\n }\n\n return patterns;\n }\n\n /**\n * Markdown 模式检测\n */\n private extractMarkdownPatterns(content: string): DevStandard[] {\n const patterns: DevStandard[] = [];\n\n // 文档结构\n if (/^#\\s+.+/m.test(content) && /^##\\s+.+/m.test(content)) {\n patterns.push(this.createPattern(\n 'md-structure',\n 'documentation',\n '文档使用层级标题结构'\n ));\n }\n\n // 代码块\n if (/```[\\s\\S]*?```/.test(content)) {\n patterns.push(this.createPattern(\n 'md-code-blocks',\n 'documentation',\n '文档包含代码示例'\n ));\n }\n\n // 表格\n if (/\\|.+\\|[\\r\\n]+\\|[-|]+\\|/.test(content)) {\n patterns.push(this.createPattern(\n 'md-tables',\n 'documentation',\n '文档使用表格展示信息'\n ));\n }\n\n return patterns;\n }\n\n /**\n * 通用模式检测\n */\n private extractCommonPatterns(content: string, filePath: string): DevStandard[] {\n const patterns: DevStandard[] = [];\n\n // 错误处理\n if (/try\\s*\\{[\\s\\S]*\\}\\s*catch/.test(content)) {\n patterns.push(this.createPattern(\n 'error-handling',\n 'best-practice',\n '异步操作包含错误处理'\n ));\n }\n\n // console.log使用(反模式)\n if (/console\\.log\\(/.test(content) && !filePath.includes('.test.')) {\n patterns.push(this.createPattern(\n 'avoid-console-log',\n 'prohibition',\n '生产代码中避免使用console.log'\n ));\n }\n\n // 安全:XSS防护\n if (/dangerouslySetInnerHTML|v-html/.test(content)) {\n patterns.push(this.createPattern(\n 'security-xss-risk',\n 'security',\n '注意XSS风险,谨慎使用HTML注入'\n ));\n }\n\n // 安全:敏感数据\n if (/password|secret|api_?key|token/i.test(content) && !filePath.includes('.test.')) {\n patterns.push(this.createPattern(\n 'security-sensitive-data',\n 'security',\n '敏感数据处理需要加密存储'\n ));\n }\n\n // 测试文件\n if (filePath.includes('.test.') || filePath.includes('.spec.')) {\n patterns.push(this.createPattern(\n 'testing-files',\n 'testing',\n '项目包含测试文件'\n ));\n }\n\n return patterns;\n }\n\n /**\n * 从对话中提取规范\n */\n private extractStandardsFromConversation(\n message: string,\n response: string\n ): DevStandard[] {\n const standards: DevStandard[] = [];\n const combined = `${message}\\n${response}`;\n\n const keywordPatterns = [\n { pattern: /应该|需要|必须/g, category: 'requirement' },\n { pattern: /规范|标准|约定/g, category: 'standard' },\n { pattern: /不要|禁止|避免/g, category: 'prohibition' },\n { pattern: /建议|推荐|最好/g, category: 'suggestion' },\n ];\n\n for (const { pattern, category } of keywordPatterns) {\n const matches = combined.match(pattern);\n if (matches && matches.length >= 2) {\n const sentences = combined.split(/[。!?\\n]/);\n for (const sentence of sentences) {\n if (pattern.test(sentence) && sentence.trim().length > 5 && sentence.trim().length < 200) {\n standards.push({\n id: `conv-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,\n category,\n description: sentence.trim(),\n weight: 40,\n source: 'conversation',\n examples: [],\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n }\n }\n }\n }\n\n return standards;\n }\n\n /**\n * 创建规范模式\n */\n private createPattern(id: string, category: string, description: string): DevStandard {\n // 如果已存在相同ID,返回已存在的\n const existing = this.standards.get(id);\n if (existing) {\n return existing;\n }\n\n const standard: DevStandard = {\n id,\n category,\n description,\n weight: 0,\n source: 'code-analysis',\n examples: [],\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n\n this.standards.set(id, standard);\n return standard;\n }\n\n /**\n * 检查代码违规\n */\n private checkViolation(code: string, standard: DevStandard): StandardViolation | null {\n // 根据规范类型检查\n switch (standard.id) {\n case 'avoid-console-log':\n if (code.includes('console.log(')) {\n return {\n standardId: standard.id,\n description: '代码中包含console.log',\n severity: 'warning',\n suggestion: '使用logger工具替代console.log',\n };\n }\n break;\n\n case 'security-xss-risk':\n if (code.includes('dangerouslySetInnerHTML') && !code.includes('DOMPurify')) {\n return {\n standardId: standard.id,\n description: '使用dangerouslySetInnerHTML但未进行XSS过滤',\n severity: 'error',\n suggestion: '使用DOMPurify对HTML内容进行过滤',\n };\n }\n break;\n\n case 'error-handling':\n if (/async\\s+\\w+|await\\s+/.test(code) && !/try\\s*\\{/.test(code)) {\n return {\n standardId: standard.id,\n description: '异步操作缺少错误处理',\n severity: 'warning',\n suggestion: '使用try-catch包裹异步操作',\n };\n }\n break;\n }\n\n return null;\n }\n\n /**\n * 计算权重\n */\n private calculateWeight(weight: StandardWeight, source: string): number {\n const baseWeight = weight.weight;\n const increment = source === 'conversation' ? 5 : 2;\n \n // 权重衰减:时间越久,权重越低\n const daysSinceLastOccurrence = \n (Date.now() - weight.lastOccurrence.getTime()) / (1000 * 60 * 60 * 24);\n const decayFactor = Math.max(0.95, 1 - daysSinceLastOccurrence * 0.01);\n \n return Math.min(100, Math.round(baseWeight * decayFactor + increment));\n }\n\n /**\n * 获取初始权重\n */\n private getInitialWeight(source: string): number {\n switch (source) {\n case 'forced': return 95;\n case 'conversation': return 40;\n case 'code-analysis': return 60;\n default: return 50;\n }\n }\n\n /**\n * 收集项目文件\n */\n private async collectProjectFiles(projectPath: string): Promise<string[]> {\n const files: string[] = [];\n \n async function scan(dir: string): Promise<void> {\n try {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n \n for (const entry of entries) {\n if (entry.isDirectory()) {\n if (!IGNORED_DIRS.includes(entry.name)) {\n await scan(path.join(dir, entry.name));\n }\n } else if (entry.isFile()) {\n const ext = path.extname(entry.name);\n if (SCAN_EXTENSIONS.includes(ext)) {\n files.push(path.join(dir, entry.name));\n }\n }\n }\n } catch {\n // 忽略无法访问的目录\n }\n }\n \n await scan(projectPath);\n return files;\n }\n\n /**\n * 添加或更新规范\n */\n private async addOrUpdateStandard(standard: DevStandard): Promise<void> {\n const existing = this.standards.get(standard.id);\n\n if (existing) {\n existing.updatedAt = new Date();\n if (standard.examples.length > 0) {\n existing.examples.push(...standard.examples);\n }\n } else {\n this.standards.set(standard.id, standard);\n }\n\n await this.recordOccurrence({\n patternId: standard.id,\n timestamp: new Date(),\n source: 'conversation',\n context: standard.description,\n });\n }\n\n /**\n * 确保规范目录存在\n */\n private async ensureNormsDir(): Promise<void> {\n await fs.mkdir(this.config.normsDir, { recursive: true });\n await fs.mkdir(path.join(this.config.normsDir, 'weekly'), { recursive: true });\n }\n\n /**\n * 加载已有规范\n */\n private async loadStandards(): Promise<void> {\n const standardsPath = path.join(this.config.normsDir, 'patterns.json');\n\n try {\n const content = await fs.readFile(standardsPath, 'utf-8');\n const data = JSON.parse(content) as DevStandard[];\n\n for (const standard of data) {\n this.standards.set(standard.id, {\n ...standard,\n createdAt: new Date(standard.createdAt),\n updatedAt: new Date(standard.updatedAt),\n });\n }\n } catch {\n // 文件不存在,使用空规范集\n }\n }\n\n /**\n * 加载权重数据\n */\n private async loadWeights(): Promise<void> {\n const weightsPath = path.join(this.config.normsDir, 'weights.json');\n\n try {\n const content = await fs.readFile(weightsPath, 'utf-8');\n const data = JSON.parse(content) as StandardWeight[];\n\n for (const weight of data) {\n this.weights.set(weight.standardId, {\n ...weight,\n lastOccurrence: new Date(weight.lastOccurrence),\n });\n }\n } catch {\n // 文件不存在,使用空权重集\n }\n }\n\n /**\n * 保存规范\n */\n async saveStandards(): Promise<void> {\n const standardsPath = path.join(this.config.normsDir, 'patterns.json');\n await fs.writeFile(\n standardsPath,\n JSON.stringify(Array.from(this.standards.values()), null, 2),\n 'utf-8'\n );\n }\n\n /**\n * 保存权重\n */\n async saveWeights(): Promise<void> {\n const weightsPath = path.join(this.config.normsDir, 'weights.json');\n await fs.writeFile(\n weightsPath,\n JSON.stringify(Array.from(this.weights.values()), null, 2),\n 'utf-8'\n );\n }\n\n /**\n * 生成周报\n */\n private generateWeeklyReport(): WeeklyReport {\n const effectiveStandards = this.getEffectiveStandards();\n\n return {\n weekId: this.getWeekId(),\n generatedAt: new Date(),\n totalPatterns: this.standards.size,\n effectiveStandards: effectiveStandards.length,\n newStandards: this.occurrences.filter(\n o => o.timestamp > this.getWeekStart()\n ).length,\n topStandards: effectiveStandards.slice(0, 10),\n categoryBreakdown: this.getCategoryBreakdown(),\n };\n }\n\n /**\n * 保存周报\n */\n private async saveWeeklyReport(weekId: string, report: WeeklyReport): Promise<void> {\n const reportPath = path.join(this.config.normsDir, 'weekly', `${weekId}.json`);\n await fs.writeFile(reportPath, JSON.stringify(report, null, 2), 'utf-8');\n }\n\n /**\n * 更新 devstanded.md\n */\n private async updateDevStandedMd(): Promise<void> {\n const standards = this.getEffectiveStandards();\n const content = this.generateDevStandedMd(standards);\n\n const mdPath = path.join(this.config.normsDir, 'devstanded.md');\n await fs.writeFile(mdPath, content, 'utf-8');\n }\n\n /**\n * 生成 devstanded.md 内容\n */\n private generateDevStandedMd(standards: DevStandard[]): string {\n const categories = this.groupByCategory(standards);\n const date = new Date().toISOString().split('T')[0];\n\n let md = `# 开发规范文档 (devstanded.md)\n\n> 版本: v1.0.0\n> 最后更新: ${date}\n> 更新频率: 每周汇总\n\n---\n\n## 规范概述\n\n本文档记录从项目代码分析和用户对话中沉淀的开发规范。\n\n**有效规范总数**: ${standards.length}\n\n---\n\n`;\n\n const categoryNames: Record<string, string> = {\n 'typescript': 'TypeScript规范',\n 'react': 'React规范',\n 'vue': 'Vue规范',\n 'style': '样式规范',\n 'best-practice': '最佳实践',\n 'requirement': '需求规范',\n 'standard': '开发标准',\n 'prohibition': '禁止事项',\n 'suggestion': '建议规范',\n 'security': '安全规范',\n 'testing': '测试规范',\n 'documentation': '文档规范',\n };\n\n for (const [category, categoryStandards] of Object.entries(categories)) {\n const categoryName = categoryNames[category] || category;\n md += `## ${categoryName}\\n\\n`;\n\n for (const standard of categoryStandards) {\n const level = this.getWeightLevel(standard.weight);\n const sourceLabel = standard.source === 'code-analysis' ? '代码分析' : \n standard.source === 'conversation' ? '对话沉淀' : '强制规范';\n\n md += `### ${standard.description}\\n\\n`;\n md += `| 属性 | 值 |\\n`;\n md += `|------|-----|\\n`;\n md += `| 等级 | ${level} |\\n`;\n md += `| 权重 | ${standard.weight} |\\n`;\n md += `| 来源 | ${sourceLabel} |\\n\\n`;\n\n if (standard.examples.length > 0) {\n md += `**示例**:\\n\\`\\`\\`\\n${standard.examples[0]}\\n\\`\\`\\`\\n\\n`;\n }\n\n md += `---\\n\\n`;\n }\n }\n\n md += `> 此文档由 sf-cli 自动学习生成,每周更新\\n`;\n\n return md;\n }\n\n /**\n * 清理旧的出现记录\n */\n private cleanupOldOccurrences(): void {\n const cutoff = new Date();\n cutoff.setDate(cutoff.getDate() - 30);\n this.occurrences = this.occurrences.filter(o => o.timestamp > cutoff);\n }\n\n // ==================== 辅助方法 ====================\n\n private getWeekId(): string {\n const now = new Date();\n const start = new Date(now.getFullYear(), 0, 1);\n const week = Math.ceil(\n ((now.getTime() - start.getTime()) / 86400000 + start.getDay() + 1) / 7\n );\n return `${now.getFullYear()}-W${week.toString().padStart(2, '0')}`;\n }\n\n private getWeekStart(): Date {\n const now = new Date();\n const day = now.getDay();\n const diff = now.getDate() - day + (day === 0 ? -6 : 1);\n return new Date(now.setDate(diff));\n }\n\n private groupByCategory(standards: DevStandard[]): Record<string, DevStandard[]> {\n const groups: Record<string, DevStandard[]> = {};\n\n for (const standard of standards) {\n if (!groups[standard.category]) {\n groups[standard.category] = [];\n }\n groups[standard.category].push(standard);\n }\n\n return groups;\n }\n\n private getWeightLevel(weight: number): string {\n if (weight >= 90) return '强制';\n if (weight >= 70) return '推荐';\n if (weight >= 50) return '参考';\n return '候选';\n }\n\n private getCategoryBreakdown(): Record<string, number> {\n const breakdown: Record<string, number> = {};\n\n for (const standard of this.standards.values()) {\n breakdown[standard.category] = (breakdown[standard.category] || 0) + 1;\n }\n\n return breakdown;\n }\n\n private hasTypeAnnotations(content: string): boolean {\n // 匹配类型注解: 后面跟着类型名称,允许泛型\n return /:\\s*(string|number|boolean|void|any|unknown|never|object|React\\.\\w+|[A-Z]\\w+)(\\s*[\\)=\\{\\[;<>]|>)/.test(content);\n }\n}\n\ninterface WeeklyReport {\n weekId: string;\n generatedAt: Date;\n totalPatterns: number;\n effectiveStandards: number;\n newStandards: number;\n topStandards: DevStandard[];\n categoryBreakdown: Record<string, number>;\n}\n\nexport default NormsManager;","/**\n * 上下文管理器\n * 管理对话上下文、Token计算、自动压缩\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { ContextMessage, ContextState } from '../types';\n\n// 配置常量\nconst DEFAULT_LIMIT = 512 * 1024; // 512K\nconst COMPRESSION_THRESHOLD = 0.9; // 90%\nconst MIN_MESSAGES_TO_KEEP = 10;\nconst SYSTEM_MESSAGE_RESERVED = 5;\n\nexport interface TokenStats {\n total: number;\n byRole: Record<string, number>;\n bySource: Record<string, number>;\n messageCount: number;\n systemTokens: number;\n userTokens: number;\n assistantTokens: number;\n toolTokens: number;\n}\n\nexport interface CompressionResult {\n originalTokens: number;\n compressedTokens: number;\n savedTokens: number;\n messagesKept: number;\n messagesCompressed: number;\n summary?: string;\n}\n\nexport interface ContextManagerOptions {\n limit?: number;\n projectPath?: string;\n persistPath?: string;\n}\n\nexport class ContextManager {\n private state: ContextState;\n private projectPath: string;\n private persistPath: string | null = null;\n private tokenEstimateCache: Map<string, number> = new Map();\n\n constructor(options: ContextManagerOptions = {}) {\n this.state = {\n messages: [],\n totalTokens: 0,\n limit: options.limit || DEFAULT_LIMIT,\n };\n this.projectPath = options.projectPath || '';\n this.persistPath = options.persistPath || null;\n }\n\n async initialize(projectPath: string): Promise<void> {\n this.projectPath = projectPath;\n this.persistPath = path.join(projectPath, '.sf-cli', 'cache', 'context', 'context.json');\n \n // 尝试加载持久化的上下文\n await this.loadPersistedContext();\n }\n\n /**\n * 添加消息\n */\n addMessage(message: ContextMessage): void {\n // 计算消息的 token 数\n const tokens = this.countTokens(message.content);\n message.tokens = tokens;\n \n this.state.messages.push(message);\n this.state.totalTokens += tokens;\n \n // 检查是否需要压缩\n if (this.needsCompression()) {\n this.compress();\n }\n \n // 异步持久化\n this.persistAsync();\n }\n\n /**\n * 批量添加消息\n */\n addMessages(messages: ContextMessage[]): void {\n for (const message of messages) {\n this.addMessage(message);\n }\n }\n\n /**\n * 获取所有消息\n */\n getMessages(): ContextMessage[] {\n return [...this.state.messages];\n }\n\n /**\n * 获取最近的 N 条消息\n */\n getRecentMessages(count: number): ContextMessage[] {\n return this.state.messages.slice(-count);\n }\n\n /**\n * 获取系统消息\n */\n getSystemMessages(): ContextMessage[] {\n return this.state.messages.filter(m => m.role === 'system');\n }\n\n /**\n * 获取 Token 统计\n */\n getTokenStats(): TokenStats {\n const stats: TokenStats = {\n total: this.state.totalTokens,\n byRole: {},\n bySource: {},\n messageCount: this.state.messages.length,\n systemTokens: 0,\n userTokens: 0,\n assistantTokens: 0,\n toolTokens: 0,\n };\n\n for (const message of this.state.messages) {\n const tokens = message.tokens || this.countTokens(message.content);\n \n // 按角色统计\n stats.byRole[message.role] = (stats.byRole[message.role] || 0) + tokens;\n \n // 按角色分类\n switch (message.role) {\n case 'system':\n stats.systemTokens += tokens;\n break;\n case 'user':\n stats.userTokens += tokens;\n break;\n case 'assistant':\n stats.assistantTokens += tokens;\n break;\n case 'tool':\n stats.toolTokens += tokens;\n break;\n }\n }\n\n return stats;\n }\n\n /**\n * 获取当前 Token 数\n */\n getTokenCount(): number {\n return this.state.totalTokens;\n }\n\n /**\n * 获取剩余 Token 数\n */\n getRemainingTokens(): number {\n return this.state.limit - this.state.totalTokens;\n }\n\n /**\n * 获取使用百分比\n */\n getUsagePercentage(): number {\n return (this.state.totalTokens / this.state.limit) * 100;\n }\n\n /**\n * 获取上下文限制\n */\n getLimit(): number {\n return this.state.limit;\n }\n\n /**\n * 设置上下文限制\n */\n setLimit(limit: number): void {\n this.state.limit = limit;\n }\n\n /**\n * 清空上下文\n */\n clear(): void {\n this.state.messages = [];\n this.state.totalTokens = 0;\n this.tokenEstimateCache.clear();\n this.persistAsync();\n }\n\n /**\n * 检查是否需要压缩\n */\n needsCompression(): boolean {\n return this.state.totalTokens > this.state.limit * COMPRESSION_THRESHOLD;\n }\n\n /**\n * 执行压缩\n */\n compress(): CompressionResult {\n const originalTokens = this.state.totalTokens;\n const messages = this.state.messages;\n \n if (messages.length <= MIN_MESSAGES_TO_KEEP) {\n return {\n originalTokens,\n compressedTokens: originalTokens,\n savedTokens: 0,\n messagesKept: messages.length,\n messagesCompressed: 0,\n };\n }\n\n // 保留系统消息和最近的消息\n const systemMessages = messages.filter(m => m.role === 'system');\n const recentMessages = messages.filter(m => m.role !== 'system').slice(-MIN_MESSAGES_TO_KEEP);\n \n // 要压缩的消息\n const messagesToCompress = messages.filter(m => \n m.role !== 'system' && !recentMessages.includes(m)\n );\n\n if (messagesToCompress.length === 0) {\n return {\n originalTokens,\n compressedTokens: originalTokens,\n savedTokens: 0,\n messagesKept: messages.length,\n messagesCompressed: 0,\n };\n }\n\n // 生成摘要\n const summary = this.generateSummary(messagesToCompress);\n const summaryTokens = this.countTokens(summary);\n \n // 构建新的消息列表\n const compressedMessages: ContextMessage[] = [\n ...systemMessages,\n {\n role: 'system',\n content: `[历史对话摘要]\\n${summary}`,\n tokens: summaryTokens,\n },\n ...recentMessages,\n ];\n\n // 计算新的 token 数\n const compressedTokens = compressedMessages.reduce(\n (sum, m) => sum + (m.tokens || this.countTokens(m.content)),\n 0\n );\n\n // 更新状态\n this.state.messages = compressedMessages;\n this.state.totalTokens = compressedTokens;\n\n const result: CompressionResult = {\n originalTokens,\n compressedTokens,\n savedTokens: originalTokens - compressedTokens,\n messagesKept: compressedMessages.length,\n messagesCompressed: messagesToCompress.length,\n summary,\n };\n\n this.persistAsync();\n return result;\n }\n\n /**\n * 计算 Token 数\n */\n private countTokens(content: string): number {\n // 检查缓存\n if (this.tokenEstimateCache.has(content)) {\n return this.tokenEstimateCache.get(content)!;\n }\n\n // 使用估算方法:每4个字符约1个token\n // 对于中文,每个汉字约1-2个token\n const chineseChars = (content.match(/[\\u4e00-\\u9fa5]/g) || []).length;\n const otherChars = content.length - chineseChars;\n \n const estimatedTokens = Math.ceil(chineseChars * 1.5 + otherChars / 4);\n \n // 缓存结果\n this.tokenEstimateCache.set(content, estimatedTokens);\n \n // 限制缓存大小\n if (this.tokenEstimateCache.size > 1000) {\n const firstKey = this.tokenEstimateCache.keys().next().value;\n if (firstKey) {\n this.tokenEstimateCache.delete(firstKey);\n }\n }\n\n return estimatedTokens;\n }\n\n /**\n * 生成摘要\n */\n private generateSummary(messages: ContextMessage[]): string {\n // 简单的摘要生成:提取关键信息\n const topics: string[] = [];\n const actions: string[] = [];\n \n for (const message of messages) {\n const content = message.content.toLowerCase();\n \n // 提取主题关键词\n if (content.includes('创建') || content.includes('实现')) {\n const match = content.match(/(?:创建|实现)\\s*[一个]*\\s*(\\w+)/);\n if (match) topics.push(match[1]);\n }\n \n // 提取动作\n if (content.includes('修改') || content.includes('更新')) {\n actions.push('修改了代码');\n }\n if (content.includes('测试')) {\n actions.push('执行了测试');\n }\n }\n\n let summary = `共 ${messages.length} 条历史消息`;\n \n if (topics.length > 0) {\n summary += `,讨论了: ${[...new Set(topics)].slice(0, 5).join('、')}`;\n }\n \n if (actions.length > 0) {\n summary += `,主要操作: ${[...new Set(actions)].join('、')}`;\n }\n\n return summary;\n }\n\n /**\n * 异步持久化\n */\n private async persistAsync(): Promise<void> {\n if (!this.persistPath) return;\n \n try {\n await this.persist();\n } catch {\n // 忽略持久化错误\n }\n }\n\n /**\n * 持久化上下文\n */\n async persist(): Promise<void> {\n if (!this.persistPath) return;\n \n const dir = path.dirname(this.persistPath);\n await fs.mkdir(dir, { recursive: true });\n \n const data = {\n messages: this.state.messages,\n totalTokens: this.state.totalTokens,\n limit: this.state.limit,\n savedAt: new Date().toISOString(),\n };\n \n await fs.writeFile(this.persistPath, JSON.stringify(data, null, 2), 'utf-8');\n }\n\n /**\n * 加载持久化的上下文\n */\n private async loadPersistedContext(): Promise<void> {\n if (!this.persistPath) return;\n \n try {\n const content = await fs.readFile(this.persistPath, 'utf-8');\n const data = JSON.parse(content);\n \n this.state.messages = data.messages || [];\n this.state.totalTokens = data.totalTokens || 0;\n this.state.limit = data.limit || DEFAULT_LIMIT;\n } catch {\n // 文件不存在或解析失败,使用空状态\n }\n }\n\n /**\n * 获取状态显示字符串\n */\n getStatusString(): string {\n const used = this.state.totalTokens;\n const remaining = this.getRemainingTokens();\n const percentage = this.getUsagePercentage();\n const messageCount = this.state.messages.length;\n \n return `上下文: ${this.formatTokens(used)}/${this.formatTokens(this.state.limit)} (${percentage.toFixed(1)}%) | 消息: ${messageCount}`;\n }\n\n /**\n * 格式化 Token 数\n */\n private formatTokens(tokens: number): string {\n if (tokens >= 1000) {\n return `${(tokens / 1000).toFixed(1)}K`;\n }\n return tokens.toString();\n }\n}\n\nexport default ContextManager;","/**\n * 命令解析器\n * 解析用户输入的各种命令格式\n */\n\nexport enum CommandType {\n SLASH = 'slash', // 斜杠命令 /help\n AT = 'at', // 文件引用 @file\n DOLLAR = 'dollar', // Agent调用 $agent\n SHELL = 'shell', // Shell命令 !command\n NATURAL = 'natural', // 自然语言\n YOLO = 'yolo', // yolo模式\n}\n\nexport interface ParsedCommand {\n type: CommandType;\n raw: string;\n command?: string;\n args?: string[];\n path?: string;\n agent?: string;\n shellCommand?: string;\n}\n\nexport interface ParseResult {\n success: boolean;\n command?: ParsedCommand;\n error?: string;\n}\n\nexport class CommandParser {\n private readonly slashCommands = [\n 'help', 'h', '?',\n 'init', 'i',\n 'new', 'n',\n 'model', 'm',\n 'update', 'u',\n 'clear', 'c',\n 'exit', 'e', 'q', 'quit',\n 'version', 'v',\n // OpenSpec 工作流命令\n 'opsx:explore', 'opsx:new', 'opsx:continue', 'opsx:apply', 'opsx:archive',\n 'opsx:propose', 'opsx:status', 'opsx:cancel', 'opsx:rollback',\n 'opsx:confirm', 'opsx:next', 'opsx:auto', 'opsx:test',\n ];\n\n private readonly builtInAgents = [\n 'frontend-dev', 'code-reviewer', 'architect', 'tester',\n ];\n\n parse(input: string): ParseResult {\n const trimmed = input.trim();\n \n // 空输入\n if (!trimmed) {\n return { success: false, error: '空输入' };\n }\n\n // yolo 模式\n if (trimmed === 'yolo') {\n return {\n success: true,\n command: {\n type: CommandType.YOLO,\n raw: trimmed,\n },\n };\n }\n\n // 斜杠命令 /command [args...]\n if (trimmed.startsWith('/')) {\n return this.parseSlashCommand(trimmed);\n }\n\n // 文件引用 @path\n if (trimmed.startsWith('@')) {\n return this.parseAtPath(trimmed);\n }\n\n // Agent调用 $agent [args...]\n if (trimmed.startsWith('$')) {\n return this.parseAgentCall(trimmed);\n }\n\n // Shell命令 !command\n if (trimmed.startsWith('!')) {\n return this.parseShellCommand(trimmed);\n }\n\n // 自然语言输入\n return {\n success: true,\n command: {\n type: CommandType.NATURAL,\n raw: trimmed,\n },\n };\n }\n\n private parseSlashCommand(input: string): ParseResult {\n const parts = input.slice(1).split(/\\s+/);\n const command = parts[0]?.toLowerCase();\n const args = parts.slice(1);\n\n if (!command) {\n return { success: false, error: '无效的命令格式' };\n }\n\n // opsx:* 命令直接通过\n if (command.startsWith('opsx:')) {\n return {\n success: true,\n command: {\n type: CommandType.SLASH,\n raw: input,\n command,\n args,\n },\n };\n }\n\n // 检查是否是有效的斜杠命令\n const isValidCommand = this.slashCommands.some(\n cmd => cmd === command\n );\n\n if (!isValidCommand) {\n return { success: false, error: `未知命令: /${command}` };\n }\n\n return {\n success: true,\n command: {\n type: CommandType.SLASH,\n raw: input,\n command,\n args,\n },\n };\n }\n\n private parseAtPath(input: string): ParseResult {\n const path = input.slice(1).trim();\n \n if (!path) {\n return { success: false, error: '缺少文件路径' };\n }\n\n return {\n success: true,\n command: {\n type: CommandType.AT,\n raw: input,\n path,\n },\n };\n }\n\n private parseAgentCall(input: string): ParseResult {\n const parts = input.slice(1).split(/\\s+/);\n const agent = parts[0]?.toLowerCase();\n const args = parts.slice(1);\n\n if (!agent) {\n return { success: false, error: '缺少Agent名称' };\n }\n\n return {\n success: true,\n command: {\n type: CommandType.DOLLAR,\n raw: input,\n agent,\n args,\n },\n };\n }\n\n private parseShellCommand(input: string): ParseResult {\n const shellCommand = input.slice(1).trim();\n \n if (!shellCommand) {\n return { success: false, error: '缺少Shell命令' };\n }\n\n return {\n success: true,\n command: {\n type: CommandType.SHELL,\n raw: input,\n shellCommand,\n },\n };\n }\n}\n","/**\n * 命令执行器\n * 执行解析后的命令\n */\n\nimport chalk from 'chalk';\nimport { ParseResult, CommandType } from './parser';\nimport { ContextManager } from '../context';\nimport { ConfigManager, ModelService } from '../services';\nimport { NormsManager } from '../norms';\nimport { REPLState } from './repl';\nimport { runSlashCommand } from '../commands';\nimport { handleFileReference } from '../commands/reference';\nimport { runAgent } from '../agents/runner';\nimport { executeShell } from '../commands/shell';\nimport { handleNaturalLanguage } from '../commands/natural';\nimport { getActiveSession } from '../commands/new';\n\nexport interface ExecutorContext {\n contextManager: ContextManager;\n configManager: ConfigManager;\n modelService: ModelService;\n normsManager?: NormsManager;\n state: REPLState;\n options: {\n workingDirectory: string;\n model?: string;\n yolo?: boolean;\n };\n}\n\nexport interface ExecutionResult {\n output?: string;\n exit?: boolean;\n contextUsed?: number;\n}\n\n// 始终可用的命令(不需要 API Key 或工作流)\nconst ALWAYS_ALLOWED = [\n 'help', 'h', '?',\n 'model', 'm',\n 'exit', 'e', 'q', 'quit',\n 'clear', 'c',\n 'version', 'v',\n];\n\n// 需要 API Key 的命令\nconst REQUIRES_API_KEY = [\n 'new', 'n',\n 'init', 'i',\n 'update', 'u',\n];\n\nexport class CommandExecutor {\n async execute(parseResult: ParseResult, ctx: ExecutorContext): Promise<ExecutionResult> {\n if (!parseResult.success || !parseResult.command) {\n return { output: chalk.red(`错误: ${parseResult.error}`) };\n }\n\n const { command } = parseResult;\n const hasApiKey = !!ctx.configManager.get('apiKey');\n const hasActiveWorkflow = getActiveSession() !== null;\n\n // 斜杠命令权限检查\n if (command.type === CommandType.SLASH) {\n const cmd = command.command?.toLowerCase() || '';\n \n // 始终允许的命令\n if (ALWAYS_ALLOWED.includes(cmd)) {\n return this.executeSlashCommand(command, ctx);\n }\n \n // 需要 API Key 的命令\n if (REQUIRES_API_KEY.includes(cmd)) {\n if (!hasApiKey) {\n return {\n output: chalk.yellow('⚠️ 请先配置 API Key') +\n chalk.gray('\\n\\n执行 /model 选择模型并配置 API Key'),\n };\n }\n return this.executeSlashCommand(command, ctx);\n }\n \n // 其他命令需要活跃工作流\n if (!hasActiveWorkflow) {\n return {\n output: chalk.yellow('当前没有活跃的工作流') +\n chalk.gray('\\n请先使用 ') +\n chalk.cyan('/new <需求描述>') +\n chalk.gray(' 启动新工作流'),\n };\n }\n \n return this.executeSlashCommand(command, ctx);\n }\n\n // Agent 调用需要活跃工作流\n if (command.type === CommandType.DOLLAR) {\n if (!hasActiveWorkflow) {\n return {\n output: chalk.yellow('当前没有活跃的工作流,无法调用 Agent') +\n chalk.gray('\\n请先使用 ') +\n chalk.cyan('/new <需求描述>') +\n chalk.gray(' 启动新工作流'),\n };\n }\n if (!hasApiKey) {\n return {\n output: chalk.yellow('⚠️ 请先配置 API Key') +\n chalk.gray('\\n\\n执行 /model 配置模型'),\n };\n }\n return this.executeAgent(command, ctx);\n }\n\n // Shell 命令需要活跃工作流\n if (command.type === CommandType.SHELL) {\n if (!hasActiveWorkflow) {\n return {\n output: chalk.yellow('当前没有活跃的工作流,无法执行 Shell 命令') +\n chalk.gray('\\n请先使用 ') +\n chalk.cyan('/new <需求描述>') +\n chalk.gray(' 启动新工作流'),\n };\n }\n return this.executeShell(command, ctx);\n }\n\n // 文件引用始终允许\n if (command.type === CommandType.AT) {\n return this.executeFileReference(command, ctx);\n }\n\n // 自然语言(natural.ts 内部会检查 API Key)\n if (command.type === CommandType.NATURAL) {\n return this.executeNaturalLanguage(command, ctx);\n }\n\n // YOLO 模式\n if (command.type === CommandType.YOLO) {\n return this.executeYolo(ctx);\n }\n\n return { output: chalk.red('未知的命令类型') };\n }\n\n private async executeSlashCommand(\n command: { command?: string; args?: string[] },\n ctx: ExecutorContext\n ): Promise<ExecutionResult> {\n const result = await runSlashCommand(\n command.command || '',\n command.args || [],\n ctx\n );\n return { output: result.output, exit: result.exit };\n }\n\n private async executeFileReference(\n command: { path?: string },\n ctx: ExecutorContext\n ): Promise<ExecutionResult> {\n const result = await handleFileReference(command.path || '', ctx);\n return { \n output: result.output,\n contextUsed: result.contextUsed,\n };\n }\n\n private async executeAgent(\n command: { agent?: string; args?: string[] },\n ctx: ExecutorContext\n ): Promise<ExecutionResult> {\n const result = await runAgent(command.agent || '', command.args || [], ctx);\n return { \n output: result.output,\n contextUsed: result.contextUsed,\n };\n }\n\n private async executeShell(\n command: { shellCommand?: string },\n ctx: ExecutorContext\n ): Promise<ExecutionResult> {\n const result = await executeShell(command.shellCommand || '', ctx);\n return { output: result.output };\n }\n\n private async executeNaturalLanguage(\n command: { raw: string },\n ctx: ExecutorContext\n ): Promise<ExecutionResult> {\n const result = await handleNaturalLanguage(command.raw, ctx);\n return { \n output: result.output,\n contextUsed: result.contextUsed,\n };\n }\n\n private async executeYolo(ctx: ExecutorContext): Promise<ExecutionResult> {\n ctx.options.yolo = !ctx.options.yolo;\n return {\n output: chalk.yellow(`YOLO模式已${ctx.options.yolo ? '开启' : '关闭'}`),\n };\n }\n}","/**\n * 命令模块入口\n * 导出所有命令处理函数\n */\n\nexport { runSlashCommand } from './runner';\nexport { initProject } from './init';\nexport { showHelp } from './help';\nexport { selectModel } from './model';\nexport { updateCLI } from './update';\nexport { clearHistory } from './clear';\nexport { handleNew } from './new';\nexport { handleFileReference } from './reference';\nexport { executeShell } from './shell';\nexport { handleNaturalLanguage } from './natural';","/**\n * 斜杠命令运行器\n * 路由和执行斜杠命令\n */\n\nimport chalk from 'chalk';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { ExecutorContext } from '../cli/executor';\nimport { handleInit } from './init';\nimport { handleHelp } from './help';\nimport { handleModel } from './model';\nimport { handleUpdate } from './update';\nimport { handleClear } from './clear';\nimport { handleExit } from './exit';\nimport { handleNew } from './new';\nimport { handleOpsx } from './opsx';\n\n// 从 package.json 读取版本\nfunction getVersion(): string {\n const possiblePaths = [\n path.resolve(__dirname, '..', '..', 'package.json'),\n path.resolve(__dirname, '..', '..', '..', 'package.json'),\n ];\n \n for (const pkgPath of possiblePaths) {\n try {\n if (fs.existsSync(pkgPath)) {\n const content = fs.readFileSync(pkgPath, 'utf-8');\n const pkg = JSON.parse(content);\n return pkg.version;\n }\n } catch {\n continue;\n }\n }\n \n return '1.0.0';\n}\n\nconst VERSION = getVersion();\n\nexport interface CommandResult {\n output: string;\n exit?: boolean;\n}\n\nexport async function runSlashCommand(\n command: string,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n // 解析命令,支持别名\n const normalizedCommand = normalizeCommand(command);\n \n switch (normalizedCommand) {\n case 'help':\n case 'h':\n case '?':\n return handleHelp(args, ctx);\n \n case 'init':\n case 'i':\n return handleInit(args, ctx);\n \n case 'model':\n case 'm':\n return handleModel(args, ctx);\n \n case 'update':\n case 'u':\n return handleUpdate(args, ctx);\n \n case 'clear':\n case 'c':\n return handleClear(args, ctx);\n \n case 'exit':\n case 'e':\n case 'q':\n case 'quit':\n return handleExit(args, ctx);\n \n case 'new':\n case 'n':\n return handleNew(args, ctx);\n \n case 'version':\n case 'v':\n return {\n output: chalk.cyan(`sf-cli v${VERSION}`),\n };\n \n default:\n // 检查是否是 opsx 命令\n if (normalizedCommand.startsWith('opsx:')) {\n return handleOpsx(normalizedCommand, args, ctx);\n }\n \n return {\n output: chalk.red(`未知命令: /${command}`) +\n chalk.gray('\\n输入 /help 查看可用命令'),\n };\n }\n}\n\nfunction normalizeCommand(command: string): string {\n return command.toLowerCase().trim();\n}\n","/**\n * /init 命令\n * 初始化接管项目,生成 AGENTS.md 和 OpenSpec 结构\n */\n\nimport chalk from 'chalk';\nimport * as fs from 'fs/promises';\nimport * as fsSync from 'fs';\nimport * as path from 'path';\nimport { ExecutorContext } from '../cli/executor';\nimport { CommandResult } from './runner';\nimport { NormsManager, ScanResult } from '../norms';\n\nexport interface InitOptions {\n force?: boolean;\n}\n\nexport interface ProjectAnalysis {\n name: string;\n type: ProjectType;\n framework: string | null;\n techStack: string[];\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n structure: DirectoryStructure;\n entryPoints: string[];\n hasTypeScript: boolean;\n hasTests: boolean;\n hasEslint: boolean;\n hasPrettier: boolean;\n}\n\nexport type ProjectType = \n | 'web-app' \n | 'library' \n | 'cli' \n | 'mobile' \n | 'desktop' \n | 'unknown';\n\nexport interface DirectoryStructure {\n src: string[];\n tests: string[];\n configs: string[];\n docs: string[];\n others: string[];\n}\n\nexport async function handleInit(\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const options: InitOptions = {\n force: args.includes('-f') || args.includes('--force'),\n };\n \n return initProject(options, ctx.options.workingDirectory);\n}\n\nexport async function initProject(\n options: InitOptions = {},\n workingDir?: string\n): Promise<CommandResult> {\n const cwd = workingDir || process.cwd();\n \n // 验证工作目录\n try {\n const stats = await fs.stat(cwd);\n if (!stats.isDirectory()) {\n return {\n output: chalk.red(`错误: ${cwd} 不是有效目录`),\n };\n }\n } catch {\n return {\n output: chalk.red(`错误: 目录不存在或无权限访问 ${cwd}`),\n };\n }\n \n const sfCliDir = path.join(cwd, '.sf-cli');\n const openspecDir = path.join(cwd, 'openspec');\n const agentsMdPath = path.join(cwd, 'AGENTS.md');\n \n try {\n // 检查是否已存在 AGENTS.md\n const agentsExists = await fileExists(agentsMdPath);\n \n if (agentsExists && !options.force) {\n return {\n output: chalk.yellow('项目已初始化') +\n chalk.gray('\\nAGENTS.md 已存在,使用 --force 重新初始化'),\n };\n }\n \n // 创建 .sf-cli 目录结构\n await createSfCliDirectory(sfCliDir);\n \n // 创建 OpenSpec 目录结构\n await createOpenSpecDirectory(openspecDir);\n \n // 分析项目结构\n const projectInfo = await analyzeProject(cwd);\n \n // 保存项目分析结果\n await saveProjectAnalysis(sfCliDir, projectInfo);\n \n // 学习项目规范\n const normsManager = new NormsManager({\n projectPath: cwd,\n normsDir: sfCliDir,\n });\n await normsManager.initialize();\n const scanResult = await normsManager.scanProject(cwd);\n \n // 生成 AGENTS.md\n const agentsContent = generateAgentsMd(projectInfo, scanResult);\n await fs.writeFile(agentsMdPath, agentsContent, 'utf-8');\n \n // 生成 OpenSpec config.yaml\n await generateOpenSpecConfig(openspecDir, projectInfo);\n \n return {\n output: chalk.green('✓ 项目初始化完成\\n') +\n chalk.gray(` 项目类型: ${projectInfo.type}\\n`) +\n chalk.gray(` 技术框架: ${projectInfo.framework || '未识别'}\\n`) +\n chalk.gray(` 扫描文件: ${scanResult.filesScanned} 个\\n`) +\n chalk.gray(` 发现模式: ${scanResult.patternsFound} 个\\n`) +\n chalk.gray(` 提取规范: ${scanResult.standardsExtracted} 个\\n`) +\n chalk.gray(` 已生成: AGENTS.md, .sf-cli/, openspec/`),\n };\n } catch (error) {\n const err = error as NodeJS.ErrnoException;\n if (err.code === 'EACCES') {\n return {\n output: chalk.red(`错误: 无权限写入目录 ${cwd}`),\n };\n }\n return {\n output: chalk.red(`初始化失败: ${(error as Error).message}`),\n };\n }\n}\nasync function createSfCliDirectory(basePath: string): Promise<void> {\n const dirs = [\n '',\n 'history/conversations',\n 'history/tasks',\n 'cache/context',\n 'cache/analysis',\n 'cache/tokens',\n 'agents/custom',\n 'agents/prompts',\n 'skills/installed',\n 'artifacts/diagrams',\n 'artifacts/specs',\n 'artifacts/reports',\n 'norms/weekly',\n 'health/history',\n 'logs',\n ];\n \n for (const dir of dirs) {\n await fs.mkdir(path.join(basePath, dir), { recursive: true });\n }\n \n // 创建配置文件\n const config = {\n version: '1.0.0',\n model: 'GLM-5',\n yolo: false,\n createdAt: new Date().toISOString(),\n };\n \n await fs.writeFile(\n path.join(basePath, 'config.json'),\n JSON.stringify(config, null, 2),\n 'utf-8'\n );\n \n // 创建注册表文件\n await fs.writeFile(\n path.join(basePath, 'agents', 'registry.json'),\n JSON.stringify({ version: '1.0.0', agents: {} }, null, 2),\n 'utf-8'\n );\n \n await fs.writeFile(\n path.join(basePath, 'skills', 'registry.json'),\n JSON.stringify({ version: '1.0.0', skills: {} }, null, 2),\n 'utf-8'\n );\n \n // 创建健康报告模板\n await fs.writeFile(\n path.join(basePath, 'health', 'health.md'),\n generateHealthTemplate(),\n 'utf-8'\n );\n}\n\nasync function createOpenSpecDirectory(basePath: string): Promise<void> {\n const changesDir = path.join(basePath, 'changes');\n const archiveDir = path.join(changesDir, 'archive');\n const specDir = path.join(basePath, 'spec');\n \n await fs.mkdir(archiveDir, { recursive: true });\n await fs.mkdir(specDir, { recursive: true });\n}\n\nexport async function analyzeProject(cwd: string): Promise<ProjectAnalysis> {\n const result: ProjectAnalysis = {\n name: path.basename(cwd),\n type: 'unknown',\n framework: null,\n techStack: [],\n dependencies: {},\n devDependencies: {},\n structure: {\n src: [],\n tests: [],\n configs: [],\n docs: [],\n others: [],\n },\n entryPoints: [],\n hasTypeScript: false,\n hasTests: false,\n hasEslint: false,\n hasPrettier: false,\n };\n \n // 读取 package.json\n const pkgPath = path.join(cwd, 'package.json');\n try {\n const pkgContent = await fs.readFile(pkgPath, 'utf-8');\n const pkg = JSON.parse(pkgContent);\n \n result.name = pkg.name || result.name;\n result.dependencies = pkg.dependencies || {};\n result.devDependencies = pkg.devDependencies || {};\n \n // 检测技术栈\n result.techStack = detectTechStack(result.dependencies, result.devDependencies);\n result.framework = detectFramework(result.dependencies, result.devDependencies);\n result.type = detectProjectType(pkg, result.framework);\n \n // 检测 TypeScript\n result.hasTypeScript = 'typescript' in result.devDependencies;\n \n // 检测测试框架\n result.hasTests = detectTestFramework(result.devDependencies) !== null;\n \n // 检测 ESLint 和 Prettier\n result.hasEslint = 'eslint' in result.devDependencies;\n result.hasPrettier = 'prettier' in result.devDependencies;\n } catch (e) {\n const err = e as NodeJS.ErrnoException;\n if (err.code !== 'ENOENT') {\n console.warn(`警告: 无法解析 package.json - ${(e as Error).message}`);\n }\n // package.json 不存在或解析失败,使用默认值\n }\n \n // 分析目录结构\n result.structure = await analyzeDirectoryStructure(cwd);\n \n // 查找入口文件\n result.entryPoints = await findEntryPoints(cwd);\n \n return result;\n}\n\nexport function detectTechStack(\n deps: Record<string, string>,\n devDeps: Record<string, string>\n): string[] {\n const stack: string[] = [];\n const allDeps = { ...deps, ...devDeps };\n \n // 框架检测\n if ('react' in allDeps) stack.push('React');\n if ('vue' in allDeps) stack.push('Vue');\n if ('svelte' in allDeps) stack.push('Svelte');\n if ('angular' in allDeps || '@angular/core' in allDeps) stack.push('Angular');\n if ('next' in allDeps) stack.push('Next.js');\n if ('nuxt' in allDeps) stack.push('Nuxt.js');\n if ('vite' in allDeps) stack.push('Vite');\n if ('webpack' in allDeps) stack.push('Webpack');\n if ('rollup' in allDeps) stack.push('Rollup');\n \n // 状态管理\n if ('redux' in allDeps) stack.push('Redux');\n if ('mobx' in allDeps) stack.push('MobX');\n if ('zustand' in allDeps) stack.push('Zustand');\n if ('pinia' in allDeps) stack.push('Pinia');\n \n // 样式\n if ('tailwindcss' in allDeps) stack.push('Tailwind CSS');\n if ('styled-components' in allDeps) stack.push('Styled Components');\n if ('sass' in allDeps || 'node-sass' in allDeps) stack.push('Sass');\n if ('less' in allDeps) stack.push('Less');\n \n // 工具库\n if ('lodash' in allDeps) stack.push('Lodash');\n if ('dayjs' in allDeps) stack.push('Day.js');\n if ('axios' in allDeps) stack.push('Axios');\n \n return stack;\n}\n\nexport function detectFramework(\n deps: Record<string, string>,\n devDeps: Record<string, string>\n): string | null {\n const allDeps = { ...deps, ...devDeps };\n \n if ('next' in allDeps) return 'Next.js';\n if ('nuxt' in allDeps) return 'Nuxt.js';\n if ('vue' in allDeps) return 'Vue';\n if ('react' in allDeps) return 'React';\n if ('svelte' in allDeps) return 'Svelte';\n if ('@angular/core' in allDeps) return 'Angular';\n \n return null;\n}\n\nexport function detectProjectType(\n pkg: Record<string, unknown>,\n framework: string | null\n): ProjectType {\n // CLI 工具\n if (pkg.bin) return 'cli';\n \n // 库\n if (pkg.main && !(pkg.scripts && typeof pkg.scripts === 'object' && 'start' in pkg.scripts)) {\n return 'library';\n }\n \n // Web 应用\n if (framework && ['React', 'Vue', 'Angular', 'Svelte', 'Next.js', 'Nuxt.js'].includes(framework)) {\n return 'web-app';\n }\n \n return 'unknown';\n}\n\nfunction detectTestFramework(devDeps: Record<string, string>): string | null {\n if ('vitest' in devDeps) return 'Vitest';\n if ('jest' in devDeps) return 'Jest';\n if ('mocha' in devDeps) return 'Mocha';\n if ('ava' in devDeps) return 'AVA';\n return null;\n}\n\nasync function analyzeDirectoryStructure(cwd: string): Promise<DirectoryStructure> {\n const structure: DirectoryStructure = {\n src: [],\n tests: [],\n configs: [],\n docs: [],\n others: [],\n };\n \n try {\n const entries = await fs.readdir(cwd, { withFileTypes: true });\n \n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n \n const name = entry.name;\n \n if (name === 'src' || name === 'lib') {\n structure.src.push(name);\n } else if (['test', 'tests', '__tests__', 'spec'].includes(name)) {\n structure.tests.push(name);\n } else if (['docs', 'doc', 'documentation'].includes(name)) {\n structure.docs.push(name);\n } else if (['config', 'configs', '.config'].includes(name)) {\n structure.configs.push(name);\n } else if (!name.startsWith('.') && name !== 'node_modules') {\n structure.others.push(name);\n }\n }\n } catch (e) {\n console.warn(`警告: 无法读取目录结构 - ${(e as Error).message}`);\n }\n \n return structure;\n}\n\nasync function findEntryPoints(cwd: string): Promise<string[]> {\n const entryPoints: string[] = [];\n const possibleEntries = [\n 'src/index.ts',\n 'src/index.tsx',\n 'src/index.js',\n 'src/main.ts',\n 'src/main.tsx',\n 'src/main.js',\n 'src/App.tsx',\n 'src/App.vue',\n 'index.ts',\n 'index.js',\n ];\n \n for (const entry of possibleEntries) {\n const fullPath = path.join(cwd, entry);\n if (await fileExists(fullPath)) {\n entryPoints.push(entry);\n }\n }\n \n return entryPoints;\n}\n\nasync function saveProjectAnalysis(\n sfCliDir: string,\n analysis: ProjectAnalysis\n): Promise<void> {\n const analysisPath = path.join(sfCliDir, 'cache', 'analysis', 'project-analysis.json');\n await fs.writeFile(\n analysisPath,\n JSON.stringify(analysis, null, 2),\n 'utf-8'\n );\n}\n\nasync function generateOpenSpecConfig(\n openspecDir: string,\n analysis: ProjectAnalysis\n): Promise<void> {\n const configPath = path.join(openspecDir, 'config.yaml');\n \n const content = `# OpenSpec 项目配置\n# 此文件定义项目的基本信息,用于指导 AI 理解项目上下文\n\nproject:\n name: ${analysis.name}\n type: ${analysis.type}\n framework: ${analysis.framework || 'null'}\n \ntechStack:\n${analysis.techStack.map(t => ` - ${t}`).join('\\n') || ' []'}\n\nentryPoints:\n${analysis.entryPoints.map(e => ` - ${e}`).join('\\n') || ' []'}\n\nconventions:\n typescript: ${analysis.hasTypeScript}\n tests: ${analysis.hasTests}\n eslint: ${analysis.hasEslint}\n prettier: ${analysis.hasPrettier}\n\n# 业务描述 (待补充)\nbusiness:\n description: \"\"\n modules: []\n\n# 架构说明 (待补充) \narchitecture:\n pattern: \"\"\n layers: []\n\n# 开发规范 (从代码中学习)\nstandards: []\n`;\n \n await fs.writeFile(configPath, content, 'utf-8');\n}\n\nfunction generateAgentsMd(info: ProjectAnalysis, scanResult?: ScanResult): string {\n const techStackList = info.techStack.length > 0 \n ? info.techStack.map(t => `| ${t} | ✓ |`).join('\\n')\n : '| 待识别 | - |';\n \n const scanInfo = scanResult \n ? `\n### 1.3 规范学习结果\n\n| 指标 | 值 |\n|------|-----|\n| 扫描文件数 | ${scanResult.filesScanned} |\n| 发现模式数 | ${scanResult.patternsFound} |\n| 提取规范数 | ${scanResult.standardsExtracted} |\n| 扫描耗时 | ${scanResult.duration}ms |\n`\n : '';\n\n return `# 项目业务与架构描述\n\n> 自动生成于: ${new Date().toISOString().split('T')[0]}\n> 版本: v1.0.0\n> 最后更新: ${new Date().toISOString().split('T')[0]}\n\n---\n\n## 一、项目概述\n\n### 1.1 项目基本信息\n\n| 属性 | 值 |\n|------|-----|\n| 项目名称 | ${info.name} |\n| 项目类型 | ${info.type} |\n| 技术框架 | ${info.framework || '待识别'} |\n| TypeScript | ${info.hasTypeScript ? '✓' : '✗'} |\n| 测试框架 | ${info.hasTests ? '✓' : '✗'} |\n| ESLint | ${info.hasEslint ? '✓' : '✗'} |\n| Prettier | ${info.hasPrettier ? '✓' : '✗'} |\n\n### 1.2 技术栈\n\n| 技术 | 状态 |\n|------|------|\n${techStackList}\n${scanInfo}\n### 1.4 项目描述\n\n[待补充项目描述]\n\n---\n\n## 二、业务模块\n\n### 2.1 业务模块概览\n\n[待分析生成]\n\n---\n\n## 三、技术架构\n\n### 3.1 目录结构\n\n\\`\\`\\`\nsrc/ ${info.structure.src.length > 0 ? '✓' : '✗'}\ntests/ ${info.structure.tests.length > 0 ? '✓' : '✗'}\ndocs/ ${info.structure.docs.length > 0 ? '✓' : '✗'}\n\\`\\`\\`\n\n### 3.2 入口文件\n\n${info.entryPoints.map(e => `- \\`${e}\\``).join('\\n') || '待识别'}\n\n---\n\n## 四、开发规范\n\n已从项目代码中学习规范,详见 \\`.sf-cli/devstanded.md\\`\n\n---\n\n## 五、重要约定\n\n[待从对话中沉淀]\n\n---\n\n> 此文档由 sf-cli 自动生成和维护\n`;\n}\n\nfunction generateHealthTemplate(): string {\n return `# 代码健康报告\n\n> 生成时间: ${new Date().toISOString().split('T')[0]}\n\n---\n\n## 总体评分\n\n| 维度 | 评分 | 说明 |\n|------|------|------|\n| 代码质量 | - | 待分析 |\n| 安全性 | - | 待分析 |\n| 性能 | - | 待分析 |\n| 可维护性 | - | 待分析 |\n\n---\n\n## 问题列表\n\n[待分析生成]\n\n---\n\n## 改进建议\n\n[待分析生成]\n\n---\n\n> 此报告由 sf-cli 自动生成\n`;\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport default initProject;\n","/**\n * /help 命令\n * 显示帮助信息\n */\n\nimport chalk from 'chalk';\nimport { ExecutorContext } from '../cli/executor';\nimport { CommandResult } from './runner';\n\n// 命令详情描述\nconst COMMAND_DETAILS: Record<string, { usage: string; description: string; examples: string[] }> = {\n help: {\n usage: '/help [command]',\n description: '显示帮助信息,可指定命令查看详情',\n examples: ['/help', '/help init', '/help model'],\n },\n init: {\n usage: '/init [options]',\n description: '初始化接管项目,生成 AGENTS.md 和 OpenSpec 结构',\n examples: ['/init', '/init --force'],\n },\n new: {\n usage: '/new <requirement> [options]',\n description: '发起新需求开发,启动 OpenSpec 工作流',\n examples: ['/new 实现登录功能', '/new 添加用户模块 --complex'],\n },\n model: {\n usage: '/model [subcommand] [options]',\n description: 'AI 模型选择和配置',\n examples: ['/model', '/model list', '/model set claude-3', '/model verify'],\n },\n update: {\n usage: '/update [options]',\n description: '更新 CLI 到最新版本',\n examples: ['/update', '/update --check', '/update --version'],\n },\n clear: {\n usage: '/clear [options]',\n description: '清空对话历史',\n examples: ['/clear', '/clear -f'],\n },\n exit: {\n usage: '/exit [options]',\n description: '退出 CLI',\n examples: ['/exit', '/exit -f'],\n },\n opsx: {\n usage: '/opsx:<action>',\n description: 'OpenSpec 工作流命令',\n examples: ['/opsx:explore', '/opsx:apply', '/opsx:archive'],\n },\n};\n\nconst VERSION = '1.0.0';\n\nexport async function handleHelp(\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n // 如果指定了命令,显示该命令的详情\n if (args.length > 0) {\n return showCommandHelp(args[0]);\n }\n return showHelp(ctx);\n}\n\nexport function showHelp(ctx?: ExecutorContext): CommandResult {\n const modelInfo = ctx?.options.model || 'GLM-5';\n const yoloStatus = ctx?.options.yolo ? '开启' : '关闭';\n \n const help = `\n${chalk.cyan.bold('sf-cli')} ${chalk.gray(`v${VERSION}`)} - 专为前端开发设计的 AI 驱动 CLI 工具\n\n${chalk.yellow('当前状态:')}\n ${chalk.gray('模型:')} ${modelInfo}\n ${chalk.gray('YOLO:')} ${yoloStatus}\n ${chalk.gray('目录:')} ${ctx?.options.workingDirectory || process.cwd()}\n\n${chalk.yellow('斜杠命令:')}\n ${chalk.green('/help, /h, /?')} 显示帮助信息\n ${chalk.green('/init, /i')} 初始化项目,生成 AGENTS.md\n ${chalk.green('/new, /n')} 发起新需求开发\n ${chalk.green('/model, /m')} 选择 AI 模型\n ${chalk.green('/update, /u')} 更新 CLI 版本\n ${chalk.green('/clear, /c')} 清空对话历史\n ${chalk.green('/exit, /e, /q')} 退出 CLI\n\n${chalk.yellow('OpenSpec 工作流:')}\n ${chalk.green('/opsx:explore')} 探索需求(复杂需求)\n ${chalk.green('/opsx:new')} 设计方案(复杂需求)\n ${chalk.green('/opsx:continue')} 细化实现(复杂需求)\n ${chalk.green('/opsx:apply')} 应用变更\n ${chalk.green('/opsx:archive')} 归档需求\n ${chalk.green('/opsx:propose')} 快速提案(简单需求)\n ${chalk.green('/opsx:status')} 查看工作流状态\n\n${chalk.yellow('特殊语法:')}\n ${chalk.green('@<path>')} 引用文件,如 @src/App.tsx\n ${chalk.green('$<agent>')} 调用 Agent,如 $code-reviewer\n ${chalk.green('!<command>')} 执行 Shell,如 !npm install\n ${chalk.green('yolo')} 切换自动确认模式\n\n${chalk.yellow('内置 Agent:')}\n ${chalk.cyan('$frontend-dev')} 前端开发\n ${chalk.cyan('$code-reviewer')} 代码审核\n ${chalk.cyan('$architect')} 资深前端架构师\n ${chalk.cyan('$tester')} 测试\n\n${chalk.yellow('快捷键:')}\n ↑/↓ 翻阅历史命令\n Tab 自动补全\n Ctrl+C 退出 CLI(按两次确认)\n \\\\ + Enter 多行输入\n\n${chalk.gray('使用 /help <command> 查看命令详情')}\n${chalk.gray('更多信息: https://github.com/sf-cli/sf-cli')}\n`;\n \n return { output: help };\n}\n\nexport function showCommandHelp(command: string): CommandResult {\n // 标准化命令名\n const normalizedName = command.replace(/^\\/+/, '').toLowerCase();\n \n // 特殊处理 opsx 子命令\n if (normalizedName.startsWith('opsx')) {\n return showOpsxHelp();\n }\n \n const details = COMMAND_DETAILS[normalizedName];\n \n if (!details) {\n return {\n output: chalk.yellow(`未找到命令: ${command}`) +\n chalk.gray('\\n使用 /help 查看所有可用命令'),\n };\n }\n \n const help = `\n${chalk.cyan.bold(`/${normalizedName}`)}\n\n${chalk.yellow('用法:')}\n ${details.usage}\n\n${chalk.yellow('描述:')}\n ${details.description}\n\n${chalk.yellow('示例:')}\n${details.examples.map(e => ` ${chalk.green(e)}`).join('\\n')}\n`;\n \n return { output: help };\n}\n\nfunction showOpsxHelp(): CommandResult {\n const help = `\n${chalk.cyan.bold('/opsx')} - OpenSpec 工作流命令\n\n${chalk.yellow('用法:')}\n /opsx:<action> [options]\n\n${chalk.yellow('操作:')}\n ${chalk.green('explore')} 探索需求,分析影响范围(复杂需求第一步)\n ${chalk.green('new')} 设计方案,创建变更记录(复杂需求第二步)\n ${chalk.green('continue')} 细化实现,逐步完成开发(复杂需求第三步)\n ${chalk.green('apply')} 应用变更,执行代码修改\n ${chalk.green('archive')} 归档需求,保存变更记录\n ${chalk.green('propose')} 快速提案(简单需求,一步完成)\n ${chalk.green('status')} 查看当前工作流状态\n\n${chalk.yellow('工作流类型:')}\n ${chalk.cyan('复杂流程:')} explore → new → continue → apply → archive\n ${chalk.cyan('简单流程:')} propose → apply → archive\n\n${chalk.yellow('示例:')}\n ${chalk.green('/opsx:explore')} 开始探索当前需求\n ${chalk.green('/opsx:apply')} 应用当前变更\n ${chalk.green('/opsx:status')} 查看工作流状态\n`;\n \n return { output: help };\n}\n\nexport function getVersion(): string {\n return VERSION;\n}\n\nexport default showHelp;","/**\n * /model 命令\n * 选择和配置AI模型\n */\n\nimport chalk from 'chalk';\nimport { prompt } from 'enquirer';\nimport { ExecutorContext } from '../cli/executor';\nimport { CommandResult } from './runner';\nimport { ConfigManager } from '../services/config';\nimport { ModelService, createAdapter } from '../services';\nimport { AVAILABLE_MODELS, getModelInfo, ModelProvider } from '../types/model';\n\nexport async function handleModel(\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const subCommand = args[0];\n const configManager = ctx.configManager;\n \n switch (subCommand) {\n case 'list':\n return listModels();\n case 'current':\n return showCurrentModel(configManager);\n case 'set':\n return setModelDirectly(args[1], configManager);\n case 'verify':\n return verifyCurrentModel(configManager);\n default:\n return selectModel(configManager);\n }\n}\n\n/**\n * 列出所有可用模型\n */\nexport async function listModels(): Promise<CommandResult> {\n const lines = [chalk.cyan.bold('\\n可用模型列表:\\n')];\n \n const grouped = groupByProvider(AVAILABLE_MODELS);\n \n for (const [provider, models] of Object.entries(grouped)) {\n lines.push(chalk.yellow(`${provider}:`));\n for (const model of models) {\n const info = [\n ` ${chalk.green(model.id)}`,\n chalk.gray(`- ${model.description}`),\n chalk.gray(`(${model.contextWindow.toLocaleString()} tokens)`),\n ].join(' ');\n lines.push(info);\n }\n lines.push('');\n }\n \n return { output: lines.join('\\n') };\n}\n\n/**\n * 显示当前模型配置\n */\nexport async function showCurrentModel(\n configManager: ConfigManager\n): Promise<CommandResult> {\n const currentModel = configManager.get('model');\n const modelInfo = getModelInfo(currentModel);\n \n if (!modelInfo) {\n return {\n output: chalk.yellow(`当前模型: ${currentModel} (未知)`),\n };\n }\n \n const hasApiKey = !!configManager.get('apiKey');\n \n const lines = [\n chalk.cyan.bold('\\n当前模型配置:\\n'),\n `${chalk.green('模型')}: ${modelInfo.name} (${modelInfo.provider})`,\n `${chalk.green('描述')}: ${modelInfo.description}`,\n `${chalk.green('上下文窗口')}: ${modelInfo.contextWindow.toLocaleString()} tokens`,\n `${chalk.green('最大输出')}: ${modelInfo.maxOutputTokens.toLocaleString()} tokens`,\n `${chalk.green('支持工具调用')}: ${modelInfo.supportsTools ? '✓' : '✗'}`,\n `${chalk.green('支持视觉')}: ${modelInfo.supportsVision ? '✓' : '✗'}`,\n `${chalk.green('API Key')}: ${hasApiKey ? '已配置' : chalk.red('未配置')}`,\n ];\n \n return { output: lines.join('\\n') };\n}\n\n/**\n * 直接设置模型\n */\nexport async function setModelDirectly(\n modelId: string,\n configManager: ConfigManager\n): Promise<CommandResult> {\n if (!modelId) {\n return {\n output: chalk.red('请指定模型ID,例如: /model set gpt-4o'),\n };\n }\n \n const modelInfo = getModelInfo(modelId);\n \n if (!modelInfo) {\n return {\n output: chalk.red(`未知的模型: ${modelId}\\n`) +\n chalk.gray('使用 /model list 查看可用模型'),\n };\n }\n \n configManager.set('model', modelId);\n await configManager.save();\n \n return {\n output: chalk.green(`✓ 已切换到模型: ${modelInfo.name} (${modelInfo.provider})`),\n };\n}\n\n/**\n * 验证当前模型配置\n */\nexport async function verifyCurrentModel(\n configManager: ConfigManager\n): Promise<CommandResult> {\n const currentModel = configManager.get('model');\n const apiKey = configManager.get('apiKey');\n \n if (!apiKey) {\n return {\n output: chalk.red('✗ API Key 未配置\\n') +\n chalk.gray('使用 /model 配置 API Key'),\n };\n }\n \n const modelInfo = getModelInfo(currentModel);\n if (!modelInfo) {\n return {\n output: chalk.red(`✗ 未知模型: ${currentModel}`),\n };\n }\n \n try {\n const adapter = createAdapter(modelInfo.provider);\n const isValid = await adapter.validateApiKey(apiKey);\n \n if (isValid) {\n return {\n output: chalk.green(`✓ API Key 验证成功\\n`) +\n chalk.gray(`模型: ${modelInfo.name}`),\n };\n } else {\n return {\n output: chalk.red('✗ API Key 验证失败\\n') +\n chalk.gray('请检查 API Key 是否正确'),\n };\n }\n } catch (error) {\n return {\n output: chalk.red(`✗ 验证失败: ${(error as Error).message}`),\n };\n }\n}\n\n/**\n * 交互式选择模型\n */\nexport async function selectModel(\n configManager: ConfigManager\n): Promise<CommandResult> {\n try {\n const currentModel = configManager.get('model');\n const currentApiKey = configManager.get('apiKey');\n \n // 步骤1: 选择模型\n const modelResponse = await prompt<{ model: string }>({\n type: 'select',\n name: 'model',\n message: '选择AI模型:',\n initial: currentModel,\n choices: AVAILABLE_MODELS.map(m => ({\n name: m.id,\n message: `${m.name} (${m.provider})`,\n hint: m.description,\n })),\n } as any);\n \n const selectedModel = getModelInfo(modelResponse.model);\n if (!selectedModel) {\n return { output: chalk.red('无效的模型选择') };\n }\n \n // 步骤2: 输入API Key(不预填旧值,安全考虑)\n const apiKeyResponse = await prompt<{ apiKey: string }>({\n type: 'password',\n name: 'apiKey',\n message: `输入 ${selectedModel.provider} API Key:`,\n validate: (value: string) => {\n const trimmed = value.trim();\n if (!trimmed) {\n return 'API Key 不能为空';\n }\n if (trimmed.length < 10) {\n return 'API Key 格式不正确';\n }\n if (trimmed.length > 256) {\n return 'API Key 长度超出限制';\n }\n return true;\n },\n } as any);\n \n // 步骤3: 验证API Key\n const spinner = createSpinner('验证 API Key...');\n spinner.start();\n \n try {\n const adapter = createAdapter(selectedModel.provider);\n const isValid = await adapter.validateApiKey(apiKeyResponse.apiKey);\n \n spinner.stop();\n \n if (!isValid) {\n return {\n output: chalk.red('✗ API Key 验证失败\\n') +\n chalk.gray('请检查 API Key 是否正确'),\n };\n }\n } catch (error) {\n spinner.stop();\n \n // 处理适配器未实现的情况\n const errorMessage = (error as Error).message;\n if (errorMessage.includes('尚未实现') || errorMessage.includes('未实现')) {\n return {\n output: chalk.yellow(`⚠ ${selectedModel.provider} 适配器尚未实现\\n`) +\n chalk.gray('请选择其他模型或等待后续更新'),\n };\n }\n \n return {\n output: chalk.yellow('⚠ 无法验证 API Key,但已保存配置\\n') +\n chalk.gray(`错误: ${errorMessage}`),\n };\n }\n \n // 步骤4: 保存配置\n configManager.set('model', modelResponse.model);\n configManager.set('apiKey', apiKeyResponse.apiKey);\n await configManager.save();\n \n return {\n output: chalk.green(`\\n✓ 模型配置完成\\n`) +\n chalk.gray(` 模型: ${selectedModel.name}\\n`) +\n chalk.gray(` 提供商: ${selectedModel.provider}\\n`) +\n chalk.gray(` API Key: ${maskApiKey(apiKeyResponse.apiKey)}`),\n };\n } catch (error) {\n if ((error as Error).message === 'cancel') {\n return { output: chalk.yellow('\\n已取消模型选择') };\n }\n return { output: chalk.red(`错误: ${(error as Error).message}`) };\n }\n}\n\n// ==================== 辅助函数 ====================\n\nfunction groupByProvider(models: typeof AVAILABLE_MODELS): Record<string, typeof AVAILABLE_MODELS> {\n const grouped: Record<string, typeof AVAILABLE_MODELS> = {};\n \n for (const model of models) {\n const provider = getProviderName(model.provider);\n if (!grouped[provider]) {\n grouped[provider] = [];\n }\n grouped[provider].push(model);\n }\n \n return grouped;\n}\n\nfunction getProviderName(provider: ModelProvider): string {\n const names: Record<ModelProvider, string> = {\n 'glm': '智谱AI',\n 'openai': 'OpenAI',\n 'anthropic': 'Anthropic',\n 'qwen': '阿里云',\n 'deepseek': 'DeepSeek',\n };\n return names[provider] || provider;\n}\n\nfunction maskApiKey(apiKey: string): string {\n if (apiKey.length <= 8) {\n return '*'.repeat(apiKey.length);\n }\n return apiKey.slice(0, 4) + '*'.repeat(apiKey.length - 8) + apiKey.slice(-4);\n}\n\nfunction createSpinner(message: string) {\n return {\n start: () => process.stdout.write(`${message}\\r`),\n stop: () => process.stdout.write(' '.repeat(message.length + 10) + '\\r'),\n };\n}\n\nexport default selectModel;\n","/**\n * 服务模块入口\n */\n\nexport { ConfigManager } from './config';\nexport { ModelService } from './model';\nexport * from './adapters';\nexport * from './mcp';\n","/**\n * /update 命令\n * 更新 CLI 到最新版本\n */\n\nimport chalk from 'chalk';\nimport { spawn } from 'child_process';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { ExecutorContext } from '../cli/executor';\nimport { CommandResult } from './runner';\n\n// 从 package.json 读取版本和包名\nfunction getPackageInfo(): { version: string; name: string } {\n const possiblePaths = [\n path.resolve(__dirname, '..', '..', 'package.json'),\n path.resolve(__dirname, '..', '..', '..', 'package.json'),\n ];\n \n for (const pkgPath of possiblePaths) {\n try {\n if (fs.existsSync(pkgPath)) {\n const content = fs.readFileSync(pkgPath, 'utf-8');\n return JSON.parse(content);\n }\n } catch {\n continue;\n }\n }\n \n return { version: '1.0.0', name: '@nick848/sf-cli' };\n}\n\nconst packageInfo = getPackageInfo();\nconst CURRENT_VERSION = packageInfo.version;\nconst PACKAGE_NAME = packageInfo.name;\n\nexport interface UpdateOptions {\n check?: boolean;\n version?: boolean;\n targetVersion?: string;\n}\n\nexport async function handleUpdate(\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const options: UpdateOptions = {\n check: args.includes('--check') || args.includes('-c'),\n version: args.includes('--version') || args.includes('-v'),\n targetVersion: extractTargetVersion(args),\n };\n \n return updateCLI(options);\n}\n\nexport async function updateCLI(options: UpdateOptions = {}): Promise<CommandResult> {\n // 显示当前版本\n if (options.version) {\n return {\n output: chalk.cyan('sf-cli') + chalk.gray(` v${CURRENT_VERSION}`),\n };\n }\n \n // 检查更新\n if (options.check) {\n return checkForUpdates();\n }\n \n // 执行更新\n return performUpdate(options.targetVersion);\n}\n\n/**\n * 检查是否有更新\n */\nasync function checkForUpdates(): Promise<CommandResult> {\n const lines: string[] = [];\n \n lines.push(chalk.cyan('检查更新...'));\n \n try {\n const latestVersion = await getLatestVersion();\n \n if (!latestVersion) {\n lines.push(chalk.yellow('无法获取最新版本信息'));\n lines.push(chalk.gray('可能原因:'));\n lines.push(chalk.gray(' 1. 包尚未发布到 npm'));\n lines.push(chalk.gray(' 2. 网络连接问题'));\n return { output: lines.join('\\n') };\n }\n \n lines.push(chalk.gray(` 当前版本: v${CURRENT_VERSION}`));\n lines.push(chalk.gray(` 最新版本: v${latestVersion}`));\n \n if (latestVersion === CURRENT_VERSION) {\n lines.push(chalk.green('\\n✓ 已是最新版本'));\n } else {\n lines.push(chalk.yellow('\\n发现新版本!'));\n lines.push(chalk.gray('使用 /update 进行更新'));\n }\n \n } catch (error) {\n lines.push(chalk.red('检查更新失败: ' + (error as Error).message));\n }\n \n return { output: lines.join('\\n') };\n}\n\n/**\n * 执行更新\n */\nasync function performUpdate(targetVersion?: string): Promise<CommandResult> {\n const lines: string[] = [];\n \n lines.push(chalk.cyan('正在更新 sf-cli...'));\n lines.push(chalk.gray(` 包名: ${PACKAGE_NAME}`));\n lines.push(chalk.gray(` 当前版本: v${CURRENT_VERSION}`));\n \n try {\n // 检查是否有更新\n const latestVersion = await getLatestVersion();\n \n // 如果无法获取版本且未指定目标版本\n if (!latestVersion && !targetVersion) {\n lines.push(chalk.yellow('\\n⚠ 无法获取最新版本信息'));\n lines.push(chalk.gray('\\n可能原因:'));\n lines.push(chalk.gray(' 1. 包尚未发布到 npm'));\n lines.push(chalk.gray(' 2. 网络连接问题'));\n lines.push(chalk.gray('\\n您可以尝试手动更新:'));\n lines.push(chalk.cyan(` npm install -g ${PACKAGE_NAME}@latest`));\n return { output: lines.join('\\n') };\n }\n \n // 检查是否已是最新\n if (latestVersion === CURRENT_VERSION && !targetVersion) {\n lines.push(chalk.green('\\n✓ 已是最新版本,无需更新'));\n return { output: lines.join('\\n') };\n }\n \n // 构建安装命令\n const packageSpec = targetVersion \n ? `${PACKAGE_NAME}@${targetVersion}`\n : `${PACKAGE_NAME}@latest`;\n \n lines.push(chalk.gray(` 安装: ${packageSpec}`));\n \n // 执行 npm install\n const installResult = await new Promise<{ success: boolean; output: string }>((resolve) => {\n const proc = spawn('npm', ['install', '-g', packageSpec], {\n stdio: 'pipe',\n shell: true,\n });\n \n let output = '';\n \n proc.stdout?.on('data', (data) => {\n output += data.toString();\n });\n \n proc.stderr?.on('data', (data) => {\n output += data.toString();\n });\n \n proc.on('close', (code) => {\n resolve({\n success: code === 0,\n output,\n });\n });\n \n proc.on('error', (err) => {\n resolve({\n success: false,\n output: err.message,\n });\n });\n });\n \n if (!installResult.success) {\n lines.push(chalk.red('\\n✗ 更新失败'));\n lines.push(chalk.gray(installResult.output));\n lines.push(chalk.gray('\\n您可以尝试手动更新:'));\n lines.push(chalk.cyan(` npm install -g ${PACKAGE_NAME}@latest`));\n return { output: lines.join('\\n') };\n }\n \n lines.push(chalk.green('\\n✓ 更新完成!'));\n lines.push(chalk.gray(` 新版本: v${targetVersion || latestVersion}`));\n lines.push(chalk.gray('\\n请重启 CLI 以使用新版本'));\n \n } catch (error) {\n lines.push(chalk.red('更新失败: ' + (error as Error).message));\n lines.push(chalk.gray('\\n您可以尝试手动更新:'));\n lines.push(chalk.cyan(` npm install -g ${PACKAGE_NAME}@latest`));\n }\n \n return { output: lines.join('\\n') };\n}\n\n/**\n * 获取最新版本号\n */\nasync function getLatestVersion(): Promise<string | null> {\n try {\n const result = await new Promise<string>((resolve, reject) => {\n const proc = spawn('npm', ['view', PACKAGE_NAME, 'version'], {\n stdio: 'pipe',\n shell: true,\n });\n \n let output = '';\n \n proc.stdout?.on('data', (data) => {\n output += data.toString();\n });\n \n proc.on('close', (code) => {\n if (code === 0 && output.trim()) {\n resolve(output.trim());\n } else {\n reject(new Error('Failed to get version'));\n }\n });\n \n proc.on('error', reject);\n \n // 设置超时\n setTimeout(() => {\n proc.kill();\n reject(new Error('Timeout'));\n }, 10000);\n });\n \n return result || null;\n } catch {\n return null;\n }\n}\n\n/**\n * 从参数中提取目标版本\n */\nfunction extractTargetVersion(args: string[]): string | undefined {\n for (const arg of args) {\n if (arg.startsWith('@')) {\n return arg.slice(1);\n }\n }\n return undefined;\n}\n\n/**\n * 获取当前版本\n */\nexport function getVersion(): string {\n return CURRENT_VERSION;\n}\n\nexport default updateCLI;","/**\n * /clear 命令\n * 清空对话历史\n */\n\nimport chalk from 'chalk';\nimport { ExecutorContext } from '../cli/executor';\nimport { CommandResult } from './runner';\n\nexport interface ClearOptions {\n force?: boolean;\n all?: boolean; // 清空所有历史记录(包括持久化的)\n}\n\nexport async function handleClear(\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const options: ClearOptions = {\n force: args.includes('-f') || args.includes('--force'),\n all: args.includes('--all'),\n };\n \n return clearHistory(ctx, options);\n}\n\nexport async function clearHistory(\n ctx: ExecutorContext,\n options: ClearOptions = {}\n): Promise<CommandResult> {\n const { contextManager } = ctx;\n \n // 获取清理前的统计信息\n const messageCount = contextManager.getMessages().length;\n const tokenCount = contextManager.getTokenCount();\n \n // 如果不是强制模式且有内容,需要确认\n if (!options.force && messageCount > 0) {\n return {\n output: chalk.yellow('确定要清空对话历史吗?') +\n chalk.gray(`\\n 当前消息数: ${messageCount}`) +\n chalk.gray(`\\n 当前 Token 数: ${tokenCount}`) +\n chalk.yellow('\\n\\n使用 /clear -f 强制清空'),\n };\n }\n \n // 执行清空\n contextManager.clear();\n \n // 构建输出\n let output = chalk.green('✓ 对话历史已清空');\n \n if (messageCount > 0) {\n output += chalk.gray(`\\n 已清空消息: ${messageCount} 条`);\n output += chalk.gray(`\\n 已释放 Token: ${tokenCount}`);\n }\n \n // 如果指定了 --all,也清空持久化历史\n if (options.all) {\n output += chalk.gray('\\n 已清空所有历史记录');\n // TODO: 清空持久化的历史记录\n }\n \n return { output };\n}\n\nexport default clearHistory;","/**\n * /exit 命令\n * 退出 CLI\n */\n\nimport chalk from 'chalk';\nimport { ExecutorContext } from '../cli/executor';\nimport { CommandResult } from './runner';\n\nexport interface ExitOptions {\n force?: boolean;\n}\n\nexport async function handleExit(\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const options: ExitOptions = {\n force: args.includes('-f') || args.includes('--force'),\n };\n \n return exitCLI(ctx, options);\n}\n\nexport async function exitCLI(\n ctx: ExecutorContext,\n options: ExitOptions = {}\n): Promise<CommandResult> {\n const messageCount = ctx.contextManager.getMessages().length;\n \n // 如果不是强制模式,显示确认提示\n if (!options.force) {\n let output = chalk.cyan('确定要退出 sf-cli 吗?');\n \n if (messageCount > 0) {\n output += chalk.yellow(`\\n\\n提示: 当前有 ${messageCount} 条未保存的对话`);\n output += chalk.gray('\\n使用 /exit -f 强制退出');\n }\n \n return { output };\n }\n \n // 构建退出消息\n const lines = [\n chalk.green('✓ 感谢使用 sf-cli!'),\n ];\n \n // 显示会话统计\n if (messageCount > 0) {\n const tokenCount = ctx.contextManager.getTokenCount();\n lines.push(chalk.gray(` 本次会话: ${messageCount} 条消息, ${tokenCount} tokens`));\n }\n \n lines.push('');\n lines.push(chalk.cyan('再见!'));\n \n return {\n output: lines.join('\\n'),\n exit: true,\n };\n}\n\nexport default exitCLI;","/**\n * /opsx:* 命令\n * OpenSpec 工作流命令\n */\n\nimport chalk from 'chalk';\nimport { spawn } from 'child_process';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { ExecutorContext } from '../cli/executor';\nimport { CommandResult } from './runner';\nimport { WorkflowEngine, ConfirmationRequiredError } from '../workflow';\nimport { WorkflowStep } from '../types';\nimport { RollbackReason } from '../workflow/checkpoint';\nimport {\n generateConfirmationPrompt,\n generateRollbackPrompt,\n ConfirmationPointType,\n} from '../workflow/checkpoint';\nimport {\n getAgentsForWorkflowStep,\n AgentDefinition,\n getScheduleRuleDescription,\n SCHEDULE_RULES,\n} from '../agents';\nimport { ScheduleStrategy } from '../agents/scheduler';\n\n// 自动调度开关(可通过配置持久化)\nlet autoScheduleEnabled = true;\n\n// 测试回归配置\ninterface RegressionTestConfig {\n enabled: boolean;\n command: string;\n timeout: number;\n coverageThreshold: number;\n}\n\nconst DEFAULT_REGRESSION_CONFIG: RegressionTestConfig = {\n enabled: true,\n command: 'npm test -- --run',\n timeout: 120000, // 2分钟\n coverageThreshold: 80,\n};\n\nexport function setAutoSchedule(enabled: boolean): void {\n autoScheduleEnabled = enabled;\n}\n\nexport function isAutoScheduleEnabled(): boolean {\n return autoScheduleEnabled;\n}\n\n// 回归测试结果\nexport interface RegressionTestResult {\n success: boolean;\n passed: number;\n failed: number;\n total: number;\n duration: number;\n coverage?: number;\n output: string;\n errors: string[];\n}\n\n/**\n * 执行回归测试\n */\nexport async function runRegressionTest(\n workingDirectory: string,\n config: RegressionTestConfig = DEFAULT_REGRESSION_CONFIG\n): Promise<RegressionTestResult> {\n const startTime = Date.now();\n const result: RegressionTestResult = {\n success: false,\n passed: 0,\n failed: 0,\n total: 0,\n duration: 0,\n output: '',\n errors: [],\n };\n\n return new Promise((resolve) => {\n const proc = spawn(config.command, [], {\n cwd: workingDirectory,\n shell: true,\n stdio: 'pipe',\n });\n\n let stdout = '';\n let stderr = '';\n\n proc.stdout?.on('data', (data) => {\n stdout += data.toString();\n });\n\n proc.stderr?.on('data', (data) => {\n stderr += data.toString();\n });\n\n // 设置超时\n const timeout = setTimeout(() => {\n proc.kill();\n result.errors.push('测试超时');\n result.output = stdout + stderr;\n result.duration = Date.now() - startTime;\n resolve(result);\n }, config.timeout);\n\n proc.on('close', (code) => {\n clearTimeout(timeout);\n result.output = stdout + stderr;\n result.duration = Date.now() - startTime;\n\n // 解析测试结果\n const passMatch = stdout.match(/(\\d+)\\s+(?:passed|tests?\\s+passed)/i);\n const failMatch = stdout.match(/(\\d+)\\s+(?:failed|tests?\\s+failed)/i);\n const totalMatch = stdout.match(/Tests?:\\s*(\\d+)/i);\n\n if (passMatch) {\n result.passed = parseInt(passMatch[1], 10);\n }\n if (failMatch) {\n result.failed = parseInt(failMatch[1], 10);\n }\n if (totalMatch) {\n result.total = parseInt(totalMatch[1], 10);\n } else {\n result.total = result.passed + result.failed;\n }\n\n // 解析覆盖率\n const coverageMatch = stdout.match(/All files[^\\d]*(\\d+(?:\\.\\d+)?)/);\n if (coverageMatch) {\n result.coverage = parseFloat(coverageMatch[1]);\n }\n\n result.success = code === 0 && result.failed === 0;\n resolve(result);\n });\n\n proc.on('error', (err) => {\n clearTimeout(timeout);\n result.errors.push(err.message);\n result.duration = Date.now() - startTime;\n resolve(result);\n });\n });\n}\n\nexport async function handleOpsx(\n command: string,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const step = command.replace('opsx:', '') as \n | 'explore' | 'new' | 'continue' | 'apply' | 'archive' | 'propose' \n | 'status' | 'cancel' | 'rollback' | 'confirm' | 'next' | 'auto' | 'test' \n | 'list' | 'switch';\n\n const workflow = new WorkflowEngine();\n await workflow.initialize(ctx.options.workingDirectory);\n\n switch (step) {\n case 'explore':\n return handleExplore(workflow, args, ctx);\n case 'new':\n return handleNewDesign(workflow, args, ctx);\n case 'continue':\n return handleContinue(workflow, args, ctx);\n case 'apply':\n return handleApply(workflow, args, ctx);\n case 'archive':\n return handleArchive(workflow, args, ctx);\n case 'propose':\n return handlePropose(workflow, args, ctx);\n case 'status':\n return handleStatus(workflow, ctx);\n case 'cancel':\n return handleCancel(workflow, args, ctx);\n case 'rollback':\n return handleRollback(workflow, args, ctx);\n case 'confirm':\n return handleConfirm(workflow, args, ctx);\n case 'next':\n return handleNext(workflow, args, ctx);\n case 'auto':\n return handleAutoSchedule(args);\n case 'test':\n return handleRegressionTest(ctx);\n case 'list':\n return handleList(workflow, ctx);\n case 'switch':\n return handleSwitch(workflow, args, ctx);\n default:\n return {\n output: chalk.red(`未知的OpenSpec命令: /${command}`) +\n chalk.gray('\\n可用命令: /opsx:list, /opsx:status, /opsx:confirm, /opsx:next, /opsx:archive'),\n };\n }\n}\n\n/**\n * 处理回归测试\n */\nasync function handleRegressionTest(ctx: ExecutorContext): Promise<CommandResult> {\n const lines: string[] = [];\n \n lines.push(chalk.cyan('🔍 执行回归测试...'));\n lines.push(chalk.gray(` 工作目录: ${ctx.options.workingDirectory}`));\n lines.push('');\n \n const result = await runRegressionTest(ctx.options.workingDirectory);\n \n lines.push(chalk.gray('─'.repeat(50)));\n \n if (result.success) {\n lines.push(chalk.green('✓ 回归测试通过'));\n } else {\n lines.push(chalk.red('✗ 回归测试失败'));\n }\n \n lines.push('');\n lines.push(chalk.cyan('测试结果:'));\n lines.push(chalk.gray(` 通过: ${result.passed}`));\n lines.push(chalk.gray(` 失败: ${result.failed}`));\n lines.push(chalk.gray(` 总计: ${result.total}`));\n lines.push(chalk.gray(` 耗时: ${(result.duration / 1000).toFixed(2)}s`));\n \n if (result.coverage !== undefined) {\n const coverageColor = result.coverage >= 80 ? chalk.green : \n result.coverage >= 60 ? chalk.yellow : chalk.red;\n lines.push(coverageColor(` 覆盖率: ${result.coverage}%`));\n }\n \n if (result.errors.length > 0) {\n lines.push('');\n lines.push(chalk.red('错误信息:'));\n for (const error of result.errors) {\n lines.push(chalk.gray(` - ${error}`));\n }\n }\n \n if (result.failed > 0) {\n lines.push('');\n lines.push(chalk.yellow('⚠ 存在失败的测试用例,请检查并修复'));\n lines.push(chalk.gray('使用 /opsx:rollback 可回滚到之前的阶段'));\n }\n \n return { output: lines.join('\\n') };\n}\n\n/**\n * 处理自动调度开关\n */\nfunction handleAutoSchedule(args: string[]): CommandResult {\n const action = args[0]?.toLowerCase();\n \n if (!action) {\n return {\n output: chalk.cyan('自动调度状态:') +\n chalk.white(`\\n 当前: ${autoScheduleEnabled ? '✓ 开启' : '✗ 关闭'}`) +\n chalk.gray('\\n\\n用法:') +\n chalk.white('\\n /opsx:auto on - 开启自动调度') +\n chalk.white('\\n /opsx:auto off - 关闭自动调度') +\n chalk.gray('\\n\\n自动调度规则:') +\n chalk.white('\\n explore → $architect (架构设计)') +\n chalk.white('\\n new → $frontend-dev (代码开发)') +\n chalk.white('\\n continue → $frontend-dev (继续开发)') +\n chalk.white('\\n apply → $code-reviewer (代码审查)'),\n };\n }\n \n if (action === 'on') {\n autoScheduleEnabled = true;\n return {\n output: chalk.green('✓ 自动调度已开启') +\n chalk.gray('\\n进入新阶段时将自动提示调用对应的 Agent'),\n };\n }\n \n if (action === 'off') {\n autoScheduleEnabled = false;\n return {\n output: chalk.yellow('✓ 自动调度已关闭') +\n chalk.gray('\\n需要手动调用 Agent 执行任务'),\n };\n }\n \n return {\n output: chalk.red(`未知的参数: ${action}`) +\n chalk.gray('\\n使用 /opsx:auto 查看用法'),\n };\n}\n\nasync function handleExplore(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n\n if (state) {\n const allowed = workflow.getAllowedTransitions();\n return {\n output: chalk.yellow(`已有活跃工作流: ${state.id}`) +\n chalk.gray(`\\n当前阶段: ${state.currentStep}`) +\n chalk.gray(`\\n允许的操作: ${allowed.map(a => `/opsx:${a}`).join(', ')}`),\n };\n }\n\n const requirement = args.join(' ');\n if (!requirement) {\n return {\n output: chalk.yellow('用法: /opsx:explore <需求描述>') +\n chalk.gray('\\n示例: /opsx:explore 实现用户登录功能'),\n };\n }\n\n const complexity = args.length > 5 ? 7 : 4;\n const newState = await workflow.start(requirement, complexity);\n\n return {\n output: chalk.green('✓ 已启动复杂工作流') +\n chalk.gray(`\\n工作流ID: ${newState.id}`) +\n chalk.cyan(`\\n当前阶段: explore`) +\n chalk.gray(`\\n复杂度: ${complexity}/10`) +\n chalk.yellow('\\n\\n规范拆解完成后,使用 /opsx:next 进入下一阶段'),\n };\n}\n\nasync function handleNewDesign(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n return handleTransition(workflow, 'new', ctx);\n}\n\nasync function handleContinue(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n return handleTransition(workflow, 'continue', ctx);\n}\n\nasync function handleApply(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n return handleTransition(workflow, 'apply', ctx);\n}\n\nasync function handleTransition(\n workflow: WorkflowEngine,\n targetStep: WorkflowStep,\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n\n if (!state) {\n return {\n output: chalk.red('没有活跃的工作流') +\n chalk.gray('\\n请先使用 /opsx:explore 或 /opsx:propose 启动工作流'),\n };\n }\n\n const allowed = workflow.getAllowedTransitions();\n if (!allowed.includes(targetStep)) {\n return {\n output: chalk.yellow(`当前阶段: ${state.currentStep}`) +\n chalk.gray(`\\n允许的转换: ${allowed.map(a => `/opsx:${a}`).join(', ')}`),\n };\n }\n\n try {\n const transition = await workflow.transition(targetStep);\n\n // 检查是否需要自动调度 Agent\n const autoScheduleHint = getAutoScheduleHint(targetStep, state.requirement);\n\n return {\n output: chalk.green(`✓ 已进入 ${targetStep} 阶段`) +\n chalk.gray(`\\n转换: ${transition.from} → ${transition.to}`) +\n autoScheduleHint +\n chalk.yellow('\\n\\n使用 /opsx:next 继续下一阶段'),\n };\n } catch (e) {\n if (e instanceof ConfirmationRequiredError) {\n return {\n output: chalk.yellow('⚠ 需要确认') +\n chalk.white(`\\n\\n${generateConfirmationPrompt(e.point)}`) +\n chalk.cyan('\\n\\n使用 /opsx:confirm <类型> 确认后继续'),\n };\n }\n throw e;\n }\n}\n\n/**\n * 获取自动调度提示\n */\nfunction getAutoScheduleHint(step: WorkflowStep, requirement: string): string {\n const rule = SCHEDULE_RULES[step];\n \n if (!rule || !autoScheduleEnabled) {\n // 显示手动调用提示\n const agents = getAgentsForWorkflowStep(step);\n if (agents.length > 0) {\n return chalk.magenta('\\n\\n💡 可调用 Agent:') +\n agents.map(a => chalk.white(`\\n $${a.id} - ${a.description}`)).join('');\n }\n return '';\n }\n\n // 显示自动调度信息\n const agentDef = getAgentsForWorkflowStep(step)[0];\n if (!agentDef) return '';\n\n return chalk.cyan('\\n\\n🤖 自动调度:') +\n chalk.white(`\\n 将自动执行 $${rule.agent} (${agentDef.name})`) +\n chalk.gray(`\\n 调用: $${rule.agent} ${requirement.slice(0, 30)}...`) +\n chalk.gray(`\\n 使用 /opsx:auto off 可关闭自动调度`);\n}\n\nasync function handleArchive(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n\n if (!state) {\n return {\n output: chalk.red('没有活跃的工作流'),\n };\n }\n\n const allowed = workflow.getAllowedTransitions();\n if (!allowed.includes('archive')) {\n return {\n output: chalk.yellow(`当前阶段: ${state.currentStep}`) +\n chalk.gray(`\\n允许的转换: ${allowed.map(a => `/opsx:${a}`).join(', ')}`),\n };\n }\n\n // 检查代码审查确认点\n const confirmation = workflow.checkConfirmationNeeded(state.currentStep, 'archive');\n \n if (confirmation.required && !confirmation.confirmed) {\n return {\n output: chalk.yellow('⚠ 需要代码审查确认') +\n chalk.white(`\\n\\n${generateConfirmationPrompt(confirmation.point!)}`) +\n chalk.cyan('\\n\\n使用 /opsx:confirm code-review 确认后归档'),\n };\n }\n\n // 执行回归测试\n const lines: string[] = [];\n lines.push(chalk.cyan('🔍 执行归档前回归测试...'));\n lines.push('');\n \n const testResult = await runRegressionTest(ctx.options.workingDirectory);\n \n if (!testResult.success) {\n lines.push(chalk.red('✗ 回归测试失败'));\n lines.push(chalk.gray(` 通过: ${testResult.passed} | 失败: ${testResult.failed} | 总计: ${testResult.total}`));\n lines.push('');\n lines.push(chalk.yellow('⚠ 归档被阻止'));\n lines.push(chalk.gray('\\n请修复失败的测试用例后重试'));\n lines.push(chalk.gray('使用 /opsx:rollback 可回滚到之前的阶段'));\n lines.push(chalk.gray('使用 /opsx:test 可单独运行回归测试'));\n return { output: lines.join('\\n') };\n }\n \n lines.push(chalk.green('✓ 回归测试通过'));\n lines.push(chalk.gray(` 通过: ${testResult.passed} | 耗时: ${(testResult.duration / 1000).toFixed(2)}s`));\n lines.push('');\n\n const changeId = state.id;\n const summary = args.join(' ') || '完成变更';\n await workflow.archive(summary);\n\n // 自动更新 CHANGELOG.md\n await updateChangelog(ctx.options.workingDirectory, summary, changeId);\n\n lines.push(chalk.green('✓ 工作流已归档') +\n chalk.gray(`\\n变更ID: ${changeId}`) +\n chalk.cyan('\\n\\n归档文档已生成到 openspec/spec/ 目录') +\n chalk.gray('\\nCHANGELOG.md 已更新'));\n\n return { output: lines.join('\\n') };\n}\n\n/**\n * 更新 CHANGELOG.md\n */\nasync function updateChangelog(\n workingDirectory: string,\n summary: string,\n changeId: string\n): Promise<void> {\n try {\n const changelogPath = path.join(workingDirectory, 'CHANGELOG.md');\n const pkgPath = path.join(workingDirectory, 'package.json');\n \n // 读取当前版本\n let version = '1.0.0';\n try {\n const pkgContent = fs.readFileSync(pkgPath, 'utf-8');\n const pkg = JSON.parse(pkgContent);\n version = pkg.version || '1.0.0';\n } catch {\n // 忽略错误,使用默认版本\n }\n \n // 格式化日期\n const today = new Date();\n const dateStr = today.toISOString().split('T')[0];\n \n // 生成 changelog 条目\n const entry = `\\n## v${version} (${dateStr})\\n\\n**变更内容**\\n\\n- ${summary} (${changeId})\\n`;\n \n // 检查 CHANGELOG.md 是否存在\n if (fs.existsSync(changelogPath)) {\n const content = fs.readFileSync(changelogPath, 'utf-8');\n \n // 在第一个版本条目之前插入新条目\n const versionPattern = /^## v\\d+\\.\\d+\\.\\d+/m;\n const match = content.match(versionPattern);\n \n if (match && match.index !== undefined) {\n const newContent = content.slice(0, match.index) + entry + content.slice(match.index);\n fs.writeFileSync(changelogPath, newContent, 'utf-8');\n } else {\n // 没有找到版本条目,追加到文件末尾\n fs.appendFileSync(changelogPath, entry, 'utf-8');\n }\n } else {\n // 文件不存在,创建新文件\n const header = `# Changelog\\n\\nAll notable changes to this project will be documented in this file.\\n`;\n fs.writeFileSync(changelogPath, header + entry, 'utf-8');\n }\n } catch (error) {\n // 更新失败不影响归档流程,静默处理\n }\n}\n\nasync function handlePropose(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n\n if (state) {\n return {\n output: chalk.yellow(`已有活跃工作流: ${state.id}`) +\n chalk.gray('\\n请先完成或取消当前工作流'),\n };\n }\n\n const requirement = args.join(' ');\n if (!requirement) {\n return {\n output: chalk.yellow('用法: /opsx:propose <需求描述>') +\n chalk.gray('\\n示例: /opsx:propose 添加按钮点击事件'),\n };\n }\n\n const complexity = args.length > 3 ? 5 : 3;\n const newState = await workflow.start(requirement, complexity);\n\n return {\n output: chalk.green('✓ 已启动简单工作流') +\n chalk.gray(`\\n工作流ID: ${newState.id}`) +\n chalk.cyan(`\\n当前阶段: propose`) +\n chalk.gray(`\\n复杂度: ${complexity}/10`) +\n chalk.yellow('\\n\\n下一步: /opsx:apply'),\n };\n}\n\nasync function handleStatus(\n workflow: WorkflowEngine,\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n\n if (!state) {\n return {\n output: chalk.gray('当前没有活跃的工作流'),\n };\n }\n\n const stepsDisplay = state.steps.map(s => {\n const icon = s.status === 'completed' ? '✓' :\n s.status === 'running' ? '●' : '○';\n const color = s.status === 'completed' ? chalk.green :\n s.status === 'running' ? chalk.cyan : chalk.gray;\n return color(`${icon} ${s.step}`);\n }).join(' → ');\n\n const allowed = workflow.getAllowedTransitions();\n const rollbackTargets = workflow.getRollbackTargets();\n\n let output = chalk.cyan.bold(`工作流: ${state.title || state.id}`) +\n chalk.gray(`\\n类型: ${state.type} | 复杂度: ${state.complexity}/10`) +\n chalk.white(`\\n\\n进度: ${stepsDisplay}`) +\n chalk.yellow(`\\n\\n允许的操作: ${allowed.map(a => `/opsx:${a}`).join(', ') || '无'}`);\n\n // 显示当前阶段可用的 Agent\n const availableAgents = getAgentsForWorkflowStep(state.currentStep);\n if (availableAgents.length > 0) {\n output += chalk.magenta(`\\n\\n可用 Agent:`);\n for (const agent of availableAgents) {\n output += chalk.white(`\\n $${agent.id} - ${agent.name}`);\n }\n }\n\n if (rollbackTargets.length > 0) {\n output += chalk.red(`\\n回滚: ${rollbackTargets.map(t => `/opsx:rollback ${t}`).join(', ')}`);\n }\n\n // 显示待确认的检查点\n const pendingPoint = workflow.getCurrentConfirmationPoint();\n if (pendingPoint) {\n output += chalk.yellow('\\n\\n⏳ 待确认:') +\n chalk.white(`\\n ${pendingPoint.name}`) +\n chalk.gray(`\\n ${pendingPoint.description}`);\n }\n\n return { output };\n}\n\nasync function handleCancel(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n\n if (!state) {\n return {\n output: chalk.gray('没有活跃的工作流'),\n };\n }\n\n const reason = args.join(' ') || '用户取消';\n await workflow.cancel(reason);\n\n return {\n output: chalk.yellow('✓ 工作流已取消') +\n chalk.gray(`\\n原因: ${reason}`),\n };\n}\n\nasync function handleRollback(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n\n if (!state) {\n return {\n output: chalk.red('没有活跃的工作流'),\n };\n }\n\n const currentStep = state.currentStep;\n const rollbackTargets = workflow.getRollbackTargets();\n\n if (rollbackTargets.length === 0) {\n return {\n output: chalk.yellow(`当前阶段 ${currentStep} 不支持回滚`),\n };\n }\n\n // 特殊处理:propose 阶段回滚到自身 = 重新生成规格\n if (currentStep === 'propose' && rollbackTargets.includes('propose')) {\n return handleRegenerateSpec(workflow, ctx);\n }\n\n // 如果没有指定目标阶段,显示选项\n const targetStep = args[0] as WorkflowStep;\n \n if (!targetStep || !rollbackTargets.includes(targetStep)) {\n return {\n output: generateRollbackPrompt(currentStep) +\n chalk.cyan('\\n\\n用法: /opsx:rollback <目标阶段> <原因>') +\n chalk.gray('\\n原因: code-review-failed | requirement-changed | design-issue | user-request'),\n };\n }\n\n // 解析回滚原因\n const reason = (args[1] as RollbackReason) || 'user-request';\n const description = args.slice(2).join(' ');\n\n const result = await workflow.rollback(targetStep, reason, description);\n\n if (result.success) {\n const reasonDesc = workflow.getRollbackReasonDescription(reason);\n return {\n output: chalk.green('✓ 回滚成功') +\n chalk.gray(`\\n${result.message}`) +\n chalk.cyan(`\\n\\n回滚原因: ${reasonDesc}`) +\n chalk.yellow(`\\n当前阶段: ${targetStep}`) +\n chalk.gray('\\n\\n请重新进行规范拆解和开发'),\n };\n } else {\n return {\n output: chalk.red(`✗ 回滚失败: ${result.message}`),\n };\n }\n}\n\n/**\n * 重新生成规格(propose 阶段专用)\n */\nasync function handleRegenerateSpec(\n workflow: WorkflowEngine,\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n if (!state) {\n return { output: chalk.red('没有活跃的工作流') };\n }\n\n const workingDir = ctx.options.workingDirectory;\n const specPath = path.join(workingDir, 'openspec', 'changes', `${state.id}-spec.md`);\n \n // 清除之前的确认状态\n workflow.confirm('spec-review', 'regenerate');\n \n // 重新分析需求生成规格\n const lines: string[] = [];\n lines.push(chalk.cyan('🔄 重新生成规格...'));\n lines.push('');\n \n // 读取项目上下文重新生成\n const { readProjectContext, analyzeComplexity, generateSpecContent } = await import('./new');\n const context = await readProjectContext(workingDir);\n const analysis = analyzeComplexity(state.requirement, context);\n \n // 生成新的规格内容\n const specContent = await generateSpecContent(state.id, state.requirement, analysis, context);\n \n // 写入规格文件\n await fs.promises.writeFile(specPath, specContent, 'utf-8');\n \n lines.push(chalk.green('✓ 规格已重新生成'));\n lines.push(chalk.gray(`路径: ${specPath}`));\n lines.push('');\n lines.push(chalk.cyan('📋 规格概览:'));\n lines.push(chalk.white(` ${state.requirement}`));\n lines.push('');\n lines.push(chalk.yellow('请检查新的规格文件,确认后输入:'));\n lines.push(chalk.green(' y - 确认规格,进入下一阶段'));\n lines.push(chalk.red(' n - 不满意,再次重新生成'));\n \n return { output: lines.join('\\n') };\n}\n\nasync function handleConfirm(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n\n if (!state) {\n return {\n output: chalk.red('没有活跃的工作流'),\n };\n }\n\n const type = args[0] as ConfirmationPointType;\n \n if (!type) {\n // 显示待确认的检查点\n const pendingPoint = workflow.getCurrentConfirmationPoint();\n \n // 检查是否有规格文件待确认\n const specPath = await checkPendingSpec(ctx.options.workingDirectory, state.id);\n \n if (specPath) {\n return {\n output: chalk.cyan('📋 规格文件待确认') +\n chalk.gray(`\\n\\n规格文件: ${specPath}`) +\n chalk.gray(`\\n\\n请检查规格文件后确认:`) +\n chalk.white('\\n /opsx:confirm spec-review - 确认规格') +\n chalk.white('\\n /opsx:rollback explore - 重新拆分'),\n };\n }\n \n if (pendingPoint) {\n return {\n output: chalk.cyan('待确认的检查点:') +\n chalk.white(`\\n\\n${generateConfirmationPrompt(pendingPoint)}`) +\n chalk.gray(`\\n\\n用法: /opsx:confirm ${pendingPoint.type}`),\n };\n }\n \n return {\n output: chalk.gray('当前没有待确认的检查点'),\n };\n }\n\n const point = workflow.getConfirmationPoint(type);\n \n if (!point) {\n return {\n output: chalk.red(`未知的确认类型: ${type}`) +\n chalk.gray('\\n可用类型: spec-review, architecture, code-review'),\n };\n }\n\n const comment = args.slice(1).join(' ');\n workflow.confirm(type, comment);\n\n const lines: string[] = [];\n lines.push(chalk.green('✓ 已确认'));\n lines.push(chalk.white(`\\n${point.name}`));\n \n if (comment) {\n lines.push(chalk.gray(`\\n备注: ${comment}`));\n }\n \n // 规格确认后自动进入下一阶段\n if (type === 'spec-review') {\n const allowed = workflow.getAllowedTransitions();\n \n if (allowed.length > 0) {\n const nextStep = allowed[0];\n \n try {\n const transition = await workflow.transition(nextStep);\n \n lines.push('');\n lines.push(chalk.cyan(`✓ 已自动进入 ${nextStep} 阶段`));\n lines.push(chalk.gray(`转换: ${transition.from} → ${transition.to}`));\n \n // 显示下一阶段提示\n if (nextStep === 'new') {\n lines.push(chalk.yellow('\\n下一步: 设计方案'));\n lines.push(chalk.gray(' 可调用 $architect 或 $frontend-dev 进行设计'));\n } else if (nextStep === 'apply') {\n lines.push(chalk.yellow('\\n下一步: 执行变更'));\n lines.push(chalk.gray(' 可调用 $frontend-dev 执行代码修改'));\n }\n \n return { output: lines.join('\\n') };\n } catch (e) {\n if (e instanceof ConfirmationRequiredError) {\n // 还有其他确认点需要处理\n lines.push(chalk.yellow('\\n⚠ 还需要确认:') +\n chalk.white(`\\n${generateConfirmationPrompt(e.point)}`) +\n chalk.cyan(`\\n\\n使用 /opsx:confirm ${e.point.type}`));\n return { output: lines.join('\\n') };\n }\n throw e;\n }\n }\n }\n \n lines.push(chalk.yellow('\\n使用 /opsx:next 继续下一阶段'));\n return { output: lines.join('\\n') };\n}\n\n/**\n * 检查是否有待确认的规格文件\n */\nasync function checkPendingSpec(workingDirectory: string, changeId: string): Promise<string | null> {\n const specPath = path.join(workingDirectory, 'openspec', 'changes', `${changeId}-spec.md`);\n \n try {\n await fs.promises.access(specPath);\n return specPath;\n } catch {\n return null;\n }\n}\n\nasync function handleNext(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n\n if (!state) {\n return {\n output: chalk.red('没有活跃的工作流'),\n };\n }\n\n const allowed = workflow.getAllowedTransitions();\n\n if (allowed.length === 0) {\n return {\n output: chalk.yellow('工作流已完成或处于最终阶段'),\n };\n }\n\n // 自动选择第一个允许的转换\n const targetStep = allowed[0];\n\n try {\n const transition = await workflow.transition(targetStep);\n\n // 检查是否需要自动调度 Agent\n const autoScheduleHint = getAutoScheduleHint(targetStep, state.requirement);\n\n return {\n output: chalk.green(`✓ 已进入 ${targetStep} 阶段`) +\n chalk.gray(`\\n转换: ${transition.from} → ${transition.to}`) +\n autoScheduleHint,\n };\n } catch (e) {\n if (e instanceof ConfirmationRequiredError) {\n return {\n output: chalk.yellow('⚠ 需要确认') +\n chalk.white(`\\n\\n${generateConfirmationPrompt(e.point)}`) +\n chalk.cyan(`\\n\\n使用 /opsx:confirm ${e.point.type} 确认后再继续`),\n };\n }\n throw e;\n }\n}\n\n/**\n * 列出所有活跃工作流\n */\nasync function handleList(\n workflow: WorkflowEngine,\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const lines: string[] = [];\n \n // 获取所有活跃工作流\n const activeWorkflows = await workflow.getAllActiveWorkflows();\n const currentState = workflow.getState();\n \n if (activeWorkflows.length === 0) {\n return {\n output: chalk.gray('当前没有活跃的工作流') +\n chalk.yellow('\\n\\n使用 /new <需求描述> 启动新工作流'),\n };\n }\n \n lines.push(chalk.cyan.bold(`📋 活跃工作流 (${activeWorkflows.length})`));\n lines.push('');\n \n for (const wf of activeWorkflows) {\n const isCurrent = currentState?.id === wf.id;\n const prefix = isCurrent ? chalk.green('▶ ') : ' ';\n const title = isCurrent ? chalk.white(wf.title) : chalk.gray(wf.title);\n \n const stepIcon = wf.currentStep === 'propose' || wf.currentStep === 'explore' ? '⏳' :\n wf.currentStep === 'apply' ? '🔧' :\n wf.currentStep === 'archive' ? '📦' : '📝';\n \n lines.push(`${prefix}${title}`);\n lines.push(chalk.gray(` ID: ${wf.id}`));\n lines.push(chalk.gray(` 阶段: ${stepIcon} ${wf.currentStep} | 复杂度: ${wf.complexity}/10`));\n \n if (isCurrent) {\n lines.push(chalk.green(' (当前)'));\n }\n lines.push('');\n }\n \n if (activeWorkflows.length > 1) {\n lines.push(chalk.yellow('切换工作流:'));\n lines.push(chalk.gray(' /opsx:switch <变更ID>'));\n }\n \n lines.push(chalk.yellow('\\n操作命令:'));\n lines.push(chalk.gray(' /opsx:status - 查看当前工作流详情'));\n lines.push(chalk.gray(' /opsx:confirm - 确认规格'));\n lines.push(chalk.gray(' /opsx:next - 进入下一阶段'));\n lines.push(chalk.gray(' /opsx:cancel - 取消当前工作流'));\n \n return { output: lines.join('\\n') };\n}\n\n/**\n * 切换工作流\n */\nasync function handleSwitch(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const targetId = args[0];\n \n if (!targetId) {\n // 显示可用工作流\n const activeWorkflows = await workflow.getAllActiveWorkflows();\n \n if (activeWorkflows.length === 0) {\n return {\n output: chalk.gray('没有可切换的工作流'),\n };\n }\n \n const lines = [\n chalk.cyan('可用工作流:'),\n '',\n ];\n \n for (const wf of activeWorkflows) {\n lines.push(chalk.white(` ${wf.id}`) + chalk.gray(` - ${wf.title.slice(0, 30)}...`));\n }\n \n lines.push('');\n lines.push(chalk.gray('用法: /opsx:switch <变更ID>'));\n \n return { output: lines.join('\\n') };\n }\n \n // 执行切换\n const success = await workflow.switchTo(targetId);\n \n if (success) {\n const state = workflow.getState();\n return {\n output: chalk.green(`✓ 已切换到工作流: ${targetId}`) +\n chalk.gray(`\\n\\n需求: ${state?.title}`) +\n chalk.cyan(`\\n当前阶段: ${state?.currentStep}`) +\n chalk.yellow('\\n\\n使用 /opsx:status 查看详情'),\n };\n } else {\n return {\n output: chalk.red(`切换失败: 找不到工作流 ${targetId}`) +\n chalk.gray('\\n使用 /opsx:list 查看所有活跃工作流'),\n };\n }\n}\n\nexport default handleOpsx;\n","/**\n * @ 文件引用命令\n * 引用文件上下文\n */\n\nimport chalk from 'chalk';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { ExecutorContext } from '../cli/executor';\n\nexport interface ReferenceResult {\n output: string;\n contextUsed: number;\n}\n\nexport async function handleFileReference(\n filePath: string,\n ctx: ExecutorContext\n): Promise<ReferenceResult> {\n const cwd = ctx.options.workingDirectory;\n const absolutePath = path.isAbsolute(filePath) \n ? filePath \n : path.join(cwd, filePath);\n \n try {\n const stats = await fs.stat(absolutePath);\n \n if (stats.isDirectory()) {\n // 列出目录内容\n const files = await fs.readdir(absolutePath);\n return {\n output: chalk.cyan(`📁 ${filePath}/`) +\n chalk.gray(`\\n${files.slice(0, 20).join('\\n')}`) +\n (files.length > 20 ? chalk.gray(`\\n... 还有 ${files.length - 20} 个文件`) : ''),\n contextUsed: 0,\n };\n }\n \n // 读取文件内容\n const content = await fs.readFile(absolutePath, 'utf-8');\n const lines = content.split('\\n');\n \n // 添加到上下文\n ctx.contextManager.addMessage({\n role: 'user',\n content: `文件 ${filePath}:\\n\\`\\`\\`\\n${content}\\n\\`\\`\\``,\n });\n \n // 显示文件预览\n const preview = lines.slice(0, 50).join('\\n');\n const truncated = lines.length > 50;\n \n return {\n output: chalk.cyan(`📄 ${filePath}`) +\n chalk.gray(` (${lines.length} 行)`) +\n chalk.gray(`\\n\\`\\`\\`\\n${preview}`) +\n (truncated ? chalk.gray(`\\n... 省略 ${lines.length - 50} 行`) : '') +\n chalk.gray('\\n```'),\n contextUsed: content.length,\n };\n } catch (error) {\n return {\n output: chalk.red(`无法读取文件: ${(error as Error).message}`),\n contextUsed: 0,\n };\n }\n}\n\nexport default handleFileReference;\n","/**\n * ! Shell命令\n * 执行系统命令\n */\n\nimport chalk from 'chalk';\nimport { spawn } from 'child_process';\nimport { ExecutorContext } from '../cli/executor';\n\nexport interface ShellResult {\n output: string;\n}\n\nexport async function executeShell(\n command: string,\n ctx: ExecutorContext\n): Promise<ShellResult> {\n // 危险命令检查\n const dangerousCommands = ['rm -rf', 'del /', 'format', 'mkfs', 'dd if='];\n const isDangerous = dangerousCommands.some(cmd => \n command.toLowerCase().includes(cmd.toLowerCase())\n );\n \n if (isDangerous && !ctx.options.yolo) {\n return {\n output: chalk.red('⚠️ 危险命令检测') +\n chalk.yellow(`\\n命令 \"${command}\" 可能会删除重要文件`) +\n chalk.gray('\\n使用 yolo 模式强制执行'),\n };\n }\n \n return new Promise((resolve) => {\n const shell = spawn(command, [], {\n shell: true,\n cwd: ctx.options.workingDirectory,\n });\n \n let stdout = '';\n let stderr = '';\n \n shell.stdout.on('data', (data) => {\n stdout += data.toString();\n });\n \n shell.stderr.on('data', (data) => {\n stderr += data.toString();\n });\n \n shell.on('close', (code) => {\n let output = '';\n \n if (stdout) {\n output += chalk.gray(stdout);\n }\n \n if (stderr) {\n output += chalk.yellow(stderr);\n }\n \n if (code !== 0) {\n output += chalk.red(`\\n退出码: ${code}`);\n }\n \n resolve({ output: output || chalk.gray('(无输出)') });\n });\n \n // 设置超时\n setTimeout(() => {\n shell.kill();\n resolve({\n output: chalk.yellow('命令执行超时,已终止'),\n });\n }, 60000);\n });\n}\n\nexport default executeShell;\n","/**\n * 自然语言处理\n * 处理用户的自然语言输入,包括工作流交互和 AI 对话\n */\n\nimport chalk from 'chalk';\nimport { ExecutorContext } from '../cli/executor';\nimport { handleWorkflowInput, getActiveSession } from './new';\n\nexport interface NaturalResult {\n output: string;\n contextUsed: number;\n}\n\nexport async function handleNaturalLanguage(\n input: string,\n ctx: ExecutorContext\n): Promise<NaturalResult> {\n const trimmedInput = input.trim();\n \n // 检查是否有活跃工作流\n const session = getActiveSession();\n \n if (session) {\n // 尝试处理工作流输入\n const result = await handleWorkflowInput(input, ctx);\n if (result) {\n return {\n output: result.output,\n contextUsed: 0,\n };\n }\n }\n \n // 检查是否配置了 API Key\n const apiKey = ctx.configManager.get('apiKey');\n if (!apiKey) {\n return {\n output: chalk.yellow('⚠️ 未配置 API Key,无法使用 AI 功能') +\n chalk.gray('\\n\\n请先执行 /model 配置模型') +\n chalk.gray('\\n支持: GLM-5, GPT-4o, Claude'),\n contextUsed: 0,\n };\n }\n \n try {\n // 调用 AI 进行对话\n const response = await ctx.modelService.sendMessage(\n [\n {\n role: 'system',\n content: buildSystemPrompt(ctx),\n },\n {\n role: 'user',\n content: trimmedInput,\n },\n ],\n {\n temperature: 0.7,\n maxTokens: 2000,\n }\n );\n \n // 添加到上下文\n ctx.contextManager.addMessage({\n role: 'user',\n content: trimmedInput,\n });\n ctx.contextManager.addMessage({\n role: 'assistant',\n content: response.content,\n });\n \n return {\n output: response.content,\n contextUsed: response.usage?.totalTokens || 0,\n };\n } catch (error) {\n const errorMessage = (error as Error).message;\n \n // 处理常见错误\n if (errorMessage.includes('未配置') || errorMessage.includes('未初始化')) {\n return {\n output: chalk.yellow('⚠️ 模型未正确配置') +\n chalk.gray('\\n\\n请执行 /model 重新配置'),\n contextUsed: 0,\n };\n }\n \n if (errorMessage.includes('timeout') || errorMessage.includes('超时')) {\n return {\n output: chalk.red('✗ 请求超时,请稍后重试'),\n contextUsed: 0,\n };\n }\n \n return {\n output: chalk.red(`✗ 处理失败: ${errorMessage}`),\n contextUsed: 0,\n };\n }\n}\n\n/**\n * 构建系统提示词\n */\nfunction buildSystemPrompt(ctx: ExecutorContext): string {\n const parts: string[] = [\n '你是 sf-cli 的 AI 助手,一个专业的软件开发助手。',\n '',\n '你可以帮助用户:',\n '1. 理解和分析需求',\n '2. 提供代码建议和实现方案',\n '3. 回答技术问题',\n '4. 辅助进行代码审查',\n '',\n '当前项目信息:',\n `- 工作目录: ${ctx.options.workingDirectory}`,\n `- 模型: ${ctx.modelService.getCurrentModel() || '未指定'}`,\n ];\n \n return parts.join('\\n');\n}\n\nexport default handleNaturalLanguage;","/**\n * 自动补全器\n * 提供命令、文件路径、历史记录的自动补全\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { CommandParser, CommandType } from './parser';\n\nexport interface CompletionItem {\n text: string;\n displayText: string;\n description?: string;\n type: 'command' | 'agent' | 'file' | 'directory' | 'history' | 'option';\n}\n\nexport interface CompletionResult {\n items: CompletionItem[];\n start: number;\n end: number;\n}\n\nexport interface CompleterOptions {\n workingDirectory: string;\n history: string[];\n}\n\n/**\n * 自动补全器类\n */\nexport class Completer {\n private parser: CommandParser;\n private workingDirectory: string;\n private history: string[];\n private commandCache: CompletionItem[] | null = null;\n private agentCache: CompletionItem[] | null = null;\n\n // 斜杠命令列表\n private readonly slashCommands: CompletionItem[] = [\n { text: '/help', displayText: '/help', description: '显示帮助信息', type: 'command' },\n { text: '/init', displayText: '/init', description: '初始化项目', type: 'command' },\n { text: '/new', displayText: '/new', description: '创建新需求', type: 'command' },\n { text: '/model', displayText: '/model', description: '配置模型', type: 'command' },\n { text: '/update', displayText: '/update', description: '检查更新', type: 'command' },\n { text: '/clear', displayText: '/clear', description: '清空对话', type: 'command' },\n { text: '/exit', displayText: '/exit', description: '退出CLI', type: 'command' },\n // opsx 子命令\n { text: '/opsx:explore', displayText: '/opsx:explore', description: '探索需求 (复杂流程)', type: 'command' },\n { text: '/opsx:new', displayText: '/opsx:new', description: '进入设计阶段', type: 'command' },\n { text: '/opsx:continue', displayText: '/opsx:continue', description: '继续开发', type: 'command' },\n { text: '/opsx:apply', displayText: '/opsx:apply', description: '应用变更', type: 'command' },\n { text: '/opsx:archive', displayText: '/opsx:archive', description: '归档总结', type: 'command' },\n { text: '/opsx:propose', displayText: '/opsx:propose', description: '简单需求流程', type: 'command' },\n { text: '/opsx:status', displayText: '/opsx:status', description: '查看工作流状态', type: 'command' },\n { text: '/opsx:cancel', displayText: '/opsx:cancel', description: '取消工作流', type: 'command' },\n { text: '/opsx:rollback', displayText: '/opsx:rollback', description: '回滚工作流', type: 'command' },\n { text: '/opsx:confirm', displayText: '/opsx:confirm', description: '确认检查点', type: 'command' },\n { text: '/opsx:next', displayText: '/opsx:next', description: '进入下一阶段', type: 'command' },\n { text: '/opsx:auto', displayText: '/opsx:auto', description: '自动调度控制', type: 'command' },\n ];\n\n // Agent 列表\n private readonly agents: CompletionItem[] = [\n { text: '$frontend-dev', displayText: '$frontend-dev', description: '前端开发', type: 'agent' },\n { text: '$code-reviewer', displayText: '$code-reviewer', description: '代码审核', type: 'agent' },\n { text: '$architect', displayText: '$architect', description: '架构师', type: 'agent' },\n { text: '$tester', displayText: '$tester', description: '测试', type: 'agent' },\n ];\n\n constructor(options: CompleterOptions) {\n this.parser = new CommandParser();\n this.workingDirectory = options.workingDirectory;\n this.history = options.history;\n }\n\n /**\n * 获取补全建议\n */\n async complete(input: string): Promise<CompletionResult | null> {\n if (!input) {\n return null;\n }\n\n // 根据输入前缀判断补全类型\n if (input.startsWith('/')) {\n return this.completeSlashCommand(input);\n }\n\n if (input.startsWith('$')) {\n return this.completeAgent(input);\n }\n\n if (input.startsWith('@')) {\n return this.completeFilePath(input);\n }\n\n // 历史记录补全\n return this.completeHistory(input);\n }\n\n /**\n * 斜杠命令补全\n */\n private completeSlashCommand(input: string): CompletionResult {\n const partial = input.toLowerCase();\n const matches = this.slashCommands.filter(cmd =>\n cmd.text.toLowerCase().startsWith(partial)\n );\n\n return {\n items: matches,\n start: 0,\n end: input.length,\n };\n }\n\n /**\n * Agent 补全\n */\n private completeAgent(input: string): CompletionResult {\n const partial = input.toLowerCase();\n const matches = this.agents.filter(agent =>\n agent.text.toLowerCase().startsWith(partial)\n );\n\n return {\n items: matches,\n start: 0,\n end: input.length,\n };\n }\n\n /**\n * 文件路径补全\n */\n private async completeFilePath(input: string): Promise<CompletionResult> {\n const filePath = input.slice(1); // 去掉 @\n let dirPath: string;\n let prefix: string;\n\n // 解析目录和前缀\n const lastSlash = Math.max(filePath.lastIndexOf('/'), filePath.lastIndexOf('\\\\'));\n \n if (lastSlash === -1) {\n dirPath = this.workingDirectory;\n prefix = filePath;\n } else {\n const dir = filePath.slice(0, lastSlash);\n dirPath = path.resolve(this.workingDirectory, dir);\n prefix = filePath.slice(lastSlash + 1);\n }\n\n try {\n const entries = await fs.readdir(dirPath, { withFileTypes: true });\n const matches: CompletionItem[] = [];\n\n for (const entry of entries) {\n if (entry.name.startsWith(prefix)) {\n const isDir = entry.isDirectory();\n matches.push({\n text: '@' + path.relative(this.workingDirectory, path.join(dirPath, entry.name)).replace(/\\\\/g, '/') + (isDir ? '/' : ''),\n displayText: entry.name + (isDir ? '/' : ''),\n description: isDir ? '目录' : '文件',\n type: isDir ? 'directory' : 'file',\n });\n }\n }\n\n return {\n items: matches,\n start: 0,\n end: input.length,\n };\n } catch {\n return {\n items: [],\n start: 0,\n end: input.length,\n };\n }\n }\n\n /**\n * 历史记录补全\n */\n private completeHistory(input: string): CompletionResult {\n const partial = input.toLowerCase();\n const matches: CompletionItem[] = [];\n\n // 从历史记录中查找匹配项\n const seen = new Set<string>();\n for (const item of this.history) {\n if (item.toLowerCase().startsWith(partial) && !seen.has(item)) {\n seen.add(item);\n matches.push({\n text: item,\n displayText: item.length > 50 ? item.slice(0, 50) + '...' : item,\n description: '历史命令',\n type: 'history',\n });\n }\n }\n\n // 限制返回数量\n return {\n items: matches.slice(0, 10),\n start: 0,\n end: input.length,\n };\n }\n\n /**\n * 更新历史记录\n */\n updateHistory(history: string[]): void {\n this.history = history;\n }\n\n /**\n * 更新工作目录\n */\n updateWorkingDirectory(dir: string): void {\n this.workingDirectory = dir;\n }\n\n /**\n * 获取所有命令(用于帮助显示)\n */\n getCommands(): CompletionItem[] {\n return [...this.slashCommands];\n }\n\n /**\n * 获取所有Agent(用于帮助显示)\n */\n getAgents(): CompletionItem[] {\n return [...this.agents];\n }\n}\n\n/**\n * 创建 readline 补全函数\n */\nexport function createCompleterFunction(completer: Completer) {\n return async (\n line: string,\n callback: (err: Error | null, completions: [string[], string]) => void\n ) => {\n try {\n const result = await completer.complete(line);\n \n if (!result || result.items.length === 0) {\n callback(null, [[], line]);\n return;\n }\n\n const completions = result.items.map(item => item.text);\n callback(null, [completions, line]);\n } catch (error) {\n callback(error as Error, [[], line]);\n }\n };\n}\n\nexport default Completer;\n"]}
1
+ {"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../src/commands/new.ts","../src/index.ts","../src/types/index.ts","../src/types/agent.ts","../src/types/mcp.ts","../src/services/config.ts","../src/services/model.ts","../src/types/model.ts","../src/services/adapters/index.ts","../src/services/adapters/base.ts","../src/services/adapters/glm.ts","../src/services/adapters/openai.ts","../src/services/adapters/claude.ts","../src/services/mcp/index.ts","../src/services/mcp/base.ts","../src/services/mcp/lanhu.ts","../src/services/mcp/figma.ts","../src/services/mcp/manager.ts","../src/agents/runner.ts","../src/agents/definitions.ts","../src/agents/executor.ts","../src/agents/index.ts","../src/agents/scheduler.ts","../src/workflow/index.ts","../src/workflow/checkpoint.ts","../src/norms/index.ts","../src/context/index.ts","../src/cli/parser.ts","../src/cli/executor.ts","../src/commands/index.ts","../src/commands/runner.ts","../src/commands/init.ts","../src/commands/help.ts","../src/commands/model.ts","../src/services/index.ts","../src/commands/update.ts","../src/commands/clear.ts","../src/commands/exit.ts","../src/commands/opsx.ts","../src/commands/reference.ts","../src/commands/shell.ts","../src/commands/natural.ts","../src/cli/completer.ts"],"names":["__dirname","path","chalk","path10","fs9","MAX_FILE_SIZE","path2","fsSync","fs","resolve","path3","fs2","fs3","path4","uuidv4","prompt","fs5","path6","path7","fs6","CommandType","fs7","path8","path9","fs8","spawn","path11","readProjectContext","analyzeComplexity","path12","fs11","VERSION","path13","fs12","path14","fs13"],"mappings":"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","file":"index.mjs","sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","/**\n * /new 命令\n * 发起新需求开发,实现自动化工作流\n * \n * 工作流:\n * 1. 项目上下文获取\n * 2. 需求澄清(新增)- 引导开发者明确需求\n * 3. 复杂度评估与角色介入\n * 4. BDD 场景拆解\n * 5. OpenSpec 规格(等待确认)\n * 6. TDD 测试生成 → 开发实现 → 代码审核(自动执行)\n */\n\nimport chalk from 'chalk';\nimport * as fs from 'fs/promises';\nimport * as fsSync from 'fs';\nimport * as path from 'path';\nimport { ExecutorContext } from '../cli/executor';\nimport { CommandResult } from './runner';\nimport { ChatMessage } from '../types/model';\n\n// 配置常量\nconst MAX_FILE_SIZE = 1024 * 1024;\nconst COMPLEXITY_THRESHOLD = 6;\nconst CLARITY_THRESHOLD = 0.6; // 需求清晰度阈值\n\n// 工作流阶段\nexport type WorkflowPhase = \n | 'context' // 项目上下文获取\n | 'clarify' // 需求澄清(新增)\n | 'analysis' // 复杂度评估\n | 'bdd' // BDD 场景拆解\n | 'spec' // OpenSpec 规格\n | 'tdd' // TDD 测试生成\n | 'develop' // 开发实现\n | 'review'; // 代码审核\n\nexport interface ProjectContext {\n name: string;\n type: string;\n framework: string | null;\n techStack: string[];\n description: string;\n devStandards: string;\n agentsMd: string;\n configYaml: string;\n}\n\nexport interface ClarificationQuestion {\n id: string;\n question: string;\n category: 'scope' | 'ui' | 'data' | 'interaction' | 'edge' | 'tech';\n answered: boolean;\n answer?: string;\n}\n\nexport interface BDDScenario {\n feature: string;\n description: string;\n scenarios: {\n name: string;\n given: string[];\n when: string[];\n then: string[];\n }[];\n}\n\nexport interface SpecItem {\n id: string;\n title: string;\n description: string;\n priority: 'high' | 'medium' | 'low';\n files: string[];\n tests: string[];\n}\n\nexport interface WorkflowSession {\n id: string;\n requirement: string;\n refinedRequirement: string; // 澄清后的完整需求\n phase: WorkflowPhase;\n context: ProjectContext | null;\n clarityScore: number; // 需求清晰度 0-1\n clarificationQuestions: ClarificationQuestion[];\n complexity: number;\n bddScenarios: BDDScenario[];\n specItems: SpecItem[];\n testFiles: string[];\n implFiles: string[];\n reviewPassed: boolean;\n createdAt: Date;\n}\n\n// 当前活跃会话\nlet activeSession: WorkflowSession | null = null;\n\n/**\n * 处理 /new 命令\n */\nexport async function handleNew(\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const workingDir = ctx.options.workingDirectory;\n \n // 检查是否有活跃会话\n if (activeSession) {\n return handleActiveSession(ctx);\n }\n \n // 解析需求\n const requirement = args.join(' ').trim();\n \n if (!requirement) {\n return {\n output: chalk.red('请输入需求描述') +\n chalk.gray('\\n用法: /new <需求描述>') +\n chalk.gray('\\n\\n示例:') +\n chalk.gray('\\n /new 实现用户登录功能') +\n chalk.gray('\\n /new 添加数据导出为Excel的功能'),\n };\n }\n \n // 创建新会话\n activeSession = {\n id: generateSessionId(),\n requirement,\n refinedRequirement: requirement,\n phase: 'context',\n context: null,\n clarityScore: 0,\n clarificationQuestions: [],\n complexity: 0,\n bddScenarios: [],\n specItems: [],\n testFiles: [],\n implFiles: [],\n reviewPassed: false,\n createdAt: new Date(),\n };\n \n // 执行工作流\n return executeWorkflow(ctx);\n}\n\n/**\n * 处理活跃会话(等待输入时)\n */\nfunction handleActiveSession(ctx: ExecutorContext): CommandResult {\n if (!activeSession) {\n return { output: chalk.red('没有活跃的工作流') };\n }\n \n const lines: string[] = [];\n \n lines.push(chalk.cyan('📋 当前工作流状态'));\n lines.push('');\n lines.push(chalk.white(`需求: ${activeSession.requirement.slice(0, 60)}${activeSession.requirement.length > 60 ? '...' : ''}`));\n lines.push(chalk.gray(`阶段: ${getPhaseLabel(activeSession.phase)}`));\n lines.push('');\n \n if (activeSession.phase === 'clarify') {\n lines.push(chalk.yellow('⏸️ 等待需求澄清'));\n lines.push(chalk.gray('请回答上述问题,或输入 \"done\" 表示回答完成'));\n } else if (activeSession.phase === 'spec') {\n lines.push(chalk.yellow('⏸️ 等待规格确认'));\n lines.push('');\n lines.push(chalk.green(' y - 确认规格,继续工作流'));\n lines.push(chalk.red(' n - 不满意,重新生成规格'));\n lines.push(chalk.gray(' c - 取消当前工作流'));\n } else {\n lines.push(chalk.yellow('工作流进行中...'));\n lines.push(chalk.gray('输入任意内容继续'));\n }\n \n return { output: lines.join('\\n') };\n}\n\n/**\n * 执行工作流\n */\nasync function executeWorkflow(ctx: ExecutorContext): Promise<CommandResult> {\n if (!activeSession) {\n return { output: chalk.red('没有活跃的工作流') };\n }\n \n const lines: string[] = [];\n \n try {\n // 阶段 1: 项目上下文获取\n if (activeSession.phase === 'context') {\n lines.push(chalk.cyan('━━━ 阶段 1/8: 项目上下文获取 ━━━'));\n lines.push('');\n \n activeSession.context = await readProjectContext(ctx.options.workingDirectory);\n \n lines.push(chalk.gray(` 项目: ${activeSession.context.name}`));\n lines.push(chalk.gray(` 类型: ${activeSession.context.type}`));\n lines.push(chalk.gray(` 框架: ${activeSession.context.framework || '未识别'}`));\n lines.push(chalk.gray(` 技术栈: ${activeSession.context.techStack.join(', ') || '未识别'}`));\n \n if (activeSession.context.devStandards) {\n lines.push(chalk.green(' ✓ 已读取开发规范'));\n }\n \n activeSession.phase = 'clarify';\n }\n \n // 阶段 2: 需求澄清\n if (activeSession.phase === 'clarify') {\n lines.push('');\n lines.push(chalk.cyan('━━━ 阶段 2/8: 需求澄清 ━━━'));\n lines.push('');\n \n // 分析需求清晰度\n const clarityResult = analyzeRequirementClarity(\n activeSession.requirement,\n activeSession.context!\n );\n \n activeSession.clarityScore = clarityResult.score;\n activeSession.clarificationQuestions = clarityResult.questions;\n \n lines.push(chalk.gray(` 需求清晰度: ${Math.round(clarityResult.score * 100)}%`));\n lines.push('');\n \n // 如果需求不够清晰,进入澄清流程\n if (clarityResult.score < CLARITY_THRESHOLD && clarityResult.questions.length > 0) {\n lines.push(chalk.yellow(' 需求不够明确,请补充以下信息:'));\n lines.push('');\n \n const unansweredQuestions = clarityResult.questions.filter(q => !q.answered);\n for (let i = 0; i < Math.min(unansweredQuestions.length, 3); i++) {\n const q = unansweredQuestions[i];\n lines.push(chalk.white(` ${i + 1}. ${q.question}`));\n }\n \n if (unansweredQuestions.length > 3) {\n lines.push(chalk.gray(` ... 还有 ${unansweredQuestions.length - 3} 个问题`));\n }\n \n lines.push('');\n lines.push(chalk.gray(' 请输入回答,或输入 \"done\" 跳过澄清'));\n \n return { output: lines.join('\\n') };\n }\n \n // 需求已足够清晰\n lines.push(chalk.green(' ✓ 需求清晰,继续下一步'));\n activeSession.phase = 'analysis';\n }\n \n // 阶段 3: 复杂度评估\n if (activeSession.phase === 'analysis') {\n lines.push('');\n lines.push(chalk.cyan('━━━ 阶段 3/8: 复杂度评估 ━━━'));\n lines.push('');\n \n activeSession.complexity = analyzeComplexity(\n activeSession.refinedRequirement,\n activeSession.context!\n );\n \n const complexityBar = generateComplexityBar(activeSession.complexity);\n lines.push(chalk.gray(` 复杂度: ${complexityBar} ${activeSession.complexity}/10`));\n \n if (activeSession.complexity >= COMPLEXITY_THRESHOLD) {\n lines.push(chalk.yellow(' 判定: 复杂需求,建议架构师介入'));\n } else {\n lines.push(chalk.green(' 判定: 简单需求,直接进入规格拆解'));\n }\n \n activeSession.phase = 'bdd';\n }\n \n // 阶段 4: BDD 场景拆解\n if (activeSession.phase === 'bdd') {\n lines.push('');\n lines.push(chalk.cyan('━━━ 阶段 4/8: BDD 场景拆解 ━━━'));\n lines.push('');\n \n activeSession.bddScenarios = generateBDDScenarios(\n activeSession.refinedRequirement,\n activeSession.context!,\n activeSession.clarificationQuestions\n );\n \n for (const scenario of activeSession.bddScenarios) {\n lines.push(chalk.white(` Feature: ${scenario.feature}`));\n for (const s of scenario.scenarios.slice(0, 3)) {\n lines.push(chalk.gray(` - ${s.name}`));\n }\n if (scenario.scenarios.length > 3) {\n lines.push(chalk.gray(` ... 共 ${scenario.scenarios.length} 个场景`));\n }\n }\n \n activeSession.phase = 'spec';\n }\n \n // 阶段 5: OpenSpec 规格(暂停等待确认)\n if (activeSession.phase === 'spec') {\n lines.push('');\n lines.push(chalk.cyan('━━━ 阶段 5/8: OpenSpec 规格 ━━━'));\n lines.push('');\n \n activeSession.specItems = generateSpecItems(\n activeSession.refinedRequirement,\n activeSession.context!,\n activeSession.bddScenarios,\n activeSession.clarificationQuestions\n );\n \n // 保存规格文件\n const specPath = await saveSpecFile(ctx.options.workingDirectory, activeSession);\n lines.push(chalk.green(' ✓ 规格文件已生成'));\n lines.push(chalk.gray(` 路径: ${specPath}`));\n lines.push('');\n \n // 显示任务概览\n lines.push(chalk.cyan(' 任务概览:'));\n for (const item of activeSession.specItems.slice(0, 5)) {\n const icon = item.priority === 'high' ? '🔴' : item.priority === 'medium' ? '🟡' : '🟢';\n lines.push(chalk.gray(` ${icon} [${item.id}] ${item.title}`));\n }\n if (activeSession.specItems.length > 5) {\n lines.push(chalk.gray(` ... 共 ${activeSession.specItems.length} 个任务`));\n }\n \n // 暂停等待确认\n lines.push('');\n lines.push(chalk.yellow.bold('⏸️ 等待规格确认'));\n lines.push('');\n lines.push(chalk.green(' y - 确认规格,继续工作流'));\n lines.push(chalk.red(' n - 不满意,重新生成规格'));\n lines.push(chalk.gray(' c - 取消当前工作流'));\n \n return { output: lines.join('\\n') };\n }\n \n // 阶段 6: TDD 测试生成\n if (activeSession.phase === 'tdd') {\n lines.push('');\n lines.push(chalk.cyan('━━━ 阶段 6/8: TDD 测试生成 ━━━'));\n lines.push('');\n \n activeSession.testFiles = await generateTests(ctx.options.workingDirectory, activeSession);\n \n lines.push(chalk.green(' ✓ 测试文件已生成'));\n for (const file of activeSession.testFiles) {\n lines.push(chalk.gray(` - ${file}`));\n }\n \n activeSession.phase = 'develop';\n // 不返回,继续执行开发阶段\n }\n \n // 阶段 7: 开发实现(自动执行)\n if (activeSession.phase === 'develop') {\n lines.push('');\n lines.push(chalk.cyan('━━━ 阶段 7/8: 开发实现 ━━━'));\n lines.push('');\n \n lines.push(chalk.yellow(' 🚀 正在调用 AI 生成代码...'));\n \n try {\n // 调用 AI 生成代码\n const developResult = await executeDevelopment(ctx, activeSession);\n \n if (developResult.success) {\n lines.push(chalk.green(' ✓ 代码生成完成'));\n for (const file of developResult.files) {\n lines.push(chalk.gray(` - ${file}`));\n }\n activeSession.implFiles = developResult.files;\n activeSession.phase = 'review';\n // 不返回,继续执行审核阶段\n } else {\n lines.push(chalk.red(` ✗ 代码生成失败: ${developResult.error}`));\n lines.push(chalk.gray(' 请手动实现代码后输入 continue 继续'));\n return { output: lines.join('\\n') };\n }\n } catch (error) {\n lines.push(chalk.red(` ✗ 开发阶段出错: ${(error as Error).message}`));\n lines.push(chalk.gray(' 请手动实现代码后输入 continue 继续'));\n return { output: lines.join('\\n') };\n }\n }\n \n // 阶段 8: 代码审核(自动执行)\n if (activeSession.phase === 'review') {\n lines.push('');\n lines.push(chalk.cyan('━━━ 阶段 8/8: 代码审核 ━━━'));\n lines.push('');\n \n lines.push(chalk.yellow(' 🔍 正在进行代码审核...'));\n \n try {\n // 调用 AI 进行代码审核\n const reviewResult = await executeReview(ctx, activeSession);\n \n if (reviewResult.passed) {\n lines.push(chalk.green(' ✓ 代码审核通过'));\n if (reviewResult.suggestions.length > 0) {\n lines.push(chalk.gray(' 建议:'));\n for (const s of reviewResult.suggestions.slice(0, 3)) {\n lines.push(chalk.gray(` - ${s}`));\n }\n }\n \n // 自动归档\n await archiveWorkflow(ctx.options.workingDirectory);\n const summary = activeSession.refinedRequirement;\n activeSession = null;\n \n lines.push('');\n lines.push(chalk.green.bold('🎉 工作流已完成!'));\n lines.push(chalk.gray(`需求: ${summary.slice(0, 60)}${summary.length > 60 ? '...' : ''}`));\n lines.push('');\n lines.push(chalk.cyan('使用 /new <需求> 开始新的工作流'));\n \n return { output: lines.join('\\n') };\n } else {\n lines.push(chalk.red(' ✗ 代码审核未通过'));\n lines.push(chalk.gray(' 问题:'));\n for (const issue of reviewResult.issues.slice(0, 5)) {\n lines.push(chalk.red(` - ${issue}`));\n }\n lines.push('');\n lines.push(chalk.yellow(' 请修复问题后输入 y 重新审核'));\n lines.push(chalk.gray(' 或输入 n 回退到规格阶段'));\n \n // 保持 review 阶段,等待用户操作\n return { output: lines.join('\\n') };\n }\n } catch (error) {\n lines.push(chalk.red(` ✗ 审核阶段出错: ${(error as Error).message}`));\n lines.push(chalk.gray(' 输入 pass 强制通过,或 fix 修复问题'));\n return { output: lines.join('\\n') };\n }\n }\n \n return { output: lines.join('\\n') };\n \n } catch (error) {\n lines.push(chalk.red(`错误: ${(error as Error).message}`));\n return { output: lines.join('\\n') };\n }\n}\n\n/**\n * 处理用户输入\n */\nexport async function handleWorkflowInput(\n input: string,\n ctx: ExecutorContext\n): Promise<CommandResult | null> {\n if (!activeSession) return null;\n \n const trimmed = input.trim().toLowerCase();\n \n // 取消工作流\n if (trimmed === 'c' || trimmed === 'cancel' || trimmed === '取消') {\n activeSession = null;\n return {\n output: chalk.yellow('✓ 工作流已取消'),\n };\n }\n \n // 需求澄清阶段\n if (activeSession.phase === 'clarify') {\n if (trimmed === 'done' || trimmed === '完成' || trimmed === '跳过' || trimmed === 'skip') {\n // 使用当前已收集的信息生成精炼需求\n activeSession.refinedRequirement = buildRefinedRequirement(activeSession);\n activeSession.phase = 'analysis';\n return executeWorkflow(ctx);\n }\n \n // 处理用户回答 - 记录答案\n const answeredCount = activeSession.clarificationQuestions.filter(q => q.answered).length;\n const unansweredQuestions = activeSession.clarificationQuestions.filter(q => !q.answered);\n \n if (unansweredQuestions.length > 0) {\n // 回答第一个未回答的问题\n const question = unansweredQuestions[0];\n question.answer = input.trim();\n question.answered = true;\n \n // 更新精炼需求\n activeSession.refinedRequirement = buildRefinedRequirement(activeSession);\n \n // 检查是否还有未回答的问题\n const remaining = activeSession.clarificationQuestions.filter(q => !q.answered);\n if (remaining.length > 0) {\n // 更新清晰度\n activeSession.clarityScore = calculateClarityScore(activeSession.clarificationQuestions);\n \n const lines: string[] = [];\n lines.push(chalk.green(' ✓ 已记录'));\n lines.push('');\n lines.push(chalk.yellow(' 继续回答:'));\n \n for (let i = 0; i < Math.min(remaining.length, 3); i++) {\n const q = remaining[i];\n lines.push(chalk.white(` ${i + 1}. ${q.question}`));\n }\n \n lines.push('');\n lines.push(chalk.gray(' 输入回答,或 \"done\" 跳过'));\n \n return { output: lines.join('\\n') };\n }\n \n // 所有问题已回答\n activeSession.clarityScore = 1;\n activeSession.phase = 'analysis';\n return executeWorkflow(ctx);\n }\n \n // 没有待回答的问题,继续\n activeSession.phase = 'analysis';\n return executeWorkflow(ctx);\n }\n \n // 规格确认阶段\n if (activeSession.phase === 'spec') {\n if (trimmed === 'y' || trimmed === 'yes' || trimmed === '确认') {\n activeSession.phase = 'tdd';\n return executeWorkflow(ctx);\n }\n \n if (trimmed === 'n' || trimmed === 'no' || trimmed === '重新') {\n // 重新生成规格\n activeSession.bddScenarios = generateBDDScenarios(\n activeSession.refinedRequirement,\n activeSession.context!,\n activeSession.clarificationQuestions\n );\n activeSession.specItems = generateSpecItems(\n activeSession.refinedRequirement,\n activeSession.context!,\n activeSession.bddScenarios,\n activeSession.clarificationQuestions\n );\n \n const specPath = await saveSpecFile(ctx.options.workingDirectory, activeSession);\n \n return {\n output: chalk.cyan('🔄 规格已重新生成') +\n chalk.gray(`\\n路径: ${specPath}`) +\n chalk.yellow('\\n\\n请确认:') +\n chalk.green('\\n y - 确认规格') +\n chalk.red('\\n n - 再次重新生成'),\n };\n }\n }\n \n // 开发阶段(如果自动开发失败,等待手动完成)\n if (activeSession.phase === 'develop') {\n if (trimmed === 'continue' || trimmed === '继续' || trimmed === 'done' || trimmed === '完成') {\n activeSession.phase = 'review';\n return executeWorkflow(ctx);\n }\n }\n \n // 审核阶段(处理重新审核或回退)\n if (activeSession.phase === 'review') {\n // 强制通过\n if (trimmed === 'pass' || trimmed === '通过' || trimmed === '强制通过') {\n await archiveWorkflow(ctx.options.workingDirectory);\n const summary = activeSession.refinedRequirement;\n activeSession = null;\n \n return {\n output: chalk.green('✓ 工作流已完成') +\n chalk.gray(`\\n需求: ${summary.slice(0, 60)}${summary.length > 60 ? '...' : ''}`) +\n chalk.cyan('\\n\\n使用 /new <需求> 开始新的工作流'),\n };\n }\n \n // 重新审核(修复问题后)\n if (trimmed === 'y' || trimmed === 'yes' || trimmed === '重新审核' || trimmed === 'retry') {\n return executeWorkflow(ctx);\n }\n \n // 回退到规格阶段\n if (trimmed === 'n' || trimmed === 'no' || trimmed === '回退' || trimmed === 'rollback') {\n activeSession.phase = 'spec';\n return executeWorkflow(ctx);\n }\n \n // 手动修复标记\n if (trimmed === 'fix' || trimmed === '修复') {\n return {\n output: chalk.yellow('📝 请手动修复代码问题') +\n chalk.gray('\\n修复完成后输入 y 重新审核') +\n chalk.gray('\\n或输入 n 回退到规格阶段'),\n };\n }\n }\n \n return null; // 不是工作流相关输入\n}\n\n/**\n * 分析需求清晰度\n */\nfunction analyzeRequirementClarity(\n requirement: string,\n context: ProjectContext\n): { score: number; questions: ClarificationQuestion[] } {\n const questions: ClarificationQuestion[] = [];\n let score = 0.5; // 基础分\n \n // 1. 检查需求长度\n if (requirement.length < 10) {\n score -= 0.2;\n questions.push({\n id: 'q-length',\n question: '需求描述较短,能否详细说明具体要实现什么功能?',\n category: 'scope',\n answered: false,\n });\n } else if (requirement.length >= 50) {\n score += 0.1;\n }\n \n // 2. 检查是否有明确的动作/目标\n const actionKeywords = ['实现', '添加', '修改', '删除', '优化', '修复', '重构', '开发', '创建', '设计'];\n const hasAction = actionKeywords.some(kw => requirement.includes(kw));\n if (!hasAction) {\n score -= 0.15;\n questions.push({\n id: 'q-action',\n question: '这是一个新功能、修改还是修复?请说明具体要做什么。',\n category: 'scope',\n answered: false,\n });\n } else {\n score += 0.1;\n }\n \n // 3. 检查是否有UI/界面相关描述\n if (requirement.match(/界面|页面|组件|按钮|表单|弹窗|布局|样式|UI/)) {\n score += 0.1;\n \n // 检查是否有具体的UI位置描述\n if (!requirement.match(/在.*页面|在.*位置|显示在|位于/)) {\n questions.push({\n id: 'q-ui-position',\n question: '这个功能应该放在哪个页面或位置?',\n category: 'ui',\n answered: false,\n });\n }\n } else {\n // 没有UI关键词,可能是纯逻辑功能\n questions.push({\n id: 'q-ui-need',\n question: '这个功能需要用户界面吗?如果需要,大概长什么样?',\n category: 'ui',\n answered: false,\n });\n }\n \n // 4. 检查是否有数据相关描述\n if (requirement.match(/数据|存储|保存|读取|API|接口|数据库|缓存/)) {\n score += 0.1;\n \n // 检查是否有数据来源说明\n if (!requirement.match(/从.*获取|调用.*接口|读取.*数据|来源/)) {\n questions.push({\n id: 'q-data-source',\n question: '数据从哪里来?是调用API、本地存储还是其他来源?',\n category: 'data',\n answered: false,\n });\n }\n }\n \n // 5. 检查是否有交互/用户操作描述\n if (requirement.match(/点击|输入|选择|拖动|滑动|交互|操作/)) {\n score += 0.1;\n } else {\n // 根据需求类型判断是否需要交互描述\n if (hasAction && requirement.match(/功能|特性|模块/)) {\n questions.push({\n id: 'q-interaction',\n question: '用户如何操作这个功能?有什么交互流程?',\n category: 'interaction',\n answered: false,\n });\n }\n }\n \n // 6. 检查是否有边界情况考虑\n if (requirement.match(/异常|错误|失败|边界|特殊情况|空值|验证/)) {\n score += 0.15;\n } else {\n // 对于功能性需求,询问边界情况\n if (requirement.match(/功能|输入|表单|数据/)) {\n questions.push({\n id: 'q-edge',\n question: '有什么特殊情况或边界条件需要处理?比如输入为空、数据加载失败等。',\n category: 'edge',\n answered: false,\n });\n }\n }\n \n // 7. 检查是否有参考链接\n if (requirement.match(/https?:\\/\\/|参考|参照|类似/)) {\n score += 0.15;\n }\n \n // 8. 根据项目上下文调整\n if (context.framework) {\n // 有框架信息,减少技术相关问题\n score += 0.05;\n }\n \n // 限制问题数量(最多5个)\n const limitedQuestions = questions.slice(0, 5);\n \n // 最终得分限制在 0-1 之间\n score = Math.max(0, Math.min(1, score));\n \n return { score, questions: limitedQuestions };\n}\n\n/**\n * 计算当前清晰度分数\n */\nfunction calculateClarityScore(questions: ClarificationQuestion[]): number {\n const answered = questions.filter(q => q.answered).length;\n if (questions.length === 0) return 1;\n return 0.5 + (answered / questions.length) * 0.5;\n}\n\n/**\n * 构建精炼后的需求描述\n */\nfunction buildRefinedRequirement(session: WorkflowSession): string {\n const parts: string[] = [session.requirement];\n \n for (const q of session.clarificationQuestions) {\n if (q.answered && q.answer) {\n parts.push(`\\n【${getCategoryLabel(q.category)}】${q.answer}`);\n }\n }\n \n return parts.join('');\n}\n\n/**\n * 获取分类标签\n */\nfunction getCategoryLabel(category: ClarificationQuestion['category']): string {\n const labels: Record<string, string> = {\n scope: '范围',\n ui: '界面',\n data: '数据',\n interaction: '交互',\n edge: '边界',\n tech: '技术',\n };\n return labels[category] || category;\n}\n\n/**\n * 执行开发实现(调用 AI)\n */\ninterface DevelopmentResult {\n success: boolean;\n files: string[];\n error?: string;\n}\n\nasync function executeDevelopment(\n ctx: ExecutorContext,\n session: WorkflowSession\n): Promise<DevelopmentResult> {\n const workingDir = ctx.options.workingDirectory;\n const files: string[] = [];\n \n try {\n // 构建开发提示词\n const systemPrompt = buildDevelopmentPrompt(session);\n \n // 调用 AI 模型\n const messages: ChatMessage[] = [\n {\n role: 'system',\n content: `你是一个专业的前端开发工程师。请根据需求规格生成代码实现。\n\n要求:\n1. 生成完整、可运行的代码\n2. 遵循项目现有的代码风格和规范\n3. 使用项目指定的技术栈\n4. 代码要有适当的注释\n5. 返回格式:每个文件用 \\`\\`\\`filename 代码 \\`\\`\\` 包裹\n\n项目信息:\n- 名称: ${session.context?.name}\n- 框架: ${session.context?.framework || '未指定'}\n- 技术栈: ${session.context?.techStack.join(', ') || '未指定'}\n\n${session.context?.devStandards ? `开发规范:\\n${session.context.devStandards.slice(0, 2000)}` : ''}`,\n },\n {\n role: 'user',\n content: systemPrompt,\n },\n ];\n \n const response = await ctx.modelService.sendMessage(messages, {\n temperature: 0.3,\n maxTokens: 8000,\n agent: 'frontend-dev',\n });\n \n // 解析 AI 返回的代码\n const codeBlocks = parseCodeBlocks(response.content);\n \n // 写入文件\n for (const block of codeBlocks) {\n const filePath = path.join(workingDir, block.filename);\n const dir = path.dirname(filePath);\n \n // 确保目录存在\n await fs.mkdir(dir, { recursive: true });\n \n // 写入文件\n await fs.writeFile(filePath, block.code, 'utf-8');\n files.push(block.filename);\n }\n \n // 如果没有解析到代码块,生成一个基础文件\n if (files.length === 0) {\n // 生成一个简单的实现文件\n const implDir = path.join(workingDir, 'src', 'features');\n await fs.mkdir(implDir, { recursive: true });\n \n const featureName = session.specItems[0]?.title || 'feature';\n const fileName = `${featureName.replace(/[^a-zA-Z0-9]/g, '_')}.ts`;\n const filePath = path.join(implDir, fileName);\n \n const stubCode = `/**\n * ${session.requirement}\n * \n * TODO: 此文件由 AI 自动生成,请根据需求完善实现\n */\n\nexport function ${featureName.replace(/[^a-zA-Z0-9]/g, '')}() {\n // TODO: 实现功能\n console.log('${featureName} - 待实现');\n}\n`;\n \n await fs.writeFile(filePath, stubCode, 'utf-8');\n files.push(`src/features/${fileName}`);\n }\n \n return { success: true, files };\n } catch (error) {\n return {\n success: false,\n files: [],\n error: (error as Error).message,\n };\n }\n}\n\n/**\n * 构建开发提示词\n */\nfunction buildDevelopmentPrompt(session: WorkflowSession): string {\n const lines: string[] = [];\n \n lines.push('## 需求描述');\n lines.push(session.refinedRequirement);\n lines.push('');\n \n lines.push('## BDD 场景');\n for (const scenario of session.bddScenarios) {\n lines.push(`### ${scenario.feature}`);\n for (const s of scenario.scenarios) {\n lines.push(`- ${s.name}`);\n }\n }\n lines.push('');\n \n lines.push('## 任务列表');\n for (const item of session.specItems) {\n lines.push(`- [${item.id}] ${item.title}: ${item.description}`);\n }\n lines.push('');\n \n lines.push('请根据以上需求规格生成代码实现。');\n \n return lines.join('\\n');\n}\n\n/**\n * 解析代码块\n */\nfunction parseCodeBlocks(content: string): { filename: string; code: string }[] {\n const blocks: { filename: string; code: string }[] = [];\n \n // 匹配 ```filename ... ```\n const regex = /```(\\S+)\\n([\\s\\S]*?)```/g;\n let match;\n \n while ((match = regex.exec(content)) !== null) {\n const filename = match[1];\n const code = match[2].trim();\n \n // 跳过非代码块(如 ```text, ```json 等)\n if (['text', 'json', 'markdown', 'md'].includes(filename.toLowerCase())) {\n continue;\n }\n \n blocks.push({ filename, code });\n }\n \n return blocks;\n}\n\n/**\n * 执行代码审核(调用 AI)\n */\ninterface ReviewResult {\n passed: boolean;\n issues: string[];\n suggestions: string[];\n}\n\nasync function executeReview(\n ctx: ExecutorContext,\n session: WorkflowSession\n): Promise<ReviewResult> {\n const workingDir = ctx.options.workingDirectory;\n const issues: string[] = [];\n const suggestions: string[] = [];\n \n try {\n // 读取生成的代码文件\n const codeContents: string[] = [];\n for (const file of session.implFiles) {\n try {\n const content = await fs.readFile(path.join(workingDir, file), 'utf-8');\n codeContents.push(`// ${file}\\n${content}`);\n } catch {\n // 文件可能不存在\n }\n }\n \n // 读取测试文件\n const testContents: string[] = [];\n for (const file of session.testFiles) {\n try {\n const content = await fs.readFile(path.join(workingDir, file), 'utf-8');\n testContents.push(`// ${file}\\n${content}`);\n } catch {\n // 文件可能不存在\n }\n }\n \n // 构建审核提示词\n const messages: ChatMessage[] = [\n {\n role: 'system',\n content: `你是一个专业的代码审核专家。请审核以下代码实现是否符合需求规格。\n\n审核标准:\n1. 代码是否正确实现了需求规格中的功能\n2. 代码质量(可读性、可维护性)\n3. 潜在的 bug 和边界情况处理\n4. 代码风格是否符合项目规范\n5. 测试覆盖是否充分\n\n返回格式:\n- 如果通过审核,返回 \"审核通过\" 并列出改进建议\n- 如果不通过,列出具体问题\n\n项目信息:\n- 框架: ${session.context?.framework || '未指定'}\n- 技术栈: ${session.context?.techStack.join(', ') || '未指定'}\n\n${session.context?.devStandards ? `开发规范:\\n${session.context.devStandards.slice(0, 1000)}` : ''}`,\n },\n {\n role: 'user',\n content: `## 需求规格\n${session.refinedRequirement}\n\n## 任务列表\n${session.specItems.map(item => `- [${item.id}] ${item.title}`).join('\\n')}\n\n## 实现代码\n${codeContents.join('\\n\\n') || '(无代码文件)'}\n\n## 测试代码\n${testContents.join('\\n\\n') || '(无测试文件)'}\n\n请审核以上代码实现。`,\n },\n ];\n \n const response = await ctx.modelService.sendMessage(messages, {\n temperature: 0.2,\n maxTokens: 2000,\n agent: 'code-reviewer',\n });\n \n const result = response.content;\n \n // 解析审核结果\n const passed = result.includes('审核通过') || \n result.includes('通过') || \n !result.includes('不通过');\n \n // 提取问题和建议\n const issueMatches = result.match(/问题[::]\\s*([\\s\\S]*?)(?=建议|$)/i);\n if (issueMatches) {\n const issueList = issueMatches[1].split(/[\\n-]/).filter(s => s.trim());\n issues.push(...issueList.map(s => s.trim()).filter(s => s));\n }\n \n const suggestionMatches = result.match(/建议[::]\\s*([\\s\\S]*?)$/i);\n if (suggestionMatches) {\n const suggestionList = suggestionMatches[1].split(/[\\n-]/).filter(s => s.trim());\n suggestions.push(...suggestionList.map(s => s.trim()).filter(s => s));\n }\n \n // 如果没有解析到,从整体内容提取\n if (issues.length === 0 && !passed) {\n const lines = result.split('\\n').filter(l => l.includes('问题') || l.includes('错误') || l.includes('缺陷'));\n issues.push(...lines.map(l => l.replace(/^[-*]\\s*/, '').trim()).filter(l => l));\n }\n \n if (suggestions.length === 0) {\n const lines = result.split('\\n').filter(l => l.includes('建议') || l.includes('改进') || l.includes('优化'));\n suggestions.push(...lines.map(l => l.replace(/^[-*]\\s*/, '').trim()).filter(l => l));\n }\n \n return { passed, issues, suggestions };\n } catch (error) {\n // 如果审核出错,默认通过(让开发者可以继续)\n suggestions.push(`审核过程出错: ${(error as Error).message}`);\n return { passed: true, issues, suggestions };\n }\n}\n\n/**\n * 读取项目上下文\n */\nasync function readProjectContext(workingDir: string): Promise<ProjectContext> {\n const context: ProjectContext = {\n name: path.basename(workingDir),\n type: 'unknown',\n framework: null,\n techStack: [],\n description: '',\n devStandards: '',\n agentsMd: '',\n configYaml: '',\n };\n \n // 读取 AGENTS.md\n const agentsPath = path.join(workingDir, 'AGENTS.md');\n try {\n const stats = await fs.stat(agentsPath);\n if (stats.size <= MAX_FILE_SIZE) {\n context.agentsMd = await fs.readFile(agentsPath, 'utf-8');\n \n // 解析项目信息\n const nameMatch = context.agentsMd.match(/\\|\\s*项目名称\\s*\\|\\s*([^\\s|]+)/);\n if (nameMatch) context.name = nameMatch[1];\n \n const typeMatch = context.agentsMd.match(/\\|\\s*项目类型\\s*\\|\\s*([^\\s|]+)/);\n if (typeMatch) context.type = typeMatch[1];\n \n const frameworkMatch = context.agentsMd.match(/\\|\\s*技术框架\\s*\\|\\s*([^\\s|]+)/);\n if (frameworkMatch && frameworkMatch[1] !== '待识别') {\n context.framework = frameworkMatch[1];\n }\n }\n } catch { /* ignore */ }\n \n // 读取 config.yaml\n const configPath = path.join(workingDir, 'openspec', 'config.yaml');\n try {\n const stats = await fs.stat(configPath);\n if (stats.size <= MAX_FILE_SIZE) {\n context.configYaml = await fs.readFile(configPath, 'utf-8');\n \n const nameMatch = context.configYaml.match(/name:\\s*(.+)/);\n if (nameMatch) context.name = nameMatch[1].trim();\n \n const typeMatch = context.configYaml.match(/type:\\s*(.+)/);\n if (typeMatch) context.type = typeMatch[1].trim();\n \n const frameworkMatch = context.configYaml.match(/framework:\\s*(.+)/);\n if (frameworkMatch && frameworkMatch[1].trim() !== 'null') {\n context.framework = frameworkMatch[1].trim();\n }\n \n // 解析技术栈\n const techStackMatch = context.configYaml.match(/techStack:\\s*([\\s\\S]+?)(?=\\n\\w)/);\n if (techStackMatch) {\n const techLines = techStackMatch[1].match(/-\\s*(.+)/g);\n if (techLines) {\n context.techStack = techLines.map(l => l.replace(/-\\s*/, '').trim());\n }\n }\n }\n } catch { /* ignore */ }\n \n // 读取开发规范\n const devStandardsPath = path.join(workingDir, '.sf-cli', 'norms', 'devstanded.md');\n try {\n const stats = await fs.stat(devStandardsPath);\n if (stats.size <= MAX_FILE_SIZE) {\n context.devStandards = await fs.readFile(devStandardsPath, 'utf-8');\n }\n } catch { /* ignore */ }\n \n return context;\n}\n\n/**\n * 分析复杂度\n */\nfunction analyzeComplexity(requirement: string, context: ProjectContext): number {\n let score = 3;\n \n // 需求长度\n if (requirement.length > 100) score += 1;\n if (requirement.length > 200) score += 1;\n \n // 复杂关键词\n const complexKeywords = ['架构', '重构', '迁移', '集成', '系统', '模块', '工作流', '流程', '权限', '安全'];\n for (const keyword of complexKeywords) {\n if (requirement.includes(keyword)) score += 1;\n }\n \n // 简单关键词\n const simpleKeywords = ['修复', '调整', '优化', '更新', '添加', '样式', '文本'];\n for (const keyword of simpleKeywords) {\n if (requirement.includes(keyword)) score -= 0.5;\n }\n \n // 多功能\n const connectors = ['和', '以及', '同时', '另外', '此外', '、'];\n for (const conn of connectors) {\n const count = (requirement.match(new RegExp(conn, 'g')) || []).length;\n score += count * 0.3;\n }\n \n // URL 引用\n if (requirement.match(/https?:\\/\\//)) score += 0.5;\n \n // 项目框架未知\n if (!context.framework) score += 0.5;\n \n return Math.max(1, Math.min(10, Math.round(score)));\n}\n\n/**\n * 生成 BDD 场景\n */\nfunction generateBDDScenarios(\n requirement: string,\n context: ProjectContext,\n questions: ClarificationQuestion[]\n): BDDScenario[] {\n const scenarios: BDDScenario[] = [];\n \n // 从澄清问答中提取信息\n const uiAnswer = questions.find(q => q.category === 'ui' && q.answered)?.answer;\n const interactionAnswer = questions.find(q => q.category === 'interaction' && q.answered)?.answer;\n const edgeAnswer = questions.find(q => q.category === 'edge' && q.answered)?.answer;\n \n // 提取关键功能\n const features = extractFeatures(requirement);\n \n for (const feature of features) {\n const scenario: BDDScenario = {\n feature: feature.title,\n description: feature.description,\n scenarios: [],\n };\n \n // 生成基本场景\n scenario.scenarios.push({\n name: `正常流程: ${feature.title}`,\n given: [`用户进入相关页面`],\n when: [`用户执行 \"${feature.title}\" 操作`],\n then: [`系统应正确处理并返回预期结果`],\n });\n \n // 如果有交互描述,添加交互场景\n if (interactionAnswer) {\n scenario.scenarios.push({\n name: `交互流程: 用户操作`,\n given: [`用户进入功能界面`],\n when: [`用户按照以下流程操作: ${interactionAnswer}`],\n then: [`系统响应并完成功能`],\n });\n }\n \n // 添加边界场景\n if (feature.hasInput || edgeAnswer) {\n scenario.scenarios.push({\n name: `边界情况: 异常处理`,\n given: [`用户进入功能界面`],\n when: [`发生异常情况${edgeAnswer ? `: ${edgeAnswer}` : ''}`],\n then: [`系统应正确处理异常并给出提示`],\n });\n }\n \n scenarios.push(scenario);\n }\n \n return scenarios;\n}\n\n/**\n * 提取功能点\n */\nfunction extractFeatures(requirement: string): { title: string; description: string; hasInput: boolean }[] {\n const features: { title: string; description: string; hasInput: boolean }[] = [];\n \n // URL 分析\n const urlMatch = requirement.match(/https?:\\/\\/[^\\s]+/);\n if (urlMatch) {\n features.push({\n title: '参考界面分析',\n description: `分析参考界面 ${urlMatch[0]}`,\n hasInput: false,\n });\n }\n \n // 功能关键词\n const featurePatterns = [\n { pattern: /排盘|计算|算法/, title: '核心算法实现', hasInput: true },\n { pattern: /界面|UI|页面|显示|展示/, title: '界面开发', hasInput: true },\n { pattern: /表格|列表/, title: '数据展示', hasInput: false },\n { pattern: /图表|图形|可视化/, title: '图表可视化', hasInput: false },\n { pattern: /表单|输入/, title: '表单处理', hasInput: true },\n { pattern: /登录|注册|认证/, title: '用户认证', hasInput: true },\n { pattern: /接口|API/, title: 'API 接口', hasInput: false },\n { pattern: /存储|缓存/, title: '数据存储', hasInput: false },\n { pattern: /导出|下载/, title: '导出功能', hasInput: false },\n { pattern: /配置|设置/, title: '配置管理', hasInput: true },\n ];\n \n for (const { pattern, title, hasInput } of featurePatterns) {\n if (pattern.test(requirement)) {\n features.push({\n title,\n description: `${title}相关功能`,\n hasInput,\n });\n }\n }\n \n // 确保至少有一个功能\n if (features.length === 0) {\n features.push({\n title: '核心功能实现',\n description: requirement,\n hasInput: true,\n });\n }\n \n return features;\n}\n\n/**\n * 生成规格项\n */\nfunction generateSpecItems(\n requirement: string,\n context: ProjectContext,\n bddScenarios: BDDScenario[],\n questions: ClarificationQuestion[]\n): SpecItem[] {\n const items: SpecItem[] = [];\n let id = 1;\n \n for (const scenario of bddScenarios) {\n items.push({\n id: `T${id.toString().padStart(3, '0')}`,\n title: scenario.feature,\n description: scenario.description,\n priority: id <= 2 ? 'high' : 'medium',\n files: [],\n tests: [],\n });\n id++;\n }\n \n // 添加测试任务\n items.push({\n id: `T${id.toString().padStart(3, '0')}`,\n title: '单元测试',\n description: '编写测试用例确保功能正确性',\n priority: 'medium',\n files: [],\n tests: [],\n });\n \n return items;\n}\n\n/**\n * 保存规格文件\n */\nasync function saveSpecFile(workingDir: string, session: WorkflowSession): Promise<string> {\n const specDir = path.join(workingDir, 'openspec', 'changes');\n await fs.mkdir(specDir, { recursive: true });\n \n const specPath = path.join(specDir, `${session.id}-spec.md`);\n \n const content = formatSpecFile(session);\n await fs.writeFile(specPath, content, 'utf-8');\n \n return specPath;\n}\n\n/**\n * 格式化规格文件\n */\nfunction formatSpecFile(session: WorkflowSession): string {\n const lines: string[] = [];\n \n lines.push(`# 需求规格: ${session.requirement.slice(0, 50)}`);\n lines.push('');\n lines.push(`> 变更ID: ${session.id}`);\n lines.push(`> 需求清晰度: ${Math.round(session.clarityScore * 100)}%`);\n lines.push(`> 复杂度: ${session.complexity}/10`);\n lines.push(`> 生成时间: ${session.createdAt.toISOString()}`);\n lines.push('');\n lines.push('---');\n lines.push('');\n \n // 精炼需求\n if (session.refinedRequirement !== session.requirement) {\n lines.push('## 需求详情');\n lines.push('');\n lines.push(session.refinedRequirement);\n lines.push('');\n lines.push('---');\n lines.push('');\n }\n \n // 澄清问答\n if (session.clarificationQuestions.some(q => q.answered)) {\n lines.push('## 需求澄清');\n lines.push('');\n for (const q of session.clarificationQuestions) {\n if (q.answered) {\n lines.push(`**Q: ${q.question}**`);\n lines.push(`A: ${q.answer}`);\n lines.push('');\n }\n }\n lines.push('---');\n lines.push('');\n }\n \n // BDD 场景\n lines.push('## BDD 场景');\n lines.push('');\n \n for (const scenario of session.bddScenarios) {\n lines.push(`### Feature: ${scenario.feature}`);\n lines.push('');\n \n for (const s of scenario.scenarios) {\n lines.push(`**Scenario: ${s.name}**`);\n for (const g of s.given) lines.push(` Given ${g}`);\n for (const w of s.when) lines.push(` When ${w}`);\n for (const t of s.then) lines.push(` Then ${t}`);\n lines.push('');\n }\n }\n \n // 任务列表\n lines.push('## 任务列表');\n lines.push('');\n \n for (const item of session.specItems) {\n const priority = item.priority === 'high' ? '🔴' : item.priority === 'medium' ? '🟡' : '🟢';\n lines.push(`- [ ] ${priority} [${item.id}] ${item.title}`);\n }\n \n lines.push('');\n lines.push('---');\n lines.push('');\n lines.push('**确认状态**: ⏳ 等待确认');\n \n return lines.join('\\n');\n}\n\n/**\n * 生成测试文件\n */\nasync function generateTests(workingDir: string, session: WorkflowSession): Promise<string[]> {\n const testDir = path.join(workingDir, 'tests');\n await fs.mkdir(testDir, { recursive: true });\n \n const testFiles: string[] = [];\n \n // 为每个 BDD 场景生成测试文件\n for (const scenario of session.bddScenarios) {\n const testName = scenario.feature.replace(/[^a-zA-Z0-9\\u4e00-\\u9fa5]/g, '_');\n const testPath = path.join(testDir, `${testName}.test.ts`);\n \n const content = generateTestFile(scenario);\n await fs.writeFile(testPath, content, 'utf-8');\n testFiles.push(`tests/${testName}.test.ts`);\n }\n \n return testFiles;\n}\n\n/**\n * 生成测试文件内容\n */\nfunction generateTestFile(scenario: BDDScenario): string {\n const lines: string[] = [];\n \n lines.push(`import { describe, it, expect } from 'vitest';`);\n lines.push('');\n lines.push(`describe('${scenario.feature}', () => {`);\n \n for (const s of scenario.scenarios) {\n lines.push(` it('${s.name}', () => {`);\n lines.push(` // Given: ${s.given.join(', ')}`);\n lines.push(` // When: ${s.when.join(', ')}`);\n lines.push(` // Then: ${s.then.join(', ')}`);\n lines.push(` expect(true).toBe(true); // TODO: 实现测试`);\n lines.push(` });`);\n lines.push('');\n }\n \n lines.push(`});`);\n \n return lines.join('\\n');\n}\n\n/**\n * 归档工作流\n */\nasync function archiveWorkflow(workingDir: string): Promise<void> {\n if (!activeSession) return;\n \n const archiveDir = path.join(workingDir, 'openspec', 'spec');\n await fs.mkdir(archiveDir, { recursive: true });\n \n const archivePath = path.join(archiveDir, `${activeSession.id}.md`);\n \n const content = `# 归档: ${activeSession.requirement.slice(0, 50)}\n\n> 归档时间: ${new Date().toISOString()}\n> 需求清晰度: ${Math.round(activeSession.clarityScore * 100)}%\n> 复杂度: ${activeSession.complexity}/10\n\n## 需求详情\n\n${activeSession.refinedRequirement}\n\n## 完成情况\n\n- [x] 项目上下文获取\n- [x] 需求澄清\n- [x] 复杂度评估\n- [x] BDD 场景拆解\n- [x] OpenSpec 规格\n- [x] TDD 测试生成\n- [x] 开发实现\n- [x] 代码审核\n\n## 测试文件\n\n${activeSession.testFiles.map(f => `- ${f}`).join('\\n') || '无'}\n`;\n \n await fs.writeFile(archivePath, content, 'utf-8');\n}\n\n/**\n * 工具函数\n */\nfunction generateSessionId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).slice(2, 6);\n return `WF-${timestamp}-${random}`.toUpperCase();\n}\n\nfunction generateComplexityBar(score: number): string {\n const filled = Math.round(score / 2);\n const empty = 5 - filled;\n return '█'.repeat(filled) + '░'.repeat(empty);\n}\n\nfunction getPhaseLabel(phase: WorkflowPhase): string {\n const labels: Record<WorkflowPhase, string> = {\n context: '项目上下文获取',\n clarify: '需求澄清',\n analysis: '复杂度评估',\n bdd: 'BDD 场景拆解',\n spec: 'OpenSpec 规格',\n tdd: 'TDD 测试生成',\n develop: '开发实现',\n review: '代码审核',\n };\n return labels[phase];\n}\n\n/**\n * 导出\n */\nexport function getActiveSession(): WorkflowSession | null {\n return activeSession;\n}\n\nexport function clearActiveSession(): void {\n activeSession = null;\n}\n\nexport default handleNew;","/**\n * sf-cli - 专为前端开发设计的AI驱动CLI工具\n * \n * 导出核心模块,支持作为库使用\n */\n\n// 核心类型(已包含 agent 和 mcp 类型)\nexport * from './types';\n\n// 服务\nexport { ConfigManager } from './services/config';\nexport { ModelService } from './services/model';\nexport * from './services/mcp';\n\n// Agent 系统\nexport { runAgent, getAgent, listAgents, getAgentsForStep } from './agents/runner';\nexport { AgentExecutor, createAgentExecutor } from './agents/executor';\nexport * from './agents';\n\n// 工作流引擎\nexport { WorkflowEngine, ConfirmationRequiredError } from './workflow';\nexport * from './workflow/checkpoint';\n\n// 规范学习\nexport { NormsManager } from './norms';\n\n// 上下文管理\nexport { ContextManager } from './context';\n\n// CLI 相关\nexport { CommandParser, CommandType } from './cli/parser';\nexport { CommandExecutor } from './cli/executor';\nexport { Completer } from './cli/completer';\n","/**\n * 类型定义 - 核心类型\n */\n\n// Agent 相关类型\nexport * from './agent';\n\n// MCP 相关类型\nexport * from './mcp';\n\n// 配置相关\nexport interface CLIConfig {\n model: string;\n apiKey: string;\n apiEndpoint?: string;\n yolo: boolean;\n locale: string;\n theme: 'light' | 'dark' | 'auto';\n}\n\n// 工作流相关\nexport type WorkflowStep =\n | 'explore' \n | 'new' \n | 'continue' \n | 'apply' \n | 'archive'\n | 'propose';\n\n// 新工作流阶段\nexport type WorkflowPhase =\n | 'context' // 项目上下文获取\n | 'clarify' // 需求澄清\n | 'analysis' // 复杂度评估\n | 'bdd' // BDD 场景拆解\n | 'spec' // OpenSpec 规格\n | 'tdd' // TDD 测试生成\n | 'develop' // 开发实现\n | 'review'; // 代码审核\n\nexport type WorkflowType = 'complex' | 'simple';\n\nexport type WorkflowStatus = 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';\n\nexport interface WorkflowState {\n id: string;\n type: WorkflowType;\n currentStep: WorkflowStep;\n steps: WorkflowStepRecord[];\n requirement: string;\n title?: string;\n complexity: number;\n artifacts: string[];\n status: WorkflowStatus;\n createdAt: Date;\n updatedAt?: Date;\n completedAt?: Date;\n cancelledAt?: Date;\n cancelReason?: string;\n}\n\nexport interface WorkflowStepRecord {\n step: WorkflowStep;\n status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';\n startedAt?: Date;\n completedAt?: Date;\n output?: string;\n agent?: 'frontend-dev' | 'code-reviewer' | 'architect' | 'tester';\n}\nexport interface WorkflowTransition {\n from: WorkflowStep;\n to: WorkflowStep;\n timestamp: Date;\n reason?: string;\n}\n\nexport interface ChangeRecord {\n id: string;\n title: string;\n status: WorkflowStatus;\n created: Date;\n completed?: Date;\n complexity: number;\n workflow: WorkflowType;\n spec?: string;\n summary?: string;\n}\n\n// 上下文相关\nexport interface ContextMessage {\n role: 'system' | 'user' | 'assistant' | 'tool';\n content: string;\n tokens?: number;\n}\n\nexport interface ContextState {\n messages: ContextMessage[];\n totalTokens: number;\n limit: number;\n}\n\n// 任务相关\nexport interface Task {\n id: string;\n type: 'feature' | 'bugfix' | 'refactor' | 'docs';\n description: string;\n status: 'pending' | 'in_progress' | 'review' | 'completed' | 'archived';\n complexity: number;\n workflow: WorkflowState;\n files: string[];\n createdAt: Date;\n updatedAt: Date;\n}\n\n// 文件操作相关\nexport interface FileOperation {\n type: 'read' | 'write' | 'edit' | 'delete';\n path: string;\n content?: string;\n changes?: FileChange[];\n}\n\nexport interface FileChange {\n startLine: number;\n endLine: number;\n oldContent: string;\n newContent: string;\n}\n\n// Token统计\nexport interface TokenUsage {\n input: number;\n output: number;\n total: number;\n byAgent: Partial<Record<'frontend-dev' | 'code-reviewer' | 'architect' | 'tester', number>>;\n byStep: Partial<Record<WorkflowStep, number>>;\n}\n\n// 健康度报告\nexport interface HealthReport {\n overallScore: number;\n categories: {\n quality: number;\n security: number;\n performance: number;\n maintainability: number;\n };\n issues: HealthIssue[];\n suggestions: string[];\n generatedAt: Date;\n}\n\nexport interface HealthIssue {\n severity: 'error' | 'warning' | 'info';\n category: string;\n file: string;\n line: number;\n message: string;\n suggestion?: string;\n}\n\n// 规范学习\nexport interface DevStandard {\n id: string;\n category: string;\n description: string;\n weight: number;\n source: 'code-analysis' | 'conversation' | 'forced';\n examples: string[];\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface StandardWeight {\n standardId: string;\n weight: number;\n occurrences: number;\n lastOccurrence: Date;\n}","/**\n * Agent 系统类型定义\n */\n\nimport { WorkflowStep } from './index';\nimport { ChatMessage } from './model';\n\n// ==================== Agent 基础类型 ====================\n\nexport type AgentId = 'frontend-dev' | 'code-reviewer' | 'architect' | 'tester';\n\nexport type AgentStatus = 'idle' | 'running' | 'completed' | 'failed' | 'cancelled';\n\nexport type AgentTriggerType = 'manual' | 'workflow' | 'intent' | 'event';\n\n// ==================== Agent 工具定义 ====================\n\nexport type ToolPermissionLevel = 'full' | 'limited' | 'confirm' | 'none';\n\nexport interface AgentTool {\n name: string;\n description: string;\n permission: ToolPermissionLevel;\n parameters?: Record<string, unknown>;\n}\n\n// ==================== Agent 能力定义 ====================\n\nexport interface AgentCapability {\n id: string;\n name: string;\n description: string;\n inputSchema?: Record<string, unknown>;\n outputSchema?: Record<string, unknown>;\n}\n\n// ==================== Agent 触发器 ====================\n\nexport interface AgentTrigger {\n type: AgentTriggerType;\n condition: {\n workflowStep?: WorkflowStep;\n intent?: string[];\n event?: string;\n };\n priority: number;\n}\n\n// ==================== Agent 约束条件 ====================\n\nexport interface AgentConstraints {\n files?: {\n maxFileSize?: number;\n maxFilesPerTask?: number;\n allowedExtensions?: string[];\n protectedPaths?: string[];\n };\n code?: {\n maxLineLength?: number;\n maxFunctionLength?: number;\n maxFileLines?: number;\n requireTypes?: boolean;\n requireTests?: boolean;\n };\n dependencies?: {\n allowedLicenses?: string[];\n requireApproval?: string[];\n blacklist?: string[];\n };\n behavior?: {\n requireConfirmation?: string[];\n autoCommit?: boolean;\n autoPush?: boolean;\n };\n}\n\n// ==================== Agent 定义 ====================\n\nexport interface AgentDefinition {\n id: AgentId;\n name: string;\n description: string;\n icon: string;\n version: string;\n role: string;\n capabilities: AgentCapability[];\n tools: AgentTool[];\n triggers: AgentTrigger[];\n constraints: AgentConstraints;\n \n // Prompt 相关\n systemPrompt: string;\n taskPromptTemplate: string;\n \n // 输出处理\n outputFormat?: {\n type: 'text' | 'json' | 'markdown';\n schema?: Record<string, unknown>;\n };\n}\n\n// ==================== Agent 执行上下文 ====================\n\nexport interface ProjectContext {\n agentsMd: string;\n configYaml: string;\n devStandards: string;\n}\n\nexport interface AgentExecutionContext {\n taskId: string;\n workflowId?: string;\n workflowStep?: WorkflowStep;\n requirement: string;\n files?: string[];\n context?: string;\n norms?: string[];\n previousOutput?: string;\n projectContext?: ProjectContext; // 项目上下文(AGENTS.md, config.yaml, devstanded.md)\n}\n\n// ==================== Agent 执行结果 ====================\n\nexport interface AgentExecutionResult {\n success: boolean;\n output: string;\n structuredOutput?: Record<string, unknown>;\n filesChanged?: string[];\n tokensUsed: {\n input: number;\n output: number;\n };\n duration: number;\n error?: string;\n suggestions?: string[];\n}\n\n// ==================== Agent 会话状态 ====================\n\nexport interface AgentSession {\n id: string;\n agentId: AgentId;\n status: AgentStatus;\n context: AgentExecutionContext;\n messages: ChatMessage[];\n result?: AgentExecutionResult;\n startedAt: Date;\n completedAt?: Date;\n}\n\n// ==================== Agent 调度请求 ====================\n\nexport interface AgentScheduleRequest {\n agentId: AgentId;\n context: AgentExecutionContext;\n options?: {\n timeout?: number;\n maxRetries?: number;\n streamOutput?: boolean;\n onProgress?: (chunk: string) => void;\n };\n}\n\n// ==================== Agent 注册表 ====================\n\nexport interface AgentRegistry {\n agents: Map<AgentId, AgentDefinition>;\n customAgents: Map<string, AgentDefinition>;\n}\n\n// ==================== 工具函数类型 ====================\n\nexport interface ToolExecutor {\n name: string;\n execute: (params: Record<string, unknown>, context: AgentExecutionContext) => Promise<unknown>;\n}\n\n// ==================== Agent 事件 ====================\n\nexport interface AgentEvent {\n type: 'started' | 'progress' | 'completed' | 'failed' | 'cancelled';\n agentId: AgentId;\n sessionId: string;\n timestamp: Date;\n data?: unknown;\n}\n","/**\n * MCP (Model Context Protocol) 相关类型定义\n */\n\n// ==================== MCP 工具定义 ====================\n\nexport interface MCPToolSchema {\n name: string;\n description: string;\n inputSchema: {\n type: 'object';\n properties: Record<string, {\n type: string;\n description: string;\n enum?: string[];\n }>;\n required?: string[];\n };\n}\n\nexport interface MCPToolCall {\n name: string;\n arguments: Record<string, unknown>;\n}\n\nexport interface MCPToolResult {\n content: Array<{\n type: 'text' | 'image' | 'resource';\n text?: string;\n data?: string;\n mimeType?: string;\n }>;\n isError?: boolean;\n}\n\n// ==================== MCP 资源定义 ====================\n\nexport interface MCPResource {\n uri: string;\n name: string;\n description?: string;\n mimeType?: string;\n}\n\nexport interface MCPResourceContent {\n uri: string;\n mimeType?: string;\n text?: string;\n blob?: string;\n}\n\n// ==================== MCP 服务配置 ====================\n\nexport type MCPTransportType = 'stdio' | 'http' | 'websocket';\n\nexport interface MCPServerConfig {\n name: string;\n transport: MCPTransportType;\n command?: string; // for stdio\n args?: string[]; // for stdio\n url?: string; // for http/websocket\n env?: Record<string, string>;\n timeout?: number;\n retryAttempts?: number;\n}\n\nexport interface MCPClientConfig {\n servers: MCPServerConfig[];\n defaultTimeout?: number;\n}\n\n// ==================== MCP 连接状态 ====================\n\nexport type MCPConnectionStatus = 'disconnected' | 'connecting' | 'connected' | 'error';\n\nexport interface MCPConnectionState {\n serverName: string;\n status: MCPConnectionStatus;\n error?: string;\n lastConnected?: Date;\n toolsAvailable: string[];\n resourcesAvailable: string[];\n}\n\n// ==================== 设计稿相关类型 ====================\n\nexport interface DesignSpec {\n id: string;\n name: string;\n platform: 'lanhu' | 'figma';\n url: string;\n width: number;\n height: number;\n scale: number;\n layers: DesignLayer[];\n styles: DesignStyle;\n assets: DesignAsset[];\n extractedAt: Date;\n}\n\nexport interface DesignLayer {\n id: string;\n name: string;\n type: 'frame' | 'group' | 'text' | 'shape' | 'image';\n x: number;\n y: number;\n width: number;\n height: number;\n visible: boolean;\n opacity: number;\n children?: DesignLayer[];\n styles?: Partial<DesignStyle>;\n text?: string;\n}\n\nexport interface DesignStyle {\n colors: DesignColor[];\n typography: DesignTypography[];\n spacing: DesignSpacing[];\n borders: DesignBorder[];\n shadows: DesignShadow[];\n}\n\nexport interface DesignColor {\n name?: string;\n value: string;\n usage?: string;\n}\n\nexport interface DesignTypography {\n fontFamily: string;\n fontSize: number;\n fontWeight: number;\n lineHeight: number;\n letterSpacing?: number;\n textAlign?: 'left' | 'center' | 'right';\n}\n\nexport interface DesignSpacing {\n type: 'margin' | 'padding' | 'gap';\n value: number;\n unit: 'px' | 'rem' | '%';\n}\n\nexport interface DesignBorder {\n width: number;\n style: 'solid' | 'dashed' | 'dotted';\n color: string;\n radius?: number;\n}\n\nexport interface DesignShadow {\n type: 'box' | 'text';\n x: number;\n y: number;\n blur: number;\n spread?: number;\n color: string;\n}\n\nexport interface DesignAsset {\n id: string;\n name: string;\n type: 'image' | 'icon' | 'svg';\n url: string;\n width?: number;\n height?: number;\n format?: string;\n}\n\n// ==================== 设计稿解析结果 ====================\n\nexport interface DesignParseResult {\n success: boolean;\n spec?: DesignSpec;\n componentCode?: string;\n styleCode?: string;\n errors?: string[];\n warnings?: string[];\n}\n\n// ==================== MCP 服务接口 ====================\n\nexport interface IMCPAdapter {\n readonly name: string;\n readonly platform: 'lanhu' | 'figma';\n \n initialize(config: MCPServerConfig): Promise<void>;\n connect(): Promise<void>;\n disconnect(): Promise<void>;\n isConnected(): boolean;\n \n listTools(): Promise<MCPToolSchema[]>;\n callTool(call: MCPToolCall): Promise<MCPToolResult>;\n \n listResources(): Promise<MCPResource[]>;\n readResource(uri: string): Promise<MCPResourceContent>;\n \n // 设计稿特有方法\n getDesignSpec(url: string): Promise<DesignSpec>;\n extractStyles(spec: DesignSpec): Promise<DesignStyle>;\n generateCode(spec: DesignSpec, options?: CodeGenOptions): Promise<string>;\n}\n\nexport interface CodeGenOptions {\n framework?: 'react' | 'vue' | 'html';\n styleType?: 'css' | 'scss' | 'tailwind' | 'styled-components';\n componentType?: 'functional' | 'class';\n typescript?: boolean;\n}\n\n// ==================== MCP 管理器 ====================\n\nexport interface MCPManagerState {\n adapters: Map<string, IMCPAdapter>;\n connections: Map<string, MCPConnectionState>;\n}\n","/**\n * 配置管理服务\n * 管理CLI配置的加载、保存和访问\n * API Key 使用加密存储\n */\n\nimport * as fs from 'fs/promises';\nimport * as fsSync from 'fs';\nimport * as path from 'path';\nimport * as crypto from 'crypto';\nimport * as os from 'os';\nimport { CLIConfig } from '../types';\n\nconst DEFAULT_CONFIG: CLIConfig = {\n model: 'GLM-5',\n apiKey: '',\n yolo: false,\n locale: 'zh-CN',\n theme: 'auto',\n};\n\nconst ALGORITHM = 'aes-256-gcm';\nconst IV_LENGTH = 16;\nconst AUTH_TAG_LENGTH = 16;\nconst KEY_DIR = '.sf-cli';\nconst KEY_FILE = '.key';\n\n/**\n * 获取或创建加密密钥\n * 首次运行时生成随机密钥并安全存储\n */\nfunction getOrCreateEncryptionKey(): Buffer {\n const keyPath = path.join(os.homedir(), KEY_DIR, KEY_FILE);\n \n try {\n // 尝试读取已有密钥\n if (fsSync.existsSync(keyPath)) {\n const keyBase64 = fsSync.readFileSync(keyPath, 'utf-8').trim();\n return Buffer.from(keyBase64, 'base64');\n }\n } catch {\n // 读取失败,重新生成\n }\n \n // 生成新的随机密钥\n const key = crypto.randomBytes(32);\n \n try {\n // 确保目录存在\n const keyDir = path.dirname(keyPath);\n if (!fsSync.existsSync(keyDir)) {\n fsSync.mkdirSync(keyDir, { recursive: true, mode: 0o700 });\n }\n \n // 写入密钥文件,设置严格权限\n fsSync.writeFileSync(keyPath, key.toString('base64'), {\n mode: 0o600, // 仅所有者可读写\n encoding: 'utf-8',\n });\n \n return key;\n } catch {\n // 文件系统不可用时,使用机器标识作为备选方案\n const machineId = [\n os.hostname(),\n os.platform(),\n os.arch(),\n process.env.USERNAME || process.env.USER || 'default',\n ].join('-');\n return crypto.createHash('sha256').update(machineId).digest();\n }\n}\n\nexport class ConfigManager {\n private config: CLIConfig;\n private configPath: string = '';\n private projectPath: string = '';\n private encryptionKey: Buffer;\n\n constructor() {\n this.config = { ...DEFAULT_CONFIG };\n this.encryptionKey = getOrCreateEncryptionKey();\n }\n\n async load(projectPath: string): Promise<void> {\n this.projectPath = projectPath;\n this.configPath = path.join(projectPath, '.sf-cli', 'config.json');\n \n try {\n const content = await fs.readFile(this.configPath, 'utf-8');\n const loaded = JSON.parse(content);\n \n // 解密 API Key\n if (loaded.apiKey && loaded.apiKeyEncrypted) {\n loaded.apiKey = this.decrypt(loaded.apiKey);\n delete loaded.apiKeyEncrypted;\n }\n \n this.config = { ...DEFAULT_CONFIG, ...loaded };\n } catch {\n // 配置文件不存在,使用默认配置\n this.config = { ...DEFAULT_CONFIG };\n }\n }\n\n async save(): Promise<void> {\n if (!this.configPath) return;\n \n const configToSave = { ...this.config };\n \n // 加密 API Key\n if (configToSave.apiKey) {\n const encrypted = this.encrypt(configToSave.apiKey);\n configToSave.apiKey = encrypted;\n (configToSave as any).apiKeyEncrypted = true;\n }\n \n await fs.mkdir(path.dirname(this.configPath), { recursive: true });\n await fs.writeFile(\n this.configPath, \n JSON.stringify(configToSave, null, 2),\n 'utf-8'\n );\n }\n\n get<K extends keyof CLIConfig>(key: K): CLIConfig[K] {\n return this.config[key];\n }\n\n set<K extends keyof CLIConfig>(key: K, value: CLIConfig[K]): void {\n this.config[key] = value;\n }\n\n getAll(): CLIConfig {\n return { ...this.config };\n }\n\n update(updates: Partial<CLIConfig>): void {\n this.config = { ...this.config, ...updates };\n }\n\n /**\n * 加密敏感数据\n */\n private encrypt(text: string): string {\n const iv = crypto.randomBytes(IV_LENGTH);\n const cipher = crypto.createCipheriv(ALGORITHM, this.encryptionKey, iv);\n \n let encrypted = cipher.update(text, 'utf8', 'base64');\n encrypted += cipher.final('base64');\n \n const authTag = cipher.getAuthTag();\n \n // 格式: iv:authTag:encrypted\n return `${iv.toString('base64')}:${authTag.toString('base64')}:${encrypted}`;\n }\n\n /**\n * 解密敏感数据\n */\n private decrypt(encryptedData: string): string {\n try {\n const parts = encryptedData.split(':');\n if (parts.length !== 3) {\n // 旧格式(未加密),直接返回\n return encryptedData;\n }\n \n const [ivBase64, authTagBase64, encrypted] = parts;\n const iv = Buffer.from(ivBase64!, 'base64');\n const authTag = Buffer.from(authTagBase64!, 'base64');\n \n const decipher = crypto.createDecipheriv(ALGORITHM, this.encryptionKey, iv);\n decipher.setAuthTag(authTag);\n \n let decrypted = decipher.update(encrypted!, 'base64', 'utf8');\n decrypted += decipher.final('utf8');\n \n return decrypted;\n } catch {\n // 解密失败,返回空字符串\n return '';\n }\n }\n}\n\nexport default ConfigManager;\n","/**\n * AI模型调用服务\n * 统一的模型调用接口,管理多个模型适配器\n */\n\nimport {\n IModelAdapter,\n ModelConfig,\n ModelProvider,\n ChatMessage,\n ChatResponse,\n StreamChunk,\n RequestOptions,\n ModelError,\n TokenStats,\n TokenUsage,\n getModelInfo,\n} from '../types/model';\nimport { createAdapter } from './adapters';\nimport { ConfigManager } from './config';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\n\nexport class ModelService {\n private adapters: Map<ModelProvider, IModelAdapter> = new Map();\n private currentConfig: ModelConfig | null = null;\n private stats: TokenStats;\n private configManager: ConfigManager;\n private statsPath: string = '';\n\n constructor(configManager: ConfigManager) {\n this.configManager = configManager;\n this.stats = {\n totalInput: 0,\n totalOutput: 0,\n byModel: {},\n byAgent: {},\n byDate: {},\n };\n }\n\n /**\n * 初始化服务\n */\n async initialize(statsDir: string): Promise<void> {\n this.statsPath = path.join(statsDir, 'tokens');\n \n // 加载已有统计\n await this.loadStats();\n \n // 初始化当前配置的模型\n const model = this.configManager.get('model');\n const apiKey = this.configManager.get('apiKey');\n \n if (model && apiKey) {\n await this.configureModel({\n provider: this.getProviderFromModel(model),\n model,\n apiKey,\n });\n }\n }\n\n /**\n * 配置模型\n */\n async configureModel(config: ModelConfig): Promise<void> {\n // 获取或创建适配器\n let adapter = this.adapters.get(config.provider);\n \n if (!adapter) {\n adapter = createAdapter(config.provider);\n this.adapters.set(config.provider, adapter);\n }\n \n // 初始化适配器\n await adapter.initialize(config);\n \n // 保存配置\n this.currentConfig = config;\n this.configManager.set('model', config.model);\n this.configManager.set('apiKey', config.apiKey);\n await this.configManager.save();\n }\n\n /**\n * 发送消息\n */\n async sendMessage(\n messages: ChatMessage[],\n options?: RequestOptions & { agent?: string }\n ): Promise<ChatResponse> {\n if (!this.currentConfig) {\n throw new Error('模型未配置,请先执行 /model 命令');\n }\n\n const adapter = this.adapters.get(this.currentConfig.provider);\n if (!adapter || !adapter.isInitialized()) {\n throw new Error('模型适配器未初始化');\n }\n\n try {\n const response = await adapter.sendMessage(messages, options);\n \n // 更新统计\n this.updateStats(response.usage, {\n model: this.currentConfig.model,\n agent: options?.agent,\n });\n \n // 异步保存统计\n this.saveStats().catch(() => {});\n \n return response;\n } catch (error) {\n throw this.wrapError(error);\n }\n }\n\n /**\n * 流式发送消息\n */\n async *streamMessage(\n messages: ChatMessage[],\n options?: RequestOptions & { agent?: string }\n ): AsyncGenerator<StreamChunk> {\n if (!this.currentConfig) {\n throw new Error('模型未配置,请先执行 /model 命令');\n }\n\n const adapter = this.adapters.get(this.currentConfig.provider);\n if (!adapter || !adapter.isInitialized()) {\n throw new Error('模型适配器未初始化');\n }\n\n let totalTokens = 0;\n\n try {\n for await (const chunk of adapter.streamMessage(messages, options)) {\n totalTokens += chunk.delta.length; // 粗略估算\n yield chunk;\n }\n\n // 更新统计\n const inputTokens = adapter.countTokens(\n messages.map(m => m.content).join('\\n')\n );\n this.updateStats(\n { inputTokens, outputTokens: Math.ceil(totalTokens / 4), totalTokens: 0 },\n { model: this.currentConfig.model, agent: options?.agent }\n );\n \n // 异步保存统计\n this.saveStats().catch(() => {});\n } catch (error) {\n throw this.wrapError(error);\n }\n }\n\n /**\n * 计算Token数量\n */\n countTokens(text: string): number {\n if (!this.currentConfig) {\n // 返回粗略估算\n return Math.ceil(text.length / 4);\n }\n\n const adapter = this.adapters.get(this.currentConfig.provider);\n return adapter?.countTokens(text) || Math.ceil(text.length / 4);\n }\n\n /**\n * 获取当前模型\n */\n getCurrentModel(): string | null {\n return this.currentConfig?.model || null;\n }\n\n /**\n * 获取当前提供商\n */\n getCurrentProvider(): ModelProvider | null {\n return this.currentConfig?.provider || null;\n }\n\n /**\n * 获取Token统计\n */\n getStats(): TokenStats {\n return { ...this.stats };\n }\n\n /**\n * 获取今日统计\n */\n getTodayStats(): TokenUsage {\n const today = new Date().toISOString().split('T')[0];\n return this.stats.byDate[today] || { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n }\n\n /**\n * 重置统计\n */\n resetStats(): void {\n this.stats = {\n totalInput: 0,\n totalOutput: 0,\n byModel: {},\n byAgent: {},\n byDate: {},\n };\n this.saveStats().catch(() => {});\n }\n\n /**\n * 验证API Key\n */\n async validateApiKey(provider: ModelProvider, apiKey: string): Promise<boolean> {\n let adapter = this.adapters.get(provider);\n \n if (!adapter) {\n adapter = createAdapter(provider);\n }\n \n return adapter.validateApiKey(apiKey);\n }\n\n // ==================== 私有方法 ====================\n\n private getProviderFromModel(modelId: string): ModelProvider {\n const info = getModelInfo(modelId);\n return info?.provider || 'openai';\n }\n\n private updateStats(\n usage: TokenUsage,\n context: { model: string; agent?: string }\n ): void {\n // 更新总计\n this.stats.totalInput += usage.inputTokens;\n this.stats.totalOutput += usage.outputTokens;\n\n // 按模型统计\n if (!this.stats.byModel[context.model]) {\n this.stats.byModel[context.model] = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n }\n this.stats.byModel[context.model].inputTokens += usage.inputTokens;\n this.stats.byModel[context.model].outputTokens += usage.outputTokens;\n this.stats.byModel[context.model].totalTokens += usage.totalTokens;\n\n // 按Agent统计\n if (context.agent) {\n if (!this.stats.byAgent[context.agent]) {\n this.stats.byAgent[context.agent] = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n }\n this.stats.byAgent[context.agent].inputTokens += usage.inputTokens;\n this.stats.byAgent[context.agent].outputTokens += usage.outputTokens;\n this.stats.byAgent[context.agent].totalTokens += usage.totalTokens;\n }\n\n // 按日期统计\n const today = new Date().toISOString().split('T')[0];\n if (!this.stats.byDate[today]) {\n this.stats.byDate[today] = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n }\n this.stats.byDate[today].inputTokens += usage.inputTokens;\n this.stats.byDate[today].outputTokens += usage.outputTokens;\n this.stats.byDate[today].totalTokens += usage.totalTokens;\n }\n\n private async loadStats(): Promise<void> {\n if (!this.statsPath) return;\n \n try {\n const dailyPath = path.join(this.statsPath, 'daily.json');\n const totalPath = path.join(this.statsPath, 'total.json');\n \n const [daily, total] = await Promise.all([\n fs.readFile(dailyPath, 'utf-8').catch(() => '{}'),\n fs.readFile(totalPath, 'utf-8').catch(() => '{\"totalInput\":0,\"totalOutput\":0}'),\n ]);\n \n const dailyData = JSON.parse(daily);\n const totalData = JSON.parse(total);\n \n this.stats.byDate = dailyData;\n this.stats.totalInput = totalData.totalInput || 0;\n this.stats.totalOutput = totalData.totalOutput || 0;\n } catch {\n // 忽略加载错误\n }\n }\n\n private async saveStats(): Promise<void> {\n if (!this.statsPath) return;\n \n try {\n await fs.mkdir(this.statsPath, { recursive: true });\n \n const dailyPath = path.join(this.statsPath, 'daily.json');\n const totalPath = path.join(this.statsPath, 'total.json');\n \n await Promise.all([\n fs.writeFile(dailyPath, JSON.stringify(this.stats.byDate, null, 2)),\n fs.writeFile(totalPath, JSON.stringify({\n totalInput: this.stats.totalInput,\n totalOutput: this.stats.totalOutput,\n })),\n ]);\n } catch {\n // 忽略保存错误\n }\n }\n\n private wrapError(error: unknown): ModelError {\n if (error instanceof ModelError) {\n return error;\n }\n \n const err = error as Error;\n \n // 根据错误信息判断类型\n if (err.message.includes('timeout')) {\n return new ModelError('TIMEOUT', err.message, { retryable: true });\n }\n \n if (err.message.includes('network') || err.message.includes('ECONNREFUSED')) {\n return new ModelError('NETWORK_ERROR', err.message, { retryable: true });\n }\n \n return new ModelError('UNKNOWN_ERROR', err.message, { retryable: false });\n }\n}\n\nexport default ModelService;\n","/**\n * AI模型相关类型定义\n */\n\n// ==================== 消息相关 ====================\n\nexport type MessageRole = 'system' | 'user' | 'assistant' | 'tool';\n\nexport interface ToolCall {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n}\n\nexport interface ChatMessage {\n role: MessageRole;\n content: string;\n name?: string;\n toolCalls?: ToolCall[];\n toolCallId?: string;\n}\n\n// ==================== 响应相关 ====================\n\nexport type FinishReason = 'stop' | 'length' | 'tool_call' | 'content_filter' | 'error' | 'end_turn' | 'max_tokens' | 'stop_sequence';\n\nexport interface TokenUsage {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n}\n\nexport interface ChatResponse {\n id: string;\n model: string;\n content: string;\n toolCalls?: ToolCall[];\n usage: TokenUsage;\n finishReason: FinishReason;\n latency?: number;\n}\n\nexport interface StreamChunk {\n id: string;\n model: string;\n delta: string;\n finishReason?: FinishReason;\n}\n\n// ==================== 配置相关 ====================\n\nexport type ModelProvider = 'glm' | 'openai' | 'anthropic' | 'qwen' | 'deepseek';\n\nexport interface ModelConfig {\n provider: ModelProvider;\n model: string;\n apiKey: string;\n apiEndpoint?: string;\n temperature?: number;\n maxTokens?: number;\n timeout?: number;\n retries?: number;\n}\n\nexport interface ModelInfo {\n id: string;\n name: string;\n provider: ModelProvider;\n description: string;\n contextWindow: number;\n maxOutputTokens: number;\n supportsTools: boolean;\n supportsVision: boolean;\n}\n\n// ==================== 请求选项 ====================\n\nexport interface RequestOptions {\n temperature?: number;\n maxTokens?: number;\n topP?: number;\n stopSequences?: string[];\n tools?: ToolDefinition[];\n toolChoice?: 'auto' | 'none' | { type: 'function'; function: { name: string } };\n systemPrompt?: string;\n timeout?: number;\n}\n\nexport interface ToolDefinition {\n type: 'function';\n function: {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n };\n}\n\n// ==================== 适配器接口 ====================\n\nexport interface IModelAdapter {\n readonly name: string;\n readonly provider: ModelProvider;\n readonly models: ModelInfo[];\n \n initialize(config: ModelConfig): Promise<void>;\n sendMessage(\n messages: ChatMessage[], \n options?: RequestOptions\n ): Promise<ChatResponse>;\n streamMessage(\n messages: ChatMessage[], \n options?: RequestOptions\n ): AsyncGenerator<StreamChunk>;\n countTokens(text: string): number;\n validateApiKey(apiKey: string): Promise<boolean>;\n isInitialized(): boolean;\n}\n\n// ==================== 错误相关 ====================\n\nexport type ModelErrorCode = \n | 'INVALID_API_KEY'\n | 'RATE_LIMIT'\n | 'CONTEXT_TOO_LONG'\n | 'TIMEOUT'\n | 'NETWORK_ERROR'\n | 'MODEL_NOT_FOUND'\n | 'CONTENT_FILTER'\n | 'UNKNOWN_ERROR';\n\nexport class ModelError extends Error {\n code: ModelErrorCode;\n provider?: ModelProvider;\n originalError?: unknown;\n retryable: boolean;\n\n constructor(\n code: ModelErrorCode,\n message: string,\n options?: {\n provider?: ModelProvider;\n originalError?: unknown;\n retryable?: boolean;\n }\n ) {\n super(message);\n this.name = 'ModelError';\n this.code = code;\n this.provider = options?.provider;\n this.originalError = options?.originalError;\n this.retryable = options?.retryable ?? false;\n }\n}\n\n// 兼容旧接口的类型\nexport type { ModelError as ModelErrorInterface };\n\n// ==================== 统计相关 ====================\n\nexport interface TokenStats {\n totalInput: number;\n totalOutput: number;\n byModel: Record<string, TokenUsage>;\n byAgent: Record<string, TokenUsage>;\n byDate: Record<string, TokenUsage>;\n}\n\nexport interface CostEstimate {\n inputCost: number;\n outputCost: number;\n totalCost: number;\n currency: string;\n}\n\n// ==================== 可用模型列表 ====================\n\nexport const AVAILABLE_MODELS: ModelInfo[] = [\n {\n id: 'GLM-5',\n name: 'GLM-5',\n provider: 'glm',\n description: '智谱AI旗舰模型,综合能力强,中文优化',\n contextWindow: 128000,\n maxOutputTokens: 4096,\n supportsTools: true,\n supportsVision: true,\n },\n {\n id: 'gpt-4o',\n name: 'GPT-4o',\n provider: 'openai',\n description: 'OpenAI最新旗舰模型,多模态支持',\n contextWindow: 128000,\n maxOutputTokens: 4096,\n supportsTools: true,\n supportsVision: true,\n },\n {\n id: 'gpt-4-turbo',\n name: 'GPT-4 Turbo',\n provider: 'openai',\n description: 'GPT-4加速版,性能与成本平衡',\n contextWindow: 128000,\n maxOutputTokens: 4096,\n supportsTools: true,\n supportsVision: true,\n },\n {\n id: 'claude-3-opus',\n name: 'Claude 3 Opus',\n provider: 'anthropic',\n description: 'Anthropic最强模型,长上下文支持',\n contextWindow: 200000,\n maxOutputTokens: 4096,\n supportsTools: true,\n supportsVision: true,\n },\n {\n id: 'claude-3-sonnet',\n name: 'Claude 3 Sonnet',\n provider: 'anthropic',\n description: '平衡性能与成本,适合日常使用',\n contextWindow: 200000,\n maxOutputTokens: 4096,\n supportsTools: true,\n supportsVision: true,\n },\n {\n id: 'qwen-max',\n name: '通义千问 Max',\n provider: 'qwen',\n description: '阿里云旗舰模型,国内部署',\n contextWindow: 32000,\n maxOutputTokens: 2000,\n supportsTools: true,\n supportsVision: false,\n },\n {\n id: 'deepseek-coder',\n name: 'DeepSeek Coder',\n provider: 'deepseek',\n description: '专注代码生成,编程优化',\n contextWindow: 16000,\n maxOutputTokens: 4096,\n supportsTools: false,\n supportsVision: false,\n },\n];\n\nexport function getModelInfo(modelId: string): ModelInfo | undefined {\n return AVAILABLE_MODELS.find(m => m.id === modelId);\n}\n\nexport function getModelsByProvider(provider: ModelProvider): ModelInfo[] {\n return AVAILABLE_MODELS.filter(m => m.provider === provider);\n}\n","/**\n * 模型适配器导出\n */\n\nexport { BaseAdapter } from './base';\nexport { GLMAdapter } from './glm';\nexport { OpenAIAdapter } from './openai';\nexport { ClaudeAdapter } from './claude';\n\nimport { IModelAdapter, ModelProvider, ModelConfig } from '../../types/model';\nimport { GLMAdapter } from './glm';\nimport { OpenAIAdapter } from './openai';\nimport { ClaudeAdapter } from './claude';\n\n// DeepSeek API 端点\nconst DEEPSEEK_API_ENDPOINT = 'https://api.deepseek.com/v1';\n\n/**\n * 根据提供商创建适配器实例\n */\nexport function createAdapter(provider: ModelProvider): IModelAdapter {\n switch (provider) {\n case 'glm':\n return new GLMAdapter();\n case 'openai':\n return new OpenAIAdapter();\n case 'anthropic':\n return new ClaudeAdapter();\n case 'qwen':\n // TODO: 实现 QwenAdapter\n throw new Error('Qwen适配器尚未实现');\n case 'deepseek':\n // DeepSeek 使用 OpenAI 兼容接口\n return createDeepSeekAdapter();\n default:\n throw new Error(`未知的模型提供商: ${provider}`);\n }\n}\n\n/**\n * DeepSeek 适配器 (基于OpenAI兼容接口)\n */\nfunction createDeepSeekAdapter(): IModelAdapter {\n const adapter = new OpenAIAdapter();\n let initialized = false;\n let config: ModelConfig | null = null;\n \n return {\n get name() { return 'DeepSeek'; },\n get provider() { return 'deepseek' as ModelProvider; },\n get models() { return adapter.models; },\n \n async initialize(modelConfig: ModelConfig): Promise<void> {\n // 强制使用 DeepSeek 端点\n config = {\n ...modelConfig,\n apiEndpoint: DEEPSEEK_API_ENDPOINT,\n };\n await adapter.initialize(config);\n initialized = true;\n },\n \n async sendMessage(messages, options) {\n return adapter.sendMessage(messages, options);\n },\n \n async *streamMessage(messages, options) {\n yield* adapter.streamMessage(messages, options);\n },\n \n countTokens(text) {\n return adapter.countTokens(text);\n },\n \n async validateApiKey(apiKey: string): Promise<boolean> {\n // 使用 DeepSeek 端点验证 API Key\n try {\n const response = await fetch(`${DEEPSEEK_API_ENDPOINT}/models`, {\n headers: {\n 'Authorization': `Bearer ${apiKey}`,\n },\n });\n return response.ok;\n } catch {\n return false;\n }\n },\n \n isInitialized() {\n return initialized;\n },\n };\n}\n","/**\n * 模型适配器基类\n * 提供通用的适配器实现逻辑\n */\n\nimport {\n IModelAdapter,\n ModelConfig,\n ModelInfo,\n ModelProvider,\n ChatMessage,\n ChatResponse,\n StreamChunk,\n RequestOptions,\n ModelError,\n TokenUsage,\n} from '../../types/model';\nimport { encoding_for_model } from 'tiktoken';\n\nexport abstract class BaseAdapter implements IModelAdapter {\n abstract readonly name: string;\n abstract readonly provider: ModelProvider;\n abstract readonly models: ModelInfo[];\n\n protected config: ModelConfig | null = null;\n protected initialized = false;\n\n async initialize(config: ModelConfig): Promise<void> {\n this.config = config;\n await this.onInitialize();\n this.initialized = true;\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n abstract sendMessage(\n messages: ChatMessage[],\n options?: RequestOptions\n ): Promise<ChatResponse>;\n\n abstract streamMessage(\n messages: ChatMessage[],\n options?: RequestOptions\n ): AsyncGenerator<StreamChunk>;\n\n abstract validateApiKey(apiKey: string): Promise<boolean>;\n\n /**\n * 子类可重写的初始化钩子\n */\n protected async onInitialize(): Promise<void> {\n // 默认空实现,子类可重写\n }\n\n /**\n * 计算Token数量\n */\n countTokens(text: string): number {\n try {\n const encoding = encoding_for_model('gpt-4');\n const tokens = encoding.encode(text);\n encoding.free(); // 释放资源\n return tokens.length;\n } catch {\n // 如果tiktoken失败,使用简单估算\n return Math.ceil(text.length / 4);\n }\n }\n\n /**\n * 计算消息列表的总Token数\n */\n protected countMessagesTokens(messages: ChatMessage[]): number {\n let total = 0;\n for (const msg of messages) {\n total += this.countTokens(msg.content);\n if (msg.name) {\n total += this.countTokens(msg.name);\n }\n if (msg.toolCalls) {\n for (const tc of msg.toolCalls) {\n total += this.countTokens(tc.function.name);\n total += this.countTokens(tc.function.arguments);\n }\n }\n }\n return total;\n }\n\n /**\n * 估算响应Token数量(简单估算)\n */\n protected estimateOutputTokens(options?: RequestOptions): number {\n return options?.maxTokens || 4096;\n }\n\n /**\n * 构建基本用法统计\n */\n protected buildUsage(\n inputTokens: number,\n outputTokens: number\n ): TokenUsage {\n return {\n inputTokens,\n outputTokens,\n totalTokens: inputTokens + outputTokens,\n };\n }\n\n /**\n * 创建错误对象\n */\n protected createError(\n code: ModelError['code'],\n message: string,\n originalError?: unknown\n ): ModelError {\n const retryable = ['RATE_LIMIT', 'TIMEOUT', 'NETWORK_ERROR'].includes(code);\n return new ModelError(code, message, {\n provider: this.provider,\n originalError,\n retryable,\n });\n }\n\n /**\n * 获取API端点\n */\n protected getApiEndpoint(): string {\n return this.config?.apiEndpoint || this.getDefaultEndpoint();\n }\n\n /**\n * 获取默认API端点(子类实现)\n */\n protected abstract getDefaultEndpoint(): string;\n\n /**\n * 获取超时时间\n */\n protected getTimeout(): number {\n return this.config?.timeout || 60000;\n }\n\n /**\n * 获取重试次数\n */\n protected getRetries(): number {\n return this.config?.retries || 3;\n }\n\n /**\n * 带重试的请求执行\n */\n protected async withRetry<T>(\n fn: () => Promise<T>,\n retries: number = this.getRetries()\n ): Promise<T> {\n let lastError: unknown;\n \n for (let i = 0; i <= retries; i++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n \n // 检查是否可重试\n const modelError = error as ModelError;\n if (!modelError.retryable || i === retries) {\n throw error;\n }\n \n // 等待一段时间后重试\n await this.delay(1000 * (i + 1));\n }\n }\n \n throw lastError;\n }\n\n /**\n * 延迟工具函数\n */\n protected delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n}\n","/**\n * GLM-5 适配器\n * 智谱AI GLM-5模型适配器\n */\n\nimport { BaseAdapter } from './base';\nimport {\n ModelConfig,\n ModelInfo,\n ModelProvider,\n ChatMessage,\n ChatResponse,\n StreamChunk,\n RequestOptions,\n AVAILABLE_MODELS,\n ModelError,\n FinishReason,\n} from '../../types/model';\n\n// GLM API 响应类型\ninterface GLMResponse {\n id?: string;\n choices?: Array<{\n message?: {\n content?: string;\n tool_calls?: Array<{\n id?: string;\n function?: {\n name?: string;\n arguments?: string | object;\n };\n }>;\n };\n finish_reason?: string;\n }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n };\n}\n\nexport class GLMAdapter extends BaseAdapter {\n readonly name = 'GLM-5';\n readonly provider: ModelProvider = 'glm';\n readonly models: ModelInfo[] = AVAILABLE_MODELS.filter(\n m => m.provider === 'glm'\n );\n\n private client: unknown = null;\n\n protected getDefaultEndpoint(): string {\n return 'https://open.bigmodel.cn/api/paas/v4';\n }\n\n protected async onInitialize(): Promise<void> {\n // 初始化智谱AI客户端 - 使用 HTTP API\n this.client = null;\n }\n\n async sendMessage(\n messages: ChatMessage[],\n options?: RequestOptions\n ): Promise<ChatResponse> {\n const startTime = Date.now();\n \n const response = await this.withRetry(async () => {\n const res = await fetch(`${this.getApiEndpoint()}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.config!.apiKey}`,\n },\n body: JSON.stringify({\n model: this.config!.model,\n messages: this.formatMessages(messages),\n temperature: options?.temperature ?? this.config!.temperature ?? 0.7,\n max_tokens: options?.maxTokens ?? this.config!.maxTokens ?? 4096,\n top_p: options?.topP,\n stop: options?.stopSequences,\n tools: options?.tools,\n tool_choice: options?.toolChoice,\n }),\n signal: AbortSignal.timeout(this.getTimeout()),\n });\n\n if (!res.ok) {\n const error = await res.json().catch(() => ({}));\n throw this.handleError(res.status, error);\n }\n\n return res.json() as Promise<GLMResponse>;\n });\n\n const latency = Date.now() - startTime;\n \n return {\n id: response.id || `glm-${Date.now()}`,\n model: this.config!.model,\n content: response.choices?.[0]?.message?.content || '',\n toolCalls: this.parseToolCalls(response.choices?.[0]?.message?.tool_calls),\n usage: this.buildUsage(\n response.usage?.prompt_tokens || this.countMessagesTokens(messages),\n response.usage?.completion_tokens || 0\n ),\n finishReason: (response.choices?.[0]?.finish_reason || 'stop') as FinishReason,\n latency,\n };\n }\n\n async *streamMessage(\n messages: ChatMessage[],\n options?: RequestOptions\n ): AsyncGenerator<StreamChunk> {\n const response = await fetch(`${this.getApiEndpoint()}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.config!.apiKey}`,\n },\n body: JSON.stringify({\n model: this.config!.model,\n messages: this.formatMessages(messages),\n temperature: options?.temperature ?? this.config!.temperature ?? 0.7,\n max_tokens: options?.maxTokens ?? this.config!.maxTokens ?? 4096,\n stream: true,\n }),\n signal: AbortSignal.timeout(this.getTimeout()),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw this.handleError(response.status, error);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('无法获取响应流');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed === 'data: [DONE]') continue;\n \n if (trimmed.startsWith('data: ')) {\n try {\n const json = JSON.parse(trimmed.slice(6));\n const delta = json.choices?.[0]?.delta?.content || '';\n const finishReason = json.choices?.[0]?.finish_reason;\n\n if (delta || finishReason) {\n yield {\n id: json.id || `glm-stream-${Date.now()}`,\n model: this.config!.model,\n delta,\n finishReason: finishReason as FinishReason,\n };\n }\n } catch {\n // 忽略解析错误\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n async validateApiKey(apiKey: string): Promise<boolean> {\n try {\n const response = await fetch(`${this.getApiEndpoint()}/models`, {\n headers: {\n 'Authorization': `Bearer ${apiKey}`,\n },\n });\n return response.ok;\n } catch {\n return false;\n }\n }\n\n private formatMessages(messages: ChatMessage[]): Array<{\n role: string;\n content: string;\n name?: string;\n }> {\n return messages.map(msg => ({\n role: msg.role,\n content: msg.content,\n ...(msg.name && { name: msg.name }),\n }));\n }\n\n private parseToolCalls(toolCalls: unknown): any[] | undefined {\n if (!toolCalls || !Array.isArray(toolCalls)) return undefined;\n \n return toolCalls.map(tc => ({\n id: tc.id || `tc-${Date.now()}`,\n type: 'function' as const,\n function: {\n name: tc.function?.name || '',\n arguments: typeof tc.function?.arguments === 'string' \n ? tc.function.arguments \n : JSON.stringify(tc.function?.arguments || {}),\n },\n }));\n }\n\n private handleError(status: number, error: any): ModelError {\n const message = error?.error?.message || `HTTP ${status}`;\n \n switch (status) {\n case 401:\n return this.createError('INVALID_API_KEY', message, error);\n case 429:\n return this.createError('RATE_LIMIT', message, error);\n case 400:\n if (message.includes('context') || message.includes('token')) {\n return this.createError('CONTEXT_TOO_LONG', message, error);\n }\n return this.createError('UNKNOWN_ERROR', message, error);\n default:\n return this.createError('UNKNOWN_ERROR', message, error);\n }\n }\n}\n\nexport default GLMAdapter;\n","/**\n * OpenAI 适配器\n * 支持 GPT-4o, GPT-4 Turbo 等模型\n */\n\nimport { BaseAdapter } from './base';\nimport {\n ModelConfig,\n ModelInfo,\n ModelProvider,\n ChatMessage,\n ChatResponse,\n StreamChunk,\n RequestOptions,\n AVAILABLE_MODELS,\n ModelError,\n} from '../../types/model';\n\n// OpenAI API 响应类型\ninterface OpenAIResponse {\n id?: string;\n choices?: Array<{\n message?: {\n content?: string;\n tool_calls?: Array<{\n id?: string;\n function?: {\n name?: string;\n arguments?: string;\n };\n }>;\n };\n finish_reason?: string;\n }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n };\n}\n\nexport class OpenAIAdapter extends BaseAdapter {\n readonly name = 'OpenAI';\n readonly provider: ModelProvider = 'openai';\n readonly models: ModelInfo[] = AVAILABLE_MODELS.filter(\n m => m.provider === 'openai'\n );\n\n protected getDefaultEndpoint(): string {\n return 'https://api.openai.com/v1';\n }\n\n async sendMessage(\n messages: ChatMessage[],\n options?: RequestOptions\n ): Promise<ChatResponse> {\n const startTime = Date.now();\n \n const requestBody: Record<string, unknown> = {\n model: this.config!.model,\n messages: this.formatMessages(messages),\n temperature: options?.temperature ?? this.config!.temperature ?? 0.7,\n max_tokens: options?.maxTokens ?? this.config!.maxTokens ?? 4096,\n top_p: options?.topP,\n stop: options?.stopSequences,\n };\n\n if (options?.tools) {\n requestBody.tools = options.tools;\n requestBody.tool_choice = options.toolChoice || 'auto';\n }\n\n const response = await this.withRetry(async () => {\n const res = await fetch(`${this.getApiEndpoint()}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.config!.apiKey}`,\n },\n body: JSON.stringify(requestBody),\n signal: AbortSignal.timeout(this.getTimeout()),\n });\n\n if (!res.ok) {\n const error = await res.json().catch(() => ({}));\n throw this.handleError(res.status, error);\n }\n\n return res.json() as Promise<OpenAIResponse>;\n });\n\n const latency = Date.now() - startTime;\n const choice = response.choices?.[0];\n \n return {\n id: response.id || `openai-${Date.now()}`,\n model: this.config!.model,\n content: choice?.message?.content || '',\n toolCalls: this.parseToolCalls(choice?.message?.tool_calls),\n usage: this.buildUsage(\n response.usage?.prompt_tokens || this.countMessagesTokens(messages),\n response.usage?.completion_tokens || 0\n ),\n finishReason: this.mapFinishReason(choice?.finish_reason),\n latency,\n };\n }\n\n async *streamMessage(\n messages: ChatMessage[],\n options?: RequestOptions\n ): AsyncGenerator<StreamChunk> {\n const requestBody: Record<string, unknown> = {\n model: this.config!.model,\n messages: this.formatMessages(messages),\n temperature: options?.temperature ?? this.config!.temperature ?? 0.7,\n max_tokens: options?.maxTokens ?? this.config!.maxTokens ?? 4096,\n stream: true,\n };\n\n const response = await fetch(`${this.getApiEndpoint()}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.config!.apiKey}`,\n },\n body: JSON.stringify(requestBody),\n signal: AbortSignal.timeout(this.getTimeout()),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw this.handleError(response.status, error);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('无法获取响应流');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed === 'data: [DONE]') continue;\n \n if (trimmed.startsWith('data: ')) {\n try {\n const json = JSON.parse(trimmed.slice(6));\n const delta = json.choices?.[0]?.delta?.content || '';\n const finishReason = json.choices?.[0]?.finish_reason;\n\n if (delta || finishReason) {\n yield {\n id: json.id || `openai-stream-${Date.now()}`,\n model: this.config!.model,\n delta,\n finishReason: this.mapFinishReason(finishReason),\n };\n }\n } catch {\n // 忽略解析错误\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n async validateApiKey(apiKey: string): Promise<boolean> {\n try {\n const response = await fetch(`${this.getApiEndpoint()}/models`, {\n headers: {\n 'Authorization': `Bearer ${apiKey}`,\n },\n });\n return response.ok;\n } catch {\n return false;\n }\n }\n\n private formatMessages(messages: ChatMessage[]): Array<{\n role: string;\n content: string;\n name?: string;\n }> {\n return messages.map(msg => ({\n role: msg.role,\n content: msg.content,\n ...(msg.name && { name: msg.name }),\n }));\n }\n\n private parseToolCalls(toolCalls: unknown): any[] | undefined {\n if (!toolCalls || !Array.isArray(toolCalls)) return undefined;\n \n return toolCalls.map(tc => ({\n id: tc.id || `tc-${Date.now()}`,\n type: 'function' as const,\n function: {\n name: tc.function?.name || '',\n arguments: tc.function?.arguments || '',\n },\n }));\n }\n\n private mapFinishReason(reason: string | undefined): any {\n switch (reason) {\n case 'stop': return 'stop';\n case 'length': return 'length';\n case 'tool_calls': return 'tool_call';\n case 'content_filter': return 'content_filter';\n default: return 'stop';\n }\n }\n\n private handleError(status: number, error: any): ModelError {\n const message = error?.error?.message || `HTTP ${status}`;\n \n switch (status) {\n case 401:\n return this.createError('INVALID_API_KEY', message, error);\n case 429:\n return this.createError('RATE_LIMIT', message, error);\n case 400:\n if (message.includes('context') || message.includes('maximum')) {\n return this.createError('CONTEXT_TOO_LONG', message, error);\n }\n return this.createError('UNKNOWN_ERROR', message, error);\n default:\n return this.createError('UNKNOWN_ERROR', message, error);\n }\n }\n}\n\nexport default OpenAIAdapter;\n","/**\n * Anthropic Claude 适配器\n * 支持 Claude 3 Opus, Claude 3 Sonnet 等模型\n */\n\nimport { BaseAdapter } from './base';\nimport {\n ModelConfig,\n ModelInfo,\n ModelProvider,\n ChatMessage,\n ChatResponse,\n StreamChunk,\n RequestOptions,\n AVAILABLE_MODELS,\n ModelError,\n} from '../../types/model';\n\n// Claude API 响应类型\ninterface ClaudeResponse {\n id?: string;\n content?: Array<{\n type: string;\n text?: string;\n name?: string;\n input?: unknown;\n }>;\n usage?: {\n input_tokens?: number;\n output_tokens?: number;\n };\n stop_reason?: string;\n}\n\nexport class ClaudeAdapter extends BaseAdapter {\n readonly name = 'Claude';\n readonly provider: ModelProvider = 'anthropic';\n readonly models: ModelInfo[] = AVAILABLE_MODELS.filter(\n m => m.provider === 'anthropic'\n );\n\n protected getDefaultEndpoint(): string {\n return 'https://api.anthropic.com/v1';\n }\n\n async sendMessage(\n messages: ChatMessage[],\n options?: RequestOptions\n ): Promise<ChatResponse> {\n const startTime = Date.now();\n \n // Claude API 需要分离 system 消息\n const { system, chatMessages } = this.separateSystemMessage(messages);\n \n const requestBody: Record<string, unknown> = {\n model: this.config!.model,\n messages: this.formatMessages(chatMessages),\n max_tokens: options?.maxTokens ?? this.config!.maxTokens ?? 4096,\n temperature: options?.temperature ?? this.config!.temperature ?? 0.7,\n };\n\n if (system || options?.systemPrompt) {\n requestBody.system = options?.systemPrompt || system;\n }\n\n if (options?.tools) {\n requestBody.tools = this.formatTools(options.tools);\n requestBody.tool_choice = { type: 'auto' };\n }\n\n const response = await this.withRetry(async () => {\n const res = await fetch(`${this.getApiEndpoint()}/messages`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': this.config!.apiKey,\n 'anthropic-version': '2023-06-01',\n },\n body: JSON.stringify(requestBody),\n signal: AbortSignal.timeout(this.getTimeout()),\n });\n\n if (!res.ok) {\n const error = await res.json().catch(() => ({}));\n throw this.handleError(res.status, error);\n }\n\n return res.json() as Promise<ClaudeResponse>;\n });\n\n const latency = Date.now() - startTime;\n \n return {\n id: response.id || `claude-${Date.now()}`,\n model: this.config!.model,\n content: this.extractContent(response.content),\n toolCalls: this.parseToolCalls(response.content),\n usage: this.buildUsage(\n response.usage?.input_tokens || this.countMessagesTokens(messages),\n response.usage?.output_tokens || 0\n ),\n finishReason: this.mapFinishReason(response.stop_reason),\n latency,\n };\n }\n\n async *streamMessage(\n messages: ChatMessage[],\n options?: RequestOptions\n ): AsyncGenerator<StreamChunk> {\n const { system, chatMessages } = this.separateSystemMessage(messages);\n \n const requestBody: Record<string, unknown> = {\n model: this.config!.model,\n messages: this.formatMessages(chatMessages),\n max_tokens: options?.maxTokens ?? this.config!.maxTokens ?? 4096,\n stream: true,\n };\n\n if (system || options?.systemPrompt) {\n requestBody.system = options?.systemPrompt || system;\n }\n\n const response = await fetch(`${this.getApiEndpoint()}/messages`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': this.config!.apiKey,\n 'anthropic-version': '2023-06-01',\n },\n body: JSON.stringify(requestBody),\n signal: AbortSignal.timeout(this.getTimeout()),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw this.handleError(response.status, error);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('无法获取响应流');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || !trimmed.startsWith('data: ')) continue;\n \n try {\n const json = JSON.parse(trimmed.slice(6));\n \n if (json.type === 'content_block_delta') {\n const delta = json.delta?.text || '';\n if (delta) {\n yield {\n id: json.id || `claude-stream-${Date.now()}`,\n model: this.config!.model,\n delta,\n };\n }\n } else if (json.type === 'message_delta') {\n if (json.delta?.stop_reason) {\n yield {\n id: json.id || `claude-stream-${Date.now()}`,\n model: this.config!.model,\n delta: '',\n finishReason: this.mapFinishReason(json.delta.stop_reason),\n };\n }\n }\n } catch {\n // 忽略解析错误\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n async validateApiKey(apiKey: string): Promise<boolean> {\n try {\n const response = await fetch(`${this.getApiEndpoint()}/messages`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n 'anthropic-version': '2023-06-01',\n },\n body: JSON.stringify({\n model: 'claude-3-haiku-20240307',\n max_tokens: 1,\n messages: [{ role: 'user', content: 'hi' }],\n }),\n });\n return response.ok || response.status === 400; // 400 也表示key有效\n } catch {\n return false;\n }\n }\n\n private separateSystemMessage(messages: ChatMessage[]): {\n system: string;\n chatMessages: ChatMessage[];\n } {\n const systemMessages = messages.filter(m => m.role === 'system');\n const chatMessages = messages.filter(m => m.role !== 'system');\n \n return {\n system: systemMessages.map(m => m.content).join('\\n\\n'),\n chatMessages,\n };\n }\n\n private formatMessages(messages: ChatMessage[]): Array<{\n role: 'user' | 'assistant';\n content: string | Array<{ type: string; text?: string; source?: unknown }>;\n }> {\n const formatted: Array<{\n role: 'user' | 'assistant';\n content: string | Array<{ type: string; text?: string }>;\n }> = [];\n\n for (const msg of messages) {\n if (msg.role === 'user' || msg.role === 'assistant') {\n formatted.push({\n role: msg.role,\n content: msg.content,\n });\n }\n }\n\n return formatted;\n }\n\n private formatTools(tools: any[]): any[] {\n return tools.map(tool => ({\n name: tool.function.name,\n description: tool.function.description,\n input_schema: tool.function.parameters,\n }));\n }\n\n private extractContent(content?: ClaudeResponse['content']): string {\n if (!content || !Array.isArray(content)) return '';\n \n return content\n .filter((block) => block.type === 'text')\n .map((block) => block.text || '')\n .join('');\n }\n\n private parseToolCalls(content?: ClaudeResponse['content']): any[] | undefined {\n if (!content || !Array.isArray(content)) return undefined;\n \n const toolUses = content.filter((block) => block.type === 'tool_use');\n \n if (toolUses.length === 0) return undefined;\n \n return toolUses.map((block) => ({\n id: (block as any).id || `tc-${Date.now()}`,\n type: 'function' as const,\n function: {\n name: block.name || '',\n arguments: JSON.stringify(block.input || {}),\n },\n }));\n }\n\n private mapFinishReason(reason: string | undefined): any {\n switch (reason) {\n case 'end_turn': return 'stop';\n case 'max_tokens': return 'length';\n case 'tool_use': return 'tool_call';\n case 'stop_sequence': return 'stop';\n default: return 'stop';\n }\n }\n\n private handleError(status: number, error: any): ModelError {\n const message = error?.error?.message || error?.message || `HTTP ${status}`;\n \n switch (status) {\n case 401:\n return this.createError('INVALID_API_KEY', message, error);\n case 429:\n return this.createError('RATE_LIMIT', message, error);\n case 400:\n if (message.includes('prompt is too long') || message.includes('max_tokens')) {\n return this.createError('CONTEXT_TOO_LONG', message, error);\n }\n return this.createError('UNKNOWN_ERROR', message, error);\n default:\n return this.createError('UNKNOWN_ERROR', message, error);\n }\n }\n}\n\nexport default ClaudeAdapter;\n","/**\n * MCP 服务模块入口\n */\n\n// 类型导出\nexport * from '../../types/mcp';\n\n// 基础类\nexport { MCPAdapterBase } from './base';\n\n// 适配器\nexport { LanhuMCPAdapter } from './lanhu';\nexport { FigmaMCPAdapter } from './figma';\n\n// 管理器\nexport { MCPManager, createMCPManager } from './manager';\n","/**\n * MCP 服务基础类\n * 提供 MCP 协议通信的基础能力\n */\n\nimport { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';\nimport {\n MCPServerConfig,\n MCPToolSchema,\n MCPToolCall,\n MCPToolResult,\n MCPResource,\n MCPResourceContent,\n MCPConnectionStatus,\n IMCPAdapter,\n} from '../../types/mcp';\n\n/**\n * MCP 客户端基类\n */\nexport abstract class MCPAdapterBase implements IMCPAdapter {\n abstract readonly name: string;\n abstract readonly platform: 'lanhu' | 'figma';\n\n protected client: Client | null = null;\n protected transport: StdioClientTransport | null = null;\n protected config: MCPServerConfig | null = null;\n protected connectionStatus: MCPConnectionStatus = 'disconnected';\n protected tools: MCPToolSchema[] = [];\n protected resources: MCPResource[] = [];\n\n /**\n * 初始化适配器\n */\n async initialize(config: MCPServerConfig): Promise<void> {\n this.config = config;\n }\n\n /**\n * 连接到 MCP 服务器\n */\n async connect(): Promise<void> {\n if (!this.config) {\n throw new Error('适配器未初始化,请先调用 initialize()');\n }\n\n this.connectionStatus = 'connecting';\n\n try {\n // 创建传输层\n if (this.config.transport === 'stdio') {\n // 构建环境变量,过滤掉 undefined 值\n const envVars: Record<string, string> = {};\n for (const [key, value] of Object.entries(process.env)) {\n if (value !== undefined) {\n envVars[key] = value;\n }\n }\n if (this.config.env) {\n for (const [key, value] of Object.entries(this.config.env)) {\n if (value !== undefined) {\n envVars[key] = value;\n }\n }\n }\n\n this.transport = new StdioClientTransport({\n command: this.config.command || 'node',\n args: this.config.args || [],\n env: envVars,\n });\n\n // 创建客户端\n this.client = new Client(\n { name: this.name, version: '1.0.0' },\n { capabilities: {} }\n );\n\n // 连接\n await this.client.connect(this.transport);\n } else {\n throw new Error(`不支持的传输类型: ${this.config.transport}`);\n }\n\n // 获取可用工具和资源\n await this.refreshCapabilities();\n\n this.connectionStatus = 'connected';\n } catch (error) {\n this.connectionStatus = 'error';\n throw error;\n }\n }\n\n /**\n * 断开连接\n */\n async disconnect(): Promise<void> {\n if (this.client) {\n await this.client.close();\n this.client = null;\n }\n if (this.transport) {\n this.transport = null;\n }\n this.connectionStatus = 'disconnected';\n this.tools = [];\n this.resources = [];\n }\n\n /**\n * 检查是否已连接\n */\n isConnected(): boolean {\n return this.connectionStatus === 'connected' && this.client !== null;\n }\n\n /**\n * 获取连接状态\n */\n getConnectionStatus(): MCPConnectionStatus {\n return this.connectionStatus;\n }\n\n /**\n * 获取可用工具列表\n */\n async listTools(): Promise<MCPToolSchema[]> {\n if (!this.isConnected() || !this.client) {\n throw new Error('未连接到 MCP 服务器');\n }\n\n const response = await this.client.listTools();\n this.tools = response.tools.map(tool => ({\n name: tool.name,\n description: tool.description || '',\n inputSchema: tool.inputSchema as MCPToolSchema['inputSchema'],\n }));\n\n return this.tools;\n }\n\n /**\n * 调用工具\n */\n async callTool(call: MCPToolCall): Promise<MCPToolResult> {\n if (!this.isConnected() || !this.client) {\n throw new Error('未连接到 MCP 服务器');\n }\n\n const response = await this.client.callTool({\n name: call.name,\n arguments: call.arguments,\n });\n\n // 类型断言处理 SDK 返回值\n const resp = response as {\n content: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n isError?: boolean;\n };\n\n return {\n content: resp.content.map(item => {\n if (item.type === 'text') {\n return { type: 'text' as const, text: item.text || '' };\n }\n if (item.type === 'image') {\n return { type: 'image' as const, data: item.data || '', mimeType: item.mimeType };\n }\n return { type: 'text' as const, text: JSON.stringify(item) };\n }),\n isError: resp.isError,\n };\n }\n\n /**\n * 获取可用资源列表\n */\n async listResources(): Promise<MCPResource[]> {\n if (!this.isConnected() || !this.client) {\n throw new Error('未连接到 MCP 服务器');\n }\n\n const response = await this.client.listResources();\n this.resources = response.resources.map(resource => ({\n uri: resource.uri,\n name: resource.name,\n description: resource.description,\n mimeType: resource.mimeType,\n }));\n\n return this.resources;\n }\n\n /**\n * 读取资源内容\n */\n async readResource(uri: string): Promise<MCPResourceContent> {\n if (!this.isConnected() || !this.client) {\n throw new Error('未连接到 MCP 服务器');\n }\n\n const response = await this.client.readResource({ uri });\n \n // 类型断言处理 SDK 返回值\n const resp = response as {\n contents: Array<{\n uri: string;\n mimeType?: string;\n text?: string;\n blob?: string;\n }>;\n };\n \n const content = resp.contents[0];\n\n return {\n uri: content.uri,\n mimeType: content.mimeType,\n text: content.text,\n blob: content.blob,\n };\n }\n\n /**\n * 刷新能力列表\n */\n protected async refreshCapabilities(): Promise<void> {\n try {\n await this.listTools();\n await this.listResources();\n } catch {\n // 忽略错误,某些服务器可能不支持工具或资源\n }\n }\n\n /**\n * 获取工具\n */\n getTool(name: string): MCPToolSchema | undefined {\n return this.tools.find(t => t.name === name);\n }\n\n /**\n * 检查工具是否可用\n */\n hasTool(name: string): boolean {\n return this.tools.some(t => t.name === name);\n }\n\n // 子类必须实现的抽象方法\n abstract getDesignSpec(url: string): Promise<import('../../types/mcp').DesignSpec>;\n abstract extractStyles(spec: import('../../types/mcp').DesignSpec): Promise<import('../../types/mcp').DesignStyle>;\n abstract generateCode(\n spec: import('../../types/mcp').DesignSpec,\n options?: import('../../types/mcp').CodeGenOptions\n ): Promise<string>;\n}\n\nexport default MCPAdapterBase;\n","/**\n * 蓝湖 MCP 适配器\n * 通过 MCP 协议连接蓝湖设计平台\n */\n\nimport {\n DesignSpec,\n DesignLayer,\n DesignStyle,\n DesignColor,\n DesignTypography,\n DesignAsset,\n MCPServerConfig,\n MCPToolCall,\n CodeGenOptions,\n} from '../../types/mcp';\nimport { MCPAdapterBase } from './base';\n\n/**\n * 蓝湖 MCP 适配器\n * \n * 配置示例:\n * {\n * name: 'lanhu',\n * transport: 'stdio',\n * command: 'npx',\n * args: ['-y', '@lanhu/mcp-server'],\n * env: {\n * LANHU_TOKEN: 'your-token',\n * }\n * }\n */\nexport class LanhuMCPAdapter extends MCPAdapterBase {\n readonly name = 'lanhu';\n readonly platform = 'lanhu' as const;\n\n /**\n * 初始化适配器\n */\n override async initialize(config: MCPServerConfig): Promise<void> {\n if (!config.env?.LANHU_TOKEN && !process.env.LANHU_TOKEN) {\n console.warn('警告: 未设置 LANHU_TOKEN,某些功能可能受限');\n }\n await super.initialize(config);\n }\n\n /**\n * 获取设计稿规格\n */\n async getDesignSpec(url: string): Promise<DesignSpec> {\n if (!this.isConnected()) {\n throw new Error('未连接到蓝湖 MCP 服务器');\n }\n\n // 调用蓝湖 MCP 工具获取设计稿\n const result = await this.callTool({\n name: 'get_design_spec',\n arguments: { url },\n });\n\n if (result.isError) {\n throw new Error(`获取设计稿失败: ${result.content[0]?.text || '未知错误'}`);\n }\n\n // 解析返回的设计规格\n const specData = JSON.parse(result.content[0]?.text || '{}');\n \n return this.parseDesignSpec(specData, url);\n }\n\n /**\n * 解析设计规格\n */\n private parseDesignSpec(data: any, url: string): DesignSpec {\n return {\n id: data.id || this.extractIdFromUrl(url),\n name: data.name || '未命名设计稿',\n platform: 'lanhu',\n url,\n width: data.width || 0,\n height: data.height || 0,\n scale: data.scale || 1,\n layers: this.parseLayers(data.layers || []),\n styles: this.parseStyles(data.styles || {}),\n assets: this.parseAssets(data.assets || []),\n extractedAt: new Date(),\n };\n }\n\n /**\n * 解析图层\n */\n private parseLayers(layers: any[]): DesignLayer[] {\n return layers.map(layer => ({\n id: layer.id || '',\n name: layer.name || '未命名图层',\n type: this.parseLayerType(layer.type),\n x: layer.x || 0,\n y: layer.y || 0,\n width: layer.width || 0,\n height: layer.height || 0,\n visible: layer.visible !== false,\n opacity: layer.opacity ?? 1,\n children: layer.children ? this.parseLayers(layer.children) : undefined,\n styles: layer.styles ? this.parseLayerStyles(layer.styles) : undefined,\n text: layer.text,\n }));\n }\n\n /**\n * 解析图层类型\n */\n private parseLayerType(type: string): DesignLayer['type'] {\n const typeMap: Record<string, DesignLayer['type']> = {\n 'FRAME': 'frame',\n 'GROUP': 'group',\n 'TEXT': 'text',\n 'SHAPE': 'shape',\n 'IMAGE': 'image',\n };\n return typeMap[type?.toUpperCase()] || 'shape';\n }\n\n /**\n * 解析图层样式\n */\n private parseLayerStyles(styles: any): Partial<DesignStyle> {\n const result: Partial<DesignStyle> = {};\n\n if (styles.backgroundColor || styles.fill) {\n result.colors = [{\n value: styles.backgroundColor || styles.fill,\n usage: 'background',\n }];\n }\n\n if (styles.fontSize || styles.fontFamily) {\n result.typography = [{\n fontFamily: styles.fontFamily || 'system-ui',\n fontSize: styles.fontSize || 14,\n fontWeight: styles.fontWeight || 400,\n lineHeight: styles.lineHeight || 1.5,\n letterSpacing: styles.letterSpacing,\n textAlign: styles.textAlign,\n }];\n }\n\n return result;\n }\n\n /**\n * 解析样式\n */\n private parseStyles(styles: any): DesignStyle {\n return {\n colors: this.parseColors(styles.colors || []),\n typography: this.parseTypography(styles.typography || []),\n spacing: styles.spacing || [],\n borders: styles.borders || [],\n shadows: styles.shadows || [],\n };\n }\n\n /**\n * 解析颜色\n */\n private parseColors(colors: any[]): DesignColor[] {\n return colors.map(color => ({\n name: color.name,\n value: color.value || color.hex || '#000000',\n usage: color.usage,\n }));\n }\n\n /**\n * 解析排版\n */\n private parseTypography(typography: any[]): DesignTypography[] {\n return typography.map(typo => ({\n fontFamily: typo.fontFamily || 'system-ui',\n fontSize: typo.fontSize || 14,\n fontWeight: typo.fontWeight || 400,\n lineHeight: typo.lineHeight || 1.5,\n letterSpacing: typo.letterSpacing,\n textAlign: typo.textAlign,\n }));\n }\n\n /**\n * 解析资源\n */\n private parseAssets(assets: any[]): DesignAsset[] {\n return assets.map(asset => ({\n id: asset.id || '',\n name: asset.name || '未命名资源',\n type: this.parseAssetType(asset.type),\n url: asset.url || '',\n width: asset.width,\n height: asset.height,\n format: asset.format,\n }));\n }\n\n /**\n * 解析资源类型\n */\n private parseAssetType(type: string): DesignAsset['type'] {\n const typeMap: Record<string, DesignAsset['type']> = {\n 'IMAGE': 'image',\n 'ICON': 'icon',\n 'SVG': 'svg',\n };\n return typeMap[type?.toUpperCase()] || 'image';\n }\n\n /**\n * 从 URL 提取 ID\n */\n private extractIdFromUrl(url: string): string {\n const match = url.match(/\\/([a-zA-Z0-9]+)(?:\\?|$)/);\n return match ? match[1] : `lanhu-${Date.now()}`;\n }\n\n /**\n * 提取样式\n */\n async extractStyles(spec: DesignSpec): Promise<DesignStyle> {\n // 收集所有颜色和排版样式\n const colors: DesignColor[] = [...spec.styles.colors];\n const typography: DesignTypography[] = [...spec.styles.typography];\n\n // 从图层中提取样式\n const extractFromLayers = (layers: DesignLayer[]) => {\n for (const layer of layers) {\n if (layer.styles?.colors) {\n colors.push(...layer.styles.colors);\n }\n if (layer.styles?.typography) {\n typography.push(...layer.styles.typography);\n }\n if (layer.children) {\n extractFromLayers(layer.children);\n }\n }\n };\n\n extractFromLayers(spec.layers);\n\n // 去重\n const uniqueColors = this.deduplicateColors(colors);\n const uniqueTypography = this.deduplicateTypography(typography);\n\n return {\n colors: uniqueColors,\n typography: uniqueTypography,\n spacing: spec.styles.spacing,\n borders: spec.styles.borders,\n shadows: spec.styles.shadows,\n };\n }\n\n /**\n * 颜色去重\n */\n private deduplicateColors(colors: DesignColor[]): DesignColor[] {\n const seen = new Set<string>();\n return colors.filter(color => {\n const key = color.value.toLowerCase();\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n }\n\n /**\n * 排版去重\n */\n private deduplicateTypography(typography: DesignTypography[]): DesignTypography[] {\n const seen = new Set<string>();\n return typography.filter(typo => {\n const key = `${typo.fontFamily}-${typo.fontSize}-${typo.fontWeight}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n }\n\n /**\n * 生成代码\n */\n async generateCode(\n spec: DesignSpec,\n options: CodeGenOptions = {}\n ): Promise<string> {\n const {\n framework = 'react',\n styleType = 'css',\n typescript = true,\n } = options;\n\n // 如果 MCP 服务器支持代码生成工具\n if (this.hasTool('generate_code')) {\n const result = await this.callTool({\n name: 'generate_code',\n arguments: {\n spec: JSON.stringify(spec),\n framework,\n styleType,\n typescript,\n },\n });\n\n if (!result.isError && result.content[0]?.text) {\n return result.content[0].text;\n }\n }\n\n // 本地代码生成\n return this.generateCodeLocally(spec, options);\n }\n\n /**\n * 本地代码生成\n */\n private generateCodeLocally(\n spec: DesignSpec,\n options: CodeGenOptions\n ): string {\n const { framework = 'react', styleType = 'css', typescript = true } = options;\n\n const componentName = this.toComponentName(spec.name);\n const ext = typescript ? 'tsx' : 'jsx';\n\n // 生成样式\n const styleCode = this.generateStyleCode(spec, styleType, componentName);\n\n // 生成组件\n const componentCode = this.generateComponentCode(spec, {\n framework,\n styleType,\n componentName,\n typescript,\n });\n\n if (styleType === 'tailwind') {\n return componentCode;\n }\n\n return `${styleCode}\\n\\n${componentCode}`;\n }\n\n /**\n * 生成样式代码\n */\n private generateStyleCode(\n spec: DesignSpec,\n styleType: string,\n componentName: string\n ): string {\n if (styleType === 'tailwind') {\n return '';\n }\n\n if (styleType === 'styled-components') {\n return `import styled from 'styled-components';\n\nexport const Container = styled.div\\`\n width: ${spec.width}px;\n height: ${spec.height}px;\n position: relative;\n\\`;`;\n }\n\n const selector = styleType === 'scss' ? `.${componentName}` : `.${componentName}`;\n\n return `${styleType === 'scss' ? '' : '/* styles.css */'}\n${selector} {\n width: ${spec.width}px;\n height: ${spec.height}px;\n position: relative;\n}`;\n }\n\n /**\n * 生成组件代码\n */\n private generateComponentCode(\n spec: DesignSpec,\n options: {\n framework: string;\n styleType: string;\n componentName: string;\n typescript: boolean;\n }\n ): string {\n const { componentName, styleType, typescript } = options;\n const propsType = typescript ? ': React.FC' : '';\n\n const imports = this.generateImports(styleType, componentName);\n const layers = this.generateLayersCode(spec.layers, styleType);\n\n return `${imports}\n\nexport const ${componentName}${propsType} = () => {\n return (\n <div className=\"${styleType === 'tailwind' ? 'relative' : componentName}\"${styleType === 'styled-components' ? ' as={Container}' : ''}>\n${layers}\n </div>\n );\n};\n\nexport default ${componentName};`;\n }\n\n /**\n * 生成导入语句\n */\n private generateImports(styleType: string, componentName: string): string {\n const imports: string[] = [\"import React from 'react';\"];\n\n if (styleType === 'styled-components') {\n imports.push(`import { Container } from './styles';`);\n } else if (styleType === 'css' || styleType === 'scss') {\n imports.push(`import './styles.${styleType === 'scss' ? 'scss' : 'css'}';`);\n }\n\n return imports.join('\\n');\n }\n\n /**\n * 生成图层代码\n */\n private generateLayersCode(layers: DesignLayer[], styleType: string): string {\n return layers.map(layer => {\n const style = styleType === 'tailwind'\n ? this.generateTailwindClasses(layer)\n : this.generateInlineStyles(layer);\n\n const children = layer.children\n ? this.generateLayersCode(layer.children, styleType)\n : '';\n\n if (layer.type === 'text' && layer.text) {\n return ` <span style={${style}}>${layer.text}</span>`;\n }\n\n if (layer.type === 'image') {\n const asset = layer.name;\n return ` <img src=\"/assets/${asset}\" alt=\"${layer.name}\" style={${style}} />`;\n }\n\n const tag = layer.type === 'group' ? 'div' : 'div';\n const className = styleType === 'tailwind' ? ` className=\"${style}\"` : ` style={${style}}`;\n\n return children\n ? ` <${tag}${className}>\\n${children}\\n </${tag}>`\n : ` <${tag}${className} />`;\n }).join('\\n');\n }\n\n /**\n * 生成 Tailwind 类名\n */\n private generateTailwindClasses(layer: DesignLayer): string {\n const classes: string[] = ['absolute'];\n\n classes.push(`left-[${layer.x}px]`);\n classes.push(`top-[${layer.y}px]`);\n classes.push(`w-[${layer.width}px]`);\n classes.push(`h-[${layer.height}px]`);\n\n return classes.join(' ');\n }\n\n /**\n * 生成内联样式\n */\n private generateInlineStyles(layer: DesignLayer): string {\n const styles: string[] = [\n `position: 'absolute'`,\n `left: ${layer.x}`,\n `top: ${layer.y}`,\n `width: ${layer.width}`,\n `height: ${layer.height}`,\n ];\n\n return `{ ${styles.join(', ')} }`;\n }\n\n /**\n * 转换为组件名\n */\n private toComponentName(name: string): string {\n return name\n .replace(/[^a-zA-Z0-9\\u4e00-\\u9fa5]/g, ' ')\n .split(/\\s+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join('')\n .replace(/[\\u4e00-\\u9fa5]/g, '') || 'Component';\n }\n}\n\nexport default LanhuMCPAdapter;\n","/**\n * Figma MCP 适配器\n * 通过 MCP 协议连接 Figma 设计平台\n */\n\nimport {\n DesignSpec,\n DesignLayer,\n DesignStyle,\n DesignColor,\n DesignTypography,\n DesignAsset,\n MCPServerConfig,\n CodeGenOptions,\n} from '../../types/mcp';\nimport { MCPAdapterBase } from './base';\n\n/**\n * Figma MCP 适配器\n * \n * 配置示例:\n * {\n * name: 'figma',\n * transport: 'stdio',\n * command: 'npx',\n * args: ['-y', '@figma/mcp-server'],\n * env: {\n * FIGMA_ACCESS_TOKEN: 'your-token',\n * }\n * }\n */\nexport class FigmaMCPAdapter extends MCPAdapterBase {\n readonly name = 'figma';\n readonly platform = 'figma' as const;\n\n /**\n * 初始化适配器\n */\n override async initialize(config: MCPServerConfig): Promise<void> {\n if (!config.env?.FIGMA_ACCESS_TOKEN && !process.env.FIGMA_ACCESS_TOKEN) {\n console.warn('警告: 未设置 FIGMA_ACCESS_TOKEN,某些功能可能受限');\n }\n await super.initialize(config);\n }\n\n /**\n * 获取设计稿规格\n */\n async getDesignSpec(url: string): Promise<DesignSpec> {\n if (!this.isConnected()) {\n throw new Error('未连接到 Figma MCP 服务器');\n }\n\n // 解析 Figma URL 获取 file key 和 node id\n const { fileKey, nodeId } = this.parseFigmaUrl(url);\n\n // 调用 Figma MCP 工具获取设计稿\n const result = await this.callTool({\n name: 'get_figma_design',\n arguments: { fileKey, nodeId },\n });\n\n if (result.isError) {\n throw new Error(`获取设计稿失败: ${result.content[0]?.text || '未知错误'}`);\n }\n\n // 解析返回的设计规格\n const specData = JSON.parse(result.content[0]?.text || '{}');\n \n return this.parseDesignSpec(specData, url, fileKey, nodeId);\n }\n\n /**\n * 解析 Figma URL\n */\n private parseFigmaUrl(url: string): { fileKey: string; nodeId: string } {\n // Figma URL 格式: https://www.figma.com/file/{fileKey}/{fileName}?node-id={nodeId}\n const fileMatch = url.match(/\\/file\\/([a-zA-Z0-9]+)/);\n const nodeMatch = url.match(/node-id=([a-zA-Z0-9-]+)/);\n\n if (!fileMatch) {\n throw new Error('无效的 Figma URL: 无法解析 file key');\n }\n\n return {\n fileKey: fileMatch[1],\n nodeId: nodeMatch ? nodeMatch[1].replace('-', ':') : '',\n };\n }\n\n /**\n * 解析设计规格\n */\n private parseDesignSpec(\n data: any,\n url: string,\n fileKey: string,\n nodeId: string\n ): DesignSpec {\n const document = data.document || data;\n \n return {\n id: nodeId || fileKey,\n name: document.name || '未命名设计稿',\n platform: 'figma',\n url,\n width: document.absoluteBoundingBox?.width || 0,\n height: document.absoluteBoundingBox?.height || 0,\n scale: 1,\n layers: this.parseFigmaLayers(document.children || []),\n styles: this.extractStylesFromDocument(document),\n assets: this.parseAssets(data.assets || []),\n extractedAt: new Date(),\n };\n }\n\n /**\n * 解析 Figma 图层\n */\n private parseFigmaLayers(nodes: any[]): DesignLayer[] {\n return nodes.map(node => {\n const bbox = node.absoluteBoundingBox || node.boundingBox || {};\n \n return {\n id: node.id,\n name: node.name || '未命名图层',\n type: this.mapFigmaNodeType(node.type),\n x: bbox.x || 0,\n y: bbox.y || 0,\n width: bbox.width || 0,\n height: bbox.height || 0,\n visible: node.visible !== false,\n opacity: node.opacity ?? 1,\n children: node.children ? this.parseFigmaLayers(node.children) : undefined,\n styles: this.extractLayerStyles(node),\n text: node.characters || undefined,\n };\n });\n }\n\n /**\n * 映射 Figma 节点类型\n */\n private mapFigmaNodeType(type: string): DesignLayer['type'] {\n const typeMap: Record<string, DesignLayer['type']> = {\n 'FRAME': 'frame',\n 'GROUP': 'group',\n 'TEXT': 'text',\n 'RECTANGLE': 'shape',\n 'ELLIPSE': 'shape',\n 'VECTOR': 'shape',\n 'LINE': 'shape',\n 'IMAGE': 'image',\n };\n return typeMap[type?.toUpperCase()] || 'shape';\n }\n\n /**\n * 提取图层样式\n */\n private extractLayerStyles(node: any): Partial<DesignStyle> | undefined {\n const styles: Partial<DesignStyle> = {};\n\n // 填充颜色\n if (node.fills && node.fills.length > 0) {\n const fill = node.fills[0];\n if (fill.type === 'SOLID' && fill.color) {\n styles.colors = [{\n value: this.rgbaToHex(fill.color, fill.opacity),\n usage: 'fill',\n }];\n }\n }\n\n // 描边\n if (node.strokes && node.strokes.length > 0) {\n const stroke = node.strokes[0];\n if (stroke.type === 'SOLID' && stroke.color) {\n styles.borders = [{\n width: node.strokeWeight || 1,\n style: 'solid',\n color: this.rgbaToHex(stroke.color, stroke.opacity),\n radius: node.cornerRadius,\n }];\n }\n }\n\n // 文字样式\n if (node.style) {\n styles.typography = [{\n fontFamily: node.style.fontFamily || 'Inter',\n fontSize: node.style.fontSize || 14,\n fontWeight: node.style.fontWeight || 400,\n lineHeight: node.style.lineHeightPx\n ? node.style.lineHeightPx / (node.style.fontSize || 14)\n : 1.5,\n letterSpacing: node.style.letterSpacing,\n textAlign: node.style.textAlignHorizontal?.toLowerCase() as any,\n }];\n }\n\n // 阴影\n if (node.effects && node.effects.length > 0) {\n const shadows = node.effects\n .filter((e: any) => e.type === 'DROP_SHADOW' && e.visible !== false)\n .map((e: any) => ({\n type: 'box' as const,\n x: e.offset?.x || 0,\n y: e.offset?.y || 0,\n blur: e.radius || 0,\n spread: e.spread || 0,\n color: this.rgbaToHex(e.color, 1),\n }));\n if (shadows.length > 0) {\n styles.shadows = shadows;\n }\n }\n\n return Object.keys(styles).length > 0 ? styles : undefined;\n }\n\n /**\n * 从文档提取全局样式\n */\n private extractStylesFromDocument(document: any): DesignStyle {\n const styles: DesignStyle = {\n colors: [],\n typography: [],\n spacing: [],\n borders: [],\n shadows: [],\n };\n\n // 递归提取所有样式\n const traverse = (node: any) => {\n const layerStyles = this.extractLayerStyles(node);\n if (layerStyles?.colors) {\n styles.colors.push(...layerStyles.colors);\n }\n if (layerStyles?.typography) {\n styles.typography.push(...layerStyles.typography);\n }\n if (layerStyles?.borders) {\n styles.borders.push(...layerStyles.borders);\n }\n if (layerStyles?.shadows) {\n styles.shadows.push(...layerStyles.shadows);\n }\n\n if (node.children) {\n node.children.forEach(traverse);\n }\n };\n\n traverse(document);\n\n // 去重\n styles.colors = this.deduplicateColors(styles.colors);\n styles.typography = this.deduplicateTypography(styles.typography);\n\n return styles;\n }\n\n /**\n * RGBA 转 Hex\n */\n private rgbaToHex(color: { r: number; g: number; b: number }, opacity?: number): string {\n const r = Math.round(color.r * 255);\n const g = Math.round(color.g * 255);\n const b = Math.round(color.b * 255);\n const a = opacity !== undefined ? Math.round(opacity * 255) : 255;\n\n if (a < 255) {\n return `rgba(${r}, ${g}, ${b}, ${(a / 255).toFixed(2)})`;\n }\n\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\n }\n\n /**\n * 解析资源\n */\n private parseAssets(assets: any[]): DesignAsset[] {\n return assets.map(asset => ({\n id: asset.id || '',\n name: asset.name || '未命名资源',\n type: this.mapAssetType(asset.contentType),\n url: asset.url || '',\n width: asset.width,\n height: asset.height,\n format: asset.format,\n }));\n }\n\n /**\n * 映射资源类型\n */\n private mapAssetType(contentType: string): DesignAsset['type'] {\n if (contentType?.includes('svg')) return 'svg';\n if (contentType?.includes('icon')) return 'icon';\n return 'image';\n }\n\n /**\n * 颜色去重\n */\n private deduplicateColors(colors: DesignColor[]): DesignColor[] {\n const seen = new Set<string>();\n return colors.filter(color => {\n const key = color.value.toLowerCase();\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n }\n\n /**\n * 排版去重\n */\n private deduplicateTypography(typography: DesignTypography[]): DesignTypography[] {\n const seen = new Set<string>();\n return typography.filter(typo => {\n const key = `${typo.fontFamily}-${typo.fontSize}-${typo.fontWeight}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n }\n\n /**\n * 提取样式\n */\n async extractStyles(spec: DesignSpec): Promise<DesignStyle> {\n // 如果 MCP 服务器支持样式提取\n if (this.hasTool('extract_styles')) {\n const result = await this.callTool({\n name: 'extract_styles',\n arguments: { specId: spec.id },\n });\n\n if (!result.isError && result.content[0]?.text) {\n return JSON.parse(result.content[0].text);\n }\n }\n\n // 使用已提取的样式\n return spec.styles;\n }\n\n /**\n * 生成代码\n */\n async generateCode(\n spec: DesignSpec,\n options: CodeGenOptions = {}\n ): Promise<string> {\n const {\n framework = 'react',\n styleType = 'css',\n typescript = true,\n } = options;\n\n // 如果 MCP 服务器支持代码生成\n if (this.hasTool('generate_code')) {\n const result = await this.callTool({\n name: 'generate_code',\n arguments: {\n specId: spec.id,\n framework,\n styleType,\n typescript,\n },\n });\n\n if (!result.isError && result.content[0]?.text) {\n return result.content[0].text;\n }\n }\n\n // 本地代码生成(复用蓝湖的实现)\n return this.generateCodeLocally(spec, options);\n }\n\n /**\n * 本地代码生成\n */\n private generateCodeLocally(\n spec: DesignSpec,\n options: CodeGenOptions\n ): string {\n const { framework = 'react', styleType = 'css', typescript = true } = options;\n\n const componentName = this.toComponentName(spec.name);\n const imports = this.generateImports(styleType);\n const propsType = typescript ? ': React.FC' : '';\n\n // 生成 JSX\n const jsx = this.generateJSX(spec.layers, styleType, 2);\n\n if (styleType === 'tailwind') {\n return `${imports}\n\nexport const ${componentName}${propsType} = () => {\n return (\n <div className=\"relative w-[${spec.width}px] h-[${spec.height}px]\">\n${jsx}\n </div>\n );\n};\n\nexport default ${componentName};`;\n }\n\n if (styleType === 'styled-components') {\n const styledComponents = this.generateStyledComponents(spec);\n return `${imports}\n${styledComponents}\n\nexport const ${componentName}${propsType} = () => {\n return (\n <Container>\n${jsx}\n </Container>\n );\n};\n\nexport default ${componentName};`;\n }\n\n const cssStyles = this.generateCSSStyles(spec, componentName);\n return `/* styles.css */\n${cssStyles}\n\n/* ${componentName}.tsx */\n${imports}\nimport './styles.css';\n\nexport const ${componentName}${propsType} = () => {\n return (\n <div className=\"${componentName}\">\n${jsx}\n </div>\n );\n};\n\nexport default ${componentName};`;\n }\n\n /**\n * 生成导入语句\n */\n private generateImports(styleType: string): string {\n return \"import React from 'react';\";\n }\n\n /**\n * 生成 JSX\n */\n private generateJSX(\n layers: DesignLayer[],\n styleType: string,\n indent: number\n ): string {\n const spaces = ' '.repeat(indent);\n\n return layers.map(layer => {\n const style = styleType === 'tailwind'\n ? this.generateTailwindStyle(layer)\n : styleType === 'styled-components'\n ? ''\n : ` style={${this.generateInlineStyle(layer)}}`;\n\n const className = styleType === 'tailwind' ? ` className=\"${this.generateTailwindStyle(layer)}\"` : '';\n\n if (layer.type === 'text' && layer.text) {\n return `${spaces}<span${className}${style}>${layer.text}</span>`;\n }\n\n const children = layer.children\n ? `\\n${this.generateJSX(layer.children, styleType, indent + 2)}\\n${spaces}`\n : '';\n\n return `${spaces}<div${className}${style}>${children}</div>`;\n }).join('\\n');\n }\n\n /**\n * 生成 Tailwind 样式类\n */\n private generateTailwindStyle(layer: DesignLayer): string {\n const classes = ['absolute', `left-[${layer.x}px]`, `top-[${layer.y}px]`, `w-[${layer.width}px]`, `h-[${layer.height}px]`];\n \n if (layer.styles?.colors?.[0]) {\n const color = layer.styles.colors[0].value;\n if (color.startsWith('#')) {\n classes.push(`bg-[${color}]`);\n }\n }\n\n return classes.join(' ');\n }\n\n /**\n * 生成内联样式\n */\n private generateInlineStyle(layer: DesignLayer): string {\n const styles: string[] = [\n `position: 'absolute'`,\n `left: ${layer.x}`,\n `top: ${layer.y}`,\n `width: ${layer.width}`,\n `height: ${layer.height}`,\n ];\n\n if (layer.styles?.colors?.[0]) {\n styles.push(`backgroundColor: '${layer.styles.colors[0].value}'`);\n }\n\n return `{ ${styles.join(', ')} }`;\n }\n\n /**\n * 生成 Styled Components\n */\n private generateStyledComponents(spec: DesignSpec): string {\n return `import styled from 'styled-components';\n\nconst Container = styled.div\\`\n position: relative;\n width: ${spec.width}px;\n height: ${spec.height}px;\n\\`;`;\n }\n\n /**\n * 生成 CSS 样式\n */\n private generateCSSStyles(spec: DesignSpec, componentName: string): string {\n return `.${componentName} {\n position: relative;\n width: ${spec.width}px;\n height: ${spec.height}px;\n}`;\n }\n\n /**\n * 转换为组件名\n */\n private toComponentName(name: string): string {\n return name\n .replace(/[^a-zA-Z0-9\\s]/g, '')\n .split(/\\s+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('') || 'Component';\n }\n}\n\nexport default FigmaMCPAdapter;\n","/**\n * MCP 服务管理器\n * 统一管理所有 MCP 服务连接\n */\n\nimport {\n MCPServerConfig,\n MCPClientConfig,\n MCPConnectionState,\n MCPConnectionStatus,\n MCPToolSchema,\n MCPToolCall,\n MCPToolResult,\n IMCPAdapter,\n DesignSpec,\n DesignStyle,\n CodeGenOptions,\n} from '../../types/mcp';\nimport { MCPAdapterBase } from './base';\nimport { LanhuMCPAdapter } from './lanhu';\nimport { FigmaMCPAdapter } from './figma';\n\n/**\n * MCP 管理器\n */\nexport class MCPManager {\n private adapters: Map<string, IMCPAdapter> = new Map();\n private connectionStates: Map<string, MCPConnectionState> = new Map();\n private configs: Map<string, MCPServerConfig> = new Map();\n\n constructor() {}\n\n /**\n * 注册 MCP 服务器\n */\n async registerServer(config: MCPServerConfig): Promise<void> {\n if (this.adapters.has(config.name)) {\n throw new Error(`MCP 服务器已注册: ${config.name}`);\n }\n\n // 创建适配器实例\n const adapter = this.createAdapter(config);\n await adapter.initialize(config);\n\n this.adapters.set(config.name, adapter);\n this.configs.set(config.name, config);\n\n // 初始化连接状态\n this.connectionStates.set(config.name, {\n serverName: config.name,\n status: 'disconnected',\n toolsAvailable: [],\n resourcesAvailable: [],\n });\n }\n\n /**\n * 创建适配器\n */\n private createAdapter(config: MCPServerConfig): IMCPAdapter {\n // 根据配置名称推断平台类型\n if (config.name.includes('lanhu') || config.name === '蓝湖') {\n return new LanhuMCPAdapter();\n }\n if (config.name.includes('figma')) {\n return new FigmaMCPAdapter();\n }\n\n // 默认使用通用适配器\n return new GenericMCPAdapter(config.name);\n }\n\n /**\n * 连接到指定服务器\n */\n async connect(serverName: string): Promise<void> {\n const adapter = this.adapters.get(serverName);\n if (!adapter) {\n throw new Error(`未找到 MCP 服务器: ${serverName}`);\n }\n\n const state = this.connectionStates.get(serverName)!;\n state.status = 'connecting';\n\n try {\n await adapter.connect();\n state.status = 'connected';\n state.lastConnected = new Date();\n state.toolsAvailable = (await adapter.listTools()).map(t => t.name);\n state.resourcesAvailable = (await adapter.listResources()).map(r => r.name);\n } catch (error) {\n state.status = 'error';\n state.error = (error as Error).message;\n throw error;\n }\n }\n\n /**\n * 连接所有服务器\n */\n async connectAll(): Promise<Map<string, Error | null>> {\n const results = new Map<string, Error | null>();\n\n for (const [name] of this.adapters) {\n try {\n await this.connect(name);\n results.set(name, null);\n } catch (error) {\n results.set(name, error as Error);\n }\n }\n\n return results;\n }\n\n /**\n * 断开指定服务器\n */\n async disconnect(serverName: string): Promise<void> {\n const adapter = this.adapters.get(serverName);\n if (!adapter) return;\n\n await adapter.disconnect();\n\n const state = this.connectionStates.get(serverName);\n if (state) {\n state.status = 'disconnected';\n state.toolsAvailable = [];\n state.resourcesAvailable = [];\n }\n }\n\n /**\n * 断开所有服务器\n */\n async disconnectAll(): Promise<void> {\n for (const [name] of this.adapters) {\n await this.disconnect(name);\n }\n }\n\n /**\n * 获取连接状态\n */\n getConnectionState(serverName: string): MCPConnectionState | undefined {\n return this.connectionStates.get(serverName);\n }\n\n /**\n * 获取所有连接状态\n */\n getAllConnectionStates(): MCPConnectionState[] {\n return Array.from(this.connectionStates.values());\n }\n\n /**\n * 获取适配器\n */\n getAdapter(serverName: string): IMCPAdapter | undefined {\n return this.adapters.get(serverName);\n }\n\n /**\n * 获取蓝湖适配器\n */\n getLanhuAdapter(): LanhuMCPAdapter | undefined {\n for (const adapter of this.adapters.values()) {\n if (adapter.platform === 'lanhu') {\n return adapter as LanhuMCPAdapter;\n }\n }\n return undefined;\n }\n\n /**\n * 获取 Figma 适配器\n */\n getFigmaAdapter(): FigmaMCPAdapter | undefined {\n for (const adapter of this.adapters.values()) {\n if (adapter.platform === 'figma') {\n return adapter as FigmaMCPAdapter;\n }\n }\n return undefined;\n }\n\n /**\n * 调用工具\n */\n async callTool(\n serverName: string,\n call: MCPToolCall\n ): Promise<MCPToolResult> {\n const adapter = this.adapters.get(serverName);\n if (!adapter) {\n throw new Error(`未找到 MCP 服务器: ${serverName}`);\n }\n\n if (!adapter.isConnected()) {\n throw new Error(`MCP 服务器未连接: ${serverName}`);\n }\n\n return adapter.callTool(call);\n }\n\n /**\n * 获取设计稿\n */\n async getDesignSpec(url: string): Promise<DesignSpec> {\n // 根据URL判断使用哪个平台\n if (url.includes('lanhuapp.com') || url.includes('蓝湖')) {\n const adapter = this.getLanhuAdapter();\n if (!adapter || !adapter.isConnected()) {\n throw new Error('蓝湖 MCP 服务未连接');\n }\n return adapter.getDesignSpec(url);\n }\n\n if (url.includes('figma.com')) {\n const adapter = this.getFigmaAdapter();\n if (!adapter || !adapter.isConnected()) {\n throw new Error('Figma MCP 服务未连接');\n }\n return adapter.getDesignSpec(url);\n }\n\n throw new Error(`不支持的设计平台 URL: ${url}`);\n }\n\n /**\n * 生成代码\n */\n async generateCode(\n spec: DesignSpec,\n options?: CodeGenOptions\n ): Promise<string> {\n let adapter: IMCPAdapter | undefined;\n\n if (spec.platform === 'lanhu') {\n adapter = this.getLanhuAdapter();\n } else if (spec.platform === 'figma') {\n adapter = this.getFigmaAdapter();\n }\n\n if (!adapter || !adapter.isConnected()) {\n throw new Error(`${spec.platform} MCP 服务未连接`);\n }\n\n return adapter.generateCode(spec, options);\n }\n\n /**\n * 列出所有可用工具\n */\n listAllTools(): Map<string, MCPToolSchema[]> {\n const result = new Map<string, MCPToolSchema[]>();\n\n for (const [name, adapter] of this.adapters) {\n if (adapter.isConnected()) {\n const state = this.connectionStates.get(name);\n if (state) {\n // 这里需要重新获取完整工具信息\n adapter.listTools().then(tools => {\n result.set(name, tools);\n }).catch(() => {\n result.set(name, []);\n });\n }\n }\n }\n\n return result;\n }\n\n /**\n * 检查服务器是否可用\n */\n isServerAvailable(serverName: string): boolean {\n const adapter = this.adapters.get(serverName);\n return adapter?.isConnected() ?? false;\n }\n\n /**\n * 获取已注册的服务器列表\n */\n getRegisteredServers(): string[] {\n return Array.from(this.adapters.keys());\n }\n}\n\n/**\n * 通用 MCP 适配器(用于未知平台)\n */\nclass GenericMCPAdapter extends MCPAdapterBase {\n constructor(serverName: string) {\n super();\n this._name = serverName;\n this._platform = 'lanhu'; // 默认值\n }\n\n private _name: string = '';\n private _platform: 'lanhu' | 'figma' = 'lanhu';\n\n get name(): string {\n return this._name;\n }\n\n get platform(): 'lanhu' | 'figma' {\n return this._platform;\n }\n\n async getDesignSpec(url: string): Promise<DesignSpec> {\n throw new Error('通用适配器不支持设计稿获取');\n }\n\n async extractStyles(spec: DesignSpec): Promise<DesignStyle> {\n throw new Error('通用适配器不支持样式提取');\n }\n\n async generateCode(spec: DesignSpec, options?: CodeGenOptions): Promise<string> {\n throw new Error('通用适配器不支持代码生成');\n }\n}\n\n/**\n * 创建 MCP 管理器实例\n */\nexport function createMCPManager(): MCPManager {\n return new MCPManager();\n}\n\nexport default MCPManager;\n","/**\n * Agent 运行器\n * 简化的 Agent 调度入口,提供统一的 Agent 执行接口\n */\n\nimport chalk from 'chalk';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { AgentId, AgentDefinition, AgentExecutionContext, AgentExecutionResult, ProjectContext } from '../types/agent';\nimport { ExecutorContext } from '../cli/executor';\nimport { getAgentDefinition, getAllAgents, getAgentsForWorkflowStep } from './definitions';\n\n// 简单的结果类型(向后兼容)\nexport interface AgentResult {\n output: string;\n contextUsed: number;\n}\n\n/**\n * 加载项目上下文\n */\nasync function loadProjectContext(workingDirectory: string): Promise<ProjectContext> {\n const context: ProjectContext = {\n agentsMd: '',\n configYaml: '',\n devStandards: '',\n };\n\n try {\n context.agentsMd = await fs.readFile(path.join(workingDirectory, 'AGENTS.md'), 'utf-8');\n } catch { /* ignore */ }\n\n try {\n context.configYaml = await fs.readFile(path.join(workingDirectory, 'openspec', 'config.yaml'), 'utf-8');\n } catch { /* ignore */ }\n\n try {\n context.devStandards = await fs.readFile(path.join(workingDirectory, '.sf-cli', 'norms', 'devstanded.md'), 'utf-8');\n } catch { /* ignore */ }\n\n return context;\n}\n\n/**\n * 运行 Agent(简化版)\n */\nexport async function runAgent(\n agentId: string,\n args: string[],\n ctx: ExecutorContext\n): Promise<AgentResult> {\n const agent = getAgentDefinition(agentId as AgentId);\n \n if (!agent) {\n return {\n output: chalk.red(`未知的Agent: ${agentId}`) +\n chalk.gray('\\n内置Agent: ') +\n chalk.cyan('frontend-dev, code-reviewer, architect, tester'),\n contextUsed: 0,\n };\n }\n\n // 加载项目上下文\n const projectContext = await loadProjectContext(ctx.options.workingDirectory);\n\n // 构建执行上下文\n const context: AgentExecutionContext = {\n taskId: `task-${Date.now()}`,\n requirement: args.join(' ') || '无具体需求描述',\n context: ctx.contextManager?.getStatusString() || undefined,\n norms: ctx.normsManager?.getEffectiveStandards().map((n: { description: string }) => n.description) || [],\n files: [],\n projectContext, // 注入项目上下文\n };\n\n // 检查模型是否配置\n if (!ctx.modelService?.getCurrentModel()) {\n return {\n output: chalk.yellow('模型未配置') +\n chalk.gray('\\n请先使用 ') +\n chalk.cyan('/model') +\n chalk.gray(' 命令配置AI模型'),\n contextUsed: 0,\n };\n }\n\n try {\n // 使用简化的执行逻辑\n const messages = buildSimpleMessages(agent, context);\n const response = await ctx.modelService.sendMessage(messages, {\n agent: agentId,\n temperature: 0.7,\n maxTokens: 4096,\n });\n\n return {\n output: formatAgentOutput(agent, response.content),\n contextUsed: response.usage.inputTokens + response.usage.outputTokens,\n };\n } catch (error) {\n const err = error as Error;\n return {\n output: chalk.red(`执行失败: ${err.message}`),\n contextUsed: 0,\n };\n }\n}\n\n/**\n * 获取 Agent 定义\n */\nexport function getAgent(agentId: AgentId): AgentDefinition | undefined {\n return getAgentDefinition(agentId);\n}\n\n/**\n * 列出所有 Agent\n */\nexport function listAgents(): AgentDefinition[] {\n return getAllAgents();\n}\n\n/**\n * 获取工作流阶段对应的 Agent\n */\nexport function getAgentsForStep(step: string): AgentDefinition[] {\n return getAgentsForWorkflowStep(step);\n}\n\n// ==================== 私有辅助函数 ====================\n\n/**\n * 构建简单的消息列表\n */\nfunction buildSimpleMessages(\n agent: AgentDefinition,\n context: AgentExecutionContext\n): Array<{ role: 'system' | 'user' | 'assistant'; content: string }> {\n const messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }> = [];\n\n // 系统提示(注入项目上下文)\n let systemPrompt = agent.systemPrompt;\n \n if (context.projectContext) {\n systemPrompt += '\\n\\n---\\n\\n## 项目上下文(必须阅读)\\n\\n';\n \n if (context.projectContext.agentsMd) {\n systemPrompt += `### AGENTS.md 项目文档\\n\\n${summarizeContext(context.projectContext.agentsMd, 2000)}\\n\\n`;\n }\n \n if (context.projectContext.configYaml) {\n systemPrompt += `### config.yaml 项目配置\\n\\n\\`\\`\\`yaml\\n${context.projectContext.configYaml}\\n\\`\\`\\`\\n\\n`;\n }\n }\n\n messages.push({\n role: 'system',\n content: systemPrompt,\n });\n\n // 任务提示(注入规范)\n let taskPrompt = agent.taskPromptTemplate\n .replace('{{requirement}}', context.requirement)\n .replace('{{context}}', context.context || '无额外上下文')\n .replace('{{norms}}', buildNormsText(context))\n .replace('{{files}}', context.files?.join('\\n') || '暂无相关文件')\n .replace('{{previousOutput}}', context.previousOutput || '无上一步输出');\n\n messages.push({\n role: 'user',\n content: taskPrompt,\n });\n\n return messages;\n}\n\n/**\n * 构建规范文本\n */\nfunction buildNormsText(context: AgentExecutionContext): string {\n let normsText = '';\n \n // 注入 devstanded.md 规范(强制参考)\n if (context.projectContext?.devStandards) {\n normsText += '## 项目开发规范 (devstanded.md) - 必须遵循\\n\\n';\n normsText += extractKeyStandards(context.projectContext.devStandards);\n }\n \n // 追加额外规范\n if (context.norms?.length) {\n normsText += '\\n\\n## 额外规范要求\\n\\n' + context.norms.join('\\n');\n }\n \n return normsText || '暂无特定规范要求';\n}\n\n/**\n * 摘要上下文(限制长度)\n */\nfunction summarizeContext(content: string, maxLength: number): string {\n if (content.length <= maxLength) {\n return content;\n }\n \n const lines = content.split('\\n');\n const summary: string[] = [];\n let currentLength = 0;\n \n for (const line of lines) {\n if (currentLength + line.length + 1 > maxLength) {\n break;\n }\n summary.push(line);\n currentLength += line.length + 1;\n }\n \n return summary.join('\\n') + '\\n\\n... (内容已截断,请阅读完整文档了解详情)';\n}\n\n/**\n * 提取关键规范\n */\nfunction extractKeyStandards(devStandards: string): string {\n if (!devStandards) {\n return '暂无项目规范';\n }\n\n const lines = devStandards.split('\\n');\n const standards: string[] = [];\n let currentStandard = '';\n let inStandard = false;\n\n for (const line of lines) {\n if (line.startsWith('### ')) {\n if (currentStandard) {\n standards.push(currentStandard);\n }\n currentStandard = line.replace('### ', '').trim();\n inStandard = true;\n } else if (inStandard && line.startsWith('| 等级 |')) {\n const levelMatch = line.match(/\\| 等级 \\| (\\S+) \\|/);\n if (levelMatch) {\n currentStandard += ` [${levelMatch[1]}]`;\n }\n } else if (line.startsWith('---')) {\n if (currentStandard) {\n standards.push(currentStandard);\n currentStandard = '';\n }\n inStandard = false;\n }\n }\n\n const highPriority = standards.filter(s => s.includes('[强制]'));\n const mediumPriority = standards.filter(s => s.includes('[推荐]'));\n const lowPriority = standards.filter(s => s.includes('[参考]'));\n\n let result = '';\n \n if (highPriority.length > 0) {\n result += '### 强制规范\\n' + highPriority.map(s => `- ${s.replace(' [强制]', '')}`).join('\\n') + '\\n\\n';\n }\n \n if (mediumPriority.length > 0) {\n result += '### 推荐规范\\n' + mediumPriority.map(s => `- ${s.replace(' [推荐]', '')}`).join('\\n') + '\\n\\n';\n }\n \n if (lowPriority.length > 0) {\n result += '### 参考规范\\n' + lowPriority.map(s => `- ${s.replace(' [参考]', '')}`).join('\\n') + '\\n';\n }\n\n return result || devStandards.slice(0, 2000);\n}\n\n/**\n * 格式化 Agent 输出\n */\nfunction formatAgentOutput(agent: AgentDefinition, content: string): string {\n const header = chalk.cyan(`${agent.icon} ${agent.name}`) +\n chalk.gray(` (v${agent.version})`);\n \n const divider = chalk.gray('─'.repeat(50));\n \n return `${header}\\n${divider}\\n\\n${content}`;\n}\n\nexport default { runAgent, getAgent, listAgents, getAgentsForStep };","/**\n * 内置 Agent 定义\n * 包含每个 Agent 的角色、能力、工具权限和 Prompt 模板\n */\n\nimport { AgentDefinition, AgentId } from '../types/agent';\n\n/**\n * 前端开发 Agent\n * 负责代码实现、组件开发、样式编写\n */\nexport const FRONTEND_DEV_AGENT: AgentDefinition = {\n id: 'frontend-dev',\n name: '前端开发',\n description: '执行前端代码开发任务,包括组件实现、样式编写、逻辑开发',\n icon: '💻',\n version: '1.0.0',\n role: '你是一名资深前端开发工程师,精通 React、Vue、TypeScript、CSS等技术。你负责根据需求和设计稿实现高质量的前端代码。',\n \n capabilities: [\n {\n id: 'component-dev',\n name: '组件开发',\n description: '根据设计稿实现 React/Vue 组件',\n },\n {\n id: 'style-writing',\n name: '样式编写',\n description: '编写 CSS/SCSS/Tailwind 样式',\n },\n {\n id: 'logic-dev',\n name: '逻辑开发',\n description: '实现业务逻辑和状态管理',\n },\n {\n id: 'api-integration',\n name: 'API集成',\n description: '集成后端 API 接口',\n },\n ],\n \n tools: [\n { name: 'read_file', description: '读取文件内容', permission: 'full' },\n { name: 'write_file', description: '写入文件内容', permission: 'full' },\n { name: 'replace', description: '编辑文件内容', permission: 'full' },\n { name: 'glob', description: '搜索文件', permission: 'full' },\n { name: 'search_file_content', description: '搜索文件内容', permission: 'full' },\n { name: 'list_directory', description: '列出目录内容', permission: 'full' },\n { name: 'run_shell_command', description: '执行Shell命令', permission: 'confirm' },\n // MCP 设计工具\n { name: 'mcp_lanhu_get_design', description: '从蓝湖获取设计稿', permission: 'full' },\n { name: 'mcp_lanhu_get_layer', description: '从蓝湖获取设计图层', permission: 'full' },\n { name: 'mcp_lanhu_export_asset', description: '从蓝湖导出设计资源', permission: 'full' },\n { name: 'mcp_figma_get_design', description: '从Figma获取设计稿', permission: 'full' },\n { name: 'mcp_figma_get_component', description: '从Figma获取组件信息', permission: 'full' },\n ],\n \n triggers: [\n { type: 'workflow', condition: { workflowStep: 'new' }, priority: 10 },\n { type: 'workflow', condition: { workflowStep: 'continue' }, priority: 10 },\n { type: 'manual', condition: {}, priority: 5 },\n ],\n \n constraints: {\n files: {\n maxFileSize: 1048576, // 1MB\n maxFilesPerTask: 50,\n protectedPaths: ['node_modules', '.git', 'dist'],\n },\n code: {\n maxLineLength: 120,\n maxFunctionLength: 100,\n requireTypes: true,\n },\n behavior: {\n requireConfirmation: ['run_shell_command'],\n autoCommit: false,\n },\n },\n \n systemPrompt: `你是一名资深前端开发工程师,专注于高质量代码实现。\n\n## 你的职责\n- 根据需求和设计规范实现前端代码\n- 遵循项目既有的编码规范和模式\n- 确保代码可读性、可维护性和性能\n\n## 工作原则\n1. 先理解现有代码结构,再进行开发\n2. 优先使用项目中已有的组件和工具\n3. 保持代码风格一致性\n4. 添加必要的类型定义和注释\n\n## 输出要求\n- 提供清晰的实现说明\n- 列出修改/新增的文件\n- 说明关键设计决策`,\n \n taskPromptTemplate: `## 任务\n{{requirement}}\n\n## 上下文\n{{context}}\n\n## 相关规范\n{{norms}}\n\n## 已有文件\n{{files}}\n\n## 上一步输出\n{{previousOutput}}\n\n请根据以上信息实现需求,确保代码质量和规范遵循。`,\n \n outputFormat: {\n type: 'markdown',\n },\n};\n\n/**\n * 代码审核 Agent\n * 负责代码质量检查、安全审查、最佳实践建议、回归测试\n */\nexport const CODE_REVIEWER_AGENT: AgentDefinition = {\n id: 'code-reviewer',\n name: '代码审核',\n description: '审核代码质量、安全性和规范性,执行回归测试,提供改进建议',\n icon: '🔍',\n version: '1.1.0',\n role: '你是一名资深代码审核专家,专注于代码质量、安全性和最佳实践。你负责审查代码、执行回归测试并提供改进建议。',\n \n capabilities: [\n {\n id: 'quality-review',\n name: '质量审查',\n description: '检查代码质量、可读性、可维护性',\n },\n {\n id: 'security-review',\n name: '安全审查',\n description: '检查安全漏洞和风险',\n },\n {\n id: 'best-practice',\n name: '最佳实践',\n description: '提供代码改进建议',\n },\n {\n id: 'performance-review',\n name: '性能审查',\n description: '检查性能问题和优化建议',\n },\n {\n id: 'regression-test',\n name: '回归测试',\n description: '执行测试套件,确保修改不破坏已有功能',\n },\n {\n id: 'coverage-analysis',\n name: '覆盖率分析',\n description: '分析测试覆盖率并提供改进建议',\n },\n ],\n \n tools: [\n { name: 'read_file', description: '读取文件内容', permission: 'full' },\n { name: 'glob', description: '搜索文件', permission: 'full' },\n { name: 'search_file_content', description: '搜索文件内容', permission: 'full' },\n { name: 'list_directory', description: '列出目录内容', permission: 'full' },\n { name: 'run_shell_command', description: '执行测试命令', permission: 'confirm' },\n ],\n \n triggers: [\n { type: 'workflow', condition: { workflowStep: 'apply' }, priority: 10 },\n { type: 'manual', condition: {}, priority: 5 },\n ],\n \n constraints: {\n files: {\n protectedPaths: ['node_modules', '.git'],\n },\n behavior: {\n requireConfirmation: ['run_shell_command'],\n autoCommit: false,\n },\n },\n \n systemPrompt: `你是一名资深代码审核专家,专注于代码质量和安全性审查。\n\n## 你的职责\n- 审查代码质量和可维护性\n- 检查安全漏洞和风险\n- 执行回归测试,确保修改不破坏已有功能\n- 提供具体的改进建议\n- 确保遵循最佳实践\n\n## 审查维度\n1. **代码质量**: 可读性、可维护性、复杂度\n2. **安全性**: XSS、注入、敏感数据处理\n3. **性能**: 算法效率、内存使用、渲染优化\n4. **规范性**: 命名、格式、注释\n5. **测试覆盖**: 回归测试结果、覆盖率分析\n\n## 回归测试流程\n1. 执行 \\`npm test -- --run\\` 运行测试套件\n2. 分析测试结果,识别失败的测试用例\n3. 如果测试失败,阻止归档并提示修复\n4. 提供覆盖率报告和改进建议\n\n## 输出格式\n### 回归测试结果\n- 测试通过/失败状态\n- 通过/失败数量\n- 覆盖率百分比\n\n### 审查结果\n- 通过/需修改/不通过\n\n### 问题列表\n| 级别 | 文件 | 行号 | 问题描述 | 建议修复 |\n|------|------|------|----------|----------|\n\n### 改进建议\n- 建议项1\n- 建议项2\n\n### 总体评价\n对代码整体质量的评价和建议。`,\n \n taskPromptTemplate: `## 审查范围\n{{requirement}}\n\n## 待审查文件\n{{files}}\n\n## 项目规范\n{{norms}}\n\n## 上下文\n{{context}}\n\n请对以上文件进行全面审查,执行回归测试,并提供详细的审查报告和改进建议。`,\n \n outputFormat: {\n type: 'markdown',\n },\n};\n\n/**\n * 架构师 Agent\n * 负责技术方案设计、架构决策、技术选型\n */\nexport const ARCHITECT_AGENT: AgentDefinition = {\n id: 'architect',\n name: '资深前端架构师',\n description: '负责架构设计、技术方案、技术决策',\n icon: '🏗️',\n version: '1.0.0',\n role: '你是一名资深前端架构师,精通前端架构设计、性能优化、工程化。你负责制定技术方案和架构决策。',\n \n capabilities: [\n {\n id: 'architecture-design',\n name: '架构设计',\n description: '设计系统架构和模块划分',\n },\n {\n id: 'tech-decision',\n name: '技术决策',\n description: '技术选型和方案评估',\n },\n {\n id: 'performance-opt',\n name: '性能优化',\n description: '性能分析和优化方案',\n },\n {\n id: 'code-review',\n name: '架构审查',\n description: '审查代码架构合理性',\n },\n ],\n \n tools: [\n { name: 'read_file', description: '读取文件内容', permission: 'full' },\n { name: 'glob', description: '搜索文件', permission: 'full' },\n { name: 'search_file_content', description: '搜索文件内容', permission: 'full' },\n { name: 'list_directory', description: '列出目录内容', permission: 'full' },\n // MCP 设计工具\n { name: 'mcp_lanhu_get_design', description: '从蓝湖获取设计稿', permission: 'full' },\n { name: 'mcp_figma_get_design', description: '从Figma获取设计稿', permission: 'full' },\n ],\n \n triggers: [\n { type: 'workflow', condition: { workflowStep: 'explore' }, priority: 8 },\n { type: 'manual', condition: {}, priority: 5 },\n ],\n \n constraints: {\n files: {\n protectedPaths: ['node_modules', '.git'],\n },\n behavior: {\n autoCommit: false,\n },\n },\n \n systemPrompt: `你是一名资深前端架构师,专注于技术方案设计和架构决策。\n\n## 你的职责\n- 分析需求,设计技术方案\n- 制定架构决策和技术选型\n- 提供性能优化建议\n- 评估技术风险\n\n## 设计原则\n1. **简单优先**: 避免过度设计\n2. **可扩展性**: 考虑未来演进\n3. **可维护性**: 降低维护成本\n4. **性能优先**: 关注用户体验\n\n## 输出格式\n### 技术方案概述\n简要描述方案核心思路\n\n### 架构设计\n- 模块划分\n- 数据流\n- 关键接口\n\n### 技术选型\n| 场景 | 选择 | 理由 |\n|------|------|------|\n\n### 风险评估\n- 风险点\n- 应对方案\n\n### 实现建议\n给开发者的具体建议`,\n \n taskPromptTemplate: `## 需求\n{{requirement}}\n\n## 项目上下文\n{{context}}\n\n## 现有架构\n{{files}}\n\n## 技术约束\n{{norms}}\n\n请根据以上信息设计技术方案,提供架构设计和技术决策。`,\n \n outputFormat: {\n type: 'markdown',\n },\n};\n\n/**\n * 测试 Agent\n * 负责测试用例编写、测试执行、测试报告\n */\nexport const TESTER_AGENT: AgentDefinition = {\n id: 'tester',\n name: '测试',\n description: '编写测试用例、执行测试、生成测试报告',\n icon: '🧪',\n version: '1.0.0',\n role: '你是一名资深测试工程师,精通前端测试技术。你负责编写测试用例、执行测试并生成报告。',\n \n capabilities: [\n {\n id: 'unit-test',\n name: '单元测试',\n description: '编写和执行单元测试',\n },\n {\n id: 'integration-test',\n name: '集成测试',\n description: '编写和执行集成测试',\n },\n {\n id: 'e2e-test',\n name: '端到端测试',\n description: '编写和执行E2E测试',\n },\n {\n id: 'test-report',\n name: '测试报告',\n description: '生成测试报告和分析',\n },\n ],\n \n tools: [\n { name: 'read_file', description: '读取文件内容', permission: 'full' },\n { name: 'write_file', description: '写入测试文件', permission: 'full' },\n { name: 'glob', description: '搜索文件', permission: 'full' },\n { name: 'search_file_content', description: '搜索文件内容', permission: 'full' },\n { name: 'run_shell_command', description: '执行测试命令', permission: 'confirm' },\n ],\n \n triggers: [\n { type: 'workflow', condition: { workflowStep: 'continue' }, priority: 5 },\n { type: 'manual', condition: {}, priority: 5 },\n ],\n \n constraints: {\n files: {\n maxFileSize: 524288, // 512KB\n protectedPaths: ['node_modules', '.git', 'dist', 'src'],\n },\n behavior: {\n requireConfirmation: ['run_shell_command'],\n autoCommit: false,\n },\n },\n \n systemPrompt: `你是一名资深测试工程师,专注于前端测试。\n\n## 你的职责\n- 编写高质量的测试用例\n- 执行测试并分析结果\n- 提供测试覆盖率报告\n- 发现和报告缺陷\n\n## 测试原则\n1. **覆盖率优先**: 确保关键路径覆盖\n2. **边界测试**: 关注边界条件\n3. **可读性**: 测试代码要清晰易懂\n4. **独立性**: 测试用例相互独立\n\n## 输出格式\n### 测试概述\n测试范围和策略说明\n\n### 测试用例\n\\`\\`\\`typescript\n// 测试代码\n\\`\\`\\`\n\n### 测试结果\n| 用例 | 状态 | 说明 |\n|------|------|------|\n\n### 覆盖率报告\n覆盖率统计和分析\n\n### 问题列表\n发现的问题和建议`,\n \n taskPromptTemplate: `## 测试目标\n{{requirement}}\n\n## 待测试代码\n{{files}}\n\n## 测试框架\n{{context}}\n\n## 测试规范\n{{norms}}\n\n请根据以上信息编写测试用例并执行测试。`,\n \n outputFormat: {\n type: 'markdown',\n },\n};\n\n/**\n * 所有内置 Agent 的映射表\n */\nexport const BUILTIN_AGENTS: Record<AgentId, AgentDefinition> = {\n 'frontend-dev': FRONTEND_DEV_AGENT,\n 'code-reviewer': CODE_REVIEWER_AGENT,\n 'architect': ARCHITECT_AGENT,\n 'tester': TESTER_AGENT,\n};\n\n/**\n * 获取 Agent 定义\n */\nexport function getAgentDefinition(id: AgentId): AgentDefinition | undefined {\n return BUILTIN_AGENTS[id];\n}\n\n/**\n * 获取所有内置 Agent\n */\nexport function getAllAgents(): AgentDefinition[] {\n return Object.values(BUILTIN_AGENTS);\n}\n\n/**\n * 根据工作流阶段获取应触发的 Agent\n */\nexport function getAgentsForWorkflowStep(step: string): AgentDefinition[] {\n return Object.values(BUILTIN_AGENTS).filter(agent =>\n agent.triggers.some(\n trigger => trigger.type === 'workflow' && trigger.condition.workflowStep === step\n )\n );\n}\n","/**\n * Agent 执行引擎\n * 负责调度和执行 Agent,包括 Prompt 构建、模型调用、工具执行\n */\n\nimport { v4 as uuidv4 } from 'uuid';\nimport {\n AgentId,\n AgentDefinition,\n AgentExecutionContext,\n AgentExecutionResult,\n AgentSession,\n AgentStatus,\n AgentScheduleRequest,\n AgentEvent,\n} from '../types/agent';\nimport { ChatMessage } from '../types/model';\nimport { ModelService } from '../services/model';\nimport { getAgentDefinition, BUILTIN_AGENTS } from './definitions';\nimport { NormsManager } from '../norms';\nimport { ContextManager } from '../context';\n\n/**\n * Agent 执行器\n */\nexport class AgentExecutor {\n private modelService: ModelService;\n private normsManager: NormsManager;\n private contextManager: ContextManager;\n private sessions: Map<string, AgentSession> = new Map();\n private eventListeners: Set<(event: AgentEvent) => void> = new Set();\n\n constructor(\n modelService: ModelService,\n normsManager: NormsManager,\n contextManager: ContextManager\n ) {\n this.modelService = modelService;\n this.normsManager = normsManager;\n this.contextManager = contextManager;\n }\n\n /**\n * 执行 Agent\n */\n async execute(request: AgentScheduleRequest): Promise<AgentExecutionResult> {\n const { agentId, context, options } = request;\n const agent = getAgentDefinition(agentId);\n\n if (!agent) {\n return {\n success: false,\n output: `未知的Agent: ${agentId}`,\n tokensUsed: { input: 0, output: 0 },\n duration: 0,\n error: `Agent not found: ${agentId}`,\n };\n }\n\n // 创建会话\n const session = this.createSession(agentId, context);\n this.sessions.set(session.id, session);\n\n const startTime = Date.now();\n\n try {\n // 发送事件\n this.emitEvent({\n type: 'started',\n agentId,\n sessionId: session.id,\n timestamp: new Date(),\n });\n\n // 构建 Prompt\n const messages = await this.buildMessages(agent, context);\n\n // 调用模型\n const response = await this.modelService.sendMessage(messages, {\n agent: agentId,\n temperature: 0.7,\n maxTokens: 4096,\n });\n\n // 更新会话消息\n session.messages.push({\n role: 'assistant',\n content: response.content,\n });\n\n // 解析输出\n const result = this.parseOutput(agent, response.content, response.usage);\n\n // 更新会话状态\n session.status = 'completed';\n session.completedAt = new Date();\n session.result = result;\n\n // 发送事件\n this.emitEvent({\n type: 'completed',\n agentId,\n sessionId: session.id,\n timestamp: new Date(),\n data: result,\n });\n\n result.duration = Date.now() - startTime;\n return result;\n } catch (error) {\n const err = error as Error;\n session.status = 'failed';\n session.completedAt = new Date();\n\n // 发送事件\n this.emitEvent({\n type: 'failed',\n agentId,\n sessionId: session.id,\n timestamp: new Date(),\n data: err.message,\n });\n\n return {\n success: false,\n output: `执行失败: ${err.message}`,\n tokensUsed: { input: 0, output: 0 },\n duration: Date.now() - startTime,\n error: err.message,\n };\n }\n }\n\n /**\n * 流式执行 Agent\n */\n async *executeStream(\n request: AgentScheduleRequest\n ): AsyncGenerator<string, AgentExecutionResult, unknown> {\n const { agentId, context } = request;\n const agent = getAgentDefinition(agentId);\n\n if (!agent) {\n yield `错误: 未知的Agent ${agentId}`;\n return {\n success: false,\n output: `未知的Agent: ${agentId}`,\n tokensUsed: { input: 0, output: 0 },\n duration: 0,\n error: `Agent not found: ${agentId}`,\n };\n }\n\n // 创建会话\n const session = this.createSession(agentId, context);\n this.sessions.set(session.id, session);\n\n const startTime = Date.now();\n let fullContent = '';\n\n try {\n // 发送事件\n this.emitEvent({\n type: 'started',\n agentId,\n sessionId: session.id,\n timestamp: new Date(),\n });\n\n // 构建 Prompt\n const messages = await this.buildMessages(agent, context);\n\n // 流式调用模型\n for await (const chunk of this.modelService.streamMessage(messages, {\n agent: agentId,\n temperature: 0.7,\n maxTokens: 4096,\n })) {\n fullContent += chunk.delta;\n yield chunk.delta;\n }\n\n // 解析输出\n const result = this.parseOutput(\n agent,\n fullContent,\n { inputTokens: 0, outputTokens: 0, totalTokens: 0 }\n );\n\n // 更新会话状态\n session.status = 'completed';\n session.completedAt = new Date();\n session.result = result;\n session.messages.push({\n role: 'assistant',\n content: fullContent,\n });\n\n // 发送事件\n this.emitEvent({\n type: 'completed',\n agentId,\n sessionId: session.id,\n timestamp: new Date(),\n data: result,\n });\n\n result.duration = Date.now() - startTime;\n return result;\n } catch (error) {\n const err = error as Error;\n session.status = 'failed';\n session.completedAt = new Date();\n\n yield `\\n执行失败: ${err.message}`;\n\n return {\n success: false,\n output: fullContent + `\\n错误: ${err.message}`,\n tokensUsed: { input: 0, output: 0 },\n duration: Date.now() - startTime,\n error: err.message,\n };\n }\n }\n\n /**\n * 获取会话状态\n */\n getSession(sessionId: string): AgentSession | undefined {\n return this.sessions.get(sessionId);\n }\n\n /**\n * 取消执行\n */\n cancel(sessionId: string): boolean {\n const session = this.sessions.get(sessionId);\n if (session && session.status === 'running') {\n session.status = 'cancelled';\n session.completedAt = new Date();\n\n this.emitEvent({\n type: 'cancelled',\n agentId: session.agentId,\n sessionId,\n timestamp: new Date(),\n });\n\n return true;\n }\n return false;\n }\n\n /**\n * 添加事件监听器\n */\n addEventListener(listener: (event: AgentEvent) => void): void {\n this.eventListeners.add(listener);\n }\n\n /**\n * 移除事件监听器\n */\n removeEventListener(listener: (event: AgentEvent) => void): void {\n this.eventListeners.delete(listener);\n }\n\n // ==================== 私有方法 ====================\n\n /**\n * 创建会话\n */\n private createSession(\n agentId: AgentId,\n context: AgentExecutionContext\n ): AgentSession {\n return {\n id: uuidv4(),\n agentId,\n status: 'running',\n context,\n messages: [],\n startedAt: new Date(),\n };\n }\n\n /**\n * 构建消息列表\n */\n private async buildMessages(\n agent: AgentDefinition,\n context: AgentExecutionContext\n ): Promise<ChatMessage[]> {\n const messages: ChatMessage[] = [];\n\n // 1. 系统提示\n let systemPrompt = agent.systemPrompt;\n\n // 注入项目上下文(AGENTS.md + config.yaml)\n if (context.projectContext) {\n systemPrompt += '\\n\\n---\\n\\n## 项目上下文\\n\\n';\n \n if (context.projectContext.agentsMd) {\n systemPrompt += `### AGENTS.md 摘要\\n\\n${this.summarizeContext(context.projectContext.agentsMd, 2000)}\\n\\n`;\n }\n \n if (context.projectContext.configYaml) {\n systemPrompt += `### config.yaml 配置\\n\\n\\`\\`\\`yaml\\n${context.projectContext.configYaml}\\n\\`\\`\\`\\n\\n`;\n }\n }\n\n messages.push({\n role: 'system',\n content: systemPrompt,\n });\n\n // 2. 构建任务提示\n const taskPrompt = this.buildTaskPrompt(agent, context);\n messages.push({\n role: 'user',\n content: taskPrompt,\n });\n\n return messages;\n }\n\n /**\n * 摘要上下文(限制长度)\n */\n private summarizeContext(content: string, maxLength: number): string {\n if (content.length <= maxLength) {\n return content;\n }\n \n // 提取关键部分:标题和前几段\n const lines = content.split('\\n');\n const summary: string[] = [];\n let currentLength = 0;\n \n for (const line of lines) {\n if (currentLength + line.length + 1 > maxLength) {\n break;\n }\n summary.push(line);\n currentLength += line.length + 1;\n }\n \n return summary.join('\\n') + '\\n\\n... (内容已截断,请阅读完整 AGENTS.md 了解详情)';\n }\n\n /**\n * 提取关键规范(从 devstanded.md)\n */\n private extractKeyStandards(devStandards: string): string {\n if (!devStandards) {\n return '暂无项目规范';\n }\n\n // 提取所有规范标题和描述\n const lines = devStandards.split('\\n');\n const standards: string[] = [];\n let currentStandard = '';\n let inStandard = false;\n\n for (const line of lines) {\n // 检测规范标题(### 开头)\n if (line.startsWith('### ')) {\n if (currentStandard) {\n standards.push(currentStandard);\n }\n currentStandard = line.replace('### ', '').trim();\n inStandard = true;\n } else if (inStandard && line.startsWith('| 等级 |')) {\n // 提取等级\n const levelMatch = line.match(/\\| 等级 \\| (\\S+) \\|/);\n if (levelMatch) {\n currentStandard += ` [${levelMatch[1]}]`;\n }\n } else if (line.startsWith('---')) {\n if (currentStandard) {\n standards.push(currentStandard);\n currentStandard = '';\n }\n inStandard = false;\n }\n }\n\n // 格式化输出\n const highPriority = standards.filter(s => s.includes('[强制]'));\n const mediumPriority = standards.filter(s => s.includes('[推荐]'));\n const lowPriority = standards.filter(s => s.includes('[参考]'));\n\n let result = '';\n \n if (highPriority.length > 0) {\n result += '### 强制规范\\n' + highPriority.map(s => `- ${s.replace(' [强制]', '')}`).join('\\n') + '\\n\\n';\n }\n \n if (mediumPriority.length > 0) {\n result += '### 推荐规范\\n' + mediumPriority.map(s => `- ${s.replace(' [推荐]', '')}`).join('\\n') + '\\n\\n';\n }\n \n if (lowPriority.length > 0) {\n result += '### 参考规范\\n' + lowPriority.map(s => `- ${s.replace(' [参考]', '')}`).join('\\n') + '\\n';\n }\n\n return result || devStandards.slice(0, 2000);\n }\n\n /**\n * 构建任务提示\n */\n private buildTaskPrompt(\n agent: AgentDefinition,\n context: AgentExecutionContext\n ): string {\n let prompt = agent.taskPromptTemplate;\n\n // 替换占位符\n prompt = prompt.replace('{{requirement}}', context.requirement);\n prompt = prompt.replace('{{context}}', context.context || '无额外上下文');\n \n // 规范信息 - 优先使用项目规范文档\n let normsText = '';\n \n // 注入 devstanded.md 规范(强制参考)\n if (context.projectContext?.devStandards) {\n normsText += '## 项目开发规范 (devstanded.md)\\n\\n';\n normsText += this.extractKeyStandards(context.projectContext.devStandards);\n }\n \n // 追加额外规范\n if (context.norms?.length) {\n normsText += '\\n\\n## 额外规范要求\\n\\n' + context.norms.join('\\n');\n }\n \n if (!normsText) {\n normsText = '暂无特定规范要求';\n }\n \n prompt = prompt.replace('{{norms}}', normsText);\n \n // 文件信息\n const filesText = context.files?.length\n ? context.files.join('\\n')\n : '暂无相关文件';\n prompt = prompt.replace('{{files}}', filesText);\n \n // 上一步输出\n prompt = prompt.replace(\n '{{previousOutput}}',\n context.previousOutput || '无上一步输出'\n );\n\n return prompt;\n }\n\n /**\n * 解析输出\n */\n private parseOutput(\n agent: AgentDefinition,\n content: string,\n usage: { inputTokens: number; outputTokens: number; totalTokens: number }\n ): AgentExecutionResult {\n // 提取修改的文件(简单的正则匹配)\n const filePatterns = [\n /(?:修改|新增|更新|删除)[文件]?\\s*[::]\\s*`?([^\\s`]+\\.(ts|tsx|js|jsx|vue|css|scss|html|json))`?/gi,\n /(?:file|path)[::]\\s*`?([^\\s`]+\\.(ts|tsx|js|jsx|vue|css|scss|html|json))`?/gi,\n ];\n\n const filesChanged: string[] = [];\n for (const pattern of filePatterns) {\n let match;\n while ((match = pattern.exec(content)) !== null) {\n if (match[1] && !filesChanged.includes(match[1])) {\n filesChanged.push(match[1]);\n }\n }\n }\n\n // 提取建议\n const suggestionsPattern = /(?:建议|建议改进|suggestions?)[::]\\s*\\n((?:[-*]\\s*.+\\n?)+)/gi;\n const suggestions: string[] = [];\n let suggestionsMatch;\n while ((suggestionsMatch = suggestionsPattern.exec(content)) !== null) {\n const items = suggestionsMatch[1].split(/\\n/).filter(Boolean);\n items.forEach(item => {\n const cleaned = item.replace(/^[-*]\\s*/, '').trim();\n if (cleaned) suggestions.push(cleaned);\n });\n }\n\n return {\n success: true,\n output: content,\n filesChanged,\n tokensUsed: {\n input: usage.inputTokens,\n output: usage.outputTokens,\n },\n duration: 0,\n suggestions,\n };\n }\n\n /**\n * 发送事件\n */\n private emitEvent(event: AgentEvent): void {\n for (const listener of this.eventListeners) {\n try {\n listener(event);\n } catch {\n // 忽略监听器错误\n }\n }\n }\n}\n\n/**\n * 创建默认的 Agent 执行器\n */\nexport function createAgentExecutor(\n modelService: ModelService,\n normsManager: NormsManager,\n contextManager: ContextManager\n): AgentExecutor {\n return new AgentExecutor(modelService, normsManager, contextManager);\n}\n\nexport default AgentExecutor;\n","/**\n * Agent 模块入口\n */\n\n// 类型导出\nexport * from '../types/agent';\n\n// Agent 定义\nexport {\n BUILTIN_AGENTS,\n FRONTEND_DEV_AGENT,\n CODE_REVIEWER_AGENT,\n ARCHITECT_AGENT,\n TESTER_AGENT,\n getAgentDefinition,\n getAllAgents,\n getAgentsForWorkflowStep,\n} from './definitions';\n\n// Agent 执行\nexport { AgentExecutor, createAgentExecutor } from './executor';\n\n// Agent 调度\nexport {\n AgentScheduler,\n createAgentScheduler,\n ScheduleStrategy,\n ScheduleConfig,\n ScheduleResult,\n SCHEDULE_RULES,\n getScheduleRuleDescription,\n} from './scheduler';\n\n// 简化的运行接口\nexport {\n runAgent,\n getAgent,\n listAgents,\n getAgentsForStep,\n AgentResult,\n} from './runner';","/**\n * Agent 自动调度器\n * 根据工作流阶段自动触发对应的 Agent 执行\n */\n\nimport { WorkflowStep, WorkflowState } from '../types';\nimport { AgentId, AgentExecutionContext, AgentExecutionResult } from '../types/agent';\nimport { AgentExecutor } from './executor';\nimport { getAgentsForWorkflowStep, getAgentDefinition } from './definitions';\n\n/**\n * 调度策略\n */\nexport type ScheduleStrategy = 'auto' | 'recommend' | 'manual';\n\n/**\n * 调度配置\n */\nexport interface ScheduleConfig {\n agent: AgentId;\n strategy: ScheduleStrategy;\n waitForResult: boolean;\n requireConfirmation: boolean;\n fallbackAgent?: AgentId;\n}\n\n/**\n * 调度结果\n */\nexport interface ScheduleResult {\n scheduled: boolean;\n agent?: AgentId;\n strategy: ScheduleStrategy;\n result?: AgentExecutionResult;\n message: string;\n}\n\n/**\n * 工作流阶段 → Agent 调度规则\n * \n * 设计原则:\n * - explore 阶段:架构师分析需求,输出技术方案\n * - new 阶段:前端开发实现核心代码\n * - continue 阶段:前端开发继续迭代\n * - apply 阶段:代码审核检查质量\n */\nexport const SCHEDULE_RULES: Partial<Record<WorkflowStep, ScheduleConfig>> = {\n 'explore': {\n agent: 'architect',\n strategy: 'auto',\n waitForResult: true,\n requireConfirmation: false,\n },\n 'new': {\n agent: 'frontend-dev',\n strategy: 'auto',\n waitForResult: true,\n requireConfirmation: false,\n },\n 'continue': {\n agent: 'frontend-dev',\n strategy: 'auto',\n waitForResult: false,\n requireConfirmation: false,\n },\n 'apply': {\n agent: 'code-reviewer',\n strategy: 'auto',\n waitForResult: true,\n requireConfirmation: false,\n },\n};\n\n/**\n * Agent 调度器\n */\nexport class AgentScheduler {\n private executor: AgentExecutor;\n private lastScheduleResult: ScheduleResult | null = null;\n private onSchedule?: (result: ScheduleResult) => void;\n\n constructor(executor: AgentExecutor) {\n this.executor = executor;\n }\n\n /**\n * 设置调度回调\n */\n setOnSchedule(callback: (result: ScheduleResult) => void): void {\n this.onSchedule = callback;\n }\n\n /**\n * 根据工作流阶段调度 Agent\n */\n async scheduleForStep(\n step: WorkflowStep,\n state: WorkflowState,\n options?: {\n strategy?: ScheduleStrategy;\n context?: Partial<AgentExecutionContext>;\n }\n ): Promise<ScheduleResult> {\n const rule = SCHEDULE_RULES[step];\n\n if (!rule) {\n return {\n scheduled: false,\n strategy: 'manual',\n message: `阶段 ${step} 无自动调度规则,可手动调用 Agent`,\n };\n }\n\n // 覆盖策略\n const strategy = options?.strategy || rule.strategy;\n\n // 如果是推荐模式,只返回推荐信息\n if (strategy === 'recommend') {\n return {\n scheduled: false,\n agent: rule.agent,\n strategy: 'recommend',\n message: `推荐使用 $${rule.agent} 执行当前阶段任务`,\n };\n }\n\n // 如果是手动模式,返回提示\n if (strategy === 'manual') {\n return {\n scheduled: false,\n agent: rule.agent,\n strategy: 'manual',\n message: `可手动调用 $${rule.agent} 执行任务`,\n };\n }\n\n // 自动执行\n return this.executeAgent(rule, state, options?.context);\n }\n\n /**\n * 执行 Agent\n */\n private async executeAgent(\n config: ScheduleConfig,\n state: WorkflowState,\n additionalContext?: Partial<AgentExecutionContext>\n ): Promise<ScheduleResult> {\n const agent = getAgentDefinition(config.agent);\n\n if (!agent) {\n return {\n scheduled: false,\n agent: config.agent,\n strategy: 'auto',\n message: `Agent ${config.agent} 不存在`,\n };\n }\n\n // 构建执行上下文\n const context: AgentExecutionContext = {\n taskId: state.id,\n workflowId: state.id,\n workflowStep: state.currentStep,\n requirement: state.requirement,\n files: state.artifacts,\n context: additionalContext?.context,\n norms: additionalContext?.norms,\n previousOutput: additionalContext?.previousOutput,\n };\n\n try {\n // 执行 Agent\n const result = await this.executor.execute({\n agentId: config.agent,\n context,\n });\n\n const scheduleResult: ScheduleResult = {\n scheduled: true,\n agent: config.agent,\n strategy: 'auto',\n result,\n message: result.success\n ? `$${config.agent} 执行完成`\n : `$${config.agent} 执行失败: ${result.error}`,\n };\n\n this.lastScheduleResult = scheduleResult;\n\n // 触发回调\n if (this.onSchedule) {\n this.onSchedule(scheduleResult);\n }\n\n return scheduleResult;\n } catch (error) {\n const err = error as Error;\n return {\n scheduled: false,\n agent: config.agent,\n strategy: 'auto',\n message: `$${config.agent} 执行异常: ${err.message}`,\n };\n }\n }\n\n /**\n * 获取阶段的调度配置\n */\n getScheduleConfig(step: WorkflowStep): ScheduleConfig | undefined {\n return SCHEDULE_RULES[step];\n }\n\n /**\n * 获取阶段的推荐 Agent\n */\n getRecommendedAgent(step: WorkflowStep): AgentId | undefined {\n const rule = SCHEDULE_RULES[step];\n return rule?.agent;\n }\n\n /**\n * 获取所有调度规则\n */\n getAllScheduleRules(): Partial<Record<WorkflowStep, ScheduleConfig>> {\n return { ...SCHEDULE_RULES };\n }\n\n /**\n * 获取上次调度结果\n */\n getLastScheduleResult(): ScheduleResult | null {\n return this.lastScheduleResult;\n }\n\n /**\n * 判断阶段是否需要自动调度\n */\n shouldAutoSchedule(step: WorkflowStep): boolean {\n const rule = SCHEDULE_RULES[step];\n return rule?.strategy === 'auto';\n }\n\n /**\n * 获取阶段可用的 Agent 列表\n */\n getAvailableAgents(step: WorkflowStep): AgentId[] {\n const agents = getAgentsForWorkflowStep(step);\n return agents.map(a => a.id);\n }\n}\n\n/**\n * 创建调度器\n */\nexport function createAgentScheduler(executor: AgentExecutor): AgentScheduler {\n return new AgentScheduler(executor);\n}\n\n/**\n * 获取调度规则描述\n */\nexport function getScheduleRuleDescription(step: WorkflowStep): string {\n const rule = SCHEDULE_RULES[step];\n \n if (!rule) {\n return `阶段 ${step} 无自动调度规则`;\n }\n\n const agent = getAgentDefinition(rule.agent);\n const strategyText = {\n 'auto': '自动执行',\n 'recommend': '推荐执行',\n 'manual': '手动执行',\n };\n\n return `${strategyText[rule.strategy]} $${rule.agent} (${agent?.name})`;\n}\n\nexport default AgentScheduler;\n","/**\n * OpenSpec 工作流引擎\n * 管理工作流状态、状态转换、确认点、回滚\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport {\n WorkflowStep,\n WorkflowType,\n WorkflowState,\n WorkflowStepRecord,\n WorkflowTransition,\n} from '../types';\nimport {\n ConfirmationManager,\n ConfirmationPoint,\n ConfirmationPointType,\n ROLLBACK_RULES,\n RollbackReason,\n} from './checkpoint';\n\n// 状态转换规则\nconst TRANSITIONS: Record<WorkflowStep, WorkflowStep[]> = {\n 'explore': ['new'],\n 'new': ['continue', 'apply'],\n 'continue': ['apply', 'continue'],\n 'propose': ['apply'],\n 'apply': ['archive'],\n 'archive': [],\n};\n\n// 复杂流程步骤\nconst COMPLEX_STEPS: WorkflowStep[] = ['explore', 'new', 'continue', 'apply', 'archive'];\n\n// 简单流程步骤\nconst SIMPLE_STEPS: WorkflowStep[] = ['propose', 'apply', 'archive'];\n\n// 快照记录\nexport interface WorkflowSnapshot {\n step: WorkflowStep;\n timestamp: Date;\n state: WorkflowState;\n artifacts: string[];\n}\n\nexport interface RollbackResult {\n success: boolean;\n from: WorkflowStep;\n to: WorkflowStep | null;\n message: string;\n snapshot?: WorkflowSnapshot;\n}\n\nexport interface ConfirmationResult {\n required: boolean;\n confirmed: boolean;\n point?: ConfirmationPoint;\n}\n\nexport class WorkflowEngine {\n private state: WorkflowState | null = null;\n private projectPath: string = '';\n private openspecPath: string = '';\n private confirmationManager: ConfirmationManager;\n private snapshots: Map<WorkflowStep, WorkflowSnapshot> = new Map();\n private projectContext: string = ''; // AGENTS.md 内容\n private projectConfig: string = ''; // config.yaml 内容\n private devStandards: string = ''; // devstanded.md 内容\n\n constructor() {\n this.confirmationManager = new ConfirmationManager();\n }\n\n /**\n * 初始化工作流引擎\n */\n async initialize(projectPath: string): Promise<void> {\n this.projectPath = projectPath;\n this.openspecPath = path.join(projectPath, 'openspec');\n \n await this.ensureDirectories();\n await this.loadProjectContext();\n await this.restoreState();\n await this.restoreSnapshots();\n }\n\n /**\n * 加载项目上下文(AGENTS.md 和 config.yaml)\n */\n private async loadProjectContext(): Promise<void> {\n // 加载 AGENTS.md\n const agentsMdPath = path.join(this.projectPath, 'AGENTS.md');\n try {\n this.projectContext = await fs.readFile(agentsMdPath, 'utf-8');\n } catch {\n this.projectContext = '';\n }\n\n // 加载 config.yaml\n const configPath = path.join(this.openspecPath, 'config.yaml');\n try {\n this.projectConfig = await fs.readFile(configPath, 'utf-8');\n } catch {\n this.projectConfig = '';\n }\n\n // 加载 devstanded.md\n const devstandedPath = path.join(this.projectPath, '.sf-cli', 'norms', 'devstanded.md');\n try {\n this.devStandards = await fs.readFile(devstandedPath, 'utf-8');\n } catch {\n this.devStandards = '';\n }\n }\n\n /**\n * 获取项目上下文\n */\n getProjectContext(): { agentsMd: string; configYaml: string; devStandards: string } {\n return {\n agentsMd: this.projectContext,\n configYaml: this.projectConfig,\n devStandards: this.devStandards,\n };\n }\n\n /**\n * 获取规格文件路径\n */\n getSpecFilePath(): string | null {\n if (!this.state) return null;\n return path.join(this.openspecPath, 'changes', `${this.state.id}-spec.md`);\n }\n\n /**\n * 检查规格文件是否存在\n */\n async hasSpecFile(): Promise<boolean> {\n const specPath = this.getSpecFilePath();\n if (!specPath) return false;\n \n try {\n await fs.access(specPath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * 启动新工作流\n */\n async start(\n requirement: string,\n complexity: number,\n options?: { title?: string }\n ): Promise<WorkflowState> {\n const type: WorkflowType = complexity >= 6 ? 'complex' : 'simple';\n const steps = type === 'complex' ? COMPLEX_STEPS : SIMPLE_STEPS;\n const initialStep = steps[0];\n \n const changeId = await this.generateChangeId();\n \n this.state = {\n id: changeId,\n type,\n currentStep: initialStep,\n steps: steps.map((step, index) => ({\n step,\n status: index === 0 ? 'running' : 'pending',\n startedAt: index === 0 ? new Date() : undefined,\n })),\n requirement,\n complexity,\n title: options?.title || requirement.slice(0, 50),\n artifacts: [],\n status: 'running',\n createdAt: new Date(),\n };\n \n // 清空快照和确认状态\n this.snapshots.clear();\n this.confirmationManager.clearAllConfirmations();\n \n await this.createSnapshot();\n await this.createChangeRecord();\n await this.saveState();\n \n return this.state;\n }\n\n /**\n * 检查转换是否需要确认\n */\n checkConfirmationNeeded(from: WorkflowStep, to: WorkflowStep): ConfirmationResult {\n const point = this.confirmationManager.getConfirmationPointForTransition(from, to);\n \n if (!point) {\n return { required: false, confirmed: true };\n }\n \n const confirmed = this.confirmationManager.isConfirmed(point.type);\n \n return {\n required: point.required,\n confirmed,\n point,\n };\n }\n\n /**\n * 确认检查点\n */\n confirm(type: ConfirmationPointType, comment?: string): void {\n this.confirmationManager.confirm(type, comment);\n }\n\n /**\n * 获取确认点信息\n */\n getConfirmationPoint(type: ConfirmationPointType): ConfirmationPoint | undefined {\n return this.confirmationManager.getConfirmationPoint(type);\n }\n\n /**\n * 获取当前转换需要的确认点\n */\n getCurrentConfirmationPoint(): ConfirmationPoint | undefined {\n if (!this.state) return undefined;\n \n const allowed = this.getAllowedTransitions();\n for (const target of allowed) {\n const point = this.confirmationManager.getConfirmationPointForTransition(\n this.state.currentStep,\n target\n );\n if (point && !this.confirmationManager.isConfirmed(point.type)) {\n return point;\n }\n }\n \n return undefined;\n }\n\n /**\n * 执行状态转换\n */\n async transition(\n targetStep: WorkflowStep,\n reason?: string\n ): Promise<WorkflowTransition> {\n if (!this.state) {\n throw new Error('没有活跃的工作流');\n }\n \n const currentStep = this.state.currentStep;\n const allowedTargets = TRANSITIONS[currentStep];\n \n if (!allowedTargets.includes(targetStep)) {\n throw new Error(\n `无效的状态转换: ${currentStep} → ${targetStep}。` +\n `允许的转换: ${allowedTargets.join(', ')}`\n );\n }\n \n // 检查是否需要确认\n const confirmationResult = this.checkConfirmationNeeded(currentStep, targetStep);\n \n if (confirmationResult.required && !confirmationResult.confirmed) {\n throw new ConfirmationRequiredError(\n `需要确认: ${confirmationResult.point?.name}`,\n confirmationResult.point!\n );\n }\n \n // 标记当前步骤完成\n const currentStepRecord = this.state.steps.find(s => s.step === currentStep);\n if (currentStepRecord) {\n currentStepRecord.status = 'completed';\n currentStepRecord.completedAt = new Date();\n }\n \n // 标记目标步骤开始\n const targetStepRecord = this.state.steps.find(s => s.step === targetStep);\n if (targetStepRecord) {\n targetStepRecord.status = 'running';\n targetStepRecord.startedAt = new Date();\n }\n \n this.state.currentStep = targetStep;\n this.state.updatedAt = new Date();\n \n await this.createSnapshot();\n await this.saveState();\n await this.updateChangeRecord();\n \n return {\n from: currentStep,\n to: targetStep,\n timestamp: new Date(),\n reason,\n };\n }\n\n /**\n * 获取可回滚的目标阶段\n */\n getRollbackTargets(): WorkflowStep[] {\n if (!this.state) return [];\n \n const allTargets = ROLLBACK_RULES[this.state.currentStep] || [];\n \n // 过滤出当前工作流中存在的阶段\n const workflowSteps = this.state.type === 'complex' ? COMPLEX_STEPS : SIMPLE_STEPS;\n \n return allTargets.filter(target => workflowSteps.includes(target));\n }\n\n /**\n * 检查是否可以回滚到指定阶段\n */\n canRollbackTo(targetStep: WorkflowStep): boolean {\n const targets = this.getRollbackTargets();\n return targets.includes(targetStep);\n }\n\n /**\n * 执行回滚\n */\n async rollback(\n targetStep: WorkflowStep,\n reason: RollbackReason,\n description?: string\n ): Promise<RollbackResult> {\n if (!this.state) {\n return {\n success: false,\n from: 'explore',\n to: null,\n message: '没有活跃的工作流',\n };\n }\n \n const currentStep = this.state.currentStep;\n const allowedTargets = ROLLBACK_RULES[currentStep];\n \n if (!allowedTargets || !allowedTargets.includes(targetStep)) {\n return {\n success: false,\n from: currentStep,\n to: targetStep,\n message: `无法从 ${currentStep} 回滚到 ${targetStep}`,\n };\n }\n \n // 获取快照\n const snapshot = this.snapshots.get(targetStep);\n \n if (!snapshot) {\n return {\n success: false,\n from: currentStep,\n to: targetStep,\n message: `找不到阶段 ${targetStep} 的快照`,\n };\n }\n \n // 恢复状态\n const previousState = this.state;\n this.state = {\n ...snapshot.state,\n createdAt: previousState.createdAt,\n updatedAt: new Date(),\n };\n \n // 重置步骤状态\n const stepOrder = this.state.type === 'complex' ? COMPLEX_STEPS : SIMPLE_STEPS;\n const targetIndex = stepOrder.indexOf(targetStep);\n \n for (let i = 0; i < this.state.steps.length; i++) {\n const step = this.state.steps[i];\n const stepIndex = stepOrder.indexOf(step.step);\n \n if (stepIndex < targetIndex) {\n // 目标阶段之前的步骤保持完成状态\n step.status = 'completed';\n } else if (stepIndex === targetIndex) {\n // 目标阶段设为运行中\n step.status = 'running';\n step.startedAt = new Date();\n step.completedAt = undefined;\n } else {\n // 目标阶段之后的步骤重置为待执行\n step.status = 'pending';\n step.startedAt = undefined;\n step.completedAt = undefined;\n }\n }\n \n // 恢复产物\n this.state.artifacts = snapshot.artifacts;\n \n // 清除相关确认状态\n const confirmationsToClear = this.confirmationManager.getConfirmationsToClear(targetStep);\n for (const type of confirmationsToClear) {\n this.confirmationManager.clearConfirmation(type);\n }\n \n await this.saveState();\n await this.updateChangeRecord('rolled-back');\n \n return {\n success: true,\n from: currentStep,\n to: targetStep,\n message: `已回滚: ${currentStep} → ${targetStep},原因: ${description || reason}`,\n snapshot,\n };\n }\n\n /**\n * 获取回滚原因描述\n */\n getRollbackReasonDescription(reason: RollbackReason): string {\n const descriptions: Record<RollbackReason, string> = {\n 'code-review-failed': '代码审查未通过',\n 'requirement-changed': '需求变更',\n 'design-issue': '设计问题',\n 'user-request': '用户请求',\n };\n return descriptions[reason];\n }\n\n /**\n * 获取当前状态\n */\n getState(): WorkflowState | null {\n return this.state;\n }\n\n /**\n * 获取所有活跃工作流\n */\n async getAllActiveWorkflows(): Promise<WorkflowState[]> {\n const workflows: WorkflowState[] = [];\n \n // 读取 openspec/changes 目录中的所有变更记录\n const changesDir = path.join(this.openspecPath, 'changes');\n \n try {\n const files = await fs.readdir(changesDir);\n \n for (const file of files) {\n if (!file.endsWith('.md') || file.includes('-spec.md')) continue;\n \n const filePath = path.join(changesDir, file);\n const content = await fs.readFile(filePath, 'utf-8');\n \n // 解析变更记录\n const state = this.parseChangeRecord(content);\n if (state && state.status === 'running') {\n workflows.push(state);\n }\n }\n } catch {\n // 目录不存在或读取失败\n }\n \n // 如果当前有活跃状态,确保包含在内\n if (this.state && !workflows.find(w => w.id === this.state?.id)) {\n workflows.unshift(this.state);\n }\n \n return workflows;\n }\n\n /**\n * 解析变更记录\n */\n private parseChangeRecord(content: string): WorkflowState | null {\n try {\n const idMatch = content.match(/^id:\\s*(.+)$/m);\n const titleMatch = content.match(/^title:\\s*(.+)$/m);\n const statusMatch = content.match(/^status:\\s*(.+)$/m);\n const complexityMatch = content.match(/^complexity:\\s*(\\d+)/m);\n const workflowMatch = content.match(/^workflow:\\s*(.+)$/m);\n \n // 解析需求\n const requirementMatch = content.match(/## 变更概述\\s*\\n+([\\s\\S]+?)(?=\\n##|$)/);\n \n if (!idMatch || !titleMatch) return null;\n \n return {\n id: idMatch[1].trim(),\n title: titleMatch[1].trim(),\n status: (statusMatch?.[1].trim() || 'running') as 'running' | 'completed' | 'cancelled',\n requirement: requirementMatch?.[1].trim() || '',\n complexity: parseInt(complexityMatch?.[1] || '5', 10),\n type: (workflowMatch?.[1].trim() || 'simple') as 'simple' | 'complex',\n currentStep: 'propose', // 默认值,实际值需要从状态文件读取\n steps: [],\n artifacts: [],\n createdAt: new Date(),\n };\n } catch {\n return null;\n }\n }\n\n /**\n * 切换到指定工作流\n */\n async switchTo(changeId: string): Promise<boolean> {\n // 保存当前状态\n if (this.state) {\n await this.saveState();\n }\n \n // 查找目标工作流状态文件\n const statePath = path.join(this.openspecPath, '.workflow-states', `${changeId}.json`);\n \n try {\n const content = await fs.readFile(statePath, 'utf-8');\n this.state = JSON.parse(content, (key, value) => {\n if (key.endsWith('At') && typeof value === 'string') {\n return new Date(value);\n }\n return value;\n });\n \n // 恢复快照\n await this.restoreSnapshots();\n \n return true;\n } catch {\n // 尝试从变更记录恢复\n const changesDir = path.join(this.openspecPath, 'changes');\n const changeFile = path.join(changesDir, `${changeId}.md`);\n \n try {\n const content = await fs.readFile(changeFile, 'utf-8');\n const parsed = this.parseChangeRecord(content);\n \n if (parsed && parsed.status === 'running') {\n this.state = parsed;\n return true;\n }\n } catch {\n // 忽略\n }\n \n return false;\n }\n }\n\n /**\n * 获取允许的下一步\n */\n getAllowedTransitions(): WorkflowStep[] {\n if (!this.state) return [];\n return TRANSITIONS[this.state.currentStep] || [];\n }\n\n /**\n * 获取快照历史\n */\n getSnapshots(): WorkflowSnapshot[] {\n return Array.from(this.snapshots.values()).sort(\n (a, b) => a.timestamp.getTime() - b.timestamp.getTime()\n );\n }\n\n /**\n * 完成当前步骤\n */\n async completeCurrentStep(artifacts?: string[]): Promise<void> {\n if (!this.state) return;\n \n const currentStepRecord = this.state.steps.find(\n s => s.step === this.state!.currentStep\n );\n \n if (currentStepRecord) {\n currentStepRecord.status = 'completed';\n currentStepRecord.completedAt = new Date();\n }\n \n if (artifacts) {\n this.state.artifacts.push(...artifacts);\n }\n \n await this.createSnapshot();\n await this.saveState();\n }\n\n /**\n * 归档工作流\n */\n async archive(summary: string): Promise<void> {\n if (!this.state) return;\n \n const changeId = this.state.id;\n \n for (const step of this.state.steps) {\n if (step.status !== 'completed') {\n step.status = 'completed';\n step.completedAt = new Date();\n }\n }\n \n this.state.status = 'completed';\n this.state.completedAt = new Date();\n \n await this.createSpecDocument(summary);\n await this.updateChangeRecord('archived');\n await this.saveState();\n \n const changesDir = path.join(this.openspecPath, 'changes');\n const archiveDir = path.join(changesDir, 'archive');\n const changeFile = path.join(changesDir, `${changeId}.md`);\n const archiveFile = path.join(archiveDir, `${changeId}.md`);\n\n await fs.mkdir(archiveDir, { recursive: true });\n await fs.rename(changeFile, archiveFile).catch(() => {});\n \n this.state = null;\n this.snapshots.clear();\n this.confirmationManager.clearAllConfirmations();\n }\n\n /**\n * 取消工作流\n */\n async cancel(reason: string): Promise<void> {\n if (!this.state) return;\n \n this.state.status = 'cancelled';\n this.state.cancelledAt = new Date();\n this.state.cancelReason = reason;\n \n await this.updateChangeRecord('cancelled');\n await this.saveState();\n \n this.state = null;\n this.snapshots.clear();\n this.confirmationManager.clearAllConfirmations();\n }\n\n // ==================== 私有方法 ====================\n\n private async ensureDirectories(): Promise<void> {\n const changesDir = path.join(this.openspecPath, 'changes');\n const archiveDir = path.join(changesDir, 'archive');\n const specDir = path.join(this.openspecPath, 'spec');\n const statesDir = path.join(this.openspecPath, '.workflow-states');\n \n await fs.mkdir(archiveDir, { recursive: true });\n await fs.mkdir(specDir, { recursive: true });\n await fs.mkdir(statesDir, { recursive: true });\n }\n\n private async restoreState(): Promise<void> {\n // 先尝试读取活跃工作流ID\n const activePath = path.join(this.openspecPath, '.workflow-active.json');\n let activeId: string | null = null;\n \n try {\n const activeContent = await fs.readFile(activePath, 'utf-8');\n const activeData = JSON.parse(activeContent);\n activeId = activeData.activeId;\n } catch {\n // 忽略\n }\n \n // 如果有活跃ID,尝试读取对应的状态文件\n if (activeId) {\n const statePath = path.join(this.openspecPath, '.workflow-states', `${activeId}.json`);\n try {\n const content = await fs.readFile(statePath, 'utf-8');\n this.state = JSON.parse(content, (key, value) => {\n if (key.endsWith('At') && typeof value === 'string') {\n return new Date(value);\n }\n return value;\n });\n return;\n } catch {\n // 忽略,继续尝试旧格式\n }\n }\n \n // 尝试读取旧格式状态文件\n const oldStatePath = path.join(this.openspecPath, '.workflow-state.json');\n try {\n const content = await fs.readFile(oldStatePath, 'utf-8');\n this.state = JSON.parse(content, (key, value) => {\n if (key.endsWith('At') && typeof value === 'string') {\n return new Date(value);\n }\n return value;\n });\n \n // 迁移到新格式\n if (this.state) {\n await this.saveState();\n await fs.unlink(oldStatePath).catch(() => {});\n }\n } catch (e) {\n const err = e as NodeJS.ErrnoException;\n if (err.code !== 'ENOENT') {\n console.warn('警告: 工作流状态文件已损坏,将重新开始');\n }\n this.state = null;\n }\n }\n\n private async saveState(): Promise<void> {\n if (!this.state) return;\n \n // 保存到工作流特定文件\n const statesDir = path.join(this.openspecPath, '.workflow-states');\n await fs.mkdir(statesDir, { recursive: true });\n \n const statePath = path.join(statesDir, `${this.state.id}.json`);\n await fs.writeFile(statePath, JSON.stringify(this.state, null, 2));\n \n // 同时保存当前激活的工作流ID\n const activePath = path.join(this.openspecPath, '.workflow-active.json');\n await fs.writeFile(activePath, JSON.stringify({ activeId: this.state.id }, null, 2));\n }\n\n private async restoreSnapshots(): Promise<void> {\n const snapshotsPath = path.join(this.openspecPath, '.workflow-snapshots.json');\n \n try {\n const content = await fs.readFile(snapshotsPath, 'utf-8');\n const data = JSON.parse(content, (key, value) => {\n if (key === 'timestamp' && typeof value === 'string') {\n return new Date(value);\n }\n return value;\n });\n \n if (Array.isArray(data)) {\n this.snapshots = new Map(data.map((s: WorkflowSnapshot) => [s.step, s]));\n }\n } catch {\n this.snapshots = new Map();\n }\n }\n\n private async saveSnapshots(): Promise<void> {\n const snapshotsPath = path.join(this.openspecPath, '.workflow-snapshots.json');\n const data = Array.from(this.snapshots.values());\n await fs.writeFile(snapshotsPath, JSON.stringify(data, null, 2));\n }\n\n private async createSnapshot(): Promise<void> {\n if (!this.state) return;\n \n const snapshot: WorkflowSnapshot = {\n step: this.state.currentStep,\n timestamp: new Date(),\n state: JSON.parse(JSON.stringify(this.state)),\n artifacts: [...this.state.artifacts],\n };\n \n this.snapshots.set(snapshot.step, snapshot);\n await this.saveSnapshots();\n }\n\n private async generateChangeId(): Promise<string> {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).slice(2, 6);\n return `CHG-${timestamp}-${random}`.toUpperCase();\n }\n\n private async createChangeRecord(): Promise<void> {\n if (!this.state) return;\n \n const changePath = path.join(this.openspecPath, 'changes', `${this.state.id}.md`);\n await fs.writeFile(changePath, this.formatChangeRecord());\n }\n\n private async updateChangeRecord(status?: string): Promise<void> {\n if (!this.state) return;\n \n if (status) {\n (this.state.status as any) = status;\n }\n \n const changePath = path.join(this.openspecPath, 'changes', `${this.state.id}.md`);\n await fs.writeFile(changePath, this.formatChangeRecord());\n }\n\n private formatChangeRecord(): string {\n if (!this.state) return '';\n \n const formatStepTime = (date: Date | string | undefined): string => {\n if (!date) return '-';\n if (typeof date === 'string') return date;\n return date.toISOString();\n };\n\n return `# Change: ${this.state.title}\n\nid: ${this.state.id}\ntitle: ${this.state.title}\nstatus: ${this.state.status}\ncreated: ${this.state.createdAt.toISOString()}\n${this.state.completedAt ? `completed: ${formatStepTime(this.state.completedAt)}` : ''}\ncomplexity: ${this.state.complexity}/10\nworkflow: ${this.state.type}\nspec: spec/${this.state.id}.md\n\n---\n\n## 变更概述\n\n${this.state.requirement}\n\n## 工作流执行记录\n\n| 阶段 | 开始时间 | 结束时间 | 状态 |\n|------|----------|----------|------|\n${this.state.steps.map(s => `| ${s.step} | ${formatStepTime(s.startedAt)} | ${formatStepTime(s.completedAt)} | ${s.status} |`).join('\\n')}\n\n## 产物文件\n\n${this.state.artifacts.map(a => `- ${a}`).join('\\n') || '暂无'}\n`;\n }\n\n private async createSpecDocument(summary: string): Promise<void> {\n if (!this.state) return;\n \n const specPath = path.join(this.openspecPath, 'spec', `${this.state.id}.md`);\n \n const content = `# Spec: ${this.state.title}\n\n> 变更ID: ${this.state.id}\n> 归档时间: ${new Date().toISOString()}\n> 工作流类型: ${this.state.type}\n\n---\n\n## 概述\n\n${this.state.requirement}\n\n## 实现总结\n\n${summary}\n\n## 验收结果\n\n${this.state.steps.map(s => `- [${s.status === 'completed' ? 'x' : ' '}] ${s.step}`).join('\\n')}\n\n## 相关文件\n\n${this.state.artifacts.map(a => `- ${a}`).join('\\n') || '暂无'}\n`;\n \n await fs.writeFile(specPath, content);\n }\n}\n\n/**\n * 确认点需要确认错误\n */\nexport class ConfirmationRequiredError extends Error {\n constructor(\n message: string,\n public readonly point: ConfirmationPoint\n ) {\n super(message);\n this.name = 'ConfirmationRequiredError';\n }\n}\n\nexport default WorkflowEngine;\n","/**\n * 工作流确认点系统\n * 在关键节点要求开发者确认才能继续\n */\n\nimport { WorkflowStep } from '../types';\n\n/**\n * 确认点类型\n */\nexport type ConfirmationPointType = \n | 'spec-review' // 规范拆解确认\n | 'architecture' // 架构调整确认\n | 'code-review'; // 代码审查确认\n\n/**\n * 确认点定义\n */\nexport interface ConfirmationPoint {\n type: ConfirmationPointType;\n name: string;\n description: string;\n triggerStep: WorkflowStep; // 触发阶段(该阶段完成后)\n targetStep: WorkflowStep; // 目标阶段(确认后进入)\n required: boolean; // 是否必须确认\n timeout?: number; // 超时时间(毫秒),超时后自动通过\n}\n\n/**\n * 确认状态\n */\nexport interface ConfirmationStatus {\n type: ConfirmationPointType;\n confirmed: boolean;\n confirmedAt?: Date;\n confirmedBy?: string;\n comment?: string;\n}\n\n// 默认确认点配置\nconst DEFAULT_CONFIRMATION_POINTS: ConfirmationPoint[] = [\n {\n type: 'spec-review',\n name: '规格确认',\n description: '规格拆分已完成,请确认规格文件后继续',\n triggerStep: 'explore',\n targetStep: 'new',\n required: true,\n },\n {\n type: 'spec-review',\n name: '规格确认',\n description: '规格拆分已完成,请确认规格文件后继续',\n triggerStep: 'propose',\n targetStep: 'apply',\n required: true,\n },\n {\n type: 'architecture',\n name: '架构调整确认',\n description: '设计方案已完成,请确认架构设计是否合理',\n triggerStep: 'new',\n targetStep: 'continue',\n required: true,\n },\n {\n type: 'code-review',\n name: '代码审查确认',\n description: '代码审查已完成,请确认是否可以归档',\n triggerStep: 'apply',\n targetStep: 'archive',\n required: true,\n },\n];\n\n/**\n * 回滚规则\n * 定义从哪些阶段可以回滚到哪些阶段\n * \n * 复杂流程: explore → new → continue → apply → archive\n * 简单流程: propose → apply → archive\n */\nexport const ROLLBACK_RULES: Record<WorkflowStep, WorkflowStep[]> = {\n 'explore': [], // 初始阶段不可回滚\n 'new': ['explore'], // 可回滚到 explore\n 'continue': ['new', 'explore'], // 可回滚到 new 或 explore\n 'propose': ['propose'], // 可重新生成规格(回滚到自身)\n 'apply': ['new', 'explore', 'propose'], // 代码审查未通过,可回滚到 new/explore (复杂) 或 propose (简单)\n 'archive': [], // 已归档不可回滚\n};\n\n/**\n * 回滚原因类型\n */\nexport type RollbackReason = \n | 'code-review-failed' // 代码审查未通过\n | 'requirement-changed' // 需求变更\n | 'design-issue' // 设计问题\n | 'user-request'; // 用户请求\n\n/**\n * 回滚请求\n */\nexport interface RollbackRequest {\n fromStep: WorkflowStep;\n toStep: WorkflowStep;\n reason: RollbackReason;\n description: string;\n timestamp: Date;\n}\n\n/**\n * 确认点管理器\n */\nexport class ConfirmationManager {\n private confirmationPoints: ConfirmationPoint[];\n private confirmations: Map<ConfirmationPointType, ConfirmationStatus> = new Map();\n\n constructor(customPoints?: ConfirmationPoint[]) {\n this.confirmationPoints = customPoints || DEFAULT_CONFIRMATION_POINTS;\n }\n\n /**\n * 获取指定阶段的确认点\n */\n getConfirmationPointForTransition(from: WorkflowStep, to: WorkflowStep): ConfirmationPoint | undefined {\n return this.confirmationPoints.find(\n point => point.triggerStep === from && point.targetStep === to\n );\n }\n\n /**\n * 检查是否需要确认\n */\n needsConfirmation(from: WorkflowStep, to: WorkflowStep): boolean {\n const point = this.getConfirmationPointForTransition(from, to);\n return point !== undefined && point.required;\n }\n\n /**\n * 获取确认点详情\n */\n getConfirmationPoint(type: ConfirmationPointType): ConfirmationPoint | undefined {\n return this.confirmationPoints.find(point => point.type === type);\n }\n\n /**\n * 记录确认\n */\n confirm(type: ConfirmationPointType, comment?: string): ConfirmationStatus {\n const status: ConfirmationStatus = {\n type,\n confirmed: true,\n confirmedAt: new Date(),\n comment,\n };\n this.confirmations.set(type, status);\n return status;\n }\n\n /**\n * 获取确认状态\n */\n getConfirmationStatus(type: ConfirmationPointType): ConfirmationStatus | undefined {\n return this.confirmations.get(type);\n }\n\n /**\n * 检查确认点是否已确认\n */\n isConfirmed(type: ConfirmationPointType): boolean {\n const status = this.confirmations.get(type);\n return status?.confirmed ?? false;\n }\n\n /**\n * 清除确认状态(用于回滚后)\n */\n clearConfirmation(type: ConfirmationPointType): void {\n this.confirmations.delete(type);\n }\n\n /**\n * 清除所有确认状态\n */\n clearAllConfirmations(): void {\n this.confirmations.clear();\n }\n\n /**\n * 获取所有确认点\n */\n getAllConfirmationPoints(): ConfirmationPoint[] {\n return [...this.confirmationPoints];\n }\n\n /**\n * 获取指定阶段需要清除的确认点\n */\n getConfirmationsToClear(targetStep: WorkflowStep): ConfirmationPointType[] {\n const types: ConfirmationPointType[] = [];\n \n for (const point of this.confirmationPoints) {\n // 如果回滚目标在该确认点之前,需要清除该确认\n const stepOrder: WorkflowStep[] = ['explore', 'new', 'continue', 'propose', 'apply', 'archive'];\n const targetIndex = stepOrder.indexOf(targetStep);\n const triggerIndex = stepOrder.indexOf(point.triggerStep);\n \n if (triggerIndex >= targetIndex) {\n types.push(point.type);\n }\n }\n \n return types;\n }\n}\n\n/**\n * 生成确认提示消息\n */\nexport function generateConfirmationPrompt(point: ConfirmationPoint): string {\n let prompt = `📋 ${point.name}\\n\\n`;\n prompt += `${point.description}\\n\\n`;\n prompt += `确认选项:\\n`;\n prompt += ` y - 确认继续\\n`;\n prompt += ` n - 拒绝,暂停流程\\n`;\n prompt += ` r - 请求修改\\n`;\n \n if (!point.required) {\n prompt += `\\n提示: 此确认点为非必须项`;\n }\n \n return prompt;\n}\n\n/**\n * 生成回滚选项提示\n */\nexport function generateRollbackPrompt(fromStep: WorkflowStep): string {\n const allowedTargets = ROLLBACK_RULES[fromStep] || [];\n \n if (allowedTargets.length === 0) {\n return `当前阶段 ${fromStep} 不支持回滚`;\n }\n \n let prompt = `🔄 回滚选项\\n\\n`;\n prompt += `当前阶段: ${fromStep}\\n`;\n prompt += `可回滚到:\\n`;\n \n for (const target of allowedTargets) {\n prompt += ` ${target}\\n`;\n }\n \n prompt += `\\n请选择回滚目标阶段`;\n \n return prompt;\n}\n\nexport default ConfirmationManager;","/**\n * 规范学习系统\n * 从代码分析和对话中学习开发规范\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { DevStandard, StandardWeight } from '../types';\n\n// 配置常量\nconst MAX_FILE_SIZE = 1024 * 1024; // 1MB\nconst MAX_FILES_TO_SCAN = 500;\nconst IGNORED_DIRS = ['node_modules', 'dist', 'build', '.git', 'coverage', '.next', '.nuxt'];\nconst SCAN_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx', '.vue', '.css', '.scss', '.less', '.md'];\n\nexport interface NormsConfig {\n projectPath: string;\n normsDir: string;\n}\n\nexport interface PatternOccurrence {\n patternId: string;\n timestamp: Date;\n source: 'code-analysis' | 'conversation' | 'forced';\n context: string;\n filePath?: string;\n}\n\nexport interface ScanResult {\n filesScanned: number;\n patternsFound: number;\n standardsExtracted: number;\n duration: number;\n errors: string[];\n}\n\nexport interface ValidationResult {\n isValid: boolean;\n violations: StandardViolation[];\n suggestions: string[];\n}\n\nexport interface StandardViolation {\n standardId: string;\n description: string;\n severity: 'error' | 'warning' | 'info';\n suggestion: string;\n}\n\nexport interface StandardHint {\n standardId: string;\n category: string;\n hint: string;\n weight: number;\n}\n\n/**\n * 规范管理器\n * 负责从代码和对话中学习开发规范\n */\nexport class NormsManager {\n private config: NormsConfig;\n private standards: Map<string, DevStandard> = new Map();\n private weights: Map<string, StandardWeight> = new Map();\n private occurrences: PatternOccurrence[] = [];\n private initialized: boolean = false;\n\n constructor(config: NormsConfig) {\n this.config = config;\n }\n\n async initialize(): Promise<void> {\n if (this.initialized) return;\n \n await this.ensureNormsDir();\n await this.loadStandards();\n await this.loadWeights();\n this.initialized = true;\n }\n\n /**\n * 扫描整个项目\n */\n async scanProject(projectPath: string): Promise<ScanResult> {\n const startTime = Date.now();\n const result: ScanResult = {\n filesScanned: 0,\n patternsFound: 0,\n standardsExtracted: 0,\n duration: 0,\n errors: [],\n };\n\n try {\n const files = await this.collectProjectFiles(projectPath);\n \n for (const filePath of files.slice(0, MAX_FILES_TO_SCAN)) {\n try {\n const stats = await fs.stat(filePath);\n if (stats.size > MAX_FILE_SIZE) {\n continue;\n }\n\n const content = await fs.readFile(filePath, 'utf-8');\n const patterns = await this.learnFromFile(filePath, content);\n result.patternsFound += patterns.length;\n result.filesScanned++;\n } catch (e) {\n const err = e as NodeJS.ErrnoException;\n result.errors.push(`${filePath}: ${err.message}`);\n }\n }\n\n // 提取有效规范\n result.standardsExtracted = this.getEffectiveStandards().length;\n \n // 保存结果\n await this.saveStandards();\n await this.saveWeights();\n await this.updateDevStandedMd();\n \n } catch (error) {\n result.errors.push((error as Error).message);\n }\n\n result.duration = Date.now() - startTime;\n return result;\n }\n\n /**\n * 从单个文件学习规范\n */\n async learnFromFile(filePath: string, content: string): Promise<DevStandard[]> {\n const ext = path.extname(filePath);\n const patterns = this.extractPatterns(filePath, content, ext);\n \n for (const pattern of patterns) {\n await this.recordOccurrence({\n patternId: pattern.id,\n timestamp: new Date(),\n source: 'code-analysis',\n context: `文件: ${filePath}`,\n filePath,\n });\n }\n \n return patterns;\n }\n\n /**\n * 从对话中沉淀规范\n */\n async learnFromConversation(\n message: string,\n response: string\n ): Promise<DevStandard[]> {\n const extractedStandards = this.extractStandardsFromConversation(\n message,\n response\n );\n \n for (const standard of extractedStandards) {\n await this.addOrUpdateStandard(standard);\n }\n \n return extractedStandards;\n }\n\n /**\n * 添加强制规范\n */\n async addForcedStandard(standard: Omit<DevStandard, 'source' | 'weight' | 'createdAt' | 'updatedAt'>): Promise<void> {\n const fullStandard: DevStandard = {\n ...standard,\n source: 'forced',\n weight: 95,\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n \n this.standards.set(fullStandard.id, fullStandard);\n this.weights.set(fullStandard.id, {\n standardId: fullStandard.id,\n weight: 95,\n occurrences: 1,\n lastOccurrence: new Date(),\n });\n \n await this.saveStandards();\n await this.saveWeights();\n }\n\n /**\n * 获取适用规范\n */\n getApplicableStandards(context: string): DevStandard[] {\n const allStandards = this.getEffectiveStandards();\n const contextLower = context.toLowerCase();\n \n return allStandards.filter(standard => {\n // 根据上下文关键词过滤\n const category = standard.category.toLowerCase();\n \n if (contextLower.includes('react') && category === 'react') return true;\n if (contextLower.includes('vue') && category === 'vue') return true;\n if (contextLower.includes('typescript') && category === 'typescript') return true;\n if (contextLower.includes('css') && category === 'style') return true;\n if (contextLower.includes('test') && category === 'testing') return true;\n if (contextLower.includes('security') && category === 'security') return true;\n \n // 通用规范总是返回\n if (category === 'best-practice' || category === 'standard') return true;\n \n return false;\n });\n }\n\n /**\n * 验证代码是否符合规范\n */\n validateAgainstStandards(code: string, standards?: DevStandard[]): ValidationResult {\n // 默认使用所有有效规范(权重>=50)\n const targetStandards = standards || this.getEffectiveStandards(50);\n const violations: StandardViolation[] = [];\n const suggestions: string[] = [];\n\n for (const standard of targetStandards) {\n const violation = this.checkViolation(code, standard);\n if (violation) {\n violations.push(violation);\n }\n }\n\n // 生成建议\n for (const standard of this.getEffectiveStandards(50)) {\n if (!violations.some(v => v.standardId === standard.id)) {\n suggestions.push(`建议: ${standard.description}`);\n }\n }\n\n return {\n isValid: violations.filter(v => v.severity === 'error').length === 0,\n violations,\n suggestions: suggestions.slice(0, 5),\n };\n }\n\n /**\n * 获取规范提示\n */\n getStandardHints(context: string): StandardHint[] {\n const standards = this.getApplicableStandards(context);\n \n return standards.map(standard => ({\n standardId: standard.id,\n category: standard.category,\n hint: standard.description,\n weight: standard.weight,\n }));\n }\n\n /**\n * 记录规范出现\n */\n async recordOccurrence(occurrence: PatternOccurrence): Promise<void> {\n this.occurrences.push(occurrence);\n \n // 更新权重\n const existingWeight = this.weights.get(occurrence.patternId);\n if (existingWeight) {\n existingWeight.occurrences += 1;\n existingWeight.weight = this.calculateWeight(existingWeight, occurrence.source);\n existingWeight.lastOccurrence = occurrence.timestamp;\n } else {\n this.weights.set(occurrence.patternId, {\n standardId: occurrence.patternId,\n weight: this.getInitialWeight(occurrence.source),\n occurrences: 1,\n lastOccurrence: occurrence.timestamp,\n });\n }\n }\n\n /**\n * 获取有效规范(按权重排序)\n */\n getEffectiveStandards(minWeight: number = 50): DevStandard[] {\n const effective: DevStandard[] = [];\n \n for (const [id, standard] of this.standards) {\n const weight = this.weights.get(id);\n if (weight && weight.weight >= minWeight) {\n effective.push({\n ...standard,\n weight: weight.weight,\n });\n }\n }\n \n return effective.sort((a, b) => b.weight - a.weight);\n }\n\n /**\n * 每周汇总更新\n */\n async weeklyAggregate(): Promise<void> {\n const weekId = this.getWeekId();\n const report = this.generateWeeklyReport();\n \n await this.saveWeeklyReport(weekId, report);\n await this.updateDevStandedMd();\n this.cleanupOldOccurrences();\n \n await this.saveStandards();\n await this.saveWeights();\n }\n\n // ==================== 私有方法 ====================\n\n /**\n * 提取代码模式\n */\n private extractPatterns(filePath: string, content: string, ext: string): DevStandard[] {\n const patterns: DevStandard[] = [];\n\n // TypeScript 模式\n if (['.ts', '.tsx'].includes(ext)) {\n patterns.push(...this.extractTypeScriptPatterns(content));\n // TypeScript 文件也检查 JavaScript 模式\n patterns.push(...this.extractJavaScriptPatterns(content));\n }\n\n // JavaScript 模式\n if (['.js', '.jsx'].includes(ext)) {\n patterns.push(...this.extractJavaScriptPatterns(content));\n }\n\n // React 模式 (.tsx 和 .jsx 文件)\n if (['.tsx', '.jsx'].includes(ext)) {\n patterns.push(...this.extractReactPatterns(content));\n }\n\n // Vue 模式\n if (ext === '.vue') {\n patterns.push(...this.extractVuePatterns(content));\n }\n\n // CSS 模式\n if (['.css', '.scss', '.less'].includes(ext)) {\n patterns.push(...this.extractStylePatterns(content, ext));\n }\n\n // Markdown 模式\n if (ext === '.md') {\n patterns.push(...this.extractMarkdownPatterns(content));\n }\n\n // 通用模式(所有文件)\n patterns.push(...this.extractCommonPatterns(content, filePath));\n\n return patterns;\n }\n\n /**\n * TypeScript 模式检测\n */\n private extractTypeScriptPatterns(content: string): DevStandard[] {\n const patterns: DevStandard[] = [];\n\n // 类型定义\n if (this.hasTypeAnnotations(content)) {\n patterns.push(this.createPattern(\n 'ts-type-annotations',\n 'typescript',\n '函数参数和返回值需要类型定义'\n ));\n }\n\n // 泛型使用\n if (/<\\w+>/.test(content)) {\n patterns.push(this.createPattern(\n 'ts-generics',\n 'typescript',\n '使用泛型增强类型安全性'\n ));\n }\n\n // 接口定义\n if (/interface\\s+\\w+/.test(content)) {\n patterns.push(this.createPattern(\n 'ts-interfaces',\n 'typescript',\n '使用接口定义数据结构'\n ));\n }\n\n // 类型守卫\n if (/is\\s+\\w+\\s*\\)|typeof\\s+\\w+\\s*===|instanceof\\s+\\w+/.test(content)) {\n patterns.push(this.createPattern(\n 'ts-type-guards',\n 'typescript',\n '使用类型守卫进行运行时类型检查'\n ));\n }\n\n // 枚举使用\n if (/enum\\s+\\w+/.test(content)) {\n patterns.push(this.createPattern(\n 'ts-enums',\n 'typescript',\n '使用枚举定义常量集合'\n ));\n }\n\n // 可选链和空值合并\n if (/\\?\\.|\\?\\?/.test(content)) {\n patterns.push(this.createPattern(\n 'ts-null-safety',\n 'typescript',\n '使用可选链和空值合并运算符处理空值'\n ));\n }\n\n return patterns;\n }\n\n /**\n * JavaScript 模式检测\n */\n private extractJavaScriptPatterns(content: string): DevStandard[] {\n const patterns: DevStandard[] = [];\n\n // ES模块导入\n if (/import\\s+.*from/.test(content)) {\n patterns.push(this.createPattern(\n 'js-esm-import',\n 'best-practice',\n '使用ES模块语法导入'\n ));\n }\n\n // 解构赋值\n if (/const\\s*\\{[^}]+\\}\\s*=|const\\s*\\[[^\\]]+\\]\\s*=/.test(content)) {\n patterns.push(this.createPattern(\n 'js-destructuring',\n 'best-practice',\n '使用解构赋值简化代码'\n ));\n }\n\n // 箭头函数\n if (/=>\\s*{|\\w+\\s*=>\\s*\\w/.test(content)) {\n patterns.push(this.createPattern(\n 'js-arrow-functions',\n 'best-practice',\n '使用箭头函数定义回调'\n ));\n }\n\n // async/await\n if (/async\\s+function|async\\s+\\w+\\s*\\(|await\\s+/.test(content)) {\n patterns.push(this.createPattern(\n 'js-async-await',\n 'best-practice',\n '使用async/await处理异步操作'\n ));\n }\n\n return patterns;\n }\n\n /**\n * React 模式检测\n */\n private extractReactPatterns(content: string): DevStandard[] {\n const patterns: DevStandard[] = [];\n\n // React 导入\n if (/import\\s+.*React.*from\\s+['\"]react['\"]/i.test(content)) {\n patterns.push(this.createPattern(\n 'react-import',\n 'react',\n '使用React模块导入'\n ));\n }\n\n // React.FC 类型\n if (/React\\.FC|React\\.FunctionComponent/i.test(content)) {\n patterns.push(this.createPattern(\n 'react-fc-type',\n 'react',\n '使用React.FC定义组件类型'\n ));\n }\n\n // Hooks 使用\n if (/use[A-Z]\\w+\\s*\\(/.test(content)) {\n patterns.push(this.createPattern(\n 'react-hooks',\n 'react',\n '使用React Hooks'\n ));\n }\n\n // useState\n if (/useState\\s*</.test(content)) {\n patterns.push(this.createPattern(\n 'react-usestate-typed',\n 'react',\n 'useState使用泛型指定类型'\n ));\n }\n\n // useEffect\n if (/useEffect\\s*\\(/.test(content)) {\n patterns.push(this.createPattern(\n 'react-useeffect',\n 'react',\n '使用useEffect处理副作用'\n ));\n }\n\n // useCallback/useMemo\n if (/useCallback|useMemo/.test(content)) {\n patterns.push(this.createPattern(\n 'react-memoization',\n 'react',\n '使用useCallback/useMemo优化性能'\n ));\n }\n\n // JSX 返回\n if (/=>\\s*\\([\\s\\S]*?<[\\w]/.test(content) || /=>\\s*<[\\w]/.test(content)) {\n patterns.push(this.createPattern(\n 'react-jsx-return',\n 'react',\n '组件返回JSX'\n ));\n }\n\n return patterns;\n }\n\n /**\n * Vue 模式检测\n */\n private extractVuePatterns(content: string): DevStandard[] {\n const patterns: DevStandard[] = [];\n\n // 组合式API\n if (/<script\\s+setup|setup\\s*\\(\\)/.test(content)) {\n patterns.push(this.createPattern(\n 'vue-composition-api',\n 'vue',\n '使用组合式API (Composition API)'\n ));\n }\n\n // ref/reactive\n if (/ref\\(|reactive\\(/.test(content)) {\n patterns.push(this.createPattern(\n 'vue-reactivity',\n 'vue',\n '使用ref/reactive定义响应式数据'\n ));\n }\n\n // computed\n if (/computed\\s*\\(/.test(content)) {\n patterns.push(this.createPattern(\n 'vue-computed',\n 'vue',\n '使用computed定义计算属性'\n ));\n }\n\n // 生命周期钩子\n if (/onMounted|onUnmounted|onUpdated|onBeforeMount/.test(content)) {\n patterns.push(this.createPattern(\n 'vue-lifecycle-hooks',\n 'vue',\n '使用组合式API生命周期钩子'\n ));\n }\n\n // Props定义\n if (/defineProps|props\\s*:/.test(content)) {\n patterns.push(this.createPattern(\n 'vue-props',\n 'vue',\n '明确定义组件Props'\n ));\n }\n\n // Emits定义\n if (/defineEmits|emits\\s*:/.test(content)) {\n patterns.push(this.createPattern(\n 'vue-emits',\n 'vue',\n '明确定义组件Emits'\n ));\n }\n\n return patterns;\n }\n\n /**\n * 样式模式检测\n */\n private extractStylePatterns(content: string, ext: string): DevStandard[] {\n const patterns: DevStandard[] = [];\n\n // CSS模块\n if (ext === '.css' && /\\.module\\.css$/.test(content) || /composes\\s*:/.test(content)) {\n patterns.push(this.createPattern(\n 'css-modules',\n 'style',\n '使用CSS Modules进行样式隔离'\n ));\n }\n\n // BEM命名\n if (/\\w+__\\w+|\\\\w+--\\w+/.test(content)) {\n patterns.push(this.createPattern(\n 'css-bem',\n 'style',\n '使用BEM命名规范'\n ));\n }\n\n // CSS变量\n if (/--[a-z][\\w-]*\\s*:/.test(content)) {\n patterns.push(this.createPattern(\n 'css-variables',\n 'style',\n '使用CSS变量定义主题'\n ));\n }\n\n // Flexbox/Grid\n if (/display\\s*:\\s*flex|display\\s*:\\s*grid/.test(content)) {\n patterns.push(this.createPattern(\n 'css-modern-layout',\n 'style',\n '使用Flexbox/Grid布局'\n ));\n }\n\n // SCSS特性\n if (ext === '.scss' && /@mixin|@include|@extend|\\$[\\w-]+/.test(content)) {\n patterns.push(this.createPattern(\n 'scss-features',\n 'style',\n '使用SCSS预处理器特性'\n ));\n }\n\n return patterns;\n }\n\n /**\n * Markdown 模式检测\n */\n private extractMarkdownPatterns(content: string): DevStandard[] {\n const patterns: DevStandard[] = [];\n\n // 文档结构\n if (/^#\\s+.+/m.test(content) && /^##\\s+.+/m.test(content)) {\n patterns.push(this.createPattern(\n 'md-structure',\n 'documentation',\n '文档使用层级标题结构'\n ));\n }\n\n // 代码块\n if (/```[\\s\\S]*?```/.test(content)) {\n patterns.push(this.createPattern(\n 'md-code-blocks',\n 'documentation',\n '文档包含代码示例'\n ));\n }\n\n // 表格\n if (/\\|.+\\|[\\r\\n]+\\|[-|]+\\|/.test(content)) {\n patterns.push(this.createPattern(\n 'md-tables',\n 'documentation',\n '文档使用表格展示信息'\n ));\n }\n\n return patterns;\n }\n\n /**\n * 通用模式检测\n */\n private extractCommonPatterns(content: string, filePath: string): DevStandard[] {\n const patterns: DevStandard[] = [];\n\n // 错误处理\n if (/try\\s*\\{[\\s\\S]*\\}\\s*catch/.test(content)) {\n patterns.push(this.createPattern(\n 'error-handling',\n 'best-practice',\n '异步操作包含错误处理'\n ));\n }\n\n // console.log使用(反模式)\n if (/console\\.log\\(/.test(content) && !filePath.includes('.test.')) {\n patterns.push(this.createPattern(\n 'avoid-console-log',\n 'prohibition',\n '生产代码中避免使用console.log'\n ));\n }\n\n // 安全:XSS防护\n if (/dangerouslySetInnerHTML|v-html/.test(content)) {\n patterns.push(this.createPattern(\n 'security-xss-risk',\n 'security',\n '注意XSS风险,谨慎使用HTML注入'\n ));\n }\n\n // 安全:敏感数据\n if (/password|secret|api_?key|token/i.test(content) && !filePath.includes('.test.')) {\n patterns.push(this.createPattern(\n 'security-sensitive-data',\n 'security',\n '敏感数据处理需要加密存储'\n ));\n }\n\n // 测试文件\n if (filePath.includes('.test.') || filePath.includes('.spec.')) {\n patterns.push(this.createPattern(\n 'testing-files',\n 'testing',\n '项目包含测试文件'\n ));\n }\n\n return patterns;\n }\n\n /**\n * 从对话中提取规范\n */\n private extractStandardsFromConversation(\n message: string,\n response: string\n ): DevStandard[] {\n const standards: DevStandard[] = [];\n const combined = `${message}\\n${response}`;\n\n const keywordPatterns = [\n { pattern: /应该|需要|必须/g, category: 'requirement' },\n { pattern: /规范|标准|约定/g, category: 'standard' },\n { pattern: /不要|禁止|避免/g, category: 'prohibition' },\n { pattern: /建议|推荐|最好/g, category: 'suggestion' },\n ];\n\n for (const { pattern, category } of keywordPatterns) {\n const matches = combined.match(pattern);\n if (matches && matches.length >= 2) {\n const sentences = combined.split(/[。!?\\n]/);\n for (const sentence of sentences) {\n if (pattern.test(sentence) && sentence.trim().length > 5 && sentence.trim().length < 200) {\n standards.push({\n id: `conv-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,\n category,\n description: sentence.trim(),\n weight: 40,\n source: 'conversation',\n examples: [],\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n }\n }\n }\n }\n\n return standards;\n }\n\n /**\n * 创建规范模式\n */\n private createPattern(id: string, category: string, description: string): DevStandard {\n // 如果已存在相同ID,返回已存在的\n const existing = this.standards.get(id);\n if (existing) {\n return existing;\n }\n\n const standard: DevStandard = {\n id,\n category,\n description,\n weight: 0,\n source: 'code-analysis',\n examples: [],\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n\n this.standards.set(id, standard);\n return standard;\n }\n\n /**\n * 检查代码违规\n */\n private checkViolation(code: string, standard: DevStandard): StandardViolation | null {\n // 根据规范类型检查\n switch (standard.id) {\n case 'avoid-console-log':\n if (code.includes('console.log(')) {\n return {\n standardId: standard.id,\n description: '代码中包含console.log',\n severity: 'warning',\n suggestion: '使用logger工具替代console.log',\n };\n }\n break;\n\n case 'security-xss-risk':\n if (code.includes('dangerouslySetInnerHTML') && !code.includes('DOMPurify')) {\n return {\n standardId: standard.id,\n description: '使用dangerouslySetInnerHTML但未进行XSS过滤',\n severity: 'error',\n suggestion: '使用DOMPurify对HTML内容进行过滤',\n };\n }\n break;\n\n case 'error-handling':\n if (/async\\s+\\w+|await\\s+/.test(code) && !/try\\s*\\{/.test(code)) {\n return {\n standardId: standard.id,\n description: '异步操作缺少错误处理',\n severity: 'warning',\n suggestion: '使用try-catch包裹异步操作',\n };\n }\n break;\n }\n\n return null;\n }\n\n /**\n * 计算权重\n */\n private calculateWeight(weight: StandardWeight, source: string): number {\n const baseWeight = weight.weight;\n const increment = source === 'conversation' ? 5 : 2;\n \n // 权重衰减:时间越久,权重越低\n const daysSinceLastOccurrence = \n (Date.now() - weight.lastOccurrence.getTime()) / (1000 * 60 * 60 * 24);\n const decayFactor = Math.max(0.95, 1 - daysSinceLastOccurrence * 0.01);\n \n return Math.min(100, Math.round(baseWeight * decayFactor + increment));\n }\n\n /**\n * 获取初始权重\n */\n private getInitialWeight(source: string): number {\n switch (source) {\n case 'forced': return 95;\n case 'conversation': return 40;\n case 'code-analysis': return 60;\n default: return 50;\n }\n }\n\n /**\n * 收集项目文件\n */\n private async collectProjectFiles(projectPath: string): Promise<string[]> {\n const files: string[] = [];\n \n async function scan(dir: string): Promise<void> {\n try {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n \n for (const entry of entries) {\n if (entry.isDirectory()) {\n if (!IGNORED_DIRS.includes(entry.name)) {\n await scan(path.join(dir, entry.name));\n }\n } else if (entry.isFile()) {\n const ext = path.extname(entry.name);\n if (SCAN_EXTENSIONS.includes(ext)) {\n files.push(path.join(dir, entry.name));\n }\n }\n }\n } catch {\n // 忽略无法访问的目录\n }\n }\n \n await scan(projectPath);\n return files;\n }\n\n /**\n * 添加或更新规范\n */\n private async addOrUpdateStandard(standard: DevStandard): Promise<void> {\n const existing = this.standards.get(standard.id);\n\n if (existing) {\n existing.updatedAt = new Date();\n if (standard.examples.length > 0) {\n existing.examples.push(...standard.examples);\n }\n } else {\n this.standards.set(standard.id, standard);\n }\n\n await this.recordOccurrence({\n patternId: standard.id,\n timestamp: new Date(),\n source: 'conversation',\n context: standard.description,\n });\n }\n\n /**\n * 确保规范目录存在\n */\n private async ensureNormsDir(): Promise<void> {\n await fs.mkdir(this.config.normsDir, { recursive: true });\n await fs.mkdir(path.join(this.config.normsDir, 'weekly'), { recursive: true });\n }\n\n /**\n * 加载已有规范\n */\n private async loadStandards(): Promise<void> {\n const standardsPath = path.join(this.config.normsDir, 'patterns.json');\n\n try {\n const content = await fs.readFile(standardsPath, 'utf-8');\n const data = JSON.parse(content) as DevStandard[];\n\n for (const standard of data) {\n this.standards.set(standard.id, {\n ...standard,\n createdAt: new Date(standard.createdAt),\n updatedAt: new Date(standard.updatedAt),\n });\n }\n } catch {\n // 文件不存在,使用空规范集\n }\n }\n\n /**\n * 加载权重数据\n */\n private async loadWeights(): Promise<void> {\n const weightsPath = path.join(this.config.normsDir, 'weights.json');\n\n try {\n const content = await fs.readFile(weightsPath, 'utf-8');\n const data = JSON.parse(content) as StandardWeight[];\n\n for (const weight of data) {\n this.weights.set(weight.standardId, {\n ...weight,\n lastOccurrence: new Date(weight.lastOccurrence),\n });\n }\n } catch {\n // 文件不存在,使用空权重集\n }\n }\n\n /**\n * 保存规范\n */\n async saveStandards(): Promise<void> {\n const standardsPath = path.join(this.config.normsDir, 'patterns.json');\n await fs.writeFile(\n standardsPath,\n JSON.stringify(Array.from(this.standards.values()), null, 2),\n 'utf-8'\n );\n }\n\n /**\n * 保存权重\n */\n async saveWeights(): Promise<void> {\n const weightsPath = path.join(this.config.normsDir, 'weights.json');\n await fs.writeFile(\n weightsPath,\n JSON.stringify(Array.from(this.weights.values()), null, 2),\n 'utf-8'\n );\n }\n\n /**\n * 生成周报\n */\n private generateWeeklyReport(): WeeklyReport {\n const effectiveStandards = this.getEffectiveStandards();\n\n return {\n weekId: this.getWeekId(),\n generatedAt: new Date(),\n totalPatterns: this.standards.size,\n effectiveStandards: effectiveStandards.length,\n newStandards: this.occurrences.filter(\n o => o.timestamp > this.getWeekStart()\n ).length,\n topStandards: effectiveStandards.slice(0, 10),\n categoryBreakdown: this.getCategoryBreakdown(),\n };\n }\n\n /**\n * 保存周报\n */\n private async saveWeeklyReport(weekId: string, report: WeeklyReport): Promise<void> {\n const reportPath = path.join(this.config.normsDir, 'weekly', `${weekId}.json`);\n await fs.writeFile(reportPath, JSON.stringify(report, null, 2), 'utf-8');\n }\n\n /**\n * 更新 devstanded.md\n */\n private async updateDevStandedMd(): Promise<void> {\n const standards = this.getEffectiveStandards();\n const content = this.generateDevStandedMd(standards);\n\n const mdPath = path.join(this.config.normsDir, 'devstanded.md');\n await fs.writeFile(mdPath, content, 'utf-8');\n }\n\n /**\n * 生成 devstanded.md 内容\n */\n private generateDevStandedMd(standards: DevStandard[]): string {\n const categories = this.groupByCategory(standards);\n const date = new Date().toISOString().split('T')[0];\n\n let md = `# 开发规范文档 (devstanded.md)\n\n> 版本: v1.0.0\n> 最后更新: ${date}\n> 更新频率: 每周汇总\n\n---\n\n## 规范概述\n\n本文档记录从项目代码分析和用户对话中沉淀的开发规范。\n\n**有效规范总数**: ${standards.length}\n\n---\n\n`;\n\n const categoryNames: Record<string, string> = {\n 'typescript': 'TypeScript规范',\n 'react': 'React规范',\n 'vue': 'Vue规范',\n 'style': '样式规范',\n 'best-practice': '最佳实践',\n 'requirement': '需求规范',\n 'standard': '开发标准',\n 'prohibition': '禁止事项',\n 'suggestion': '建议规范',\n 'security': '安全规范',\n 'testing': '测试规范',\n 'documentation': '文档规范',\n };\n\n for (const [category, categoryStandards] of Object.entries(categories)) {\n const categoryName = categoryNames[category] || category;\n md += `## ${categoryName}\\n\\n`;\n\n for (const standard of categoryStandards) {\n const level = this.getWeightLevel(standard.weight);\n const sourceLabel = standard.source === 'code-analysis' ? '代码分析' : \n standard.source === 'conversation' ? '对话沉淀' : '强制规范';\n\n md += `### ${standard.description}\\n\\n`;\n md += `| 属性 | 值 |\\n`;\n md += `|------|-----|\\n`;\n md += `| 等级 | ${level} |\\n`;\n md += `| 权重 | ${standard.weight} |\\n`;\n md += `| 来源 | ${sourceLabel} |\\n\\n`;\n\n if (standard.examples.length > 0) {\n md += `**示例**:\\n\\`\\`\\`\\n${standard.examples[0]}\\n\\`\\`\\`\\n\\n`;\n }\n\n md += `---\\n\\n`;\n }\n }\n\n md += `> 此文档由 sf-cli 自动学习生成,每周更新\\n`;\n\n return md;\n }\n\n /**\n * 清理旧的出现记录\n */\n private cleanupOldOccurrences(): void {\n const cutoff = new Date();\n cutoff.setDate(cutoff.getDate() - 30);\n this.occurrences = this.occurrences.filter(o => o.timestamp > cutoff);\n }\n\n // ==================== 辅助方法 ====================\n\n private getWeekId(): string {\n const now = new Date();\n const start = new Date(now.getFullYear(), 0, 1);\n const week = Math.ceil(\n ((now.getTime() - start.getTime()) / 86400000 + start.getDay() + 1) / 7\n );\n return `${now.getFullYear()}-W${week.toString().padStart(2, '0')}`;\n }\n\n private getWeekStart(): Date {\n const now = new Date();\n const day = now.getDay();\n const diff = now.getDate() - day + (day === 0 ? -6 : 1);\n return new Date(now.setDate(diff));\n }\n\n private groupByCategory(standards: DevStandard[]): Record<string, DevStandard[]> {\n const groups: Record<string, DevStandard[]> = {};\n\n for (const standard of standards) {\n if (!groups[standard.category]) {\n groups[standard.category] = [];\n }\n groups[standard.category].push(standard);\n }\n\n return groups;\n }\n\n private getWeightLevel(weight: number): string {\n if (weight >= 90) return '强制';\n if (weight >= 70) return '推荐';\n if (weight >= 50) return '参考';\n return '候选';\n }\n\n private getCategoryBreakdown(): Record<string, number> {\n const breakdown: Record<string, number> = {};\n\n for (const standard of this.standards.values()) {\n breakdown[standard.category] = (breakdown[standard.category] || 0) + 1;\n }\n\n return breakdown;\n }\n\n private hasTypeAnnotations(content: string): boolean {\n // 匹配类型注解: 后面跟着类型名称,允许泛型\n return /:\\s*(string|number|boolean|void|any|unknown|never|object|React\\.\\w+|[A-Z]\\w+)(\\s*[\\)=\\{\\[;<>]|>)/.test(content);\n }\n}\n\ninterface WeeklyReport {\n weekId: string;\n generatedAt: Date;\n totalPatterns: number;\n effectiveStandards: number;\n newStandards: number;\n topStandards: DevStandard[];\n categoryBreakdown: Record<string, number>;\n}\n\nexport default NormsManager;","/**\n * 上下文管理器\n * 管理对话上下文、Token计算、自动压缩\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { ContextMessage, ContextState } from '../types';\n\n// 配置常量\nconst DEFAULT_LIMIT = 512 * 1024; // 512K\nconst COMPRESSION_THRESHOLD = 0.9; // 90%\nconst MIN_MESSAGES_TO_KEEP = 10;\nconst SYSTEM_MESSAGE_RESERVED = 5;\n\nexport interface TokenStats {\n total: number;\n byRole: Record<string, number>;\n bySource: Record<string, number>;\n messageCount: number;\n systemTokens: number;\n userTokens: number;\n assistantTokens: number;\n toolTokens: number;\n}\n\nexport interface CompressionResult {\n originalTokens: number;\n compressedTokens: number;\n savedTokens: number;\n messagesKept: number;\n messagesCompressed: number;\n summary?: string;\n}\n\nexport interface ContextManagerOptions {\n limit?: number;\n projectPath?: string;\n persistPath?: string;\n}\n\nexport class ContextManager {\n private state: ContextState;\n private projectPath: string;\n private persistPath: string | null = null;\n private tokenEstimateCache: Map<string, number> = new Map();\n\n constructor(options: ContextManagerOptions = {}) {\n this.state = {\n messages: [],\n totalTokens: 0,\n limit: options.limit || DEFAULT_LIMIT,\n };\n this.projectPath = options.projectPath || '';\n this.persistPath = options.persistPath || null;\n }\n\n async initialize(projectPath: string): Promise<void> {\n this.projectPath = projectPath;\n this.persistPath = path.join(projectPath, '.sf-cli', 'cache', 'context', 'context.json');\n \n // 尝试加载持久化的上下文\n await this.loadPersistedContext();\n }\n\n /**\n * 添加消息\n */\n addMessage(message: ContextMessage): void {\n // 计算消息的 token 数\n const tokens = this.countTokens(message.content);\n message.tokens = tokens;\n \n this.state.messages.push(message);\n this.state.totalTokens += tokens;\n \n // 检查是否需要压缩\n if (this.needsCompression()) {\n this.compress();\n }\n \n // 异步持久化\n this.persistAsync();\n }\n\n /**\n * 批量添加消息\n */\n addMessages(messages: ContextMessage[]): void {\n for (const message of messages) {\n this.addMessage(message);\n }\n }\n\n /**\n * 获取所有消息\n */\n getMessages(): ContextMessage[] {\n return [...this.state.messages];\n }\n\n /**\n * 获取最近的 N 条消息\n */\n getRecentMessages(count: number): ContextMessage[] {\n return this.state.messages.slice(-count);\n }\n\n /**\n * 获取系统消息\n */\n getSystemMessages(): ContextMessage[] {\n return this.state.messages.filter(m => m.role === 'system');\n }\n\n /**\n * 获取 Token 统计\n */\n getTokenStats(): TokenStats {\n const stats: TokenStats = {\n total: this.state.totalTokens,\n byRole: {},\n bySource: {},\n messageCount: this.state.messages.length,\n systemTokens: 0,\n userTokens: 0,\n assistantTokens: 0,\n toolTokens: 0,\n };\n\n for (const message of this.state.messages) {\n const tokens = message.tokens || this.countTokens(message.content);\n \n // 按角色统计\n stats.byRole[message.role] = (stats.byRole[message.role] || 0) + tokens;\n \n // 按角色分类\n switch (message.role) {\n case 'system':\n stats.systemTokens += tokens;\n break;\n case 'user':\n stats.userTokens += tokens;\n break;\n case 'assistant':\n stats.assistantTokens += tokens;\n break;\n case 'tool':\n stats.toolTokens += tokens;\n break;\n }\n }\n\n return stats;\n }\n\n /**\n * 获取当前 Token 数\n */\n getTokenCount(): number {\n return this.state.totalTokens;\n }\n\n /**\n * 获取剩余 Token 数\n */\n getRemainingTokens(): number {\n return this.state.limit - this.state.totalTokens;\n }\n\n /**\n * 获取使用百分比\n */\n getUsagePercentage(): number {\n return (this.state.totalTokens / this.state.limit) * 100;\n }\n\n /**\n * 获取上下文限制\n */\n getLimit(): number {\n return this.state.limit;\n }\n\n /**\n * 设置上下文限制\n */\n setLimit(limit: number): void {\n this.state.limit = limit;\n }\n\n /**\n * 清空上下文\n */\n clear(): void {\n this.state.messages = [];\n this.state.totalTokens = 0;\n this.tokenEstimateCache.clear();\n this.persistAsync();\n }\n\n /**\n * 检查是否需要压缩\n */\n needsCompression(): boolean {\n return this.state.totalTokens > this.state.limit * COMPRESSION_THRESHOLD;\n }\n\n /**\n * 执行压缩\n */\n compress(): CompressionResult {\n const originalTokens = this.state.totalTokens;\n const messages = this.state.messages;\n \n if (messages.length <= MIN_MESSAGES_TO_KEEP) {\n return {\n originalTokens,\n compressedTokens: originalTokens,\n savedTokens: 0,\n messagesKept: messages.length,\n messagesCompressed: 0,\n };\n }\n\n // 保留系统消息和最近的消息\n const systemMessages = messages.filter(m => m.role === 'system');\n const recentMessages = messages.filter(m => m.role !== 'system').slice(-MIN_MESSAGES_TO_KEEP);\n \n // 要压缩的消息\n const messagesToCompress = messages.filter(m => \n m.role !== 'system' && !recentMessages.includes(m)\n );\n\n if (messagesToCompress.length === 0) {\n return {\n originalTokens,\n compressedTokens: originalTokens,\n savedTokens: 0,\n messagesKept: messages.length,\n messagesCompressed: 0,\n };\n }\n\n // 生成摘要\n const summary = this.generateSummary(messagesToCompress);\n const summaryTokens = this.countTokens(summary);\n \n // 构建新的消息列表\n const compressedMessages: ContextMessage[] = [\n ...systemMessages,\n {\n role: 'system',\n content: `[历史对话摘要]\\n${summary}`,\n tokens: summaryTokens,\n },\n ...recentMessages,\n ];\n\n // 计算新的 token 数\n const compressedTokens = compressedMessages.reduce(\n (sum, m) => sum + (m.tokens || this.countTokens(m.content)),\n 0\n );\n\n // 更新状态\n this.state.messages = compressedMessages;\n this.state.totalTokens = compressedTokens;\n\n const result: CompressionResult = {\n originalTokens,\n compressedTokens,\n savedTokens: originalTokens - compressedTokens,\n messagesKept: compressedMessages.length,\n messagesCompressed: messagesToCompress.length,\n summary,\n };\n\n this.persistAsync();\n return result;\n }\n\n /**\n * 计算 Token 数\n */\n private countTokens(content: string): number {\n // 检查缓存\n if (this.tokenEstimateCache.has(content)) {\n return this.tokenEstimateCache.get(content)!;\n }\n\n // 使用估算方法:每4个字符约1个token\n // 对于中文,每个汉字约1-2个token\n const chineseChars = (content.match(/[\\u4e00-\\u9fa5]/g) || []).length;\n const otherChars = content.length - chineseChars;\n \n const estimatedTokens = Math.ceil(chineseChars * 1.5 + otherChars / 4);\n \n // 缓存结果\n this.tokenEstimateCache.set(content, estimatedTokens);\n \n // 限制缓存大小\n if (this.tokenEstimateCache.size > 1000) {\n const firstKey = this.tokenEstimateCache.keys().next().value;\n if (firstKey) {\n this.tokenEstimateCache.delete(firstKey);\n }\n }\n\n return estimatedTokens;\n }\n\n /**\n * 生成摘要\n */\n private generateSummary(messages: ContextMessage[]): string {\n // 简单的摘要生成:提取关键信息\n const topics: string[] = [];\n const actions: string[] = [];\n \n for (const message of messages) {\n const content = message.content.toLowerCase();\n \n // 提取主题关键词\n if (content.includes('创建') || content.includes('实现')) {\n const match = content.match(/(?:创建|实现)\\s*[一个]*\\s*(\\w+)/);\n if (match) topics.push(match[1]);\n }\n \n // 提取动作\n if (content.includes('修改') || content.includes('更新')) {\n actions.push('修改了代码');\n }\n if (content.includes('测试')) {\n actions.push('执行了测试');\n }\n }\n\n let summary = `共 ${messages.length} 条历史消息`;\n \n if (topics.length > 0) {\n summary += `,讨论了: ${[...new Set(topics)].slice(0, 5).join('、')}`;\n }\n \n if (actions.length > 0) {\n summary += `,主要操作: ${[...new Set(actions)].join('、')}`;\n }\n\n return summary;\n }\n\n /**\n * 异步持久化\n */\n private async persistAsync(): Promise<void> {\n if (!this.persistPath) return;\n \n try {\n await this.persist();\n } catch {\n // 忽略持久化错误\n }\n }\n\n /**\n * 持久化上下文\n */\n async persist(): Promise<void> {\n if (!this.persistPath) return;\n \n const dir = path.dirname(this.persistPath);\n await fs.mkdir(dir, { recursive: true });\n \n const data = {\n messages: this.state.messages,\n totalTokens: this.state.totalTokens,\n limit: this.state.limit,\n savedAt: new Date().toISOString(),\n };\n \n await fs.writeFile(this.persistPath, JSON.stringify(data, null, 2), 'utf-8');\n }\n\n /**\n * 加载持久化的上下文\n */\n private async loadPersistedContext(): Promise<void> {\n if (!this.persistPath) return;\n \n try {\n const content = await fs.readFile(this.persistPath, 'utf-8');\n const data = JSON.parse(content);\n \n this.state.messages = data.messages || [];\n this.state.totalTokens = data.totalTokens || 0;\n this.state.limit = data.limit || DEFAULT_LIMIT;\n } catch {\n // 文件不存在或解析失败,使用空状态\n }\n }\n\n /**\n * 获取状态显示字符串\n */\n getStatusString(): string {\n const used = this.state.totalTokens;\n const remaining = this.getRemainingTokens();\n const percentage = this.getUsagePercentage();\n const messageCount = this.state.messages.length;\n \n return `上下文: ${this.formatTokens(used)}/${this.formatTokens(this.state.limit)} (${percentage.toFixed(1)}%) | 消息: ${messageCount}`;\n }\n\n /**\n * 格式化 Token 数\n */\n private formatTokens(tokens: number): string {\n if (tokens >= 1000) {\n return `${(tokens / 1000).toFixed(1)}K`;\n }\n return tokens.toString();\n }\n}\n\nexport default ContextManager;","/**\n * 命令解析器\n * 解析用户输入的各种命令格式\n */\n\nexport enum CommandType {\n SLASH = 'slash', // 斜杠命令 /help\n AT = 'at', // 文件引用 @file\n DOLLAR = 'dollar', // Agent调用 $agent\n SHELL = 'shell', // Shell命令 !command\n NATURAL = 'natural', // 自然语言\n YOLO = 'yolo', // yolo模式\n}\n\nexport interface ParsedCommand {\n type: CommandType;\n raw: string;\n command?: string;\n args?: string[];\n path?: string;\n agent?: string;\n shellCommand?: string;\n}\n\nexport interface ParseResult {\n success: boolean;\n command?: ParsedCommand;\n error?: string;\n}\n\nexport class CommandParser {\n private readonly slashCommands = [\n 'help', 'h', '?',\n 'init', 'i',\n 'new', 'n',\n 'model', 'm',\n 'update', 'u',\n 'clear', 'c',\n 'exit', 'e', 'q', 'quit',\n 'version', 'v',\n // OpenSpec 工作流命令\n 'opsx:explore', 'opsx:new', 'opsx:continue', 'opsx:apply', 'opsx:archive',\n 'opsx:propose', 'opsx:status', 'opsx:cancel', 'opsx:rollback',\n 'opsx:confirm', 'opsx:next', 'opsx:auto', 'opsx:test',\n ];\n\n private readonly builtInAgents = [\n 'frontend-dev', 'code-reviewer', 'architect', 'tester',\n ];\n\n parse(input: string): ParseResult {\n const trimmed = input.trim();\n \n // 空输入\n if (!trimmed) {\n return { success: false, error: '空输入' };\n }\n\n // yolo 模式\n if (trimmed === 'yolo') {\n return {\n success: true,\n command: {\n type: CommandType.YOLO,\n raw: trimmed,\n },\n };\n }\n\n // 斜杠命令 /command [args...]\n if (trimmed.startsWith('/')) {\n return this.parseSlashCommand(trimmed);\n }\n\n // 文件引用 @path\n if (trimmed.startsWith('@')) {\n return this.parseAtPath(trimmed);\n }\n\n // Agent调用 $agent [args...]\n if (trimmed.startsWith('$')) {\n return this.parseAgentCall(trimmed);\n }\n\n // Shell命令 !command\n if (trimmed.startsWith('!')) {\n return this.parseShellCommand(trimmed);\n }\n\n // 自然语言输入\n return {\n success: true,\n command: {\n type: CommandType.NATURAL,\n raw: trimmed,\n },\n };\n }\n\n private parseSlashCommand(input: string): ParseResult {\n const parts = input.slice(1).split(/\\s+/);\n const command = parts[0]?.toLowerCase();\n const args = parts.slice(1);\n\n if (!command) {\n return { success: false, error: '无效的命令格式' };\n }\n\n // opsx:* 命令直接通过\n if (command.startsWith('opsx:')) {\n return {\n success: true,\n command: {\n type: CommandType.SLASH,\n raw: input,\n command,\n args,\n },\n };\n }\n\n // 检查是否是有效的斜杠命令\n const isValidCommand = this.slashCommands.some(\n cmd => cmd === command\n );\n\n if (!isValidCommand) {\n return { success: false, error: `未知命令: /${command}` };\n }\n\n return {\n success: true,\n command: {\n type: CommandType.SLASH,\n raw: input,\n command,\n args,\n },\n };\n }\n\n private parseAtPath(input: string): ParseResult {\n const path = input.slice(1).trim();\n \n if (!path) {\n return { success: false, error: '缺少文件路径' };\n }\n\n return {\n success: true,\n command: {\n type: CommandType.AT,\n raw: input,\n path,\n },\n };\n }\n\n private parseAgentCall(input: string): ParseResult {\n const parts = input.slice(1).split(/\\s+/);\n const agent = parts[0]?.toLowerCase();\n const args = parts.slice(1);\n\n if (!agent) {\n return { success: false, error: '缺少Agent名称' };\n }\n\n return {\n success: true,\n command: {\n type: CommandType.DOLLAR,\n raw: input,\n agent,\n args,\n },\n };\n }\n\n private parseShellCommand(input: string): ParseResult {\n const shellCommand = input.slice(1).trim();\n \n if (!shellCommand) {\n return { success: false, error: '缺少Shell命令' };\n }\n\n return {\n success: true,\n command: {\n type: CommandType.SHELL,\n raw: input,\n shellCommand,\n },\n };\n }\n}\n","/**\n * 命令执行器\n * 执行解析后的命令\n */\n\nimport chalk from 'chalk';\nimport { ParseResult, CommandType } from './parser';\nimport { ContextManager } from '../context';\nimport { ConfigManager, ModelService } from '../services';\nimport { NormsManager } from '../norms';\nimport { REPLState } from './repl';\nimport { runSlashCommand } from '../commands';\nimport { handleFileReference } from '../commands/reference';\nimport { runAgent } from '../agents/runner';\nimport { executeShell } from '../commands/shell';\nimport { handleNaturalLanguage } from '../commands/natural';\nimport { getActiveSession } from '../commands/new';\n\nexport interface ExecutorContext {\n contextManager: ContextManager;\n configManager: ConfigManager;\n modelService: ModelService;\n normsManager?: NormsManager;\n state: REPLState;\n options: {\n workingDirectory: string;\n model?: string;\n yolo?: boolean;\n };\n}\n\nexport interface ExecutionResult {\n output?: string;\n exit?: boolean;\n contextUsed?: number;\n}\n\n// 始终可用的命令(不需要 API Key 或工作流)\nconst ALWAYS_ALLOWED = [\n 'help', 'h', '?',\n 'model', 'm',\n 'exit', 'e', 'q', 'quit',\n 'clear', 'c',\n 'version', 'v',\n 'update', 'u',\n];\n\n// 需要 API Key 的命令\nconst REQUIRES_API_KEY = [\n 'new', 'n',\n 'init', 'i',\n];\n\nexport class CommandExecutor {\n async execute(parseResult: ParseResult, ctx: ExecutorContext): Promise<ExecutionResult> {\n if (!parseResult.success || !parseResult.command) {\n return { output: chalk.red(`错误: ${parseResult.error}`) };\n }\n\n const { command } = parseResult;\n const hasApiKey = !!ctx.configManager.get('apiKey');\n const hasActiveWorkflow = getActiveSession() !== null;\n\n // 斜杠命令权限检查\n if (command.type === CommandType.SLASH) {\n const cmd = command.command?.toLowerCase() || '';\n \n // 始终允许的命令\n if (ALWAYS_ALLOWED.includes(cmd)) {\n return this.executeSlashCommand(command, ctx);\n }\n \n // 需要 API Key 的命令\n if (REQUIRES_API_KEY.includes(cmd)) {\n if (!hasApiKey) {\n return {\n output: chalk.yellow('⚠️ 请先配置 API Key') +\n chalk.gray('\\n\\n执行 /model 选择模型并配置 API Key'),\n };\n }\n return this.executeSlashCommand(command, ctx);\n }\n \n // 其他命令需要活跃工作流\n if (!hasActiveWorkflow) {\n return {\n output: chalk.yellow('当前没有活跃的工作流') +\n chalk.gray('\\n请先使用 ') +\n chalk.cyan('/new <需求描述>') +\n chalk.gray(' 启动新工作流'),\n };\n }\n \n return this.executeSlashCommand(command, ctx);\n }\n\n // Agent 调用需要活跃工作流\n if (command.type === CommandType.DOLLAR) {\n if (!hasActiveWorkflow) {\n return {\n output: chalk.yellow('当前没有活跃的工作流,无法调用 Agent') +\n chalk.gray('\\n请先使用 ') +\n chalk.cyan('/new <需求描述>') +\n chalk.gray(' 启动新工作流'),\n };\n }\n if (!hasApiKey) {\n return {\n output: chalk.yellow('⚠️ 请先配置 API Key') +\n chalk.gray('\\n\\n执行 /model 配置模型'),\n };\n }\n return this.executeAgent(command, ctx);\n }\n\n // Shell 命令需要活跃工作流\n if (command.type === CommandType.SHELL) {\n if (!hasActiveWorkflow) {\n return {\n output: chalk.yellow('当前没有活跃的工作流,无法执行 Shell 命令') +\n chalk.gray('\\n请先使用 ') +\n chalk.cyan('/new <需求描述>') +\n chalk.gray(' 启动新工作流'),\n };\n }\n return this.executeShell(command, ctx);\n }\n\n // 文件引用始终允许\n if (command.type === CommandType.AT) {\n return this.executeFileReference(command, ctx);\n }\n\n // 自然语言(natural.ts 内部会检查 API Key)\n if (command.type === CommandType.NATURAL) {\n return this.executeNaturalLanguage(command, ctx);\n }\n\n // YOLO 模式\n if (command.type === CommandType.YOLO) {\n return this.executeYolo(ctx);\n }\n\n return { output: chalk.red('未知的命令类型') };\n }\n\n private async executeSlashCommand(\n command: { command?: string; args?: string[] },\n ctx: ExecutorContext\n ): Promise<ExecutionResult> {\n const result = await runSlashCommand(\n command.command || '',\n command.args || [],\n ctx\n );\n return { output: result.output, exit: result.exit };\n }\n\n private async executeFileReference(\n command: { path?: string },\n ctx: ExecutorContext\n ): Promise<ExecutionResult> {\n const result = await handleFileReference(command.path || '', ctx);\n return { \n output: result.output,\n contextUsed: result.contextUsed,\n };\n }\n\n private async executeAgent(\n command: { agent?: string; args?: string[] },\n ctx: ExecutorContext\n ): Promise<ExecutionResult> {\n const result = await runAgent(command.agent || '', command.args || [], ctx);\n return { \n output: result.output,\n contextUsed: result.contextUsed,\n };\n }\n\n private async executeShell(\n command: { shellCommand?: string },\n ctx: ExecutorContext\n ): Promise<ExecutionResult> {\n const result = await executeShell(command.shellCommand || '', ctx);\n return { output: result.output };\n }\n\n private async executeNaturalLanguage(\n command: { raw: string },\n ctx: ExecutorContext\n ): Promise<ExecutionResult> {\n const result = await handleNaturalLanguage(command.raw, ctx);\n return { \n output: result.output,\n contextUsed: result.contextUsed,\n };\n }\n\n private async executeYolo(ctx: ExecutorContext): Promise<ExecutionResult> {\n ctx.options.yolo = !ctx.options.yolo;\n return {\n output: chalk.yellow(`YOLO模式已${ctx.options.yolo ? '开启' : '关闭'}`),\n };\n }\n}","/**\n * 命令模块入口\n * 导出所有命令处理函数\n */\n\nexport { runSlashCommand } from './runner';\nexport { initProject } from './init';\nexport { showHelp } from './help';\nexport { selectModel } from './model';\nexport { updateCLI } from './update';\nexport { clearHistory } from './clear';\nexport { handleNew } from './new';\nexport { handleFileReference } from './reference';\nexport { executeShell } from './shell';\nexport { handleNaturalLanguage } from './natural';","/**\n * 斜杠命令运行器\n * 路由和执行斜杠命令\n */\n\nimport chalk from 'chalk';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { ExecutorContext } from '../cli/executor';\nimport { handleInit } from './init';\nimport { handleHelp } from './help';\nimport { handleModel } from './model';\nimport { handleUpdate } from './update';\nimport { handleClear } from './clear';\nimport { handleExit } from './exit';\nimport { handleNew } from './new';\nimport { handleOpsx } from './opsx';\n\n// 从 package.json 读取版本\nfunction getVersion(): string {\n const possiblePaths = [\n path.resolve(__dirname, '..', '..', 'package.json'),\n path.resolve(__dirname, '..', '..', '..', 'package.json'),\n ];\n \n for (const pkgPath of possiblePaths) {\n try {\n if (fs.existsSync(pkgPath)) {\n const content = fs.readFileSync(pkgPath, 'utf-8');\n const pkg = JSON.parse(content);\n return pkg.version;\n }\n } catch {\n continue;\n }\n }\n \n return '1.0.0';\n}\n\nconst VERSION = getVersion();\n\nexport interface CommandResult {\n output: string;\n exit?: boolean;\n}\n\nexport async function runSlashCommand(\n command: string,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n // 解析命令,支持别名\n const normalizedCommand = normalizeCommand(command);\n \n switch (normalizedCommand) {\n case 'help':\n case 'h':\n case '?':\n return handleHelp(args, ctx);\n \n case 'init':\n case 'i':\n return handleInit(args, ctx);\n \n case 'model':\n case 'm':\n return handleModel(args, ctx);\n \n case 'update':\n case 'u':\n return handleUpdate(args, ctx);\n \n case 'clear':\n case 'c':\n return handleClear(args, ctx);\n \n case 'exit':\n case 'e':\n case 'q':\n case 'quit':\n return handleExit(args, ctx);\n \n case 'new':\n case 'n':\n return handleNew(args, ctx);\n \n case 'version':\n case 'v':\n return {\n output: chalk.cyan(`sf-cli v${VERSION}`),\n };\n \n default:\n // 检查是否是 opsx 命令\n if (normalizedCommand.startsWith('opsx:')) {\n return handleOpsx(normalizedCommand, args, ctx);\n }\n \n return {\n output: chalk.red(`未知命令: /${command}`) +\n chalk.gray('\\n输入 /help 查看可用命令'),\n };\n }\n}\n\nfunction normalizeCommand(command: string): string {\n return command.toLowerCase().trim();\n}\n","/**\n * /init 命令\n * 初始化接管项目,生成 AGENTS.md 和 OpenSpec 结构\n */\n\nimport chalk from 'chalk';\nimport * as fs from 'fs/promises';\nimport * as fsSync from 'fs';\nimport * as path from 'path';\nimport { ExecutorContext } from '../cli/executor';\nimport { CommandResult } from './runner';\nimport { NormsManager, ScanResult } from '../norms';\n\nexport interface InitOptions {\n force?: boolean;\n}\n\nexport interface ProjectAnalysis {\n name: string;\n type: ProjectType;\n framework: string | null;\n techStack: string[];\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n structure: DirectoryStructure;\n entryPoints: string[];\n hasTypeScript: boolean;\n hasTests: boolean;\n hasEslint: boolean;\n hasPrettier: boolean;\n}\n\nexport type ProjectType = \n | 'web-app' \n | 'library' \n | 'cli' \n | 'mobile' \n | 'desktop' \n | 'unknown';\n\nexport interface DirectoryStructure {\n src: string[];\n tests: string[];\n configs: string[];\n docs: string[];\n others: string[];\n}\n\nexport async function handleInit(\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const options: InitOptions = {\n force: args.includes('-f') || args.includes('--force'),\n };\n \n return initProject(options, ctx.options.workingDirectory);\n}\n\nexport async function initProject(\n options: InitOptions = {},\n workingDir?: string\n): Promise<CommandResult> {\n const cwd = workingDir || process.cwd();\n \n // 验证工作目录\n try {\n const stats = await fs.stat(cwd);\n if (!stats.isDirectory()) {\n return {\n output: chalk.red(`错误: ${cwd} 不是有效目录`),\n };\n }\n } catch {\n return {\n output: chalk.red(`错误: 目录不存在或无权限访问 ${cwd}`),\n };\n }\n \n const sfCliDir = path.join(cwd, '.sf-cli');\n const openspecDir = path.join(cwd, 'openspec');\n const agentsMdPath = path.join(cwd, 'AGENTS.md');\n \n try {\n // 检查是否已存在 AGENTS.md\n const agentsExists = await fileExists(agentsMdPath);\n \n if (agentsExists && !options.force) {\n return {\n output: chalk.yellow('项目已初始化') +\n chalk.gray('\\nAGENTS.md 已存在,使用 --force 重新初始化'),\n };\n }\n \n // 创建 .sf-cli 目录结构\n await createSfCliDirectory(sfCliDir);\n \n // 创建 OpenSpec 目录结构\n await createOpenSpecDirectory(openspecDir);\n \n // 分析项目结构\n const projectInfo = await analyzeProject(cwd);\n \n // 保存项目分析结果\n await saveProjectAnalysis(sfCliDir, projectInfo);\n \n // 学习项目规范\n const normsManager = new NormsManager({\n projectPath: cwd,\n normsDir: sfCliDir,\n });\n await normsManager.initialize();\n const scanResult = await normsManager.scanProject(cwd);\n \n // 生成 AGENTS.md\n const agentsContent = generateAgentsMd(projectInfo, scanResult);\n await fs.writeFile(agentsMdPath, agentsContent, 'utf-8');\n \n // 生成 OpenSpec config.yaml\n await generateOpenSpecConfig(openspecDir, projectInfo);\n \n return {\n output: chalk.green('✓ 项目初始化完成\\n') +\n chalk.gray(` 项目类型: ${projectInfo.type}\\n`) +\n chalk.gray(` 技术框架: ${projectInfo.framework || '未识别'}\\n`) +\n chalk.gray(` 扫描文件: ${scanResult.filesScanned} 个\\n`) +\n chalk.gray(` 发现模式: ${scanResult.patternsFound} 个\\n`) +\n chalk.gray(` 提取规范: ${scanResult.standardsExtracted} 个\\n`) +\n chalk.gray(` 已生成: AGENTS.md, .sf-cli/, openspec/`),\n };\n } catch (error) {\n const err = error as NodeJS.ErrnoException;\n if (err.code === 'EACCES') {\n return {\n output: chalk.red(`错误: 无权限写入目录 ${cwd}`),\n };\n }\n return {\n output: chalk.red(`初始化失败: ${(error as Error).message}`),\n };\n }\n}\nasync function createSfCliDirectory(basePath: string): Promise<void> {\n const dirs = [\n '',\n 'history/conversations',\n 'history/tasks',\n 'cache/context',\n 'cache/analysis',\n 'cache/tokens',\n 'agents/custom',\n 'agents/prompts',\n 'skills/installed',\n 'artifacts/diagrams',\n 'artifacts/specs',\n 'artifacts/reports',\n 'norms/weekly',\n 'health/history',\n 'logs',\n ];\n \n for (const dir of dirs) {\n await fs.mkdir(path.join(basePath, dir), { recursive: true });\n }\n \n // 创建配置文件\n const config = {\n version: '1.0.0',\n model: 'GLM-5',\n yolo: false,\n createdAt: new Date().toISOString(),\n };\n \n await fs.writeFile(\n path.join(basePath, 'config.json'),\n JSON.stringify(config, null, 2),\n 'utf-8'\n );\n \n // 创建注册表文件\n await fs.writeFile(\n path.join(basePath, 'agents', 'registry.json'),\n JSON.stringify({ version: '1.0.0', agents: {} }, null, 2),\n 'utf-8'\n );\n \n await fs.writeFile(\n path.join(basePath, 'skills', 'registry.json'),\n JSON.stringify({ version: '1.0.0', skills: {} }, null, 2),\n 'utf-8'\n );\n \n // 创建健康报告模板\n await fs.writeFile(\n path.join(basePath, 'health', 'health.md'),\n generateHealthTemplate(),\n 'utf-8'\n );\n}\n\nasync function createOpenSpecDirectory(basePath: string): Promise<void> {\n const changesDir = path.join(basePath, 'changes');\n const archiveDir = path.join(changesDir, 'archive');\n const specDir = path.join(basePath, 'spec');\n \n await fs.mkdir(archiveDir, { recursive: true });\n await fs.mkdir(specDir, { recursive: true });\n}\n\nexport async function analyzeProject(cwd: string): Promise<ProjectAnalysis> {\n const result: ProjectAnalysis = {\n name: path.basename(cwd),\n type: 'unknown',\n framework: null,\n techStack: [],\n dependencies: {},\n devDependencies: {},\n structure: {\n src: [],\n tests: [],\n configs: [],\n docs: [],\n others: [],\n },\n entryPoints: [],\n hasTypeScript: false,\n hasTests: false,\n hasEslint: false,\n hasPrettier: false,\n };\n \n // 读取 package.json\n const pkgPath = path.join(cwd, 'package.json');\n try {\n const pkgContent = await fs.readFile(pkgPath, 'utf-8');\n const pkg = JSON.parse(pkgContent);\n \n result.name = pkg.name || result.name;\n result.dependencies = pkg.dependencies || {};\n result.devDependencies = pkg.devDependencies || {};\n \n // 检测技术栈\n result.techStack = detectTechStack(result.dependencies, result.devDependencies);\n result.framework = detectFramework(result.dependencies, result.devDependencies);\n result.type = detectProjectType(pkg, result.framework);\n \n // 检测 TypeScript\n result.hasTypeScript = 'typescript' in result.devDependencies;\n \n // 检测测试框架\n result.hasTests = detectTestFramework(result.devDependencies) !== null;\n \n // 检测 ESLint 和 Prettier\n result.hasEslint = 'eslint' in result.devDependencies;\n result.hasPrettier = 'prettier' in result.devDependencies;\n } catch (e) {\n const err = e as NodeJS.ErrnoException;\n if (err.code !== 'ENOENT') {\n console.warn(`警告: 无法解析 package.json - ${(e as Error).message}`);\n }\n // package.json 不存在或解析失败,使用默认值\n }\n \n // 分析目录结构\n result.structure = await analyzeDirectoryStructure(cwd);\n \n // 查找入口文件\n result.entryPoints = await findEntryPoints(cwd);\n \n return result;\n}\n\nexport function detectTechStack(\n deps: Record<string, string>,\n devDeps: Record<string, string>\n): string[] {\n const stack: string[] = [];\n const allDeps = { ...deps, ...devDeps };\n \n // 框架检测\n if ('react' in allDeps) stack.push('React');\n if ('vue' in allDeps) stack.push('Vue');\n if ('svelte' in allDeps) stack.push('Svelte');\n if ('angular' in allDeps || '@angular/core' in allDeps) stack.push('Angular');\n if ('next' in allDeps) stack.push('Next.js');\n if ('nuxt' in allDeps) stack.push('Nuxt.js');\n if ('vite' in allDeps) stack.push('Vite');\n if ('webpack' in allDeps) stack.push('Webpack');\n if ('rollup' in allDeps) stack.push('Rollup');\n \n // 状态管理\n if ('redux' in allDeps) stack.push('Redux');\n if ('mobx' in allDeps) stack.push('MobX');\n if ('zustand' in allDeps) stack.push('Zustand');\n if ('pinia' in allDeps) stack.push('Pinia');\n \n // 样式\n if ('tailwindcss' in allDeps) stack.push('Tailwind CSS');\n if ('styled-components' in allDeps) stack.push('Styled Components');\n if ('sass' in allDeps || 'node-sass' in allDeps) stack.push('Sass');\n if ('less' in allDeps) stack.push('Less');\n \n // 工具库\n if ('lodash' in allDeps) stack.push('Lodash');\n if ('dayjs' in allDeps) stack.push('Day.js');\n if ('axios' in allDeps) stack.push('Axios');\n \n return stack;\n}\n\nexport function detectFramework(\n deps: Record<string, string>,\n devDeps: Record<string, string>\n): string | null {\n const allDeps = { ...deps, ...devDeps };\n \n if ('next' in allDeps) return 'Next.js';\n if ('nuxt' in allDeps) return 'Nuxt.js';\n if ('vue' in allDeps) return 'Vue';\n if ('react' in allDeps) return 'React';\n if ('svelte' in allDeps) return 'Svelte';\n if ('@angular/core' in allDeps) return 'Angular';\n \n return null;\n}\n\nexport function detectProjectType(\n pkg: Record<string, unknown>,\n framework: string | null\n): ProjectType {\n // CLI 工具\n if (pkg.bin) return 'cli';\n \n // 库\n if (pkg.main && !(pkg.scripts && typeof pkg.scripts === 'object' && 'start' in pkg.scripts)) {\n return 'library';\n }\n \n // Web 应用\n if (framework && ['React', 'Vue', 'Angular', 'Svelte', 'Next.js', 'Nuxt.js'].includes(framework)) {\n return 'web-app';\n }\n \n return 'unknown';\n}\n\nfunction detectTestFramework(devDeps: Record<string, string>): string | null {\n if ('vitest' in devDeps) return 'Vitest';\n if ('jest' in devDeps) return 'Jest';\n if ('mocha' in devDeps) return 'Mocha';\n if ('ava' in devDeps) return 'AVA';\n return null;\n}\n\nasync function analyzeDirectoryStructure(cwd: string): Promise<DirectoryStructure> {\n const structure: DirectoryStructure = {\n src: [],\n tests: [],\n configs: [],\n docs: [],\n others: [],\n };\n \n try {\n const entries = await fs.readdir(cwd, { withFileTypes: true });\n \n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n \n const name = entry.name;\n \n if (name === 'src' || name === 'lib') {\n structure.src.push(name);\n } else if (['test', 'tests', '__tests__', 'spec'].includes(name)) {\n structure.tests.push(name);\n } else if (['docs', 'doc', 'documentation'].includes(name)) {\n structure.docs.push(name);\n } else if (['config', 'configs', '.config'].includes(name)) {\n structure.configs.push(name);\n } else if (!name.startsWith('.') && name !== 'node_modules') {\n structure.others.push(name);\n }\n }\n } catch (e) {\n console.warn(`警告: 无法读取目录结构 - ${(e as Error).message}`);\n }\n \n return structure;\n}\n\nasync function findEntryPoints(cwd: string): Promise<string[]> {\n const entryPoints: string[] = [];\n const possibleEntries = [\n 'src/index.ts',\n 'src/index.tsx',\n 'src/index.js',\n 'src/main.ts',\n 'src/main.tsx',\n 'src/main.js',\n 'src/App.tsx',\n 'src/App.vue',\n 'index.ts',\n 'index.js',\n ];\n \n for (const entry of possibleEntries) {\n const fullPath = path.join(cwd, entry);\n if (await fileExists(fullPath)) {\n entryPoints.push(entry);\n }\n }\n \n return entryPoints;\n}\n\nasync function saveProjectAnalysis(\n sfCliDir: string,\n analysis: ProjectAnalysis\n): Promise<void> {\n const analysisPath = path.join(sfCliDir, 'cache', 'analysis', 'project-analysis.json');\n await fs.writeFile(\n analysisPath,\n JSON.stringify(analysis, null, 2),\n 'utf-8'\n );\n}\n\nasync function generateOpenSpecConfig(\n openspecDir: string,\n analysis: ProjectAnalysis\n): Promise<void> {\n const configPath = path.join(openspecDir, 'config.yaml');\n \n const content = `# OpenSpec 项目配置\n# 此文件定义项目的基本信息,用于指导 AI 理解项目上下文\n\nproject:\n name: ${analysis.name}\n type: ${analysis.type}\n framework: ${analysis.framework || 'null'}\n \ntechStack:\n${analysis.techStack.map(t => ` - ${t}`).join('\\n') || ' []'}\n\nentryPoints:\n${analysis.entryPoints.map(e => ` - ${e}`).join('\\n') || ' []'}\n\nconventions:\n typescript: ${analysis.hasTypeScript}\n tests: ${analysis.hasTests}\n eslint: ${analysis.hasEslint}\n prettier: ${analysis.hasPrettier}\n\n# 业务描述 (待补充)\nbusiness:\n description: \"\"\n modules: []\n\n# 架构说明 (待补充) \narchitecture:\n pattern: \"\"\n layers: []\n\n# 开发规范 (从代码中学习)\nstandards: []\n`;\n \n await fs.writeFile(configPath, content, 'utf-8');\n}\n\nfunction generateAgentsMd(info: ProjectAnalysis, scanResult?: ScanResult): string {\n const techStackList = info.techStack.length > 0 \n ? info.techStack.map(t => `| ${t} | ✓ |`).join('\\n')\n : '| 待识别 | - |';\n \n const scanInfo = scanResult \n ? `\n### 1.3 规范学习结果\n\n| 指标 | 值 |\n|------|-----|\n| 扫描文件数 | ${scanResult.filesScanned} |\n| 发现模式数 | ${scanResult.patternsFound} |\n| 提取规范数 | ${scanResult.standardsExtracted} |\n| 扫描耗时 | ${scanResult.duration}ms |\n`\n : '';\n\n return `# 项目业务与架构描述\n\n> 自动生成于: ${new Date().toISOString().split('T')[0]}\n> 版本: v1.0.0\n> 最后更新: ${new Date().toISOString().split('T')[0]}\n\n---\n\n## 一、项目概述\n\n### 1.1 项目基本信息\n\n| 属性 | 值 |\n|------|-----|\n| 项目名称 | ${info.name} |\n| 项目类型 | ${info.type} |\n| 技术框架 | ${info.framework || '待识别'} |\n| TypeScript | ${info.hasTypeScript ? '✓' : '✗'} |\n| 测试框架 | ${info.hasTests ? '✓' : '✗'} |\n| ESLint | ${info.hasEslint ? '✓' : '✗'} |\n| Prettier | ${info.hasPrettier ? '✓' : '✗'} |\n\n### 1.2 技术栈\n\n| 技术 | 状态 |\n|------|------|\n${techStackList}\n${scanInfo}\n### 1.4 项目描述\n\n[待补充项目描述]\n\n---\n\n## 二、业务模块\n\n### 2.1 业务模块概览\n\n[待分析生成]\n\n---\n\n## 三、技术架构\n\n### 3.1 目录结构\n\n\\`\\`\\`\nsrc/ ${info.structure.src.length > 0 ? '✓' : '✗'}\ntests/ ${info.structure.tests.length > 0 ? '✓' : '✗'}\ndocs/ ${info.structure.docs.length > 0 ? '✓' : '✗'}\n\\`\\`\\`\n\n### 3.2 入口文件\n\n${info.entryPoints.map(e => `- \\`${e}\\``).join('\\n') || '待识别'}\n\n---\n\n## 四、开发规范\n\n已从项目代码中学习规范,详见 \\`.sf-cli/devstanded.md\\`\n\n---\n\n## 五、重要约定\n\n[待从对话中沉淀]\n\n---\n\n> 此文档由 sf-cli 自动生成和维护\n`;\n}\n\nfunction generateHealthTemplate(): string {\n return `# 代码健康报告\n\n> 生成时间: ${new Date().toISOString().split('T')[0]}\n\n---\n\n## 总体评分\n\n| 维度 | 评分 | 说明 |\n|------|------|------|\n| 代码质量 | - | 待分析 |\n| 安全性 | - | 待分析 |\n| 性能 | - | 待分析 |\n| 可维护性 | - | 待分析 |\n\n---\n\n## 问题列表\n\n[待分析生成]\n\n---\n\n## 改进建议\n\n[待分析生成]\n\n---\n\n> 此报告由 sf-cli 自动生成\n`;\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport default initProject;\n","/**\n * /help 命令\n * 显示帮助信息\n */\n\nimport chalk from 'chalk';\nimport { ExecutorContext } from '../cli/executor';\nimport { CommandResult } from './runner';\n\n// 命令详情描述\nconst COMMAND_DETAILS: Record<string, { usage: string; description: string; examples: string[] }> = {\n help: {\n usage: '/help [command]',\n description: '显示帮助信息,可指定命令查看详情',\n examples: ['/help', '/help init', '/help model'],\n },\n init: {\n usage: '/init [options]',\n description: '初始化接管项目,生成 AGENTS.md 和 OpenSpec 结构',\n examples: ['/init', '/init --force'],\n },\n new: {\n usage: '/new <requirement> [options]',\n description: '发起新需求开发,启动 OpenSpec 工作流',\n examples: ['/new 实现登录功能', '/new 添加用户模块 --complex'],\n },\n model: {\n usage: '/model [subcommand] [options]',\n description: 'AI 模型选择和配置',\n examples: ['/model', '/model list', '/model set claude-3', '/model verify'],\n },\n update: {\n usage: '/update [options]',\n description: '更新 CLI 到最新版本',\n examples: ['/update', '/update --check', '/update --version'],\n },\n clear: {\n usage: '/clear [options]',\n description: '清空对话历史',\n examples: ['/clear', '/clear -f'],\n },\n exit: {\n usage: '/exit [options]',\n description: '退出 CLI',\n examples: ['/exit', '/exit -f'],\n },\n opsx: {\n usage: '/opsx:<action>',\n description: 'OpenSpec 工作流命令',\n examples: ['/opsx:explore', '/opsx:apply', '/opsx:archive'],\n },\n};\n\nconst VERSION = '1.0.0';\n\nexport async function handleHelp(\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n // 如果指定了命令,显示该命令的详情\n if (args.length > 0) {\n return showCommandHelp(args[0]);\n }\n return showHelp(ctx);\n}\n\nexport function showHelp(ctx?: ExecutorContext): CommandResult {\n const modelInfo = ctx?.options.model || 'GLM-5';\n const yoloStatus = ctx?.options.yolo ? '开启' : '关闭';\n \n const help = `\n${chalk.cyan.bold('sf-cli')} ${chalk.gray(`v${VERSION}`)} - 专为前端开发设计的 AI 驱动 CLI 工具\n\n${chalk.yellow('当前状态:')}\n ${chalk.gray('模型:')} ${modelInfo}\n ${chalk.gray('YOLO:')} ${yoloStatus}\n ${chalk.gray('目录:')} ${ctx?.options.workingDirectory || process.cwd()}\n\n${chalk.yellow('斜杠命令:')}\n ${chalk.green('/help, /h, /?')} 显示帮助信息\n ${chalk.green('/init, /i')} 初始化项目,生成 AGENTS.md\n ${chalk.green('/new, /n')} 发起新需求开发\n ${chalk.green('/model, /m')} 选择 AI 模型\n ${chalk.green('/update, /u')} 更新 CLI 版本\n ${chalk.green('/clear, /c')} 清空对话历史\n ${chalk.green('/exit, /e, /q')} 退出 CLI\n\n${chalk.yellow('OpenSpec 工作流:')}\n ${chalk.green('/opsx:explore')} 探索需求(复杂需求)\n ${chalk.green('/opsx:new')} 设计方案(复杂需求)\n ${chalk.green('/opsx:continue')} 细化实现(复杂需求)\n ${chalk.green('/opsx:apply')} 应用变更\n ${chalk.green('/opsx:archive')} 归档需求\n ${chalk.green('/opsx:propose')} 快速提案(简单需求)\n ${chalk.green('/opsx:status')} 查看工作流状态\n\n${chalk.yellow('特殊语法:')}\n ${chalk.green('@<path>')} 引用文件,如 @src/App.tsx\n ${chalk.green('$<agent>')} 调用 Agent,如 $code-reviewer\n ${chalk.green('!<command>')} 执行 Shell,如 !npm install\n ${chalk.green('yolo')} 切换自动确认模式\n\n${chalk.yellow('内置 Agent:')}\n ${chalk.cyan('$frontend-dev')} 前端开发\n ${chalk.cyan('$code-reviewer')} 代码审核\n ${chalk.cyan('$architect')} 资深前端架构师\n ${chalk.cyan('$tester')} 测试\n\n${chalk.yellow('快捷键:')}\n ↑/↓ 翻阅历史命令\n Tab 自动补全\n Ctrl+C 退出 CLI(按两次确认)\n \\\\ + Enter 多行输入\n\n${chalk.gray('使用 /help <command> 查看命令详情')}\n${chalk.gray('更多信息: https://github.com/sf-cli/sf-cli')}\n`;\n \n return { output: help };\n}\n\nexport function showCommandHelp(command: string): CommandResult {\n // 标准化命令名\n const normalizedName = command.replace(/^\\/+/, '').toLowerCase();\n \n // 特殊处理 opsx 子命令\n if (normalizedName.startsWith('opsx')) {\n return showOpsxHelp();\n }\n \n const details = COMMAND_DETAILS[normalizedName];\n \n if (!details) {\n return {\n output: chalk.yellow(`未找到命令: ${command}`) +\n chalk.gray('\\n使用 /help 查看所有可用命令'),\n };\n }\n \n const help = `\n${chalk.cyan.bold(`/${normalizedName}`)}\n\n${chalk.yellow('用法:')}\n ${details.usage}\n\n${chalk.yellow('描述:')}\n ${details.description}\n\n${chalk.yellow('示例:')}\n${details.examples.map(e => ` ${chalk.green(e)}`).join('\\n')}\n`;\n \n return { output: help };\n}\n\nfunction showOpsxHelp(): CommandResult {\n const help = `\n${chalk.cyan.bold('/opsx')} - OpenSpec 工作流命令\n\n${chalk.yellow('用法:')}\n /opsx:<action> [options]\n\n${chalk.yellow('操作:')}\n ${chalk.green('explore')} 探索需求,分析影响范围(复杂需求第一步)\n ${chalk.green('new')} 设计方案,创建变更记录(复杂需求第二步)\n ${chalk.green('continue')} 细化实现,逐步完成开发(复杂需求第三步)\n ${chalk.green('apply')} 应用变更,执行代码修改\n ${chalk.green('archive')} 归档需求,保存变更记录\n ${chalk.green('propose')} 快速提案(简单需求,一步完成)\n ${chalk.green('status')} 查看当前工作流状态\n\n${chalk.yellow('工作流类型:')}\n ${chalk.cyan('复杂流程:')} explore → new → continue → apply → archive\n ${chalk.cyan('简单流程:')} propose → apply → archive\n\n${chalk.yellow('示例:')}\n ${chalk.green('/opsx:explore')} 开始探索当前需求\n ${chalk.green('/opsx:apply')} 应用当前变更\n ${chalk.green('/opsx:status')} 查看工作流状态\n`;\n \n return { output: help };\n}\n\nexport function getVersion(): string {\n return VERSION;\n}\n\nexport default showHelp;","/**\n * /model 命令\n * 选择和配置AI模型\n */\n\nimport chalk from 'chalk';\nimport { prompt } from 'enquirer';\nimport { ExecutorContext } from '../cli/executor';\nimport { CommandResult } from './runner';\nimport { ConfigManager } from '../services/config';\nimport { ModelService, createAdapter } from '../services';\nimport { AVAILABLE_MODELS, getModelInfo, ModelProvider } from '../types/model';\n\nexport async function handleModel(\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const subCommand = args[0];\n const configManager = ctx.configManager;\n \n switch (subCommand) {\n case 'list':\n return listModels();\n case 'current':\n return showCurrentModel(configManager);\n case 'set':\n return setModelDirectly(args[1], configManager);\n case 'verify':\n return verifyCurrentModel(configManager);\n default:\n return selectModel(configManager);\n }\n}\n\n/**\n * 列出所有可用模型\n */\nexport async function listModels(): Promise<CommandResult> {\n const lines = [chalk.cyan.bold('\\n可用模型列表:\\n')];\n \n const grouped = groupByProvider(AVAILABLE_MODELS);\n \n for (const [provider, models] of Object.entries(grouped)) {\n lines.push(chalk.yellow(`${provider}:`));\n for (const model of models) {\n const info = [\n ` ${chalk.green(model.id)}`,\n chalk.gray(`- ${model.description}`),\n chalk.gray(`(${model.contextWindow.toLocaleString()} tokens)`),\n ].join(' ');\n lines.push(info);\n }\n lines.push('');\n }\n \n return { output: lines.join('\\n') };\n}\n\n/**\n * 显示当前模型配置\n */\nexport async function showCurrentModel(\n configManager: ConfigManager\n): Promise<CommandResult> {\n const currentModel = configManager.get('model');\n const modelInfo = getModelInfo(currentModel);\n \n if (!modelInfo) {\n return {\n output: chalk.yellow(`当前模型: ${currentModel} (未知)`),\n };\n }\n \n const hasApiKey = !!configManager.get('apiKey');\n \n const lines = [\n chalk.cyan.bold('\\n当前模型配置:\\n'),\n `${chalk.green('模型')}: ${modelInfo.name} (${modelInfo.provider})`,\n `${chalk.green('描述')}: ${modelInfo.description}`,\n `${chalk.green('上下文窗口')}: ${modelInfo.contextWindow.toLocaleString()} tokens`,\n `${chalk.green('最大输出')}: ${modelInfo.maxOutputTokens.toLocaleString()} tokens`,\n `${chalk.green('支持工具调用')}: ${modelInfo.supportsTools ? '✓' : '✗'}`,\n `${chalk.green('支持视觉')}: ${modelInfo.supportsVision ? '✓' : '✗'}`,\n `${chalk.green('API Key')}: ${hasApiKey ? '已配置' : chalk.red('未配置')}`,\n ];\n \n return { output: lines.join('\\n') };\n}\n\n/**\n * 直接设置模型\n */\nexport async function setModelDirectly(\n modelId: string,\n configManager: ConfigManager\n): Promise<CommandResult> {\n if (!modelId) {\n return {\n output: chalk.red('请指定模型ID,例如: /model set gpt-4o'),\n };\n }\n \n const modelInfo = getModelInfo(modelId);\n \n if (!modelInfo) {\n return {\n output: chalk.red(`未知的模型: ${modelId}\\n`) +\n chalk.gray('使用 /model list 查看可用模型'),\n };\n }\n \n configManager.set('model', modelId);\n await configManager.save();\n \n return {\n output: chalk.green(`✓ 已切换到模型: ${modelInfo.name} (${modelInfo.provider})`),\n };\n}\n\n/**\n * 验证当前模型配置\n */\nexport async function verifyCurrentModel(\n configManager: ConfigManager\n): Promise<CommandResult> {\n const currentModel = configManager.get('model');\n const apiKey = configManager.get('apiKey');\n \n if (!apiKey) {\n return {\n output: chalk.red('✗ API Key 未配置\\n') +\n chalk.gray('使用 /model 配置 API Key'),\n };\n }\n \n const modelInfo = getModelInfo(currentModel);\n if (!modelInfo) {\n return {\n output: chalk.red(`✗ 未知模型: ${currentModel}`),\n };\n }\n \n try {\n const adapter = createAdapter(modelInfo.provider);\n const isValid = await adapter.validateApiKey(apiKey);\n \n if (isValid) {\n return {\n output: chalk.green(`✓ API Key 验证成功\\n`) +\n chalk.gray(`模型: ${modelInfo.name}`),\n };\n } else {\n return {\n output: chalk.red('✗ API Key 验证失败\\n') +\n chalk.gray('请检查 API Key 是否正确'),\n };\n }\n } catch (error) {\n return {\n output: chalk.red(`✗ 验证失败: ${(error as Error).message}`),\n };\n }\n}\n\n/**\n * 交互式选择模型\n */\nexport async function selectModel(\n configManager: ConfigManager\n): Promise<CommandResult> {\n try {\n const currentModel = configManager.get('model');\n const currentApiKey = configManager.get('apiKey');\n \n // 步骤1: 选择模型\n const modelResponse = await prompt<{ model: string }>({\n type: 'select',\n name: 'model',\n message: '选择AI模型:',\n initial: currentModel,\n choices: AVAILABLE_MODELS.map(m => ({\n name: m.id,\n message: `${m.name} (${m.provider})`,\n hint: m.description,\n })),\n } as any);\n \n const selectedModel = getModelInfo(modelResponse.model);\n if (!selectedModel) {\n return { output: chalk.red('无效的模型选择') };\n }\n \n // 步骤2: 输入API Key(不预填旧值,安全考虑)\n const apiKeyResponse = await prompt<{ apiKey: string }>({\n type: 'password',\n name: 'apiKey',\n message: `输入 ${selectedModel.provider} API Key:`,\n validate: (value: string) => {\n const trimmed = value.trim();\n if (!trimmed) {\n return 'API Key 不能为空';\n }\n if (trimmed.length < 10) {\n return 'API Key 格式不正确';\n }\n if (trimmed.length > 256) {\n return 'API Key 长度超出限制';\n }\n return true;\n },\n } as any);\n \n // 步骤3: 验证API Key\n const spinner = createSpinner('验证 API Key...');\n spinner.start();\n \n try {\n const adapter = createAdapter(selectedModel.provider);\n const isValid = await adapter.validateApiKey(apiKeyResponse.apiKey);\n \n spinner.stop();\n \n if (!isValid) {\n return {\n output: chalk.red('✗ API Key 验证失败\\n') +\n chalk.gray('请检查 API Key 是否正确'),\n };\n }\n } catch (error) {\n spinner.stop();\n \n // 处理适配器未实现的情况\n const errorMessage = (error as Error).message;\n if (errorMessage.includes('尚未实现') || errorMessage.includes('未实现')) {\n return {\n output: chalk.yellow(`⚠ ${selectedModel.provider} 适配器尚未实现\\n`) +\n chalk.gray('请选择其他模型或等待后续更新'),\n };\n }\n \n return {\n output: chalk.yellow('⚠ 无法验证 API Key,但已保存配置\\n') +\n chalk.gray(`错误: ${errorMessage}`),\n };\n }\n \n // 步骤4: 保存配置\n configManager.set('model', modelResponse.model);\n configManager.set('apiKey', apiKeyResponse.apiKey);\n await configManager.save();\n \n return {\n output: chalk.green(`\\n✓ 模型配置完成\\n`) +\n chalk.gray(` 模型: ${selectedModel.name}\\n`) +\n chalk.gray(` 提供商: ${selectedModel.provider}\\n`) +\n chalk.gray(` API Key: ${maskApiKey(apiKeyResponse.apiKey)}`),\n };\n } catch (error) {\n if ((error as Error).message === 'cancel') {\n return { output: chalk.yellow('\\n已取消模型选择') };\n }\n return { output: chalk.red(`错误: ${(error as Error).message}`) };\n }\n}\n\n// ==================== 辅助函数 ====================\n\nfunction groupByProvider(models: typeof AVAILABLE_MODELS): Record<string, typeof AVAILABLE_MODELS> {\n const grouped: Record<string, typeof AVAILABLE_MODELS> = {};\n \n for (const model of models) {\n const provider = getProviderName(model.provider);\n if (!grouped[provider]) {\n grouped[provider] = [];\n }\n grouped[provider].push(model);\n }\n \n return grouped;\n}\n\nfunction getProviderName(provider: ModelProvider): string {\n const names: Record<ModelProvider, string> = {\n 'glm': '智谱AI',\n 'openai': 'OpenAI',\n 'anthropic': 'Anthropic',\n 'qwen': '阿里云',\n 'deepseek': 'DeepSeek',\n };\n return names[provider] || provider;\n}\n\nfunction maskApiKey(apiKey: string): string {\n if (apiKey.length <= 8) {\n return '*'.repeat(apiKey.length);\n }\n return apiKey.slice(0, 4) + '*'.repeat(apiKey.length - 8) + apiKey.slice(-4);\n}\n\nfunction createSpinner(message: string) {\n return {\n start: () => process.stdout.write(`${message}\\r`),\n stop: () => process.stdout.write(' '.repeat(message.length + 10) + '\\r'),\n };\n}\n\nexport default selectModel;\n","/**\n * 服务模块入口\n */\n\nexport { ConfigManager } from './config';\nexport { ModelService } from './model';\nexport * from './adapters';\nexport * from './mcp';\n","/**\n * /update 命令\n * 更新 CLI 到最新版本\n */\n\nimport chalk from 'chalk';\nimport { spawn } from 'child_process';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { ExecutorContext } from '../cli/executor';\nimport { CommandResult } from './runner';\n\n// 从 package.json 读取版本和包名\nfunction getPackageInfo(): { version: string; name: string } {\n const possiblePaths = [\n path.resolve(__dirname, '..', '..', 'package.json'),\n path.resolve(__dirname, '..', '..', '..', 'package.json'),\n ];\n \n for (const pkgPath of possiblePaths) {\n try {\n if (fs.existsSync(pkgPath)) {\n const content = fs.readFileSync(pkgPath, 'utf-8');\n return JSON.parse(content);\n }\n } catch {\n continue;\n }\n }\n \n return { version: '1.0.0', name: '@nick848/sf-cli' };\n}\n\nconst packageInfo = getPackageInfo();\nconst CURRENT_VERSION = packageInfo.version;\nconst PACKAGE_NAME = packageInfo.name;\n\nexport interface UpdateOptions {\n check?: boolean;\n version?: boolean;\n targetVersion?: string;\n}\n\nexport async function handleUpdate(\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const options: UpdateOptions = {\n check: args.includes('--check') || args.includes('-c'),\n version: args.includes('--version') || args.includes('-v'),\n targetVersion: extractTargetVersion(args),\n };\n \n return updateCLI(options);\n}\n\nexport async function updateCLI(options: UpdateOptions = {}): Promise<CommandResult> {\n // 显示当前版本\n if (options.version) {\n return {\n output: chalk.cyan('sf-cli') + chalk.gray(` v${CURRENT_VERSION}`),\n };\n }\n \n // 检查更新\n if (options.check) {\n return checkForUpdates();\n }\n \n // 执行更新\n return performUpdate(options.targetVersion);\n}\n\n/**\n * 检查是否有更新\n */\nasync function checkForUpdates(): Promise<CommandResult> {\n const lines: string[] = [];\n \n lines.push(chalk.cyan('检查更新...'));\n \n try {\n const latestVersion = await getLatestVersion();\n \n if (!latestVersion) {\n lines.push(chalk.yellow('无法获取最新版本信息'));\n lines.push(chalk.gray('可能原因:'));\n lines.push(chalk.gray(' 1. 包尚未发布到 npm'));\n lines.push(chalk.gray(' 2. 网络连接问题'));\n return { output: lines.join('\\n') };\n }\n \n lines.push(chalk.gray(` 当前版本: v${CURRENT_VERSION}`));\n lines.push(chalk.gray(` 最新版本: v${latestVersion}`));\n \n if (latestVersion === CURRENT_VERSION) {\n lines.push(chalk.green('\\n✓ 已是最新版本'));\n } else {\n lines.push(chalk.yellow('\\n发现新版本!'));\n lines.push(chalk.gray('使用 /update 进行更新'));\n }\n \n } catch (error) {\n lines.push(chalk.red('检查更新失败: ' + (error as Error).message));\n }\n \n return { output: lines.join('\\n') };\n}\n\n/**\n * 执行更新\n */\nasync function performUpdate(targetVersion?: string): Promise<CommandResult> {\n const lines: string[] = [];\n \n lines.push(chalk.cyan('正在更新 sf-cli...'));\n lines.push(chalk.gray(` 包名: ${PACKAGE_NAME}`));\n lines.push(chalk.gray(` 当前版本: v${CURRENT_VERSION}`));\n \n try {\n // 检查是否有更新\n const latestVersion = await getLatestVersion();\n \n // 如果无法获取版本且未指定目标版本\n if (!latestVersion && !targetVersion) {\n lines.push(chalk.yellow('\\n⚠ 无法获取最新版本信息'));\n lines.push(chalk.gray('\\n可能原因:'));\n lines.push(chalk.gray(' 1. 包尚未发布到 npm'));\n lines.push(chalk.gray(' 2. 网络连接问题'));\n lines.push(chalk.gray('\\n您可以尝试手动更新:'));\n lines.push(chalk.cyan(` npm install -g ${PACKAGE_NAME}@latest`));\n return { output: lines.join('\\n') };\n }\n \n // 检查是否已是最新\n if (latestVersion === CURRENT_VERSION && !targetVersion) {\n lines.push(chalk.green('\\n✓ 已是最新版本,无需更新'));\n return { output: lines.join('\\n') };\n }\n \n // 构建安装命令\n const packageSpec = targetVersion \n ? `${PACKAGE_NAME}@${targetVersion}`\n : `${PACKAGE_NAME}@latest`;\n \n lines.push(chalk.gray(` 安装: ${packageSpec}`));\n \n // 执行 npm install\n const installResult = await new Promise<{ success: boolean; output: string }>((resolve) => {\n const proc = spawn('npm', ['install', '-g', packageSpec], {\n stdio: 'pipe',\n shell: true,\n });\n \n let output = '';\n \n proc.stdout?.on('data', (data) => {\n output += data.toString();\n });\n \n proc.stderr?.on('data', (data) => {\n output += data.toString();\n });\n \n proc.on('close', (code) => {\n resolve({\n success: code === 0,\n output,\n });\n });\n \n proc.on('error', (err) => {\n resolve({\n success: false,\n output: err.message,\n });\n });\n });\n \n if (!installResult.success) {\n lines.push(chalk.red('\\n✗ 更新失败'));\n lines.push(chalk.gray(installResult.output));\n lines.push(chalk.gray('\\n您可以尝试手动更新:'));\n lines.push(chalk.cyan(` npm install -g ${PACKAGE_NAME}@latest`));\n return { output: lines.join('\\n') };\n }\n \n lines.push(chalk.green('\\n✓ 更新完成!'));\n lines.push(chalk.gray(` 新版本: v${targetVersion || latestVersion}`));\n lines.push(chalk.gray('\\n请重启 CLI 以使用新版本'));\n \n } catch (error) {\n lines.push(chalk.red('更新失败: ' + (error as Error).message));\n lines.push(chalk.gray('\\n您可以尝试手动更新:'));\n lines.push(chalk.cyan(` npm install -g ${PACKAGE_NAME}@latest`));\n }\n \n return { output: lines.join('\\n') };\n}\n\n/**\n * 获取最新版本号\n */\nasync function getLatestVersion(): Promise<string | null> {\n try {\n const result = await new Promise<string>((resolve, reject) => {\n const proc = spawn('npm', ['view', PACKAGE_NAME, 'version'], {\n stdio: 'pipe',\n shell: true,\n });\n \n let output = '';\n \n proc.stdout?.on('data', (data) => {\n output += data.toString();\n });\n \n proc.on('close', (code) => {\n if (code === 0 && output.trim()) {\n resolve(output.trim());\n } else {\n reject(new Error('Failed to get version'));\n }\n });\n \n proc.on('error', reject);\n \n // 设置超时\n setTimeout(() => {\n proc.kill();\n reject(new Error('Timeout'));\n }, 10000);\n });\n \n return result || null;\n } catch {\n return null;\n }\n}\n\n/**\n * 从参数中提取目标版本\n */\nfunction extractTargetVersion(args: string[]): string | undefined {\n for (const arg of args) {\n if (arg.startsWith('@')) {\n return arg.slice(1);\n }\n }\n return undefined;\n}\n\n/**\n * 获取当前版本\n */\nexport function getVersion(): string {\n return CURRENT_VERSION;\n}\n\nexport default updateCLI;","/**\n * /clear 命令\n * 清空对话历史\n */\n\nimport chalk from 'chalk';\nimport { ExecutorContext } from '../cli/executor';\nimport { CommandResult } from './runner';\n\nexport interface ClearOptions {\n force?: boolean;\n all?: boolean; // 清空所有历史记录(包括持久化的)\n}\n\nexport async function handleClear(\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const options: ClearOptions = {\n force: args.includes('-f') || args.includes('--force'),\n all: args.includes('--all'),\n };\n \n return clearHistory(ctx, options);\n}\n\nexport async function clearHistory(\n ctx: ExecutorContext,\n options: ClearOptions = {}\n): Promise<CommandResult> {\n const { contextManager } = ctx;\n \n // 获取清理前的统计信息\n const messageCount = contextManager.getMessages().length;\n const tokenCount = contextManager.getTokenCount();\n \n // 如果不是强制模式且有内容,需要确认\n if (!options.force && messageCount > 0) {\n return {\n output: chalk.yellow('确定要清空对话历史吗?') +\n chalk.gray(`\\n 当前消息数: ${messageCount}`) +\n chalk.gray(`\\n 当前 Token 数: ${tokenCount}`) +\n chalk.yellow('\\n\\n使用 /clear -f 强制清空'),\n };\n }\n \n // 执行清空\n contextManager.clear();\n \n // 构建输出\n let output = chalk.green('✓ 对话历史已清空');\n \n if (messageCount > 0) {\n output += chalk.gray(`\\n 已清空消息: ${messageCount} 条`);\n output += chalk.gray(`\\n 已释放 Token: ${tokenCount}`);\n }\n \n // 如果指定了 --all,也清空持久化历史\n if (options.all) {\n output += chalk.gray('\\n 已清空所有历史记录');\n // TODO: 清空持久化的历史记录\n }\n \n return { output };\n}\n\nexport default clearHistory;","/**\n * /exit 命令\n * 退出 CLI\n */\n\nimport chalk from 'chalk';\nimport { ExecutorContext } from '../cli/executor';\nimport { CommandResult } from './runner';\n\nexport interface ExitOptions {\n force?: boolean;\n}\n\nexport async function handleExit(\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const options: ExitOptions = {\n force: args.includes('-f') || args.includes('--force'),\n };\n \n return exitCLI(ctx, options);\n}\n\nexport async function exitCLI(\n ctx: ExecutorContext,\n options: ExitOptions = {}\n): Promise<CommandResult> {\n const messageCount = ctx.contextManager.getMessages().length;\n \n // 如果不是强制模式,显示确认提示\n if (!options.force) {\n let output = chalk.cyan('确定要退出 sf-cli 吗?');\n \n if (messageCount > 0) {\n output += chalk.yellow(`\\n\\n提示: 当前有 ${messageCount} 条未保存的对话`);\n output += chalk.gray('\\n使用 /exit -f 强制退出');\n }\n \n return { output };\n }\n \n // 构建退出消息\n const lines = [\n chalk.green('✓ 感谢使用 sf-cli!'),\n ];\n \n // 显示会话统计\n if (messageCount > 0) {\n const tokenCount = ctx.contextManager.getTokenCount();\n lines.push(chalk.gray(` 本次会话: ${messageCount} 条消息, ${tokenCount} tokens`));\n }\n \n lines.push('');\n lines.push(chalk.cyan('再见!'));\n \n return {\n output: lines.join('\\n'),\n exit: true,\n };\n}\n\nexport default exitCLI;","/**\n * /opsx:* 命令\n * OpenSpec 工作流命令\n */\n\nimport chalk from 'chalk';\nimport { spawn } from 'child_process';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { ExecutorContext } from '../cli/executor';\nimport { CommandResult } from './runner';\nimport { WorkflowEngine, ConfirmationRequiredError } from '../workflow';\nimport { WorkflowStep } from '../types';\nimport { RollbackReason } from '../workflow/checkpoint';\nimport {\n generateConfirmationPrompt,\n generateRollbackPrompt,\n ConfirmationPointType,\n} from '../workflow/checkpoint';\nimport {\n getAgentsForWorkflowStep,\n AgentDefinition,\n getScheduleRuleDescription,\n SCHEDULE_RULES,\n} from '../agents';\nimport { ScheduleStrategy } from '../agents/scheduler';\n\n// 自动调度开关(可通过配置持久化)\nlet autoScheduleEnabled = true;\n\n// 测试回归配置\ninterface RegressionTestConfig {\n enabled: boolean;\n command: string;\n timeout: number;\n coverageThreshold: number;\n}\n\nconst DEFAULT_REGRESSION_CONFIG: RegressionTestConfig = {\n enabled: true,\n command: 'npm test -- --run',\n timeout: 120000, // 2分钟\n coverageThreshold: 80,\n};\n\nexport function setAutoSchedule(enabled: boolean): void {\n autoScheduleEnabled = enabled;\n}\n\nexport function isAutoScheduleEnabled(): boolean {\n return autoScheduleEnabled;\n}\n\n// 回归测试结果\nexport interface RegressionTestResult {\n success: boolean;\n passed: number;\n failed: number;\n total: number;\n duration: number;\n coverage?: number;\n output: string;\n errors: string[];\n}\n\n/**\n * 执行回归测试\n */\nexport async function runRegressionTest(\n workingDirectory: string,\n config: RegressionTestConfig = DEFAULT_REGRESSION_CONFIG\n): Promise<RegressionTestResult> {\n const startTime = Date.now();\n const result: RegressionTestResult = {\n success: false,\n passed: 0,\n failed: 0,\n total: 0,\n duration: 0,\n output: '',\n errors: [],\n };\n\n return new Promise((resolve) => {\n const proc = spawn(config.command, [], {\n cwd: workingDirectory,\n shell: true,\n stdio: 'pipe',\n });\n\n let stdout = '';\n let stderr = '';\n\n proc.stdout?.on('data', (data) => {\n stdout += data.toString();\n });\n\n proc.stderr?.on('data', (data) => {\n stderr += data.toString();\n });\n\n // 设置超时\n const timeout = setTimeout(() => {\n proc.kill();\n result.errors.push('测试超时');\n result.output = stdout + stderr;\n result.duration = Date.now() - startTime;\n resolve(result);\n }, config.timeout);\n\n proc.on('close', (code) => {\n clearTimeout(timeout);\n result.output = stdout + stderr;\n result.duration = Date.now() - startTime;\n\n // 解析测试结果\n const passMatch = stdout.match(/(\\d+)\\s+(?:passed|tests?\\s+passed)/i);\n const failMatch = stdout.match(/(\\d+)\\s+(?:failed|tests?\\s+failed)/i);\n const totalMatch = stdout.match(/Tests?:\\s*(\\d+)/i);\n\n if (passMatch) {\n result.passed = parseInt(passMatch[1], 10);\n }\n if (failMatch) {\n result.failed = parseInt(failMatch[1], 10);\n }\n if (totalMatch) {\n result.total = parseInt(totalMatch[1], 10);\n } else {\n result.total = result.passed + result.failed;\n }\n\n // 解析覆盖率\n const coverageMatch = stdout.match(/All files[^\\d]*(\\d+(?:\\.\\d+)?)/);\n if (coverageMatch) {\n result.coverage = parseFloat(coverageMatch[1]);\n }\n\n result.success = code === 0 && result.failed === 0;\n resolve(result);\n });\n\n proc.on('error', (err) => {\n clearTimeout(timeout);\n result.errors.push(err.message);\n result.duration = Date.now() - startTime;\n resolve(result);\n });\n });\n}\n\nexport async function handleOpsx(\n command: string,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const step = command.replace('opsx:', '') as \n | 'explore' | 'new' | 'continue' | 'apply' | 'archive' | 'propose' \n | 'status' | 'cancel' | 'rollback' | 'confirm' | 'next' | 'auto' | 'test' \n | 'list' | 'switch';\n\n const workflow = new WorkflowEngine();\n await workflow.initialize(ctx.options.workingDirectory);\n\n switch (step) {\n case 'explore':\n return handleExplore(workflow, args, ctx);\n case 'new':\n return handleNewDesign(workflow, args, ctx);\n case 'continue':\n return handleContinue(workflow, args, ctx);\n case 'apply':\n return handleApply(workflow, args, ctx);\n case 'archive':\n return handleArchive(workflow, args, ctx);\n case 'propose':\n return handlePropose(workflow, args, ctx);\n case 'status':\n return handleStatus(workflow, ctx);\n case 'cancel':\n return handleCancel(workflow, args, ctx);\n case 'rollback':\n return handleRollback(workflow, args, ctx);\n case 'confirm':\n return handleConfirm(workflow, args, ctx);\n case 'next':\n return handleNext(workflow, args, ctx);\n case 'auto':\n return handleAutoSchedule(args);\n case 'test':\n return handleRegressionTest(ctx);\n case 'list':\n return handleList(workflow, ctx);\n case 'switch':\n return handleSwitch(workflow, args, ctx);\n default:\n return {\n output: chalk.red(`未知的OpenSpec命令: /${command}`) +\n chalk.gray('\\n可用命令: /opsx:list, /opsx:status, /opsx:confirm, /opsx:next, /opsx:archive'),\n };\n }\n}\n\n/**\n * 处理回归测试\n */\nasync function handleRegressionTest(ctx: ExecutorContext): Promise<CommandResult> {\n const lines: string[] = [];\n \n lines.push(chalk.cyan('🔍 执行回归测试...'));\n lines.push(chalk.gray(` 工作目录: ${ctx.options.workingDirectory}`));\n lines.push('');\n \n const result = await runRegressionTest(ctx.options.workingDirectory);\n \n lines.push(chalk.gray('─'.repeat(50)));\n \n if (result.success) {\n lines.push(chalk.green('✓ 回归测试通过'));\n } else {\n lines.push(chalk.red('✗ 回归测试失败'));\n }\n \n lines.push('');\n lines.push(chalk.cyan('测试结果:'));\n lines.push(chalk.gray(` 通过: ${result.passed}`));\n lines.push(chalk.gray(` 失败: ${result.failed}`));\n lines.push(chalk.gray(` 总计: ${result.total}`));\n lines.push(chalk.gray(` 耗时: ${(result.duration / 1000).toFixed(2)}s`));\n \n if (result.coverage !== undefined) {\n const coverageColor = result.coverage >= 80 ? chalk.green : \n result.coverage >= 60 ? chalk.yellow : chalk.red;\n lines.push(coverageColor(` 覆盖率: ${result.coverage}%`));\n }\n \n if (result.errors.length > 0) {\n lines.push('');\n lines.push(chalk.red('错误信息:'));\n for (const error of result.errors) {\n lines.push(chalk.gray(` - ${error}`));\n }\n }\n \n if (result.failed > 0) {\n lines.push('');\n lines.push(chalk.yellow('⚠ 存在失败的测试用例,请检查并修复'));\n lines.push(chalk.gray('使用 /opsx:rollback 可回滚到之前的阶段'));\n }\n \n return { output: lines.join('\\n') };\n}\n\n/**\n * 处理自动调度开关\n */\nfunction handleAutoSchedule(args: string[]): CommandResult {\n const action = args[0]?.toLowerCase();\n \n if (!action) {\n return {\n output: chalk.cyan('自动调度状态:') +\n chalk.white(`\\n 当前: ${autoScheduleEnabled ? '✓ 开启' : '✗ 关闭'}`) +\n chalk.gray('\\n\\n用法:') +\n chalk.white('\\n /opsx:auto on - 开启自动调度') +\n chalk.white('\\n /opsx:auto off - 关闭自动调度') +\n chalk.gray('\\n\\n自动调度规则:') +\n chalk.white('\\n explore → $architect (架构设计)') +\n chalk.white('\\n new → $frontend-dev (代码开发)') +\n chalk.white('\\n continue → $frontend-dev (继续开发)') +\n chalk.white('\\n apply → $code-reviewer (代码审查)'),\n };\n }\n \n if (action === 'on') {\n autoScheduleEnabled = true;\n return {\n output: chalk.green('✓ 自动调度已开启') +\n chalk.gray('\\n进入新阶段时将自动提示调用对应的 Agent'),\n };\n }\n \n if (action === 'off') {\n autoScheduleEnabled = false;\n return {\n output: chalk.yellow('✓ 自动调度已关闭') +\n chalk.gray('\\n需要手动调用 Agent 执行任务'),\n };\n }\n \n return {\n output: chalk.red(`未知的参数: ${action}`) +\n chalk.gray('\\n使用 /opsx:auto 查看用法'),\n };\n}\n\nasync function handleExplore(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n\n if (state) {\n const allowed = workflow.getAllowedTransitions();\n return {\n output: chalk.yellow(`已有活跃工作流: ${state.id}`) +\n chalk.gray(`\\n当前阶段: ${state.currentStep}`) +\n chalk.gray(`\\n允许的操作: ${allowed.map(a => `/opsx:${a}`).join(', ')}`),\n };\n }\n\n const requirement = args.join(' ');\n if (!requirement) {\n return {\n output: chalk.yellow('用法: /opsx:explore <需求描述>') +\n chalk.gray('\\n示例: /opsx:explore 实现用户登录功能'),\n };\n }\n\n const complexity = args.length > 5 ? 7 : 4;\n const newState = await workflow.start(requirement, complexity);\n\n return {\n output: chalk.green('✓ 已启动复杂工作流') +\n chalk.gray(`\\n工作流ID: ${newState.id}`) +\n chalk.cyan(`\\n当前阶段: explore`) +\n chalk.gray(`\\n复杂度: ${complexity}/10`) +\n chalk.yellow('\\n\\n规范拆解完成后,使用 /opsx:next 进入下一阶段'),\n };\n}\n\nasync function handleNewDesign(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n return handleTransition(workflow, 'new', ctx);\n}\n\nasync function handleContinue(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n return handleTransition(workflow, 'continue', ctx);\n}\n\nasync function handleApply(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n return handleTransition(workflow, 'apply', ctx);\n}\n\nasync function handleTransition(\n workflow: WorkflowEngine,\n targetStep: WorkflowStep,\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n\n if (!state) {\n return {\n output: chalk.red('没有活跃的工作流') +\n chalk.gray('\\n请先使用 /opsx:explore 或 /opsx:propose 启动工作流'),\n };\n }\n\n const allowed = workflow.getAllowedTransitions();\n if (!allowed.includes(targetStep)) {\n return {\n output: chalk.yellow(`当前阶段: ${state.currentStep}`) +\n chalk.gray(`\\n允许的转换: ${allowed.map(a => `/opsx:${a}`).join(', ')}`),\n };\n }\n\n try {\n const transition = await workflow.transition(targetStep);\n\n // 检查是否需要自动调度 Agent\n const autoScheduleHint = getAutoScheduleHint(targetStep, state.requirement);\n\n return {\n output: chalk.green(`✓ 已进入 ${targetStep} 阶段`) +\n chalk.gray(`\\n转换: ${transition.from} → ${transition.to}`) +\n autoScheduleHint +\n chalk.yellow('\\n\\n使用 /opsx:next 继续下一阶段'),\n };\n } catch (e) {\n if (e instanceof ConfirmationRequiredError) {\n return {\n output: chalk.yellow('⚠ 需要确认') +\n chalk.white(`\\n\\n${generateConfirmationPrompt(e.point)}`) +\n chalk.cyan('\\n\\n使用 /opsx:confirm <类型> 确认后继续'),\n };\n }\n throw e;\n }\n}\n\n/**\n * 获取自动调度提示\n */\nfunction getAutoScheduleHint(step: WorkflowStep, requirement: string): string {\n const rule = SCHEDULE_RULES[step];\n \n if (!rule || !autoScheduleEnabled) {\n // 显示手动调用提示\n const agents = getAgentsForWorkflowStep(step);\n if (agents.length > 0) {\n return chalk.magenta('\\n\\n💡 可调用 Agent:') +\n agents.map(a => chalk.white(`\\n $${a.id} - ${a.description}`)).join('');\n }\n return '';\n }\n\n // 显示自动调度信息\n const agentDef = getAgentsForWorkflowStep(step)[0];\n if (!agentDef) return '';\n\n return chalk.cyan('\\n\\n🤖 自动调度:') +\n chalk.white(`\\n 将自动执行 $${rule.agent} (${agentDef.name})`) +\n chalk.gray(`\\n 调用: $${rule.agent} ${requirement.slice(0, 30)}...`) +\n chalk.gray(`\\n 使用 /opsx:auto off 可关闭自动调度`);\n}\n\nasync function handleArchive(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n\n if (!state) {\n return {\n output: chalk.red('没有活跃的工作流'),\n };\n }\n\n const allowed = workflow.getAllowedTransitions();\n if (!allowed.includes('archive')) {\n return {\n output: chalk.yellow(`当前阶段: ${state.currentStep}`) +\n chalk.gray(`\\n允许的转换: ${allowed.map(a => `/opsx:${a}`).join(', ')}`),\n };\n }\n\n // 检查代码审查确认点\n const confirmation = workflow.checkConfirmationNeeded(state.currentStep, 'archive');\n \n if (confirmation.required && !confirmation.confirmed) {\n return {\n output: chalk.yellow('⚠ 需要代码审查确认') +\n chalk.white(`\\n\\n${generateConfirmationPrompt(confirmation.point!)}`) +\n chalk.cyan('\\n\\n使用 /opsx:confirm code-review 确认后归档'),\n };\n }\n\n // 执行回归测试\n const lines: string[] = [];\n lines.push(chalk.cyan('🔍 执行归档前回归测试...'));\n lines.push('');\n \n const testResult = await runRegressionTest(ctx.options.workingDirectory);\n \n if (!testResult.success) {\n lines.push(chalk.red('✗ 回归测试失败'));\n lines.push(chalk.gray(` 通过: ${testResult.passed} | 失败: ${testResult.failed} | 总计: ${testResult.total}`));\n lines.push('');\n lines.push(chalk.yellow('⚠ 归档被阻止'));\n lines.push(chalk.gray('\\n请修复失败的测试用例后重试'));\n lines.push(chalk.gray('使用 /opsx:rollback 可回滚到之前的阶段'));\n lines.push(chalk.gray('使用 /opsx:test 可单独运行回归测试'));\n return { output: lines.join('\\n') };\n }\n \n lines.push(chalk.green('✓ 回归测试通过'));\n lines.push(chalk.gray(` 通过: ${testResult.passed} | 耗时: ${(testResult.duration / 1000).toFixed(2)}s`));\n lines.push('');\n\n const changeId = state.id;\n const summary = args.join(' ') || '完成变更';\n await workflow.archive(summary);\n\n // 自动更新 CHANGELOG.md\n await updateChangelog(ctx.options.workingDirectory, summary, changeId);\n\n lines.push(chalk.green('✓ 工作流已归档') +\n chalk.gray(`\\n变更ID: ${changeId}`) +\n chalk.cyan('\\n\\n归档文档已生成到 openspec/spec/ 目录') +\n chalk.gray('\\nCHANGELOG.md 已更新'));\n\n return { output: lines.join('\\n') };\n}\n\n/**\n * 更新 CHANGELOG.md\n */\nasync function updateChangelog(\n workingDirectory: string,\n summary: string,\n changeId: string\n): Promise<void> {\n try {\n const changelogPath = path.join(workingDirectory, 'CHANGELOG.md');\n const pkgPath = path.join(workingDirectory, 'package.json');\n \n // 读取当前版本\n let version = '1.0.0';\n try {\n const pkgContent = fs.readFileSync(pkgPath, 'utf-8');\n const pkg = JSON.parse(pkgContent);\n version = pkg.version || '1.0.0';\n } catch {\n // 忽略错误,使用默认版本\n }\n \n // 格式化日期\n const today = new Date();\n const dateStr = today.toISOString().split('T')[0];\n \n // 生成 changelog 条目\n const entry = `\\n## v${version} (${dateStr})\\n\\n**变更内容**\\n\\n- ${summary} (${changeId})\\n`;\n \n // 检查 CHANGELOG.md 是否存在\n if (fs.existsSync(changelogPath)) {\n const content = fs.readFileSync(changelogPath, 'utf-8');\n \n // 在第一个版本条目之前插入新条目\n const versionPattern = /^## v\\d+\\.\\d+\\.\\d+/m;\n const match = content.match(versionPattern);\n \n if (match && match.index !== undefined) {\n const newContent = content.slice(0, match.index) + entry + content.slice(match.index);\n fs.writeFileSync(changelogPath, newContent, 'utf-8');\n } else {\n // 没有找到版本条目,追加到文件末尾\n fs.appendFileSync(changelogPath, entry, 'utf-8');\n }\n } else {\n // 文件不存在,创建新文件\n const header = `# Changelog\\n\\nAll notable changes to this project will be documented in this file.\\n`;\n fs.writeFileSync(changelogPath, header + entry, 'utf-8');\n }\n } catch (error) {\n // 更新失败不影响归档流程,静默处理\n }\n}\n\nasync function handlePropose(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n\n if (state) {\n return {\n output: chalk.yellow(`已有活跃工作流: ${state.id}`) +\n chalk.gray('\\n请先完成或取消当前工作流'),\n };\n }\n\n const requirement = args.join(' ');\n if (!requirement) {\n return {\n output: chalk.yellow('用法: /opsx:propose <需求描述>') +\n chalk.gray('\\n示例: /opsx:propose 添加按钮点击事件'),\n };\n }\n\n const complexity = args.length > 3 ? 5 : 3;\n const newState = await workflow.start(requirement, complexity);\n\n return {\n output: chalk.green('✓ 已启动简单工作流') +\n chalk.gray(`\\n工作流ID: ${newState.id}`) +\n chalk.cyan(`\\n当前阶段: propose`) +\n chalk.gray(`\\n复杂度: ${complexity}/10`) +\n chalk.yellow('\\n\\n下一步: /opsx:apply'),\n };\n}\n\nasync function handleStatus(\n workflow: WorkflowEngine,\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n\n if (!state) {\n return {\n output: chalk.gray('当前没有活跃的工作流'),\n };\n }\n\n const stepsDisplay = state.steps.map(s => {\n const icon = s.status === 'completed' ? '✓' :\n s.status === 'running' ? '●' : '○';\n const color = s.status === 'completed' ? chalk.green :\n s.status === 'running' ? chalk.cyan : chalk.gray;\n return color(`${icon} ${s.step}`);\n }).join(' → ');\n\n const allowed = workflow.getAllowedTransitions();\n const rollbackTargets = workflow.getRollbackTargets();\n\n let output = chalk.cyan.bold(`工作流: ${state.title || state.id}`) +\n chalk.gray(`\\n类型: ${state.type} | 复杂度: ${state.complexity}/10`) +\n chalk.white(`\\n\\n进度: ${stepsDisplay}`) +\n chalk.yellow(`\\n\\n允许的操作: ${allowed.map(a => `/opsx:${a}`).join(', ') || '无'}`);\n\n // 显示当前阶段可用的 Agent\n const availableAgents = getAgentsForWorkflowStep(state.currentStep);\n if (availableAgents.length > 0) {\n output += chalk.magenta(`\\n\\n可用 Agent:`);\n for (const agent of availableAgents) {\n output += chalk.white(`\\n $${agent.id} - ${agent.name}`);\n }\n }\n\n if (rollbackTargets.length > 0) {\n output += chalk.red(`\\n回滚: ${rollbackTargets.map(t => `/opsx:rollback ${t}`).join(', ')}`);\n }\n\n // 显示待确认的检查点\n const pendingPoint = workflow.getCurrentConfirmationPoint();\n if (pendingPoint) {\n output += chalk.yellow('\\n\\n⏳ 待确认:') +\n chalk.white(`\\n ${pendingPoint.name}`) +\n chalk.gray(`\\n ${pendingPoint.description}`);\n }\n\n return { output };\n}\n\nasync function handleCancel(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n\n if (!state) {\n return {\n output: chalk.gray('没有活跃的工作流'),\n };\n }\n\n const reason = args.join(' ') || '用户取消';\n await workflow.cancel(reason);\n\n return {\n output: chalk.yellow('✓ 工作流已取消') +\n chalk.gray(`\\n原因: ${reason}`),\n };\n}\n\nasync function handleRollback(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n\n if (!state) {\n return {\n output: chalk.red('没有活跃的工作流'),\n };\n }\n\n const currentStep = state.currentStep;\n const rollbackTargets = workflow.getRollbackTargets();\n\n if (rollbackTargets.length === 0) {\n return {\n output: chalk.yellow(`当前阶段 ${currentStep} 不支持回滚`),\n };\n }\n\n // 特殊处理:propose 阶段回滚到自身 = 重新生成规格\n if (currentStep === 'propose' && rollbackTargets.includes('propose')) {\n return handleRegenerateSpec(workflow, ctx);\n }\n\n // 如果没有指定目标阶段,显示选项\n const targetStep = args[0] as WorkflowStep;\n \n if (!targetStep || !rollbackTargets.includes(targetStep)) {\n return {\n output: generateRollbackPrompt(currentStep) +\n chalk.cyan('\\n\\n用法: /opsx:rollback <目标阶段> <原因>') +\n chalk.gray('\\n原因: code-review-failed | requirement-changed | design-issue | user-request'),\n };\n }\n\n // 解析回滚原因\n const reason = (args[1] as RollbackReason) || 'user-request';\n const description = args.slice(2).join(' ');\n\n const result = await workflow.rollback(targetStep, reason, description);\n\n if (result.success) {\n const reasonDesc = workflow.getRollbackReasonDescription(reason);\n return {\n output: chalk.green('✓ 回滚成功') +\n chalk.gray(`\\n${result.message}`) +\n chalk.cyan(`\\n\\n回滚原因: ${reasonDesc}`) +\n chalk.yellow(`\\n当前阶段: ${targetStep}`) +\n chalk.gray('\\n\\n请重新进行规范拆解和开发'),\n };\n } else {\n return {\n output: chalk.red(`✗ 回滚失败: ${result.message}`),\n };\n }\n}\n\n/**\n * 重新生成规格(propose 阶段专用)\n */\nasync function handleRegenerateSpec(\n workflow: WorkflowEngine,\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n if (!state) {\n return { output: chalk.red('没有活跃的工作流') };\n }\n\n const workingDir = ctx.options.workingDirectory;\n const specPath = path.join(workingDir, 'openspec', 'changes', `${state.id}-spec.md`);\n \n // 清除之前的确认状态\n workflow.confirm('spec-review', 'regenerate');\n \n // 重新分析需求生成规格\n const lines: string[] = [];\n lines.push(chalk.cyan('🔄 重新生成规格...'));\n lines.push('');\n \n // 读取项目上下文重新生成\n const { readProjectContext, analyzeComplexity, generateSpecContent } = await import('./new');\n const context = await readProjectContext(workingDir);\n const analysis = analyzeComplexity(state.requirement, context);\n \n // 生成新的规格内容\n const specContent = await generateSpecContent(state.id, state.requirement, analysis, context);\n \n // 写入规格文件\n await fs.promises.writeFile(specPath, specContent, 'utf-8');\n \n lines.push(chalk.green('✓ 规格已重新生成'));\n lines.push(chalk.gray(`路径: ${specPath}`));\n lines.push('');\n lines.push(chalk.cyan('📋 规格概览:'));\n lines.push(chalk.white(` ${state.requirement}`));\n lines.push('');\n lines.push(chalk.yellow('请检查新的规格文件,确认后输入:'));\n lines.push(chalk.green(' y - 确认规格,进入下一阶段'));\n lines.push(chalk.red(' n - 不满意,再次重新生成'));\n \n return { output: lines.join('\\n') };\n}\n\nasync function handleConfirm(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n\n if (!state) {\n return {\n output: chalk.red('没有活跃的工作流'),\n };\n }\n\n const type = args[0] as ConfirmationPointType;\n \n if (!type) {\n // 显示待确认的检查点\n const pendingPoint = workflow.getCurrentConfirmationPoint();\n \n // 检查是否有规格文件待确认\n const specPath = await checkPendingSpec(ctx.options.workingDirectory, state.id);\n \n if (specPath) {\n return {\n output: chalk.cyan('📋 规格文件待确认') +\n chalk.gray(`\\n\\n规格文件: ${specPath}`) +\n chalk.gray(`\\n\\n请检查规格文件后确认:`) +\n chalk.white('\\n /opsx:confirm spec-review - 确认规格') +\n chalk.white('\\n /opsx:rollback explore - 重新拆分'),\n };\n }\n \n if (pendingPoint) {\n return {\n output: chalk.cyan('待确认的检查点:') +\n chalk.white(`\\n\\n${generateConfirmationPrompt(pendingPoint)}`) +\n chalk.gray(`\\n\\n用法: /opsx:confirm ${pendingPoint.type}`),\n };\n }\n \n return {\n output: chalk.gray('当前没有待确认的检查点'),\n };\n }\n\n const point = workflow.getConfirmationPoint(type);\n \n if (!point) {\n return {\n output: chalk.red(`未知的确认类型: ${type}`) +\n chalk.gray('\\n可用类型: spec-review, architecture, code-review'),\n };\n }\n\n const comment = args.slice(1).join(' ');\n workflow.confirm(type, comment);\n\n const lines: string[] = [];\n lines.push(chalk.green('✓ 已确认'));\n lines.push(chalk.white(`\\n${point.name}`));\n \n if (comment) {\n lines.push(chalk.gray(`\\n备注: ${comment}`));\n }\n \n // 规格确认后自动进入下一阶段\n if (type === 'spec-review') {\n const allowed = workflow.getAllowedTransitions();\n \n if (allowed.length > 0) {\n const nextStep = allowed[0];\n \n try {\n const transition = await workflow.transition(nextStep);\n \n lines.push('');\n lines.push(chalk.cyan(`✓ 已自动进入 ${nextStep} 阶段`));\n lines.push(chalk.gray(`转换: ${transition.from} → ${transition.to}`));\n \n // 显示下一阶段提示\n if (nextStep === 'new') {\n lines.push(chalk.yellow('\\n下一步: 设计方案'));\n lines.push(chalk.gray(' 可调用 $architect 或 $frontend-dev 进行设计'));\n } else if (nextStep === 'apply') {\n lines.push(chalk.yellow('\\n下一步: 执行变更'));\n lines.push(chalk.gray(' 可调用 $frontend-dev 执行代码修改'));\n }\n \n return { output: lines.join('\\n') };\n } catch (e) {\n if (e instanceof ConfirmationRequiredError) {\n // 还有其他确认点需要处理\n lines.push(chalk.yellow('\\n⚠ 还需要确认:') +\n chalk.white(`\\n${generateConfirmationPrompt(e.point)}`) +\n chalk.cyan(`\\n\\n使用 /opsx:confirm ${e.point.type}`));\n return { output: lines.join('\\n') };\n }\n throw e;\n }\n }\n }\n \n lines.push(chalk.yellow('\\n使用 /opsx:next 继续下一阶段'));\n return { output: lines.join('\\n') };\n}\n\n/**\n * 检查是否有待确认的规格文件\n */\nasync function checkPendingSpec(workingDirectory: string, changeId: string): Promise<string | null> {\n const specPath = path.join(workingDirectory, 'openspec', 'changes', `${changeId}-spec.md`);\n \n try {\n await fs.promises.access(specPath);\n return specPath;\n } catch {\n return null;\n }\n}\n\nasync function handleNext(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const state = workflow.getState();\n\n if (!state) {\n return {\n output: chalk.red('没有活跃的工作流'),\n };\n }\n\n const allowed = workflow.getAllowedTransitions();\n\n if (allowed.length === 0) {\n return {\n output: chalk.yellow('工作流已完成或处于最终阶段'),\n };\n }\n\n // 自动选择第一个允许的转换\n const targetStep = allowed[0];\n\n try {\n const transition = await workflow.transition(targetStep);\n\n // 检查是否需要自动调度 Agent\n const autoScheduleHint = getAutoScheduleHint(targetStep, state.requirement);\n\n return {\n output: chalk.green(`✓ 已进入 ${targetStep} 阶段`) +\n chalk.gray(`\\n转换: ${transition.from} → ${transition.to}`) +\n autoScheduleHint,\n };\n } catch (e) {\n if (e instanceof ConfirmationRequiredError) {\n return {\n output: chalk.yellow('⚠ 需要确认') +\n chalk.white(`\\n\\n${generateConfirmationPrompt(e.point)}`) +\n chalk.cyan(`\\n\\n使用 /opsx:confirm ${e.point.type} 确认后再继续`),\n };\n }\n throw e;\n }\n}\n\n/**\n * 列出所有活跃工作流\n */\nasync function handleList(\n workflow: WorkflowEngine,\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const lines: string[] = [];\n \n // 获取所有活跃工作流\n const activeWorkflows = await workflow.getAllActiveWorkflows();\n const currentState = workflow.getState();\n \n if (activeWorkflows.length === 0) {\n return {\n output: chalk.gray('当前没有活跃的工作流') +\n chalk.yellow('\\n\\n使用 /new <需求描述> 启动新工作流'),\n };\n }\n \n lines.push(chalk.cyan.bold(`📋 活跃工作流 (${activeWorkflows.length})`));\n lines.push('');\n \n for (const wf of activeWorkflows) {\n const isCurrent = currentState?.id === wf.id;\n const prefix = isCurrent ? chalk.green('▶ ') : ' ';\n const title = isCurrent ? chalk.white(wf.title) : chalk.gray(wf.title);\n \n const stepIcon = wf.currentStep === 'propose' || wf.currentStep === 'explore' ? '⏳' :\n wf.currentStep === 'apply' ? '🔧' :\n wf.currentStep === 'archive' ? '📦' : '📝';\n \n lines.push(`${prefix}${title}`);\n lines.push(chalk.gray(` ID: ${wf.id}`));\n lines.push(chalk.gray(` 阶段: ${stepIcon} ${wf.currentStep} | 复杂度: ${wf.complexity}/10`));\n \n if (isCurrent) {\n lines.push(chalk.green(' (当前)'));\n }\n lines.push('');\n }\n \n if (activeWorkflows.length > 1) {\n lines.push(chalk.yellow('切换工作流:'));\n lines.push(chalk.gray(' /opsx:switch <变更ID>'));\n }\n \n lines.push(chalk.yellow('\\n操作命令:'));\n lines.push(chalk.gray(' /opsx:status - 查看当前工作流详情'));\n lines.push(chalk.gray(' /opsx:confirm - 确认规格'));\n lines.push(chalk.gray(' /opsx:next - 进入下一阶段'));\n lines.push(chalk.gray(' /opsx:cancel - 取消当前工作流'));\n \n return { output: lines.join('\\n') };\n}\n\n/**\n * 切换工作流\n */\nasync function handleSwitch(\n workflow: WorkflowEngine,\n args: string[],\n ctx: ExecutorContext\n): Promise<CommandResult> {\n const targetId = args[0];\n \n if (!targetId) {\n // 显示可用工作流\n const activeWorkflows = await workflow.getAllActiveWorkflows();\n \n if (activeWorkflows.length === 0) {\n return {\n output: chalk.gray('没有可切换的工作流'),\n };\n }\n \n const lines = [\n chalk.cyan('可用工作流:'),\n '',\n ];\n \n for (const wf of activeWorkflows) {\n lines.push(chalk.white(` ${wf.id}`) + chalk.gray(` - ${wf.title.slice(0, 30)}...`));\n }\n \n lines.push('');\n lines.push(chalk.gray('用法: /opsx:switch <变更ID>'));\n \n return { output: lines.join('\\n') };\n }\n \n // 执行切换\n const success = await workflow.switchTo(targetId);\n \n if (success) {\n const state = workflow.getState();\n return {\n output: chalk.green(`✓ 已切换到工作流: ${targetId}`) +\n chalk.gray(`\\n\\n需求: ${state?.title}`) +\n chalk.cyan(`\\n当前阶段: ${state?.currentStep}`) +\n chalk.yellow('\\n\\n使用 /opsx:status 查看详情'),\n };\n } else {\n return {\n output: chalk.red(`切换失败: 找不到工作流 ${targetId}`) +\n chalk.gray('\\n使用 /opsx:list 查看所有活跃工作流'),\n };\n }\n}\n\nexport default handleOpsx;\n","/**\n * @ 文件引用命令\n * 引用文件上下文\n */\n\nimport chalk from 'chalk';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { ExecutorContext } from '../cli/executor';\n\nexport interface ReferenceResult {\n output: string;\n contextUsed: number;\n}\n\nexport async function handleFileReference(\n filePath: string,\n ctx: ExecutorContext\n): Promise<ReferenceResult> {\n const cwd = ctx.options.workingDirectory;\n const absolutePath = path.isAbsolute(filePath) \n ? filePath \n : path.join(cwd, filePath);\n \n try {\n const stats = await fs.stat(absolutePath);\n \n if (stats.isDirectory()) {\n // 列出目录内容\n const files = await fs.readdir(absolutePath);\n return {\n output: chalk.cyan(`📁 ${filePath}/`) +\n chalk.gray(`\\n${files.slice(0, 20).join('\\n')}`) +\n (files.length > 20 ? chalk.gray(`\\n... 还有 ${files.length - 20} 个文件`) : ''),\n contextUsed: 0,\n };\n }\n \n // 读取文件内容\n const content = await fs.readFile(absolutePath, 'utf-8');\n const lines = content.split('\\n');\n \n // 添加到上下文\n ctx.contextManager.addMessage({\n role: 'user',\n content: `文件 ${filePath}:\\n\\`\\`\\`\\n${content}\\n\\`\\`\\``,\n });\n \n // 显示文件预览\n const preview = lines.slice(0, 50).join('\\n');\n const truncated = lines.length > 50;\n \n return {\n output: chalk.cyan(`📄 ${filePath}`) +\n chalk.gray(` (${lines.length} 行)`) +\n chalk.gray(`\\n\\`\\`\\`\\n${preview}`) +\n (truncated ? chalk.gray(`\\n... 省略 ${lines.length - 50} 行`) : '') +\n chalk.gray('\\n```'),\n contextUsed: content.length,\n };\n } catch (error) {\n return {\n output: chalk.red(`无法读取文件: ${(error as Error).message}`),\n contextUsed: 0,\n };\n }\n}\n\nexport default handleFileReference;\n","/**\n * ! Shell命令\n * 执行系统命令\n */\n\nimport chalk from 'chalk';\nimport { spawn } from 'child_process';\nimport { ExecutorContext } from '../cli/executor';\n\nexport interface ShellResult {\n output: string;\n}\n\nexport async function executeShell(\n command: string,\n ctx: ExecutorContext\n): Promise<ShellResult> {\n // 危险命令检查\n const dangerousCommands = ['rm -rf', 'del /', 'format', 'mkfs', 'dd if='];\n const isDangerous = dangerousCommands.some(cmd => \n command.toLowerCase().includes(cmd.toLowerCase())\n );\n \n if (isDangerous && !ctx.options.yolo) {\n return {\n output: chalk.red('⚠️ 危险命令检测') +\n chalk.yellow(`\\n命令 \"${command}\" 可能会删除重要文件`) +\n chalk.gray('\\n使用 yolo 模式强制执行'),\n };\n }\n \n return new Promise((resolve) => {\n const shell = spawn(command, [], {\n shell: true,\n cwd: ctx.options.workingDirectory,\n });\n \n let stdout = '';\n let stderr = '';\n \n shell.stdout.on('data', (data) => {\n stdout += data.toString();\n });\n \n shell.stderr.on('data', (data) => {\n stderr += data.toString();\n });\n \n shell.on('close', (code) => {\n let output = '';\n \n if (stdout) {\n output += chalk.gray(stdout);\n }\n \n if (stderr) {\n output += chalk.yellow(stderr);\n }\n \n if (code !== 0) {\n output += chalk.red(`\\n退出码: ${code}`);\n }\n \n resolve({ output: output || chalk.gray('(无输出)') });\n });\n \n // 设置超时\n setTimeout(() => {\n shell.kill();\n resolve({\n output: chalk.yellow('命令执行超时,已终止'),\n });\n }, 60000);\n });\n}\n\nexport default executeShell;\n","/**\n * 自然语言处理\n * 处理用户的自然语言输入,包括工作流交互和 AI 对话\n */\n\nimport chalk from 'chalk';\nimport { ExecutorContext } from '../cli/executor';\nimport { handleWorkflowInput, getActiveSession } from './new';\n\nexport interface NaturalResult {\n output: string;\n contextUsed: number;\n}\n\nexport async function handleNaturalLanguage(\n input: string,\n ctx: ExecutorContext\n): Promise<NaturalResult> {\n const trimmedInput = input.trim();\n \n // 检查是否有活跃工作流\n const session = getActiveSession();\n \n if (session) {\n // 尝试处理工作流输入\n const result = await handleWorkflowInput(input, ctx);\n if (result) {\n return {\n output: result.output,\n contextUsed: 0,\n };\n }\n }\n \n // 检查是否配置了 API Key\n const apiKey = ctx.configManager.get('apiKey');\n if (!apiKey) {\n return {\n output: chalk.yellow('⚠️ 未配置 API Key,无法使用 AI 功能') +\n chalk.gray('\\n\\n请先执行 /model 配置模型') +\n chalk.gray('\\n支持: GLM-5, GPT-4o, Claude'),\n contextUsed: 0,\n };\n }\n \n try {\n // 调用 AI 进行对话\n const response = await ctx.modelService.sendMessage(\n [\n {\n role: 'system',\n content: buildSystemPrompt(ctx),\n },\n {\n role: 'user',\n content: trimmedInput,\n },\n ],\n {\n temperature: 0.7,\n maxTokens: 2000,\n }\n );\n \n // 添加到上下文\n ctx.contextManager.addMessage({\n role: 'user',\n content: trimmedInput,\n });\n ctx.contextManager.addMessage({\n role: 'assistant',\n content: response.content,\n });\n \n return {\n output: response.content,\n contextUsed: response.usage?.totalTokens || 0,\n };\n } catch (error) {\n const errorMessage = (error as Error).message;\n \n // 处理常见错误\n if (errorMessage.includes('未配置') || errorMessage.includes('未初始化')) {\n return {\n output: chalk.yellow('⚠️ 模型未正确配置') +\n chalk.gray('\\n\\n请执行 /model 重新配置'),\n contextUsed: 0,\n };\n }\n \n if (errorMessage.includes('timeout') || errorMessage.includes('超时')) {\n return {\n output: chalk.red('✗ 请求超时,请稍后重试'),\n contextUsed: 0,\n };\n }\n \n return {\n output: chalk.red(`✗ 处理失败: ${errorMessage}`),\n contextUsed: 0,\n };\n }\n}\n\n/**\n * 构建系统提示词\n */\nfunction buildSystemPrompt(ctx: ExecutorContext): string {\n const parts: string[] = [\n '你是 sf-cli 的 AI 助手,一个专业的软件开发助手。',\n '',\n '你可以帮助用户:',\n '1. 理解和分析需求',\n '2. 提供代码建议和实现方案',\n '3. 回答技术问题',\n '4. 辅助进行代码审查',\n '',\n '当前项目信息:',\n `- 工作目录: ${ctx.options.workingDirectory}`,\n `- 模型: ${ctx.modelService.getCurrentModel() || '未指定'}`,\n ];\n \n return parts.join('\\n');\n}\n\nexport default handleNaturalLanguage;","/**\n * 自动补全器\n * 提供命令、文件路径、历史记录的自动补全\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { CommandParser, CommandType } from './parser';\n\nexport interface CompletionItem {\n text: string;\n displayText: string;\n description?: string;\n type: 'command' | 'agent' | 'file' | 'directory' | 'history' | 'option';\n}\n\nexport interface CompletionResult {\n items: CompletionItem[];\n start: number;\n end: number;\n}\n\nexport interface CompleterOptions {\n workingDirectory: string;\n history: string[];\n}\n\n/**\n * 自动补全器类\n */\nexport class Completer {\n private parser: CommandParser;\n private workingDirectory: string;\n private history: string[];\n private commandCache: CompletionItem[] | null = null;\n private agentCache: CompletionItem[] | null = null;\n\n // 斜杠命令列表\n private readonly slashCommands: CompletionItem[] = [\n { text: '/help', displayText: '/help', description: '显示帮助信息', type: 'command' },\n { text: '/init', displayText: '/init', description: '初始化项目', type: 'command' },\n { text: '/new', displayText: '/new', description: '创建新需求', type: 'command' },\n { text: '/model', displayText: '/model', description: '配置模型', type: 'command' },\n { text: '/update', displayText: '/update', description: '检查更新', type: 'command' },\n { text: '/clear', displayText: '/clear', description: '清空对话', type: 'command' },\n { text: '/exit', displayText: '/exit', description: '退出CLI', type: 'command' },\n // opsx 子命令\n { text: '/opsx:explore', displayText: '/opsx:explore', description: '探索需求 (复杂流程)', type: 'command' },\n { text: '/opsx:new', displayText: '/opsx:new', description: '进入设计阶段', type: 'command' },\n { text: '/opsx:continue', displayText: '/opsx:continue', description: '继续开发', type: 'command' },\n { text: '/opsx:apply', displayText: '/opsx:apply', description: '应用变更', type: 'command' },\n { text: '/opsx:archive', displayText: '/opsx:archive', description: '归档总结', type: 'command' },\n { text: '/opsx:propose', displayText: '/opsx:propose', description: '简单需求流程', type: 'command' },\n { text: '/opsx:status', displayText: '/opsx:status', description: '查看工作流状态', type: 'command' },\n { text: '/opsx:cancel', displayText: '/opsx:cancel', description: '取消工作流', type: 'command' },\n { text: '/opsx:rollback', displayText: '/opsx:rollback', description: '回滚工作流', type: 'command' },\n { text: '/opsx:confirm', displayText: '/opsx:confirm', description: '确认检查点', type: 'command' },\n { text: '/opsx:next', displayText: '/opsx:next', description: '进入下一阶段', type: 'command' },\n { text: '/opsx:auto', displayText: '/opsx:auto', description: '自动调度控制', type: 'command' },\n ];\n\n // Agent 列表\n private readonly agents: CompletionItem[] = [\n { text: '$frontend-dev', displayText: '$frontend-dev', description: '前端开发', type: 'agent' },\n { text: '$code-reviewer', displayText: '$code-reviewer', description: '代码审核', type: 'agent' },\n { text: '$architect', displayText: '$architect', description: '架构师', type: 'agent' },\n { text: '$tester', displayText: '$tester', description: '测试', type: 'agent' },\n ];\n\n constructor(options: CompleterOptions) {\n this.parser = new CommandParser();\n this.workingDirectory = options.workingDirectory;\n this.history = options.history;\n }\n\n /**\n * 获取补全建议\n */\n async complete(input: string): Promise<CompletionResult | null> {\n if (!input) {\n return null;\n }\n\n // 根据输入前缀判断补全类型\n if (input.startsWith('/')) {\n return this.completeSlashCommand(input);\n }\n\n if (input.startsWith('$')) {\n return this.completeAgent(input);\n }\n\n if (input.startsWith('@')) {\n return this.completeFilePath(input);\n }\n\n // 历史记录补全\n return this.completeHistory(input);\n }\n\n /**\n * 斜杠命令补全\n */\n private completeSlashCommand(input: string): CompletionResult {\n const partial = input.toLowerCase();\n const matches = this.slashCommands.filter(cmd =>\n cmd.text.toLowerCase().startsWith(partial)\n );\n\n return {\n items: matches,\n start: 0,\n end: input.length,\n };\n }\n\n /**\n * Agent 补全\n */\n private completeAgent(input: string): CompletionResult {\n const partial = input.toLowerCase();\n const matches = this.agents.filter(agent =>\n agent.text.toLowerCase().startsWith(partial)\n );\n\n return {\n items: matches,\n start: 0,\n end: input.length,\n };\n }\n\n /**\n * 文件路径补全\n */\n private async completeFilePath(input: string): Promise<CompletionResult> {\n const filePath = input.slice(1); // 去掉 @\n let dirPath: string;\n let prefix: string;\n\n // 解析目录和前缀\n const lastSlash = Math.max(filePath.lastIndexOf('/'), filePath.lastIndexOf('\\\\'));\n \n if (lastSlash === -1) {\n dirPath = this.workingDirectory;\n prefix = filePath;\n } else {\n const dir = filePath.slice(0, lastSlash);\n dirPath = path.resolve(this.workingDirectory, dir);\n prefix = filePath.slice(lastSlash + 1);\n }\n\n try {\n const entries = await fs.readdir(dirPath, { withFileTypes: true });\n const matches: CompletionItem[] = [];\n\n for (const entry of entries) {\n if (entry.name.startsWith(prefix)) {\n const isDir = entry.isDirectory();\n matches.push({\n text: '@' + path.relative(this.workingDirectory, path.join(dirPath, entry.name)).replace(/\\\\/g, '/') + (isDir ? '/' : ''),\n displayText: entry.name + (isDir ? '/' : ''),\n description: isDir ? '目录' : '文件',\n type: isDir ? 'directory' : 'file',\n });\n }\n }\n\n return {\n items: matches,\n start: 0,\n end: input.length,\n };\n } catch {\n return {\n items: [],\n start: 0,\n end: input.length,\n };\n }\n }\n\n /**\n * 历史记录补全\n */\n private completeHistory(input: string): CompletionResult {\n const partial = input.toLowerCase();\n const matches: CompletionItem[] = [];\n\n // 从历史记录中查找匹配项\n const seen = new Set<string>();\n for (const item of this.history) {\n if (item.toLowerCase().startsWith(partial) && !seen.has(item)) {\n seen.add(item);\n matches.push({\n text: item,\n displayText: item.length > 50 ? item.slice(0, 50) + '...' : item,\n description: '历史命令',\n type: 'history',\n });\n }\n }\n\n // 限制返回数量\n return {\n items: matches.slice(0, 10),\n start: 0,\n end: input.length,\n };\n }\n\n /**\n * 更新历史记录\n */\n updateHistory(history: string[]): void {\n this.history = history;\n }\n\n /**\n * 更新工作目录\n */\n updateWorkingDirectory(dir: string): void {\n this.workingDirectory = dir;\n }\n\n /**\n * 获取所有命令(用于帮助显示)\n */\n getCommands(): CompletionItem[] {\n return [...this.slashCommands];\n }\n\n /**\n * 获取所有Agent(用于帮助显示)\n */\n getAgents(): CompletionItem[] {\n return [...this.agents];\n }\n}\n\n/**\n * 创建 readline 补全函数\n */\nexport function createCompleterFunction(completer: Completer) {\n return async (\n line: string,\n callback: (err: Error | null, completions: [string[], string]) => void\n ) => {\n try {\n const result = await completer.complete(line);\n \n if (!result || result.items.length === 0) {\n callback(null, [[], line]);\n return;\n }\n\n const completions = result.items.map(item => item.text);\n callback(null, [completions, line]);\n } catch (error) {\n callback(error as Error, [[], line]);\n }\n };\n}\n\nexport default Completer;\n"]}