mta-mcp 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/mta.cjs +43 -0
- package/dist/index.cjs +4784 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4769 -0
- package/dist/index.js.map +1 -0
- package/package.json +21 -10
- package/build/core/agentTemplate.d.ts +0 -33
- package/build/core/agentTemplate.d.ts.map +0 -1
- package/build/core/agentTemplate.js +0 -158
- package/build/core/agentTemplate.js.map +0 -1
- package/build/core/analyzers/eslint.d.ts +0 -51
- package/build/core/analyzers/eslint.d.ts.map +0 -1
- package/build/core/analyzers/eslint.js +0 -259
- package/build/core/analyzers/eslint.js.map +0 -1
- package/build/core/analyzers/index.d.ts +0 -9
- package/build/core/analyzers/index.d.ts.map +0 -1
- package/build/core/analyzers/index.js +0 -9
- package/build/core/analyzers/index.js.map +0 -1
- package/build/core/analyzers/registry.d.ts +0 -59
- package/build/core/analyzers/registry.d.ts.map +0 -1
- package/build/core/analyzers/registry.js +0 -241
- package/build/core/analyzers/registry.js.map +0 -1
- package/build/core/analyzers/tsconfig.d.ts +0 -45
- package/build/core/analyzers/tsconfig.d.ts.map +0 -1
- package/build/core/analyzers/tsconfig.js +0 -197
- package/build/core/analyzers/tsconfig.js.map +0 -1
- package/build/core/analyzers/types.d.ts +0 -176
- package/build/core/analyzers/types.d.ts.map +0 -1
- package/build/core/analyzers/types.js +0 -39
- package/build/core/analyzers/types.js.map +0 -1
- package/build/core/analyzers/vite.d.ts +0 -46
- package/build/core/analyzers/vite.d.ts.map +0 -1
- package/build/core/analyzers/vite.js +0 -211
- package/build/core/analyzers/vite.js.map +0 -1
- package/build/core/autoInitializer.d.ts +0 -34
- package/build/core/autoInitializer.d.ts.map +0 -1
- package/build/core/autoInitializer.js +0 -145
- package/build/core/autoInitializer.js.map +0 -1
- package/build/core/codeValidator.d.ts +0 -82
- package/build/core/codeValidator.d.ts.map +0 -1
- package/build/core/codeValidator.js +0 -287
- package/build/core/codeValidator.js.map +0 -1
- package/build/core/enhancedProjectAnalyzer.d.ts +0 -102
- package/build/core/enhancedProjectAnalyzer.d.ts.map +0 -1
- package/build/core/enhancedProjectAnalyzer.js +0 -312
- package/build/core/enhancedProjectAnalyzer.js.map +0 -1
- package/build/core/errors.d.ts +0 -84
- package/build/core/errors.d.ts.map +0 -1
- package/build/core/errors.js +0 -151
- package/build/core/errors.js.map +0 -1
- package/build/core/githubClient.d.ts +0 -26
- package/build/core/githubClient.d.ts.map +0 -1
- package/build/core/githubClient.js +0 -60
- package/build/core/githubClient.js.map +0 -1
- package/build/core/i18nDetector.d.ts +0 -47
- package/build/core/i18nDetector.d.ts.map +0 -1
- package/build/core/i18nDetector.js +0 -314
- package/build/core/i18nDetector.js.map +0 -1
- package/build/core/index.d.ts +0 -11
- package/build/core/index.d.ts.map +0 -1
- package/build/core/index.js +0 -14
- package/build/core/index.js.map +0 -1
- package/build/core/logger.d.ts +0 -91
- package/build/core/logger.d.ts.map +0 -1
- package/build/core/logger.js +0 -164
- package/build/core/logger.js.map +0 -1
- package/build/core/mappings/index.d.ts +0 -5
- package/build/core/mappings/index.d.ts.map +0 -1
- package/build/core/mappings/index.js +0 -5
- package/build/core/mappings/index.js.map +0 -1
- package/build/core/mappings/scenarioMappings.d.ts +0 -51
- package/build/core/mappings/scenarioMappings.d.ts.map +0 -1
- package/build/core/mappings/scenarioMappings.js +0 -105
- package/build/core/mappings/scenarioMappings.js.map +0 -1
- package/build/core/matching/index.d.ts +0 -8
- package/build/core/matching/index.d.ts.map +0 -1
- package/build/core/matching/index.js +0 -8
- package/build/core/matching/index.js.map +0 -1
- package/build/core/matching/intentAnalyzer.d.ts +0 -78
- package/build/core/matching/intentAnalyzer.d.ts.map +0 -1
- package/build/core/matching/intentAnalyzer.js +0 -255
- package/build/core/matching/intentAnalyzer.js.map +0 -1
- package/build/core/matching/standardMatcher.d.ts +0 -101
- package/build/core/matching/standardMatcher.d.ts.map +0 -1
- package/build/core/matching/standardMatcher.js +0 -299
- package/build/core/matching/standardMatcher.js.map +0 -1
- package/build/core/matching/weights.d.ts +0 -64
- package/build/core/matching/weights.d.ts.map +0 -1
- package/build/core/matching/weights.js +0 -334
- package/build/core/matching/weights.js.map +0 -1
- package/build/core/projectContextManager.d.ts +0 -39
- package/build/core/projectContextManager.d.ts.map +0 -1
- package/build/core/projectContextManager.js +0 -147
- package/build/core/projectContextManager.js.map +0 -1
- package/build/core/scenarioDetector.d.ts +0 -2
- package/build/core/scenarioDetector.d.ts.map +0 -1
- package/build/core/scenarioDetector.js +0 -2
- package/build/core/scenarioDetector.js.map +0 -1
- package/build/core/smartAgentMatcher.d.ts +0 -51
- package/build/core/smartAgentMatcher.d.ts.map +0 -1
- package/build/core/smartAgentMatcher.js +0 -493
- package/build/core/smartAgentMatcher.js.map +0 -1
- package/build/core/standardsManager.d.ts +0 -130
- package/build/core/standardsManager.d.ts.map +0 -1
- package/build/core/standardsManager.js +0 -600
- package/build/core/standardsManager.js.map +0 -1
- package/build/core/templates/discovery.d.ts +0 -41
- package/build/core/templates/discovery.d.ts.map +0 -1
- package/build/core/templates/discovery.js +0 -262
- package/build/core/templates/discovery.js.map +0 -1
- package/build/core/templates/types.d.ts +0 -80
- package/build/core/templates/types.d.ts.map +0 -1
- package/build/core/templates/types.js +0 -10
- package/build/core/templates/types.js.map +0 -1
- package/build/core/types.d.ts +0 -57
- package/build/core/types.d.ts.map +0 -1
- package/build/core/types.js +0 -22
- package/build/core/types.js.map +0 -1
- package/build/index.d.ts +0 -3
- package/build/index.d.ts.map +0 -1
- package/build/index.js +0 -576
- package/build/index.js.map +0 -1
- package/build/tools/analyzeProject.d.ts +0 -12
- package/build/tools/analyzeProject.d.ts.map +0 -1
- package/build/tools/analyzeProject.js +0 -85
- package/build/tools/analyzeProject.js.map +0 -1
- package/build/tools/autoSetup.d.ts +0 -15
- package/build/tools/autoSetup.d.ts.map +0 -1
- package/build/tools/autoSetup.js +0 -291
- package/build/tools/autoSetup.js.map +0 -1
- package/build/tools/generateConfig.d.ts +0 -16
- package/build/tools/generateConfig.d.ts.map +0 -1
- package/build/tools/generateConfig.js +0 -379
- package/build/tools/generateConfig.js.map +0 -1
- package/build/tools/generateProjectAgent.d.ts +0 -15
- package/build/tools/generateProjectAgent.d.ts.map +0 -1
- package/build/tools/generateProjectAgent.js +0 -348
- package/build/tools/generateProjectAgent.js.map +0 -1
- package/build/tools/getCompactStandards.d.ts +0 -20
- package/build/tools/getCompactStandards.d.ts.map +0 -1
- package/build/tools/getCompactStandards.js +0 -367
- package/build/tools/getCompactStandards.js.map +0 -1
- package/build/tools/getSmartStandards.d.ts +0 -15
- package/build/tools/getSmartStandards.d.ts.map +0 -1
- package/build/tools/getSmartStandards.js +0 -201
- package/build/tools/getSmartStandards.js.map +0 -1
- package/build/tools/getStandardById.d.ts +0 -42
- package/build/tools/getStandardById.d.ts.map +0 -1
- package/build/tools/getStandardById.js +0 -289
- package/build/tools/getStandardById.js.map +0 -1
- package/build/tools/getTemplate.d.ts +0 -37
- package/build/tools/getTemplate.d.ts.map +0 -1
- package/build/tools/getTemplate.js +0 -78
- package/build/tools/getTemplate.js.map +0 -1
- package/build/tools/healthCheck.d.ts +0 -14
- package/build/tools/healthCheck.d.ts.map +0 -1
- package/build/tools/healthCheck.js +0 -237
- package/build/tools/healthCheck.js.map +0 -1
- package/build/tools/listAgents.d.ts +0 -10
- package/build/tools/listAgents.d.ts.map +0 -1
- package/build/tools/listAgents.js +0 -79
- package/build/tools/listAgents.js.map +0 -1
- package/build/tools/listTemplates.d.ts +0 -41
- package/build/tools/listTemplates.d.ts.map +0 -1
- package/build/tools/listTemplates.js +0 -81
- package/build/tools/listTemplates.js.map +0 -1
- package/build/tools/matchAgents.d.ts +0 -14
- package/build/tools/matchAgents.d.ts.map +0 -1
- package/build/tools/matchAgents.js +0 -70
- package/build/tools/matchAgents.js.map +0 -1
- package/build/tools/queryMappings.d.ts +0 -55
- package/build/tools/queryMappings.d.ts.map +0 -1
- package/build/tools/queryMappings.js +0 -119
- package/build/tools/queryMappings.js.map +0 -1
- package/build/tools/usePreset.d.ts +0 -23
- package/build/tools/usePreset.d.ts.map +0 -1
- package/build/tools/usePreset.js +0 -163
- package/build/tools/usePreset.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../src/index.ts","../src/tools/analyzeProject.ts","../src/core/smartAgentMatcher.ts","../src/core/i18nDetector.ts","../src/core/types.ts","../src/core/githubClient.ts","../src/tools/matchAgents.ts","../src/tools/listAgents.ts","../src/tools/generateConfig.ts","../src/core/codeValidator.ts","../src/tools/autoSetup.ts","../src/tools/getSmartStandards.ts","../src/core/standardsManager.ts","../src/core/autoInitializer.ts","../src/tools/usePreset.ts","../src/tools/healthCheck.ts","../src/tools/getCompactStandards.ts","../src/tools/getStandardById.ts","../src/core/mappings/scenarioMappings.ts","../src/tools/queryMappings.ts","../src/core/templates/discovery.ts","../src/tools/listTemplates.ts","../src/tools/getTemplate.ts","../src/core/errors.ts","../src/core/logger.ts"],"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","#!/usr/bin/env node\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n ListResourcesRequestSchema,\n ReadResourceRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\n\nimport { analyzeProject } from './tools/analyzeProject.js';\nimport { matchAgents } from './tools/matchAgents.js';\nimport { listAvailableAgents } from './tools/listAgents.js';\nimport { generateConfig } from './tools/generateConfig.js';\nimport { autoSetup } from './tools/autoSetup.js';\nimport { getSmartStandards } from './tools/getSmartStandards.js';\nimport { usePreset, listPresets } from './tools/usePreset.js';\nimport { healthCheck } from './tools/healthCheck.js';\nimport { getCompactStandards } from './tools/getCompactStandards.js';\nimport { getStandardById } from './tools/getStandardById.js';\nimport { queryMappings, listScenarios } from './tools/queryMappings.js';\nimport { listTemplates } from './tools/listTemplates.js';\nimport { getTemplate } from './tools/getTemplate.js';\nimport { StandardsManager } from './core/standardsManager.js';\nimport { CodeValidator } from './core/codeValidator.js';\nimport { createLogger, errorResponse } from './core/index.js';\n\nconst SERVER_VERSION = '2.2.0'; // v2.2.0 质量保障系统\n\n// 创建主 Logger\nconst logger = createLogger('Server');\n\n/**\n * Copilot Prompts MCP Server\n * 智能项目分析和编码规范服务\n * \n * @version 1.7.0\n * @features\n * - 项目技术栈自动检测\n * - 智能 Agent 匹配推荐\n * - 配置文件自动生成\n * - 动态编码规范资源\n * - 跨平台 MCP 支持\n * - Phase 4: 傻瓜模式增强\n * * 一键自动配置\n * * 零参数智能推荐\n * * 预设场景快捷方式\n * * 健康检查诊断\n * - v1.1.0: 代码质量保障\n * * 自动语法验证\n * * 代码完整性检查\n * * 自动修复常见错误\n * * 多场景兼容性测试\n */\nclass CopilotPromptsMCPServer {\n private server: Server;\n private standardsManager: StandardsManager;\n private codeValidator: CodeValidator;\n\n constructor() {\n this.standardsManager = new StandardsManager();\n this.codeValidator = new CodeValidator();\n \n this.server = new Server(\n {\n name: 'mta',\n version: SERVER_VERSION,\n },\n {\n capabilities: {\n tools: {},\n resources: {},\n },\n }\n );\n\n this.setupToolHandlers();\n this.setupResourceHandlers();\n this.setupErrorHandlers();\n }\n\n /**\n * 设置错误处理器\n */\n private setupErrorHandlers(): void {\n this.server.onerror = (error) => {\n logger.error('MCP 服务器错误', error);\n };\n\n process.on('SIGINT', async () => {\n logger.info('收到关闭信号,正在关闭服务器...');\n await this.server.close();\n process.exit(0);\n });\n\n process.on('SIGTERM', async () => {\n logger.info('收到终止信号,正在关闭服务器...');\n await this.server.close();\n process.exit(0);\n });\n\n process.on('uncaughtException', (error) => {\n logger.error('未捕获的异常:', error);\n process.exit(1);\n });\n\n process.on('unhandledRejection', (reason, promise) => {\n logger.error('未处理的 Promise 拒绝:', reason);\n process.exit(1);\n });\n }\n\n private setupToolHandlers() {\n // 列出所有可用工具\n this.server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: [\n {\n name: 'analyze_project',\n description: '分析项目的技术栈、框架、工具和特征。自动检测 Vue、React、TypeScript 等技术。路径可选,不填则自动检测当前工作区。',\n inputSchema: {\n type: 'object',\n properties: {\n projectPath: {\n type: 'string',\n description: '项目的绝对路径(可选,不填则使用当前工作目录),例如: /Users/username/projects/my-app',\n },\n },\n },\n },\n {\n name: 'auto_setup',\n description: '🎯 一键自动配置 MCP 服务器和项目规范。自动创建 .vscode/mcp.json、settings.json、extensions.json,并分析项目生成 .github/copilot-instructions.md 配置文件。',\n inputSchema: {\n type: 'object',\n properties: {\n workspacePath: {\n type: 'string',\n description: '工作区路径(可选,不填则使用当前目录)',\n },\n generateInstructions: {\n type: 'boolean',\n description: '是否自动生成 copilot-instructions.md(默认 true)',\n default: true,\n },\n },\n },\n },\n {\n name: 'health_check',\n description: '🏥 检查 MCP 服务器健康状态,诊断配置问题。返回详细的健康报告和修复建议。',\n inputSchema: {\n type: 'object',\n properties: {\n workspacePath: {\n type: 'string',\n description: '工作区路径(可选)',\n },\n verbose: {\n type: 'boolean',\n description: '是否显示详细信息(默认 false)',\n },\n },\n },\n },\n {\n name: 'get_smart_standards',\n description: '🧠 零参数智能规范推荐。自动检测当前文件类型、导入、场景,推荐最相关的编码规范。比手动指定参数更简单。',\n inputSchema: {\n type: 'object',\n properties: {\n currentFile: {\n type: 'string',\n description: '当前编辑的文件路径(可选)',\n },\n fileContent: {\n type: 'string',\n description: '文件内容(可选,用于分析导入和场景)',\n },\n },\n },\n },\n {\n name: 'use_preset',\n description: '⚡ 使用预设场景快捷获取规范。支持 vue3-component、vue3-form、pinia-store、api-call 等常见场景,一键获取。',\n inputSchema: {\n type: 'object',\n properties: {\n preset: {\n type: 'string',\n enum: ['vue3-component', 'vue3-form', 'vue3-table', 'pinia-store', 'api-call', 'typescript-strict', 'i18n', 'composable'],\n description: '预设场景 ID',\n },\n customImports: {\n type: 'array',\n items: { type: 'string' },\n description: '额外的导入(可选)',\n },\n },\n required: ['preset'],\n },\n },\n {\n name: 'list_presets',\n description: '📋 列出所有可用的预设场景及其说明。',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'match_agents',\n description: '根据项目特征智能匹配最合适的 Copilot Agents。使用加权评分算法。',\n inputSchema: {\n type: 'object',\n properties: {\n projectFeatures: {\n type: 'object',\n description: '项目特征对象(从 analyze_project 获取)',\n properties: {\n frameworks: { type: 'array', items: { type: 'string' } },\n languages: { type: 'array', items: { type: 'string' } },\n tools: { type: 'array', items: { type: 'string' } },\n keywords: { type: 'array', items: { type: 'string' } },\n projectType: { type: 'string' },\n },\n required: ['frameworks', 'languages', 'tools', 'keywords', 'projectType'],\n },\n limit: {\n type: 'number',\n description: '返回的最大 Agent 数量(默认 10)',\n default: 10,\n },\n },\n required: ['projectFeatures'],\n },\n },\n {\n name: 'list_available_agents',\n description: '获取所有可用的 Copilot Agents 列表,包括名称、描述、路径等信息。',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'generate_config',\n description: '为项目生成 Copilot 配置文件(.github/copilot-instructions.md)。可以自动匹配或手动指定 Agents。',\n inputSchema: {\n type: 'object',\n properties: {\n projectPath: {\n type: 'string',\n description: '项目的绝对路径',\n },\n agentIds: {\n type: 'array',\n items: { type: 'string' },\n description: '要应用的 Agent ID 列表(可选,如不提供则自动匹配)',\n },\n autoMatch: {\n type: 'boolean',\n description: '是否自动匹配 Agents(默认 true)',\n default: true,\n },\n updateMode: {\n type: 'string',\n enum: ['merge', 'overwrite'],\n description: '更新模式:merge-保留自定义内容(默认),overwrite-完全覆盖',\n default: 'merge',\n },\n configId: {\n type: 'string',\n description: '配置方案ID(如 strict),会加载对应的详细规则',\n },\n },\n required: ['projectPath'],\n },\n },\n {\n name: 'get_compact_standards',\n description: '🚀 Token 优化版规范获取。支持三种模式:summary(~500 tokens)仅返回规范列表、key-rules(~2000 tokens)返回关键规则摘要、full(完整内容)。默认 key-rules 模式,比完整加载节省 80%+ token。',\n inputSchema: {\n type: 'object',\n properties: {\n currentFile: {\n type: 'string',\n description: '当前文件路径(可选)',\n },\n fileContent: {\n type: 'string',\n description: '文件内容(可选,用于分析)',\n },\n scenario: {\n type: 'string',\n description: '开发场景(可选)',\n },\n mode: {\n type: 'string',\n enum: ['summary', 'key-rules', 'full'],\n description: '返回模式:summary(~500 tokens)、key-rules(~2000 tokens,默认)、full(完整内容)',\n default: 'key-rules',\n },\n },\n },\n },\n {\n name: 'get_relevant_standards',\n description: '根据当前开发上下文,获取相关的编码规范(完整内容)。如需节省 token,请使用 get_compact_standards。',\n inputSchema: {\n type: 'object',\n properties: {\n fileType: {\n type: 'string',\n description: '文件类型(如 vue, ts, tsx, js)',\n },\n imports: {\n type: 'array',\n items: { type: 'string' },\n description: '文件中的 import 语句(如 [\"vue\", \"pinia\", \"element-plus\"])。如果未提供且提供了 fileContent,将自动检测。',\n },\n scenario: {\n type: 'string',\n description: '开发场景描述(如 \"创建表单组件\", \"API 调用\", \"状态管理\")',\n },\n fileContent: {\n type: 'string',\n description: '文件内容(可选)。提供后可自动检测 imports 并根据关键词智能匹配规范。',\n },\n },\n },\n },\n {\n name: 'get_standards_stats',\n description: '获取规范系统的使用统计和性能指标。用于了解最常用的规范组合、缓存命中率、Token 节省情况等。',\n inputSchema: {\n type: 'object',\n properties: {\n includeCache: {\n type: 'boolean',\n description: '是否包含缓存详细信息(默认 false)',\n },\n },\n },\n },\n {\n name: 'get_standard_by_id',\n description: '📖 按 ID 直接获取规范。AI 知道需要什么规范时,直接按 ID 获取,最简洁高效。支持三种模式:summary(摘要)、key-rules(关键规则,默认)、full(完整内容)。',\n inputSchema: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: '规范 ID(如 vue3-composition, element-plus, pinia)',\n },\n ids: {\n type: 'array',\n items: { type: 'string' },\n description: '多个规范 ID,批量获取',\n },\n mode: {\n type: 'string',\n enum: ['summary', 'key-rules', 'full'],\n description: '加载模式:summary(摘要)、key-rules(关键规则,默认)、full(完整内容)',\n default: 'key-rules',\n },\n },\n },\n },\n {\n name: 'query_mappings',\n description: '🗺️ 查询场景-规范映射关系。提供映射信息给 AI 参考,AI 自己决定使用哪些规范。不做\"智能推荐\",只提供数据查询。',\n inputSchema: {\n type: 'object',\n properties: {\n scenario: {\n type: 'string',\n description: '场景名称(如 vue3-form, api-call, pinia-store)',\n },\n fileType: {\n type: 'string',\n description: '文件类型(如 vue, ts, tsx)',\n },\n imports: {\n type: 'array',\n items: { type: 'string' },\n description: '导入的包(如 element-plus, pinia)',\n },\n listAll: {\n type: 'boolean',\n description: '列出所有映射关系',\n },\n },\n },\n },\n {\n name: 'list_scenarios',\n description: '📋 列出所有可用的场景名称。AI 可使用这些场景名称调用 use_preset 或 query_mappings。',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'list_templates',\n description: '📦 列出可用的代码模板。模板是可复用的代码片段,AI 可根据需要选择并应用到目标项目。',\n inputSchema: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n enum: ['api-layer', 'component', 'store', 'composable', 'config', 'types', 'other'],\n description: '按类型筛选',\n },\n framework: {\n type: 'string',\n description: '按框架筛选(如 vue, react)',\n },\n search: {\n type: 'string',\n description: '搜索关键词',\n },\n },\n },\n },\n {\n name: 'get_template',\n description: '📄 获取模板详情和文件内容。AI 可根据配置说明自行修改并应用模板。',\n inputSchema: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: '模板 ID(如 vue/api-layer)',\n },\n includeFiles: {\n type: 'boolean',\n description: '是否包含文件内容(默认 false,只返回配置说明)',\n default: false,\n },\n files: {\n type: 'array',\n items: { type: 'string' },\n description: '指定要获取的文件列表(可选)',\n },\n },\n required: ['id'],\n },\n },\n ],\n }));\n\n // 处理工具调用\n this.server.setRequestHandler(CallToolRequestSchema, async (request) => {\n try {\n const { name, arguments: args } = request.params;\n\n logger.debug(`调用工具: ${name}`);\n logger.debug(`参数:`, args);\n\n switch (name) {\n case 'analyze_project':\n return await analyzeProject(args as any);\n\n case 'auto_setup':\n return await autoSetup(args as any);\n\n case 'health_check':\n return await healthCheck(args as any);\n\n case 'get_smart_standards':\n return await getSmartStandards(args as any);\n\n case 'use_preset':\n return await usePreset(args as any);\n\n case 'list_presets':\n return await listPresets();\n\n case 'match_agents':\n return await matchAgents(args as any);\n\n case 'list_available_agents':\n return await listAvailableAgents();\n\n case 'generate_config':\n return await generateConfig(args as any);\n\n case 'get_compact_standards':\n return await getCompactStandards(args as any);\n\n case 'get_relevant_standards':\n return this.getRelevantStandards(args as any);\n \n case 'get_standards_stats':\n return this.getStandardsStats(args as any);\n\n case 'get_standard_by_id':\n return await getStandardById(args as any);\n\n case 'query_mappings':\n return await queryMappings(args as any);\n\n case 'list_scenarios':\n return await listScenarios();\n\n case 'list_templates':\n return await listTemplates(args as any);\n\n case 'get_template':\n return await getTemplate(args as any);\n\n default:\n throw new Error(`未知工具: ${name}`);\n }\n } catch (error) {\n logger.error(`工具执行失败:`, error);\n return errorResponse(error);\n }\n });\n }\n\n /**\n * 设置资源处理器\n */\n private setupResourceHandlers() {\n // 列出所有可用资源\n this.server.setRequestHandler(ListResourcesRequestSchema, async () => {\n const standards = this.standardsManager.getAvailableStandards();\n \n return {\n resources: standards.map(std => ({\n uri: std.uri,\n name: std.name,\n description: std.description,\n mimeType: 'text/markdown'\n }))\n };\n });\n\n // 读取特定资源\n this.server.setRequestHandler(ReadResourceRequestSchema, async (request) => {\n const { uri } = request.params;\n \n try {\n const content = this.standardsManager.readStandard(uri);\n \n return {\n contents: [{\n uri,\n mimeType: 'text/markdown',\n text: content\n }]\n };\n } catch (error) {\n throw new Error(`无法读取规范 ${uri}: ${error}`);\n }\n });\n }\n\n /**\n * 获取相关编码规范\n */\n private getRelevantStandards(args: {\n fileType?: string;\n imports?: string[];\n scenario?: string;\n }) {\n // 获取相关规范 URI 列表\n const standardUris = this.standardsManager.getRelevantStandards(args);\n \n // 组合规范内容\n const content = this.standardsManager.combineStandards(standardUris);\n \n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n standards: standardUris,\n content: content,\n tokenEstimate: Math.ceil(content.length / 4), // 粗略估算 token 数\n message: `已加载 ${standardUris.length} 个相关规范`\n }, null, 2)\n }]\n };\n }\n \n /**\n * 获取规范系统统计信息(Phase 3)\n */\n private getStandardsStats(args: { includeCache?: boolean }) {\n const usageStats = this.standardsManager.getUsageStats();\n const performanceMetrics = this.standardsManager.getPerformanceMetrics();\n \n const result: any = {\n success: true,\n usage: usageStats,\n performance: performanceMetrics,\n summary: {\n totalCalls: usageStats.totalCalls,\n cacheHitRate: performanceMetrics.cacheHitRate,\n totalTokensSaved: performanceMetrics.totalTokensSaved,\n averageResponseTime: `${performanceMetrics.averageResponseTime.toFixed(2)}ms`\n }\n };\n \n // 如果需要缓存详情\n if (args.includeCache) {\n result.cache = this.standardsManager.getCacheStats();\n }\n \n return {\n content: [{\n type: 'text',\n text: JSON.stringify(result, null, 2)\n }]\n };\n }\n\n async run() {\n const transport = new StdioServerTransport();\n await this.server.connect(transport);\n logger.info(`Copilot Prompts MCP Server v${SERVER_VERSION} 已启动`);\n }\n}\n\n// 启动服务器\nconst server = new CopilotPromptsMCPServer();\nserver.run().catch((error) => {\n logger.error('服务器启动失败:', error);\n process.exit(1);\n});\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport { SmartAgentMatcher } from '../core/smartAgentMatcher';\nimport { I18nDetector } from '../core/i18nDetector';\nimport { ProjectFeatures, ConsoleLogger } from '../core/types';\n\n/**\n * 分析项目工具(Phase 4 增强:支持自动检测 + 国际化检测)\n */\nexport async function analyzeProject(args: { projectPath?: string }): Promise<{\n content: Array<{ type: string; text: string }>;\n}> {\n const logger = new ConsoleLogger();\n \n try {\n // 自动检测项目路径\n let projectPath = args.projectPath;\n \n if (!projectPath) {\n // 使用当前工作目录\n projectPath = process.cwd();\n logger.log(`📍 未指定路径,使用当前目录: ${projectPath}`);\n }\n \n // 验证路径\n if (!fs.existsSync(projectPath)) {\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: `项目路径不存在: ${projectPath}`\n }, null, 2)\n }]\n };\n }\n\n // 创建匹配器并分析项目\n const matcher = new SmartAgentMatcher(logger);\n \n // 模拟 WorkspaceFolder 接口\n const workspaceFolder = {\n uri: { fsPath: projectPath },\n name: path.basename(projectPath),\n index: 0\n };\n\n const features = await matcher.analyzeProject(workspaceFolder as any);\n\n // 检测国际化配置\n logger.log(`🌍 检测国际化配置...`);\n const i18nConfig = await I18nDetector.detect(projectPath);\n\n // 返回分析结果\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n projectPath: projectPath,\n projectName: path.basename(projectPath),\n autoDetected: !args.projectPath,\n features: {\n projectType: features.projectType,\n frameworks: features.frameworks,\n languages: features.languages,\n tools: features.tools,\n keywords: features.keywords\n },\n i18n: {\n enabled: i18nConfig.enabled,\n type: i18nConfig.type,\n configFiles: i18nConfig.configFiles,\n messageFiles: i18nConfig.messageFiles,\n method: i18nConfig.method,\n example: i18nConfig.example,\n tips: i18nConfig.tips\n },\n summary: `检测到 ${features.projectType} 项目,使用 ${features.frameworks.join(', ')} 框架。` +\n `国际化:${i18nConfig.enabled ? `已配置 (${i18nConfig.type})` : '未配置'}`\n }, null, 2)\n }]\n };\n } catch (error) {\n logger.error(`分析项目失败: ${error}`);\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error)\n }, null, 2)\n }]\n };\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport glob from 'fast-glob';\nimport { ProjectFeatures, AgentMetadata, Logger } from './types.js';\n\n/**\n * 工作区文件夹接口(简化版)\n */\ninterface WorkspaceFolder {\n uri: { fsPath: string };\n name: string;\n}\n\n/**\n * 智能 Agent 匹配器\n * 根据项目特征自动推荐和应用合适的 Agents\n */\nexport class SmartAgentMatcher {\n constructor(private logger?: Logger) {}\n\n /**\n * 分析项目特征\n */\n async analyzeProject(workspaceFolder: WorkspaceFolder): Promise<ProjectFeatures> {\n this.log(`🔍 开始分析项目: ${workspaceFolder.name}`);\n\n const features: ProjectFeatures = {\n frameworks: [],\n languages: [],\n tools: [],\n keywords: [],\n projectType: 'unknown'\n };\n\n const rootPath = workspaceFolder.uri.fsPath;\n\n // 优先检测 Flutter 项目\n const pubspecPath = path.join(rootPath, 'pubspec.yaml');\n if (fs.existsSync(pubspecPath)) {\n const pubspecFeatures = this.analyzePubspecYaml(pubspecPath);\n this.mergeFeatures(features, pubspecFeatures);\n features.projectType = 'flutter';\n this.log(`✅ 项目分析完成: ${features.projectType}`);\n return features;\n }\n\n // 分析 package.json\n const packageJsonPath = path.join(rootPath, 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n const packageFeatures = this.analyzePackageJson(packageJsonPath);\n this.mergeFeatures(features, packageFeatures);\n }\n\n // 分析文件结构\n const structureFeatures = await this.analyzeFileStructure(rootPath);\n this.mergeFeatures(features, structureFeatures);\n\n // 推断项目类型\n features.projectType = this.inferProjectType(features);\n\n this.log(`✅ 项目分析完成: ${features.projectType}`);\n\n return features;\n }\n\n /**\n * 分析 package.json\n */\n private analyzePackageJson(packageJsonPath: string): Partial<ProjectFeatures> {\n const features: Partial<ProjectFeatures> = {\n frameworks: [],\n languages: [],\n tools: [],\n keywords: []\n };\n\n try {\n const content = fs.readFileSync(packageJsonPath, 'utf-8');\n const packageJson = JSON.parse(content);\n\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies\n };\n\n // 检测前端框架\n if (allDeps['vue']) features.frameworks!.push('Vue 3');\n if (allDeps['react']) features.frameworks!.push('React');\n if (allDeps['@angular/core']) features.frameworks!.push('Angular');\n if (allDeps['next']) features.frameworks!.push('Next.js');\n if (allDeps['nuxt']) features.frameworks!.push('Nuxt.js');\n if (allDeps['svelte']) features.frameworks!.push('Svelte');\n if (allDeps['solid-js']) features.frameworks!.push('Solid.js');\n if (allDeps['preact']) features.frameworks!.push('Preact');\n if (allDeps['remix']) features.frameworks!.push('Remix');\n if (allDeps['astro']) features.frameworks!.push('Astro');\n \n // 检测后端框架\n if (allDeps['express']) features.frameworks!.push('Express');\n if (allDeps['koa']) features.frameworks!.push('Koa');\n if (allDeps['fastify']) features.frameworks!.push('Fastify');\n if (allDeps['nestjs'] || allDeps['@nestjs/core']) features.frameworks!.push('NestJS');\n if (allDeps['egg']) features.frameworks!.push('Egg.js');\n if (allDeps['midway']) features.frameworks!.push('Midway');\n if (allDeps['hapi']) features.frameworks!.push('Hapi');\n \n // 检测全栈框架\n if (allDeps['meteor']) features.frameworks!.push('Meteor');\n if (allDeps['blitz']) features.frameworks!.push('Blitz.js');\n\n // 检测构建工具\n if (allDeps['vite']) features.tools!.push('Vite');\n if (allDeps['webpack']) features.tools!.push('Webpack');\n if (allDeps['rollup']) features.tools!.push('Rollup');\n if (allDeps['parcel']) features.tools!.push('Parcel');\n if (allDeps['esbuild']) features.tools!.push('ESBuild');\n if (allDeps['turbopack']) features.tools!.push('Turbopack');\n \n // 检测 UI 组件库\n if (allDeps['element-plus']) features.tools!.push('Element Plus');\n if (allDeps['ant-design-vue']) features.tools!.push('Ant Design Vue');\n if (allDeps['antd']) features.tools!.push('Ant Design');\n if (allDeps['@mui/material']) features.tools!.push('Material-UI');\n if (allDeps['naive-ui']) features.tools!.push('Naive UI');\n if (allDeps['vuetify']) features.tools!.push('Vuetify');\n if (allDeps['quasar']) features.tools!.push('Quasar');\n if (allDeps['primevue']) features.tools!.push('PrimeVue');\n if (allDeps['chakra-ui']) features.tools!.push('Chakra UI');\n if (allDeps['@headlessui/react'] || allDeps['@headlessui/vue']) features.tools!.push('Headless UI');\n if (allDeps['daisyui']) features.tools!.push('DaisyUI');\n if (allDeps['shadcn-ui'] || allDeps['@shadcn/ui']) features.tools!.push('Shadcn UI');\n \n // 检测样式工具\n if (allDeps['tailwindcss']) features.tools!.push('Tailwind CSS');\n if (allDeps['sass'] || allDeps['node-sass']) features.tools!.push('Sass');\n if (allDeps['less']) features.tools!.push('Less');\n if (allDeps['postcss']) features.tools!.push('PostCSS');\n if (allDeps['styled-components']) features.tools!.push('Styled Components');\n if (allDeps['emotion']) features.tools!.push('Emotion');\n if (allDeps['unocss']) features.tools!.push('UnoCSS');\n \n // 检测流程图/可视化库\n if (allDeps['@logicflow/core']) features.tools!.push('LogicFlow');\n if (allDeps['echarts']) features.tools!.push('ECharts');\n if (allDeps['d3']) features.tools!.push('D3.js');\n if (allDeps['chart.js']) features.tools!.push('Chart.js');\n if (allDeps['antv'] || allDeps['@antv/g6']) features.tools!.push('AntV');\n \n // 检测编程语言\n if (allDeps['typescript']) features.languages!.push('TypeScript');\n if (packageJson.dependencies?.['react'] || packageJson.devDependencies?.['react']) {\n features.languages!.push('JavaScript');\n }\n\n // 检测国际化\n if (allDeps['vue-i18n'] || allDeps['react-i18n'] || allDeps['i18next'] || allDeps['react-intl']) {\n features.keywords!.push('i18n');\n }\n \n // 检测状态管理\n if (allDeps['pinia'] || allDeps['vuex'] || allDeps['redux'] || allDeps['@reduxjs/toolkit'] ||\n allDeps['mobx'] || allDeps['zustand'] || allDeps['recoil'] || allDeps['jotai']) {\n features.keywords!.push('state-management');\n }\n \n // 检测路由\n if (allDeps['vue-router'] || allDeps['react-router'] || allDeps['react-router-dom'] ||\n allDeps['@tanstack/react-router']) {\n features.keywords!.push('routing');\n }\n \n // 检测数据请求\n if (allDeps['axios'] || allDeps['@tanstack/react-query'] || allDeps['@tanstack/vue-query'] ||\n allDeps['swr'] || allDeps['urql']) {\n features.keywords!.push('data-fetching');\n }\n \n // 检测表单处理\n if (allDeps['formik'] || allDeps['react-hook-form'] || allDeps['vee-validate'] ||\n allDeps['@vuelidate/core']) {\n features.keywords!.push('forms');\n }\n \n // 检测测试工具\n if (allDeps['vitest'] || allDeps['jest'] || allDeps['@testing-library/react'] ||\n allDeps['@testing-library/vue'] || allDeps['cypress'] || allDeps['playwright']) {\n features.keywords!.push('testing');\n }\n \n // 检测移动端\n if (allDeps['vant'] || allDeps['@tarojs/taro'] || allDeps['react-native'] ||\n allDeps['uni-app'] || allDeps['@nutui/nutui']) {\n features.keywords!.push('mobile');\n }\n \n // 检测微信小程序\n if (packageJson.miniprogram || allDeps['@tarojs/taro'] || allDeps['uni-app']) {\n features.keywords!.push('miniprogram');\n features.keywords!.push('wechat');\n }\n \n // 检测数据库/ORM\n if (allDeps['prisma'] || allDeps['typeorm'] || allDeps['sequelize'] || allDeps['mongoose']) {\n features.keywords!.push('database');\n }\n \n // 检测GraphQL\n if (allDeps['graphql'] || allDeps['apollo-client'] || allDeps['@apollo/client']) {\n features.keywords!.push('graphql');\n }\n\n } catch (error) {\n this.log(`解析 package.json 失败: ${error}`);\n }\n\n return features;\n }\n\n /**\n * 分析 pubspec.yaml (Flutter 项目)\n */\n private analyzePubspecYaml(pubspecPath: string): Partial<ProjectFeatures> {\n const features: Partial<ProjectFeatures> = {\n frameworks: ['Flutter'],\n languages: ['Dart'],\n tools: [],\n keywords: []\n };\n\n try {\n const content = fs.readFileSync(pubspecPath, 'utf-8');\n \n // 检测状态管理\n if (content.includes('provider:')) features.keywords!.push('state-management');\n if (content.includes('riverpod:')) features.keywords!.push('state-management');\n if (content.includes('bloc:') || content.includes('flutter_bloc:')) features.keywords!.push('state-management');\n if (content.includes('get:') || content.includes('get_x:')) {\n features.keywords!.push('routing', 'state-management');\n }\n \n // 检测国际化\n if (content.includes('flutter_localizations:') || content.includes('intl:') || content.includes('easy_localization:')) {\n features.keywords!.push('i18n');\n }\n \n // 检测路由\n if (content.includes('go_router:') || content.includes('auto_route:')) features.keywords!.push('routing');\n \n // 检测网络请求\n if (content.includes('dio:') || content.includes('http:')) features.keywords!.push('data-fetching');\n \n // 检测UI库\n if (content.includes('flutter_screenutil:')) features.tools!.push('ScreenUtil');\n \n // 检测测试\n if (content.includes('flutter_test:') || content.includes('mockito:') || content.includes('integration_test:')) {\n features.keywords!.push('testing');\n }\n \n } catch (error) {\n this.log(`解析 pubspec.yaml 失败: ${error}`);\n }\n\n return features;\n }\n\n /**\n * 分析文件结构\n */\n private async analyzeFileStructure(rootPath: string): Promise<Partial<ProjectFeatures>> {\n const features: Partial<ProjectFeatures> = {\n frameworks: [],\n languages: [],\n tools: [],\n keywords: []\n };\n\n try {\n const patterns = [\n '**/*.vue', '**/*.ts', '**/*.tsx', '**/*.jsx', '**/*.js',\n '**/*.py', '**/*.java', '**/*.go', '**/*.rs', '**/*.cpp', '**/*.c',\n '**/locales/**', '**/i18n/**', '**/lang/**',\n '**/stores/**', '**/store/**', '**/redux/**',\n '**/*.test.*', '**/*.spec.*',\n '**/components/**', '**/pages/**', '**/views/**'\n ];\n \n const files = await glob(patterns, {\n cwd: rootPath,\n ignore: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/.git/**'],\n onlyFiles: true\n });\n\n // 检测前端框架\n if (files.some(f => f.endsWith('.vue'))) features.frameworks!.push('Vue');\n if (files.some(f => f.endsWith('.tsx'))) features.frameworks!.push('React');\n if (files.some(f => f.endsWith('.svelte'))) features.frameworks!.push('Svelte');\n \n // 检测编程语言\n if (files.some(f => f.endsWith('.ts') || f.endsWith('.tsx'))) features.languages!.push('TypeScript');\n if (files.some(f => f.endsWith('.js') || f.endsWith('.jsx'))) features.languages!.push('JavaScript');\n if (files.some(f => f.endsWith('.py'))) features.languages!.push('Python');\n if (files.some(f => f.endsWith('.java'))) features.languages!.push('Java');\n if (files.some(f => f.endsWith('.go'))) features.languages!.push('Go');\n if (files.some(f => f.endsWith('.rs'))) features.languages!.push('Rust');\n if (files.some(f => f.match(/\\.(cpp|cc|cxx|c)$/))) features.languages!.push('C/C++');\n \n // 检测国际化\n if (files.some(f => f.includes('/locales/') || f.includes('/i18n/') || f.includes('/lang/'))) {\n features.keywords!.push('i18n');\n }\n \n // 检测状态管理\n if (files.some(f => f.includes('/stores/') || f.includes('/store/') || f.includes('/redux/'))) {\n features.keywords!.push('state-management');\n }\n \n // 检测测试文件\n if (files.some(f => f.includes('.test.') || f.includes('.spec.'))) {\n features.keywords!.push('testing');\n }\n\n } catch (error) {\n this.log(`扫描文件结构失败: ${error}`);\n }\n\n return features;\n }\n\n /**\n * 匹配 Agents\n */\n matchAgents(features: ProjectFeatures, availableAgents: AgentMetadata[]): AgentMetadata[] {\n const scoredAgents = availableAgents.map(agent => {\n const score = this.calculateMatchScore(features, agent);\n return { ...agent, score };\n });\n\n return scoredAgents\n .filter(a => a.score > 0)\n .sort((a, b) => (b.score || 0) - (a.score || 0));\n }\n\n /**\n * 计算匹配分数\n */\n private calculateMatchScore(features: ProjectFeatures, agent: AgentMetadata): number {\n let score = 0;\n\n const WEIGHTS = {\n framework: 10,\n tool: 8,\n language: 5,\n keyword: 3,\n tag: 2\n };\n\n // 框架匹配\n features.frameworks.forEach(f => {\n if (agent.applicableWhen?.frameworks?.some(af => af.toLowerCase().includes(f.toLowerCase()))) {\n score += WEIGHTS.framework;\n }\n });\n\n // 工具匹配\n features.tools.forEach(t => {\n if (agent.applicableWhen?.tools?.some(at => at.toLowerCase().includes(t.toLowerCase()))) {\n score += WEIGHTS.tool;\n }\n });\n\n // 语言匹配\n features.languages.forEach(l => {\n if (agent.applicableWhen?.languages?.some(al => al.toLowerCase().includes(l.toLowerCase()))) {\n score += WEIGHTS.language;\n }\n });\n\n // 关键词匹配\n features.keywords.forEach(k => {\n if (agent.applicableWhen?.keywords?.some(ak => ak.toLowerCase().includes(k.toLowerCase()))) {\n score += WEIGHTS.keyword;\n }\n });\n\n // 标签匹配\n features.frameworks.concat(features.tools, features.languages, features.keywords).forEach(feature => {\n if (agent.tags.some(tag => tag.toLowerCase().includes(feature.toLowerCase()))) {\n score += WEIGHTS.tag;\n }\n });\n\n return score;\n }\n\n /**\n * 解析 Agent 元数据\n */\n parseAgentMetadata(filePath: string, content: string): AgentMetadata {\n const id = path.basename(filePath, '.agent.md');\n \n // 解析 YAML frontmatter\n let description = '';\n let tags: string[] = [];\n\n if (content.startsWith('---')) {\n const endIndex = content.indexOf('---', 3);\n if (endIndex > 0) {\n const frontmatter = content.substring(3, endIndex);\n const descMatch = frontmatter.match(/description:\\s*['\"](.+)['\"]/);\n if (descMatch) description = descMatch[1];\n \n const tagsMatch = frontmatter.match(/tags:\\s*\\[(.+)\\]/);\n if (tagsMatch) {\n tags = tagsMatch[1].split(',').map(t => t.trim().replace(/['\"]/g, ''));\n }\n }\n }\n\n // 提取标题\n const titleMatch = content.match(/^#\\s+(.+)$/m);\n const title = titleMatch ? titleMatch[1] : id;\n\n return {\n id,\n path: filePath,\n title,\n description,\n tags,\n applicableWhen: {\n frameworks: tags.filter(t => \n ['vue', 'vue3', 'react', 'angular', 'next', 'nuxt', 'svelte', 'flutter', \n 'express', 'nestjs', 'koa', 'fastify'].includes(t.toLowerCase())\n ),\n languages: tags.filter(t => \n ['typescript', 'javascript', 'python', 'java', 'go', 'rust', 'dart', 'c++'].includes(t.toLowerCase())\n ),\n tools: tags.filter(t => \n ['vite', 'webpack', 'rollup', 'logicflow', 'element-plus', 'antd', \n 'tailwind', 'sass', 'echarts', 'prisma', 'graphql'].includes(t.toLowerCase())\n ),\n keywords: tags.filter(t => \n ['i18n', 'state-management', 'routing', 'testing', 'mobile', 'miniprogram', \n 'database', 'forms', 'data-fetching'].includes(t.toLowerCase())\n )\n }\n };\n }\n\n private mergeFeatures(target: ProjectFeatures, source: Partial<ProjectFeatures>): void {\n if (source.frameworks) target.frameworks.push(...source.frameworks);\n if (source.languages) target.languages.push(...source.languages);\n if (source.tools) target.tools.push(...source.tools);\n if (source.keywords) target.keywords.push(...source.keywords);\n }\n\n private inferProjectType(features: ProjectFeatures): string {\n // 前端框架\n if (features.frameworks.some(f => f.toLowerCase().includes('vue'))) return 'vue3';\n if (features.frameworks.some(f => f.toLowerCase().includes('react'))) return 'react';\n if (features.frameworks.some(f => f.toLowerCase().includes('angular'))) return 'angular';\n if (features.frameworks.some(f => f.toLowerCase().includes('svelte'))) return 'svelte';\n if (features.frameworks.some(f => f.toLowerCase().includes('next'))) return 'nextjs';\n if (features.frameworks.some(f => f.toLowerCase().includes('nuxt'))) return 'nuxtjs';\n \n // 移动端/跨平台\n if (features.frameworks.some(f => f.toLowerCase().includes('flutter'))) return 'flutter';\n if (features.frameworks.some(f => f.toLowerCase().includes('react-native'))) return 'react-native';\n if (features.keywords.includes('miniprogram')) return 'miniprogram';\n \n // 后端框架\n if (features.frameworks.some(f => f.toLowerCase().includes('nest'))) return 'nestjs';\n if (features.frameworks.some(f => f.toLowerCase().includes('express'))) return 'express';\n if (features.frameworks.some(f => f.toLowerCase().includes('koa'))) return 'koa';\n if (features.frameworks.some(f => f.toLowerCase().includes('fastify'))) return 'fastify';\n \n // 编程语言\n if (features.languages.includes('TypeScript')) return 'typescript';\n if (features.languages.includes('Python')) return 'python';\n if (features.languages.includes('Java')) return 'java';\n if (features.languages.includes('Go')) return 'go';\n if (features.languages.includes('Rust')) return 'rust';\n \n return 'general';\n }\n\n private log(message: string): void {\n this.logger?.log(message);\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport glob from 'fast-glob';\n\n/**\n * 国际化配置信息\n */\nexport interface I18nConfig {\n enabled: boolean; // 是否启用了国际化\n type: 'vue-i18n' | 'flutter-intl' | 'react-i18n' | 'custom' | 'none'; // 国际化方案类型\n configFiles: string[]; // 配置文件路径\n messageFiles: string[]; // 消息文件路径\n method: string; // 使用方法(如 $t、S.of(context))\n example: string; // 使用示例\n tips: string[]; // 提示信息\n}\n\n/**\n * 国际化检测器\n * 支持检测 Vue、Flutter、React 等项目的国际化配置\n */\nexport class I18nDetector {\n /**\n * 检测项目的国际化配置\n */\n static async detect(projectPath: string): Promise<I18nConfig> {\n // 检测 package.json(前端项目)\n const packageJsonPath = path.join(projectPath, 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n return this.detectFrontendI18n(projectPath, packageJsonPath);\n }\n\n // 检测 pubspec.yaml(Flutter 项目)\n const pubspecPath = path.join(projectPath, 'pubspec.yaml');\n if (fs.existsSync(pubspecPath)) {\n return this.detectFlutterI18n(projectPath, pubspecPath);\n }\n\n // 未检测到国际化\n return {\n enabled: false,\n type: 'none',\n configFiles: [],\n messageFiles: [],\n method: '',\n example: '',\n tips: ['项目未配置国际化,建议添加中英双语支持']\n };\n }\n\n /**\n * 检测前端项目的国际化配置(Vue/React)\n */\n private static detectFrontendI18n(projectPath: string, packageJsonPath: string): I18nConfig {\n const content = fs.readFileSync(packageJsonPath, 'utf-8');\n const packageJson = JSON.parse(content);\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies\n };\n\n // 检测 vue-i18n\n if (allDeps['vue-i18n']) {\n return this.detectVueI18n(projectPath);\n }\n\n // 检测 react-i18next\n if (allDeps['react-i18next'] || allDeps['i18next']) {\n return this.detectReactI18n(projectPath);\n }\n\n // 检测 react-intl\n if (allDeps['react-intl']) {\n return this.detectReactIntl(projectPath);\n }\n\n // 检测自定义国际化方案\n return this.detectCustomI18n(projectPath);\n }\n\n /**\n * 检测 vue-i18n 配置\n */\n private static detectVueI18n(projectPath: string): I18nConfig {\n const configFiles: string[] = [];\n const messageFiles: string[] = [];\n\n // 查找配置文件\n const possibleConfigPaths = [\n 'src/i18n/index.ts',\n 'src/i18n/index.js',\n 'src/locales/index.ts',\n 'src/locales/index.js',\n 'i18n.config.ts',\n 'i18n.config.js'\n ];\n\n for (const configPath of possibleConfigPaths) {\n const fullPath = path.join(projectPath, configPath);\n if (fs.existsSync(fullPath)) {\n configFiles.push(configPath);\n }\n }\n\n // 查找消息文件\n const possibleMessageDirs = ['src/i18n', 'src/locales', 'src/lang'];\n for (const dir of possibleMessageDirs) {\n const fullDir = path.join(projectPath, dir);\n if (fs.existsSync(fullDir)) {\n const files = fs.readdirSync(fullDir);\n for (const file of files) {\n if (/^(zh|en|ja|ko|fr|de|es).*\\.(ts|js|json)$/.test(file)) {\n messageFiles.push(path.join(dir, file));\n }\n }\n }\n }\n\n return {\n enabled: true,\n type: 'vue-i18n',\n configFiles,\n messageFiles,\n method: '$t()',\n example: `{{ $t('common.save') }} 或 :label=\"$t('user.username')\"`,\n tips: [\n '使用命名空间格式:$t(\"common.save\")',\n '所有按钮、标签、提示文字必须使用 $t()',\n '表单验证规则的 message 也需要国际化',\n '确保 zh-CN.ts 和 en-US.ts 中的键名完全一致'\n ]\n };\n }\n\n /**\n * 检测 react-i18next 配置\n */\n private static detectReactI18n(projectPath: string): I18nConfig {\n const configFiles: string[] = [];\n const messageFiles: string[] = [];\n\n // 查找配置文件\n const possibleConfigPaths = [\n 'src/i18n.ts',\n 'src/i18n.js',\n 'src/i18n/config.ts',\n 'src/i18n/config.js'\n ];\n\n for (const configPath of possibleConfigPaths) {\n const fullPath = path.join(projectPath, configPath);\n if (fs.existsSync(fullPath)) {\n configFiles.push(configPath);\n }\n }\n\n // 查找翻译文件\n const possibleMessageDirs = ['public/locales', 'src/locales', 'src/i18n'];\n for (const dir of possibleMessageDirs) {\n const fullDir = path.join(projectPath, dir);\n if (fs.existsSync(fullDir)) {\n const pattern = path.join(fullDir, '**/*.json');\n try {\n const files = glob.sync(pattern);\n messageFiles.push(...files.map(f => path.relative(projectPath, f)));\n } catch (e) {\n // 忽略错误\n }\n }\n }\n\n return {\n enabled: true,\n type: 'react-i18n',\n configFiles,\n messageFiles,\n method: 't() 或 useTranslation()',\n example: `{t('common.save')} 或 const { t } = useTranslation()`,\n tips: [\n '使用 useTranslation() hook 获取 t 函数',\n '命名空间格式:t(\"common.save\")',\n '所有文案必须通过 t() 函数包裹',\n '确保所有语言的翻译文件同步更新'\n ]\n };\n }\n\n /**\n * 检测 react-intl 配置\n */\n private static detectReactIntl(projectPath: string): I18nConfig {\n return {\n enabled: true,\n type: 'react-i18n',\n configFiles: [],\n messageFiles: [],\n method: 'formatMessage() 或 FormattedMessage',\n example: `<FormattedMessage id=\"common.save\" /> 或 intl.formatMessage({ id: 'common.save' })`,\n tips: [\n '使用 FormattedMessage 组件或 formatMessage 方法',\n '消息 ID 格式:common.save',\n '所有文案必须定义在消息文件中',\n '确保多语言文件的消息 ID 保持一致'\n ]\n };\n }\n\n /**\n * 检测自定义国际化方案\n */\n private static detectCustomI18n(projectPath: string): I18nConfig {\n const messageFiles: string[] = [];\n\n // 查找可能的消息文件\n const possibleDirs = ['src/locales', 'src/i18n', 'src/lang'];\n for (const dir of possibleDirs) {\n const fullDir = path.join(projectPath, dir);\n if (fs.existsSync(fullDir)) {\n const files = fs.readdirSync(fullDir);\n for (const file of files) {\n if (/messages?\\.(ts|js)$/i.test(file)) {\n messageFiles.push(path.join(dir, file));\n \n // 读取文件检测格式\n const content = fs.readFileSync(path.join(fullDir, file), 'utf-8');\n \n // 检测是否是双语数组格式 [英文, 中文]\n if (content.includes('[') && content.includes('],')) {\n return {\n enabled: true,\n type: 'custom',\n configFiles: [],\n messageFiles,\n method: '$t()',\n example: `{{ $t('保存') }} 或 :label=\"$t('用户名')\"`,\n tips: [\n '使用直接键名格式:$t(\"保存\")',\n '所有按钮、标签、提示文字必须使用 $t()',\n '表单验证规则的 message 也需要国际化',\n '新增文案时需要同时添加中英文翻译'\n ]\n };\n }\n }\n }\n }\n }\n\n // 未检测到国际化配置\n if (messageFiles.length > 0) {\n return {\n enabled: true,\n type: 'custom',\n configFiles: [],\n messageFiles,\n method: '$t()',\n example: '请查看项目中现有页面的使用方式',\n tips: [\n '检测到国际化文件,但格式未知',\n '请查看现有页面确认使用方式',\n '确保所有新增文案都遵循项目规范'\n ]\n };\n }\n\n return {\n enabled: false,\n type: 'none',\n configFiles: [],\n messageFiles: [],\n method: '',\n example: '',\n tips: [\n '⚠️ 项目未配置国际化',\n '建议添加中英双语支持',\n '推荐使用 vue-i18n(Vue)或 react-i18next(React)'\n ]\n };\n }\n\n /**\n * 检测 Flutter 项目的国际化配置\n */\n private static detectFlutterI18n(projectPath: string, pubspecPath: string): I18nConfig {\n const content = fs.readFileSync(pubspecPath, 'utf-8');\n \n // 检测是否配置了 flutter_localizations\n if (content.includes('flutter_localizations')) {\n const messageFiles: string[] = [];\n \n // 查找 .arb 文件\n const l10nDir = path.join(projectPath, 'lib', 'l10n');\n if (fs.existsSync(l10nDir)) {\n const files = fs.readdirSync(l10nDir);\n for (const file of files) {\n if (file.endsWith('.arb')) {\n messageFiles.push(`lib/l10n/${file}`);\n }\n }\n }\n\n // 检查是否有 l10n.yaml 配置文件\n const l10nConfigPath = path.join(projectPath, 'l10n.yaml');\n const configFiles = fs.existsSync(l10nConfigPath) ? ['l10n.yaml'] : [];\n\n return {\n enabled: true,\n type: 'flutter-intl',\n configFiles,\n messageFiles,\n method: 'AppLocalizations',\n example: `AppLocalizations.of(context)!.save 或 S.of(context).save`,\n tips: [\n '使用 AppLocalizations.of(context)!.key',\n '所有文本必须在 .arb 文件中定义',\n '确保 app_en.arb 和 app_zh.arb 的键名完全一致',\n '运行 flutter gen-l10n 生成代码'\n ]\n };\n }\n\n // 检测 easy_localization\n if (content.includes('easy_localization')) {\n return {\n enabled: true,\n type: 'flutter-intl',\n configFiles: [],\n messageFiles: [],\n method: 'tr()',\n example: `'save'.tr() 或 Text('save'.tr())`,\n tips: [\n '使用 .tr() 扩展方法',\n '翻译文件通常在 assets/translations/',\n '确保所有语言文件的键名一致'\n ]\n };\n }\n\n // 未检测到国际化配置\n return {\n enabled: false,\n type: 'none',\n configFiles: [],\n messageFiles: [],\n method: '',\n example: '',\n tips: [\n '⚠️ Flutter 项目未配置国际化',\n '建议添加 flutter_localizations',\n '在 pubspec.yaml 中添加:',\n ' flutter_localizations:',\n ' sdk: flutter',\n ' intl: any'\n ]\n };\n }\n}\n","/**\n * 项目特征接口\n */\nexport interface ProjectFeatures {\n frameworks: string[];\n languages: string[];\n tools: string[];\n keywords: string[];\n projectType: string;\n}\n\n/**\n * Agent 元数据接口\n */\nexport interface AgentMetadata {\n id: string;\n path: string;\n title: string;\n description: string;\n tags: string[];\n applicableWhen?: {\n frameworks?: string[];\n tools?: string[];\n languages?: string[];\n keywords?: string[];\n };\n score?: number;\n}\n\n/**\n * 配置生成结果\n */\nexport interface GenerationResult {\n success: boolean;\n projectType?: string;\n matchedAgents?: AgentMetadata[];\n configPath?: string;\n error?: string;\n}\n\n/**\n * 日志输出接口\n * @deprecated 使用 core/logger.ts 中的 Logger 类\n */\nexport interface Logger {\n log(message: string): void;\n error(message: string): void;\n}\n\n/**\n * 控制台日志实现\n * @deprecated 使用 core/logger.ts 中的 createLogger()\n */\nexport class ConsoleLogger implements Logger {\n private enableDebug: boolean;\n\n constructor(enableDebug: boolean = false) {\n this.enableDebug = enableDebug;\n }\n\n log(message: string): void {\n console.error(`[MCP] [INFO] ${message}`);\n }\n \n error(message: string): void {\n console.error(`[MCP] [ERROR] ${message}`);\n }\n\n debug(message: string): void {\n if (this.enableDebug) {\n console.error(`[MCP] [DEBUG] ${message}`);\n }\n }\n}\n","import axios from 'axios';\nimport { Logger } from './types.js';\n\n/**\n * GitHub 客户端(Node.js 版本,无 VS Code 依赖)\n */\nexport class GitHubClient {\n private readonly owner = 'ForLear';\n private readonly repo = 'copilot-prompts';\n private readonly branch = 'main';\n private readonly baseUrl = 'https://api.github.com';\n private readonly rawBaseUrl = 'https://raw.githubusercontent.com';\n\n constructor(private logger?: Logger) {}\n\n /**\n * 列出目录中的文件\n */\n async listDirectoryFiles(dirPath: string): Promise<Array<{ name: string; path: string; type: string }>> {\n const url = `${this.baseUrl}/repos/${this.owner}/${this.repo}/contents/${dirPath}?ref=${this.branch}`;\n \n try {\n const response = await axios.get(url, {\n headers: {\n 'Accept': 'application/vnd.github.v3+json',\n 'User-Agent': 'Copilot-Prompts-MCP-Server'\n }\n });\n\n if (Array.isArray(response.data)) {\n return response.data.map((item: any) => ({\n name: item.name,\n path: item.path,\n type: item.type\n }));\n }\n\n return [];\n } catch (error) {\n this.logger?.error(`获取目录失败: ${error}`);\n return [];\n }\n }\n\n /**\n * 获取文件内容\n */\n async fetchFileContent(filePath: string): Promise<string> {\n const url = `${this.rawBaseUrl}/${this.owner}/${this.repo}/${this.branch}/${filePath}`;\n \n try {\n const response = await axios.get(url, {\n headers: {\n 'User-Agent': 'Copilot-Prompts-MCP-Server'\n }\n });\n\n return response.data;\n } catch (error) {\n this.logger?.error(`获取文件失败: ${filePath}`);\n throw error;\n }\n }\n}\n","import { GitHubClient } from '../core/githubClient';\nimport { SmartAgentMatcher } from '../core/smartAgentMatcher';\nimport { ProjectFeatures, AgentMetadata, ConsoleLogger } from '../core/types';\n\n/**\n * 匹配 Agents 工具\n */\nexport async function matchAgents(args: {\n projectFeatures: ProjectFeatures;\n limit?: number;\n}): Promise<{\n content: Array<{ type: string; text: string }>;\n}> {\n const logger = new ConsoleLogger();\n \n try {\n const matcher = new SmartAgentMatcher(logger);\n const githubClient = new GitHubClient(logger);\n\n logger.log('正在从 GitHub 获取可用 Agents...');\n\n // 获取所有可用的 Agents\n const availableAgents: AgentMetadata[] = [];\n \n try {\n const agentFiles = await githubClient.listDirectoryFiles('agents');\n \n for (const file of agentFiles) {\n if (file.name.endsWith('.agent.md')) {\n try {\n const content = await githubClient.fetchFileContent(file.path);\n const metadata = matcher.parseAgentMetadata(file.path, content);\n availableAgents.push(metadata);\n } catch (error) {\n logger.error(`解析 ${file.name} 失败: ${error}`);\n }\n }\n }\n } catch (error) {\n logger.error(`获取 Agents 失败: ${error}`);\n }\n\n // 匹配 Agents\n const matchedAgents = matcher.matchAgents(args.projectFeatures, availableAgents);\n \n // 限制返回数量\n const limit = args.limit || 10;\n const topAgents = matchedAgents.slice(0, limit);\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n totalAvailable: availableAgents.length,\n matched: topAgents.length,\n agents: topAgents.map(agent => ({\n id: agent.id,\n title: agent.title,\n description: agent.description,\n score: agent.score,\n tags: agent.tags,\n path: agent.path\n })),\n recommendations: topAgents.slice(0, 5).map(a => a.title)\n }, null, 2)\n }]\n };\n } catch (error) {\n logger.error(`匹配 Agents 失败: ${error}`);\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error)\n }, null, 2)\n }]\n };\n }\n}\n","import { GitHubClient } from '../core/githubClient';\nimport { ConsoleLogger } from '../core/types';\n\n/**\n * 列出所有可用的 Agents\n */\nexport async function listAvailableAgents(): Promise<{\n content: Array<{ type: string; text: string }>;\n}> {\n const logger = new ConsoleLogger();\n \n try {\n const githubClient = new GitHubClient(logger);\n \n logger.log('正在从 GitHub 获取 Agents 列表...');\n\n const agentFiles = await githubClient.listDirectoryFiles('agents');\n const agents = agentFiles.filter(f => f.name.endsWith('.agent.md'));\n\n // 获取每个 Agent 的基本信息\n const agentList = await Promise.all(\n agents.map(async (file) => {\n try {\n const content = await githubClient.fetchFileContent(file.path);\n \n // 简单解析标题和描述\n const lines = content.split('\\n');\n let title = file.name.replace('.agent.md', '');\n let description = '';\n \n // 尝试从 frontmatter 提取\n if (lines[0] === '---') {\n const endIndex = lines.slice(1).findIndex(l => l === '---');\n if (endIndex > 0) {\n const frontmatter = lines.slice(1, endIndex + 1).join('\\n');\n const descMatch = frontmatter.match(/description:\\s*['\"](.+)['\"]/);\n if (descMatch) {\n description = descMatch[1];\n }\n }\n }\n \n // 提取标题(第一个 # 开头的行)\n const titleLine = lines.find(l => l.startsWith('# '));\n if (titleLine) {\n title = titleLine.replace('# ', '').trim();\n }\n\n return {\n id: file.name.replace('.agent.md', ''),\n name: file.name,\n title,\n description: description || '暂无描述',\n path: file.path\n };\n } catch (error) {\n logger.error(`解析 ${file.name} 失败: ${error}`);\n return null;\n }\n })\n );\n\n const validAgents = agentList.filter(a => a !== null);\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n total: validAgents.length,\n agents: validAgents,\n categories: {\n general: validAgents.filter(a => a!.path.includes('common/')).length,\n frameworks: validAgents.filter(a => a!.path.includes('vue/') || a!.path.includes('react/')).length,\n agents: validAgents.filter(a => a!.path.includes('agents/')).length\n }\n }, null, 2)\n }]\n };\n } catch (error) {\n logger.error(`获取 Agents 列表失败: ${error}`);\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error)\n }, null, 2)\n }]\n };\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport { fileURLToPath } from 'url';\nimport { GitHubClient } from '../core/githubClient';\nimport { SmartAgentMatcher } from '../core/smartAgentMatcher';\nimport { ConsoleLogger, AgentMetadata } from '../core/types';\nimport { CodeValidator } from '../core/codeValidator';\n\n// ES模块中获取__dirname\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n/**\n * 生成配置文件工具\n */\nexport async function generateConfig(args: {\n projectPath: string;\n agentIds?: string[];\n autoMatch?: boolean;\n updateMode?: 'merge' | 'overwrite'; // merge: 保留自定义内容, overwrite: 完全覆盖\n configId?: string; // 配置方案ID (如 strict)\n}): Promise<{\n content: Array<{ type: string; text: string }>;\n}> {\n const logger = new ConsoleLogger();\n \n try {\n // 验证路径\n if (!fs.existsSync(args.projectPath)) {\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: `项目路径不存在: ${args.projectPath}`\n }, null, 2)\n }]\n };\n }\n\n const matcher = new SmartAgentMatcher(logger);\n const githubClient = new GitHubClient(logger);\n \n let selectedAgents: AgentMetadata[] = [];\n\n // 如果需要自动匹配\n if (args.autoMatch !== false) {\n logger.log('正在分析项目特征...');\n \n const workspaceFolder = {\n uri: { fsPath: args.projectPath },\n name: path.basename(args.projectPath),\n index: 0\n };\n \n const features = await matcher.analyzeProject(workspaceFolder as any);\n \n logger.log('正在匹配 Agents...');\n \n // 获取可用 Agents - 优先从 GitHub 获取(保证最新版本)\n const availableAgents: AgentMetadata[] = [];\n \n try {\n logger.log('📡 从 GitHub 获取 Agents...');\n const agentFiles = await githubClient.listDirectoryFiles('agents');\n \n for (const file of agentFiles) {\n if (file.name.endsWith('.agent.md')) {\n try {\n const content = await githubClient.fetchFileContent(file.path);\n const metadata = matcher.parseAgentMetadata(file.path, content);\n availableAgents.push(metadata);\n logger.log(`✅ 加载 Agent: ${metadata.title}`);\n } catch (error) {\n logger.error(`解析 ${file.name} 失败`);\n }\n }\n }\n logger.log(`✅ 从 GitHub 成功加载 ${availableAgents.length} 个 Agents`);\n } catch (githubError) {\n // GitHub 失败时尝试本地\n logger.log('⚠️ GitHub 获取失败,尝试从本地加载...');\n const agentsDir = path.join(__dirname, '../../../agents');\n \n if (fs.existsSync(agentsDir)) {\n const agentFiles = fs.readdirSync(agentsDir);\n logger.log(`找到 ${agentFiles.length} 个本地文件`);\n \n for (const file of agentFiles) {\n if (file.endsWith('.agent.md')) {\n try {\n const filePath = path.join(agentsDir, file);\n const content = fs.readFileSync(filePath, 'utf-8');\n const metadata = matcher.parseAgentMetadata(`agents/${file}`, content);\n availableAgents.push(metadata);\n logger.log(`✅ 加载 Agent: ${metadata.title}`);\n } catch (error) {\n logger.error(`解析 ${file} 失败`);\n }\n }\n }\n logger.log(`✅ 从本地成功加载 ${availableAgents.length} 个 Agents`);\n } else {\n throw new Error('无法从 GitHub 或本地获取 Agents');\n }\n }\n \n logger.log(`成功加载 ${availableAgents.length} 个 Agents`);\n selectedAgents = matcher.matchAgents(features, availableAgents);\n logger.log(`匹配到 ${selectedAgents.length} 个 Agents`);\n selectedAgents = selectedAgents.slice(0, 5); // 取前5个\n }\n \n // 如果指定了 agentIds,使用指定的\n if (args.agentIds && args.agentIds.length > 0) {\n logger.log(`使用指定的 Agents: ${args.agentIds.join(', ')}`);\n \n selectedAgents = [];\n \n for (const id of args.agentIds) {\n try {\n let content: string;\n const agentPath = `agents/${id}.agent.md`;\n \n // 优先从 GitHub 加载(保证最新版本)\n try {\n logger.log(`从 GitHub 获取 Agent: ${id}`);\n content = await githubClient.fetchFileContent(agentPath);\n logger.log(`✅ 从 GitHub 加载成功: ${id}`);\n } catch (githubError) {\n // GitHub 失败时尝试本地\n logger.log(`GitHub 获取失败,尝试本地: ${id}`);\n const agentsDir = path.join(__dirname, '../../../agents');\n const localPath = path.join(agentsDir, `${id}.agent.md`);\n \n if (fs.existsSync(localPath)) {\n content = fs.readFileSync(localPath, 'utf-8');\n logger.log(`✅ 从本地加载成功: ${id}`);\n } else {\n throw new Error(`Agent ${id} 不存在(GitHub 和本地都未找到)`);\n }\n }\n \n const metadata = matcher.parseAgentMetadata(`agents/${id}.agent.md`, content);\n selectedAgents.push(metadata);\n } catch (error) {\n logger.error(`获取 Agent ${id} 失败: ${error}`);\n }\n }\n }\n\n if (selectedAgents.length === 0) {\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: '未找到合适的 Agents'\n }, null, 2)\n }]\n };\n }\n\n // 生成配置文件\n logger.log('正在生成配置文件...');\n \n const githubDir = path.join(args.projectPath, '.github');\n const configPath = path.join(githubDir, 'copilot-instructions.md');\n\n // 检测已有配置的自定义内容\n let existingCustomContent = '';\n let existingConfig = '';\n if (fs.existsSync(configPath)) {\n existingConfig = fs.readFileSync(configPath, 'utf-8');\n \n // 提取自定义章节(标记为 CUSTOM 的内容)\n const customMatch = existingConfig.match(/<!-- CUSTOM_START -->([\\s\\S]*?)<!-- CUSTOM_END -->/g);\n if (customMatch) {\n existingCustomContent = customMatch.join('\\n\\n');\n }\n }\n\n // 创建目录\n if (!fs.existsSync(githubDir)) {\n fs.mkdirSync(githubDir, { recursive: true });\n }\n \n const updateMode = args.updateMode || 'merge'; // 默认保护模式\n\n // 构建配置内容\n let content = '';\n \n if (updateMode === 'merge') {\n content += `<!-- ⚠️ 此文件由 Copilot Prompts MCP Server 生成 -->\\n`;\n content += `<!-- ℹ️ 你可以添加自定义内容,使用 CUSTOM_START/CUSTOM_END 标记保护 -->\\n`;\n content += `<!-- 示例: -->\\n`;\n content += `<!-- CUSTOM_START -->\\n`;\n content += `<!-- 你的自定义规范 -->\\n`;\n content += `<!-- CUSTOM_END -->\\n\\n`;\n } else {\n content += `<!-- ⚠️ 此文件由 Copilot Prompts MCP Server 自动生成 -->\\n`;\n content += `<!-- ⚠️ 使用 --update-mode merge 可保护自定义内容 -->\\n\\n`;\n }\n\n // 添加作用域声明 - 防止跨项目污染\n const projectName = path.basename(args.projectPath);\n const projectPath = args.projectPath;\n \n content += `<!-- 🎯 作用域:此配置仅适用于当前项目 -->\\n`;\n content += `<!-- 项目名称: ${projectName} -->\\n`;\n content += `<!-- 项目路径: ${projectPath} -->\\n\\n`;\n \n content += `# 项目开发规范 - Copilot 指令\\n\\n`;\n \n // ⚠️ 强制执行检查点 - 必须在最前面\n content += `## ⚠️ 强制执行检查点\\n\\n`;\n content += `> **此检查点的优先级高于本文件的所有其他内容**\\n\\n`;\n content += `在执行**任何**以下操作前,必须先完成规范加载验证:\\n\\n`;\n content += `### 受限操作清单\\n\\n`;\n content += `- ❌ 创建任何代码文件(.vue、.ts、.tsx、.js 等)\\n`;\n content += `- ❌ 修改任何代码文件\\n`;\n content += `- ❌ 使用 \\`replace_string_in_file\\` 或 \\`multi_replace_string_in_file\\`\\n`;\n content += `- ❌ 生成任何代码片段\\n\\n`;\n content += `### 强制验证流程\\n\\n`;\n content += `1. **检查项目作用域** - 确认当前操作的文件路径包含 \\`/${projectName}/\\`\\n`;\n content += `2. **加载相关规范** - 根据文件类型调用对应的 MCP 工具:\\n`;\n content += ` - Vue 文件 → \\`get_smart_standards\\` 或 \\`use_preset\\`\\n`;\n content += ` - TypeScript 文件 → \\`get_smart_standards\\` 或 \\`use_preset\\`\\n`;\n content += ` - 其他文件 → 根据实际情况选择\\n`;\n content += `3. **验证加载成功** - 确认工具返回了规范内容\\n`;\n content += `4. **声明已加载** - 在响应中明确说明:\\`✅ 已加载规范: [工具名称]\\`\\n\\n`;\n content += `### 违规处理\\n\\n`;\n content += `- 如果未加载规范就生成代码 → **此操作无效,必须重新执行**\\n`;\n content += `- 如果出现语法错误 → **深刻反思,检查是否遵循了规范**\\n`;\n content += `- 如果出现低级错误 → **停止操作,重新加载规范后再继续**\\n\\n`;\n content += `---\\n\\n`;\n \n // 添加AI可识别的作用域限制\n content += `## 🎯 作用域限制\\n\\n`;\n content += `**⚠️ 此配置仅在以下情况生效:**\\n\\n`;\n content += `1. 当前编辑的文件路径包含: \\`/${projectName}/\\`\\n`;\n content += `2. 或当前工作目录为: \\`${projectPath}\\`\\n\\n`;\n content += `**如果你在其他项目工作(如 ${projectName} 之外的项目),请完全忽略此配置文件中的所有规范和指令。**\\n\\n`;\n content += `---\\n\\n`;\n \n content += `> 📌 **自动配置信息**\\n`;\n content += `> - 生成时间: ${new Date().toLocaleString('zh-CN')}\\n`;\n content += `> - 匹配的 Agents: ${selectedAgents.length} 个\\n\\n`;\n content += `---\\n\\n`;\n \n // 加载配置方案的详细规则\n if (args.configId) {\n try {\n const configFilePath = path.join(__dirname, '../../../configs', `element-plus-${args.configId}.json`);\n if (fs.existsSync(configFilePath)) {\n const configData = JSON.parse(fs.readFileSync(configFilePath, 'utf-8'));\n \n content += `## 📦 配置方案\\n\\n`;\n content += `**方案ID**: ${configData.configId}\\n`;\n content += `**名称**: ${configData.name}\\n`;\n content += `**描述**: ${configData.description}\\n`;\n content += `**维护者**: ${configData.maintainer}\\n\\n`;\n \n // 添加重要规则摘要\n if (configData.rules && configData.rules.table) {\n content += `### 表格组件规范\\n\\n`;\n const tableRules = configData.rules.table;\n if (tableRules.border) content += `- ✅ **必须添加 border**\\n`;\n if (tableRules['highlight-current-row']) content += `- ✅ **必须高亮当前行**\\n`;\n if (tableRules['v-loading']) content += `- ✅ **加载状态变量**: \\`${tableRules['v-loading'].variable}\\`\\n`;\n content += `\\n`;\n }\n \n content += `> 详细规则请参考: \\`configs/element-plus-${args.configId}.json\\`\\n\\n`;\n content += `---\\n\\n`;\n \n logger.log(`✅ 已加载配置方案: ${configData.name}`);\n }\n } catch (error) {\n logger.error(`加载配置方案失败: ${error}`);\n }\n }\n \n // 添加强制工作流说明\n content += `## ⚠️ 强制工作流\\n\\n`;\n content += `**在进行任何代码生成或修改之前,必须先调用 MCP 工具加载相关规范!**\\n\\n`;\n content += `根据文件类型和场景,调用相应的 MCP 工具:\\n\\n`;\n content += `1. **Vue 文件** → \\`get_relevant_standards({ fileType: \"vue\" })\\`\\n`;\n content += `2. **TypeScript 文件** → \\`get_relevant_standards({ fileType: \"ts\" })\\`\\n`;\n content += `3. **React 组件** → \\`get_relevant_standards({ fileType: \"tsx\" })\\`\\n`;\n content += `4. **使用特定库时**:\\n`;\n content += ` - Element Plus: \\`get_relevant_standards({ imports: [\"element-plus\"] })\\`\\n`;\n content += ` - Pinia: \\`get_relevant_standards({ imports: [\"pinia\"] })\\`\\n`;\n content += ` - Vue Router: \\`get_relevant_standards({ imports: [\"vue-router\"] })\\`\\n`;\n content += ` - LogicFlow: \\`get_relevant_standards({ imports: [\"@logicflow/core\"] })\\`\\n`;\n content += `5. **特定场景**:\\n`;\n content += ` - API 调用: \\`get_relevant_standards({ scenario: \"API 调用\" })\\`\\n`;\n content += ` - 国际化: \\`get_relevant_standards({ scenario: \"国际化\" })\\`\\n\\n`;\n content += `### 标准流程\\n\\n`;\n content += `1. ✅ **强制**: 加载规范 → 2. 理解需求 → 3. 编写代码 → 4. 验证规范\\n\\n`;\n content += `---\\n\\n`;\n\n // ⚠️ 核心设计原则:最小化配置 (选项 1)\n // 只记录 Agent 引用信息,不嵌入完整内容\n // Copilot 将通过 MCP 工具 get_relevant_standards 实时加载规范\n // 此设计为底层逻辑,除非明确要求,否则不可修改\n \n content += `## 📚 配置的 Agents\\n\\n`;\n content += `本项目使用以下 Agents(规范内容由 Copilot 通过 MCP 工具实时加载):\\n\\n`;\n \n for (const agent of selectedAgents) {\n content += `### ${agent.title}\\n\\n`;\n content += `- **Agent ID**: \\`${agent.id}\\`\\n`;\n content += `- **描述**: ${agent.description || '暂无描述'}\\n`;\n content += `- **来源**: \\`${agent.path}\\`\\n`;\n \n // 如果有标签,显示标签\n if (agent.tags && agent.tags.length > 0) {\n content += `- **标签**: ${agent.tags.join(', ')}\\n`;\n }\n \n content += `\\n> 💡 **使用方式**: 在开发时,Copilot 会自动通过 MCP 工具加载此 Agent 的完整规范。\\n\\n`;\n }\n \n content += `---\\n\\n`;\n \n // 附加自定义内容(如果是merge模式)\n if (updateMode === 'merge' && existingCustomContent) {\n content += `\\n\\n## 📝 自定义规范\\n\\n`;\n content += existingCustomContent;\n logger.log('✅ 已保留自定义内容');\n }\n\n // 写入文件前进行验证 (v1.1.0)\n const validator = new CodeValidator(logger);\n const validation = validator.validateConfigContent(content);\n \n if (!validation.isValid) {\n logger.error('⚠️ 配置内容验证失败,尝试自动修复...');\n \n // 尝试自动修复\n const fixResult = validator.attemptAutoFix(content);\n if (fixResult.fixed) {\n content = fixResult.content;\n logger.log(`✅ 已自动修复 ${fixResult.changes.length} 个问题:`);\n fixResult.changes.forEach(change => logger.log(` - ${change}`));\n \n // 重新验证\n const revalidation = validator.validateConfigContent(content);\n if (!revalidation.isValid) {\n const report = validator.generateValidationReport(revalidation);\n logger.error('❌ 自动修复后仍存在问题:');\n logger.error(report);\n \n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: '配置文件验证失败',\n validationReport: report,\n message: '生成的配置文件存在语法错误,请检查并手动修复'\n }, null, 2)\n }]\n };\n }\n } else {\n const report = validator.generateValidationReport(validation);\n logger.error(report);\n \n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: '配置文件验证失败',\n validationReport: report,\n message: '生成的配置文件存在语法错误且无法自动修复'\n }, null, 2)\n }]\n };\n }\n } else if (validation.warnings.length > 0) {\n logger.log('⚠️ 配置内容验证通过,但有以下警告:');\n validation.warnings.forEach(warning => {\n logger.log(` - [${warning.type}] ${warning.message}`);\n });\n } else {\n logger.log('✅ 配置内容验证通过');\n }\n\n // 写入文件\n fs.writeFileSync(configPath, content, 'utf-8');\n\n // 更新 .gitignore\n const gitignorePath = path.join(args.projectPath, '.gitignore');\n if (fs.existsSync(gitignorePath)) {\n let gitignoreContent = fs.readFileSync(gitignorePath, 'utf-8');\n if (!gitignoreContent.includes('.github/copilot-instructions.md')) {\n gitignoreContent += '\\n# Copilot Prompts (auto-generated)\\n.github/copilot-instructions.md\\n';\n fs.writeFileSync(gitignorePath, gitignoreContent, 'utf-8');\n }\n }\n\n logger.log(`✅ 配置文件已生成: ${configPath}`);\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n configPath,\n agents: selectedAgents.map(a => ({\n id: a.id,\n title: a.title,\n score: a.score\n })),\n message: `已成功生成配置文件,应用了 ${selectedAgents.length} 个 Agents`\n }, null, 2)\n }]\n };\n } catch (error) {\n logger.error(`生成配置失败: ${error}`);\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error)\n }, null, 2)\n }]\n };\n }\n}\n","/**\n * 代码验证器 (v1.1.0)\n * 用于检测和防止常见的代码生成错误\n */\n\nimport { ConsoleLogger } from './types.js';\n\n/**\n * 验证结果接口\n */\nexport interface ValidationResult {\n isValid: boolean;\n errors: ValidationError[];\n warnings: ValidationWarning[];\n}\n\n/**\n * 验证错误\n */\nexport interface ValidationError {\n type: 'syntax' | 'completeness' | 'compatibility';\n message: string;\n line?: number;\n suggestion?: string;\n}\n\n/**\n * 验证警告\n */\nexport interface ValidationWarning {\n type: 'best-practice' | 'performance' | 'compatibility' | 'completeness';\n message: string;\n suggestion?: string;\n}\n\n/**\n * 代码验证器类\n */\nexport class CodeValidator {\n private logger: ConsoleLogger;\n \n constructor(logger?: ConsoleLogger) {\n this.logger = logger || new ConsoleLogger();\n }\n\n /**\n * 验证生成的配置文件内容\n */\n validateConfigContent(content: string): ValidationResult {\n const errors: ValidationError[] = [];\n const warnings: ValidationWarning[] = [];\n\n // 1. 检查重复标签闭合 (如 </style></style>)\n this.checkDuplicateTags(content, errors);\n\n // 2. 检查括号匹配\n this.checkBracketMatching(content, errors);\n\n // 3. 检查 Markdown 语法\n this.checkMarkdownSyntax(content, errors);\n\n // 4. 检查必要章节完整性\n this.checkRequiredSections(content, warnings);\n\n // 5. 检查自定义内容标记\n this.checkCustomContentMarkers(content, warnings);\n\n return {\n isValid: errors.length === 0,\n errors,\n warnings\n };\n }\n\n /**\n * 检查重复的HTML标签\n */\n private checkDuplicateTags(content: string, errors: ValidationError[]): void {\n const lines = content.split('\\n');\n const tagPattern = /<\\/([\\w-]+)>/g;\n \n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const matches = Array.from(line.matchAll(tagPattern));\n \n if (matches.length > 0) {\n const tags = matches.map(m => m[1]);\n const tagCounts = new Map<string, number>();\n \n tags.forEach(tag => {\n tagCounts.set(tag, (tagCounts.get(tag) || 0) + 1);\n });\n \n tagCounts.forEach((count, tag) => {\n if (count > 1) {\n errors.push({\n type: 'syntax',\n message: `重复的闭合标签 </${tag}> 在同一行出现 ${count} 次`,\n line: i + 1,\n suggestion: `检查是否有多余的闭合标签,应该只保留一个 </${tag}>`\n });\n }\n });\n }\n }\n }\n\n /**\n * 检查括号匹配\n */\n private checkBracketMatching(content: string, errors: ValidationError[]): void {\n const brackets = {\n '(': ')',\n '[': ']',\n '{': '}',\n '<': '>'\n };\n \n const stack: Array<{ char: string; line: number; col: number }> = [];\n const lines = content.split('\\n');\n \n for (let lineNum = 0; lineNum < lines.length; lineNum++) {\n const line = lines[lineNum];\n \n // 跳过代码块内容\n if (line.trim().startsWith('```')) {\n continue;\n }\n \n // 跳过 Markdown blockquote 行(以 > 开头)\n if (line.trim().startsWith('>')) {\n continue;\n }\n \n for (let col = 0; col < line.length; col++) {\n const char = line[col];\n \n // 跳过 Markdown blockquote 的 > 符号\n if (char === '>' && (col === 0 || line[col - 1] === ' ') && \n (col === line.length - 1 || line[col + 1] === ' ')) {\n continue;\n }\n \n if (char in brackets) {\n stack.push({ char, line: lineNum + 1, col: col + 1 });\n } else if (Object.values(brackets).includes(char)) {\n if (stack.length === 0) {\n errors.push({\n type: 'syntax',\n message: `未配对的闭合括号 '${char}'`,\n line: lineNum + 1,\n suggestion: `检查是否缺少对应的开放括号`\n });\n } else {\n const last = stack.pop()!;\n const expectedClose = brackets[last.char as keyof typeof brackets];\n \n if (char !== expectedClose) {\n errors.push({\n type: 'syntax',\n message: `括号不匹配: 期望 '${expectedClose}' 但得到 '${char}'`,\n line: lineNum + 1,\n suggestion: `检查第 ${last.line} 行的 '${last.char}' 对应的闭合括号`\n });\n }\n }\n }\n }\n }\n \n // 检查未闭合的括号\n if (stack.length > 0) {\n stack.forEach(bracket => {\n errors.push({\n type: 'syntax',\n message: `未闭合的括号 '${bracket.char}'`,\n line: bracket.line,\n suggestion: `添加对应的闭合括号 '${brackets[bracket.char as keyof typeof brackets]}'`\n });\n });\n }\n }\n\n /**\n * 检查 Markdown 语法\n */\n private checkMarkdownSyntax(content: string, errors: ValidationError[]): void {\n const lines = content.split('\\n');\n let inCodeBlock = false;\n let codeBlockStart = 0;\n \n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n \n // 检查代码块标记\n if (line.trim().startsWith('```')) {\n if (inCodeBlock) {\n inCodeBlock = false;\n } else {\n inCodeBlock = true;\n codeBlockStart = i + 1;\n }\n }\n }\n \n // 如果代码块未闭合\n if (inCodeBlock) {\n errors.push({\n type: 'syntax',\n message: '未闭合的代码块',\n line: codeBlockStart,\n suggestion: '在代码块末尾添加 ``` 闭合标记'\n });\n }\n }\n\n /**\n * 检查必要章节完整性\n */\n private checkRequiredSections(content: string, warnings: ValidationWarning[]): void {\n const requiredSections = [\n { pattern: /## ⚠️ 强制工作流/i, name: '强制工作流章节' },\n { pattern: /## 📚 配置的 Agents/i, name: 'Agents 配置章节' }\n ];\n \n requiredSections.forEach(section => {\n if (!section.pattern.test(content)) {\n warnings.push({\n type: 'completeness',\n message: `缺少必要章节: ${section.name}`,\n suggestion: '确保生成的配置文件包含所有必要的章节'\n });\n }\n });\n }\n\n /**\n * 检查自定义内容标记\n */\n private checkCustomContentMarkers(content: string, warnings: ValidationWarning[]): void {\n const hasCustomStart = content.includes('<!-- CUSTOM_START -->');\n const hasCustomEnd = content.includes('<!-- CUSTOM_END -->');\n \n if (hasCustomStart !== hasCustomEnd) {\n warnings.push({\n type: 'completeness',\n message: 'CUSTOM 标记不完整',\n suggestion: '确保 CUSTOM_START 和 CUSTOM_END 成对出现'\n });\n }\n }\n\n /**\n * 验证 Agent 内容\n */\n validateAgentContent(content: string, agentId: string): ValidationResult {\n const errors: ValidationError[] = [];\n const warnings: ValidationWarning[] = [];\n\n // 检查 Agent 文件的特殊要求\n if (!content.includes('⚠️ 强制工作流') && !content.includes('## 强制工作流')) {\n warnings.push({\n type: 'best-practice',\n message: `Agent ${agentId} 缺少强制工作流说明`,\n suggestion: '建议在 Agent 中包含 MCP 工具调用的强制说明'\n });\n }\n\n // 基本语法检查\n const syntaxValidation = this.validateConfigContent(content);\n errors.push(...syntaxValidation.errors);\n warnings.push(...syntaxValidation.warnings);\n\n return {\n isValid: errors.length === 0,\n errors,\n warnings\n };\n }\n\n /**\n * 生成验证报告\n */\n generateValidationReport(result: ValidationResult): string {\n let report = '';\n \n if (result.isValid && result.warnings.length === 0) {\n report = '✅ 验证通过,未发现问题\\n';\n return report;\n }\n \n if (!result.isValid) {\n report += '❌ 验证失败,发现以下错误:\\n\\n';\n result.errors.forEach((error, index) => {\n report += `${index + 1}. [${error.type}] ${error.message}\\n`;\n if (error.line) {\n report += ` 位置: 第 ${error.line} 行\\n`;\n }\n if (error.suggestion) {\n report += ` 建议: ${error.suggestion}\\n`;\n }\n report += '\\n';\n });\n } else {\n report += '✅ 验证通过\\n\\n';\n }\n \n if (result.warnings.length > 0) {\n report += '⚠️ 发现以下警告:\\n\\n';\n result.warnings.forEach((warning, index) => {\n report += `${index + 1}. [${warning.type}] ${warning.message}\\n`;\n if (warning.suggestion) {\n report += ` 建议: ${warning.suggestion}\\n`;\n }\n report += '\\n';\n });\n }\n \n return report;\n }\n\n /**\n * 尝试自动修复简单的语法错误\n */\n attemptAutoFix(content: string): { fixed: boolean; content: string; changes: string[] } {\n let fixedContent = content;\n const changes: string[] = [];\n\n // 1. 修复重复的闭合标签\n const tagPattern = /(<\\/([\\w-]+)>)\\1+/g;\n const tagMatches = content.match(tagPattern);\n if (tagMatches) {\n fixedContent = fixedContent.replace(tagPattern, '$1');\n changes.push(`修复了重复的闭合标签: ${tagMatches.join(', ')}`);\n }\n\n // 2. 修复未闭合的代码块\n const codeBlockCount = (fixedContent.match(/```/g) || []).length;\n if (codeBlockCount % 2 !== 0) {\n fixedContent += '\\n```\\n';\n changes.push('添加了缺失的代码块闭合标记');\n }\n\n return {\n fixed: changes.length > 0,\n content: fixedContent,\n changes\n };\n }\n}\n\n/**\n * 创建默认验证器实例\n */\nexport function createValidator(logger?: ConsoleLogger): CodeValidator {\n return new CodeValidator(logger);\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport { ConsoleLogger } from '../core/types';\nimport { analyzeProject } from './analyzeProject.js';\nimport { generateConfig } from './generateConfig.js';\n\n/**\n * 自动配置工具\n * 一键配置 MCP 服务器到 VS Code 工作区\n * v1.2.0: 新增自动生成项目 copilot-instructions.md\n */\nexport async function autoSetup(args: {\n workspacePath?: string;\n generateInstructions?: boolean; // 是否生成 copilot-instructions.md(默认 true)\n}): Promise<{\n content: Array<{ type: string; text: string }>;\n}> {\n const logger = new ConsoleLogger();\n \n try {\n // 确定工作区路径\n const workspacePath = args.workspacePath || process.cwd();\n \n if (!fs.existsSync(workspacePath)) {\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: `工作区路径不存在: ${workspacePath}`\n }, null, 2)\n }]\n };\n }\n\n const results = {\n workspacePath,\n steps: [] as Array<{ step: string; status: string; detail?: string }>,\n warnings: [] as string[]\n };\n\n logger.log('🚀 开始自动配置 MCP 服务器...');\n\n // Step 1: 创建 .vscode 目录\n const vscodeDir = path.join(workspacePath, '.vscode');\n if (!fs.existsSync(vscodeDir)) {\n fs.mkdirSync(vscodeDir, { recursive: true });\n results.steps.push({ step: '创建 .vscode 目录', status: 'success' });\n } else {\n results.steps.push({ step: '检测到已有 .vscode 目录', status: 'skip' });\n }\n\n // Step 2: 检测 MCP 服务器路径\n let mcpServerPath = '';\n const possiblePaths = [\n path.join(workspacePath, 'mcp-server/build/index.js'),\n path.join(workspacePath, '../copilot-prompts/mcp-server/build/index.js'),\n path.join(workspacePath, 'copilot-prompts/mcp-server/build/index.js')\n ];\n\n for (const p of possiblePaths) {\n if (fs.existsSync(p)) {\n mcpServerPath = p;\n break;\n }\n }\n\n if (!mcpServerPath) {\n // 尝试查找 src/index.ts (开发模式)\n const srcPath = path.join(workspacePath, 'mcp-server/src/index.ts');\n if (fs.existsSync(srcPath)) {\n results.warnings.push('检测到开发模式,请先运行 npm run build 编译服务器');\n mcpServerPath = '${workspaceFolder}/mcp-server/build/index.js';\n } else {\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: 'MCP 服务器未找到',\n hint: '请确保 mcp-server/build/index.js 存在,或运行 npm run build'\n }, null, 2)\n }]\n };\n }\n }\n\n const relativePath = mcpServerPath.startsWith(workspacePath)\n ? '${workspaceFolder}/' + path.relative(workspacePath, mcpServerPath)\n : mcpServerPath;\n\n results.steps.push({ \n step: '检测 MCP 服务器路径', \n status: 'success', \n detail: relativePath \n });\n\n // Step 3: 创建或更新 mcp.json\n const mcpJsonPath = path.join(vscodeDir, 'mcp.json');\n const mcpConfig = {\n servers: {\n 'copilot-prompts': {\n command: 'node',\n args: [relativePath],\n env: {},\n autoStart: true\n }\n }\n };\n\n if (fs.existsSync(mcpJsonPath)) {\n // 合并现有配置\n try {\n const existingConfig = JSON.parse(fs.readFileSync(mcpJsonPath, 'utf-8'));\n // 检查是否使用了旧格式 mcpServers\n if (existingConfig.mcpServers && !existingConfig.servers) {\n results.warnings.push('检测到旧版配置格式(mcpServers),已自动升级为新格式(servers)');\n existingConfig.servers = existingConfig.mcpServers;\n delete existingConfig.mcpServers;\n }\n \n if (existingConfig.servers?.['copilot-prompts']) {\n // 确保现有配置包含必要字段\n existingConfig.servers['copilot-prompts'] = {\n ...mcpConfig.servers['copilot-prompts'],\n ...existingConfig.servers['copilot-prompts']\n };\n fs.writeFileSync(mcpJsonPath, JSON.stringify(existingConfig, null, 2));\n results.steps.push({ step: '更新 mcp.json', status: 'success' });\n } else {\n existingConfig.servers = {\n ...existingConfig.servers,\n ...mcpConfig.servers\n };\n fs.writeFileSync(mcpJsonPath, JSON.stringify(existingConfig, null, 2));\n results.steps.push({ step: '合并配置到 mcp.json', status: 'success' });\n }\n } catch (err) {\n fs.writeFileSync(mcpJsonPath, JSON.stringify(mcpConfig, null, 2));\n results.steps.push({ step: '重新创建 mcp.json', status: 'success' });\n results.warnings.push(`原配置文件解析失败: ${err}`);\n }\n } else {\n fs.writeFileSync(mcpJsonPath, JSON.stringify(mcpConfig, null, 2));\n results.steps.push({ step: '创建 mcp.json', status: 'success' });\n }\n\n // Step 4: 创建或更新 settings.json\n const settingsJsonPath = path.join(vscodeDir, 'settings.json');\n const mcpSettings = {\n 'github.copilot.chat.mcp.enabled': true,\n 'github.copilot.chat.mcp.configFile': '${workspaceFolder}/.vscode/mcp.json',\n 'github.copilot.chat.mcp.autoStart': true\n };\n\n if (fs.existsSync(settingsJsonPath)) {\n try {\n const existingSettings = JSON.parse(fs.readFileSync(settingsJsonPath, 'utf-8'));\n const updated = { ...existingSettings, ...mcpSettings };\n // 确保 JSON 格式正确,添加结尾换行\n fs.writeFileSync(settingsJsonPath, JSON.stringify(updated, null, 2) + '\\n');\n results.steps.push({ step: '更新 settings.json', status: 'success' });\n } catch {\n fs.writeFileSync(settingsJsonPath, JSON.stringify(mcpSettings, null, 2) + '\\n');\n results.steps.push({ step: '重新创建 settings.json', status: 'success' });\n }\n } else {\n fs.writeFileSync(settingsJsonPath, JSON.stringify(mcpSettings, null, 2) + '\\n');\n results.steps.push({ step: '创建 settings.json', status: 'success' });\n }\n\n // Step 5: 创建 extensions.json (推荐扩展)\n const extensionsJsonPath = path.join(vscodeDir, 'extensions.json');\n const recommendedExtensions = {\n recommendations: [\n 'github.copilot',\n 'github.copilot-chat'\n ]\n };\n\n if (!fs.existsSync(extensionsJsonPath)) {\n fs.writeFileSync(extensionsJsonPath, JSON.stringify(recommendedExtensions, null, 2));\n results.steps.push({ step: '创建 extensions.json', status: 'success' });\n } else {\n results.steps.push({ step: 'extensions.json 已存在', status: 'skip' });\n }\n\n // Step 6: 添加到 .gitignore (可选)\n const gitignorePath = path.join(workspacePath, '.gitignore');\n if (fs.existsSync(gitignorePath)) {\n const gitignoreContent = fs.readFileSync(gitignorePath, 'utf-8');\n if (!gitignoreContent.includes('.vscode/mcp.json')) {\n const updatedContent = gitignoreContent + '\\n# MCP 配置(本地)\\n.vscode/mcp.json\\n';\n fs.writeFileSync(gitignorePath, updatedContent);\n results.steps.push({ step: '添加到 .gitignore', status: 'success' });\n } else {\n results.steps.push({ step: '.gitignore 已包含配置', status: 'skip' });\n }\n } else {\n results.warnings.push('未检测到 .gitignore,建议手动添加 .vscode/mcp.json');\n }\n\n // Step 7: 自动分析项目并生成 copilot-instructions.md\n const generateInstructions = args.generateInstructions !== false; // 默认 true\n if (generateInstructions) {\n logger.log('🔍 分析项目并生成 copilot-instructions.md...');\n \n try {\n // 分析项目以推荐 Agents\n const analysisResult = await analyzeProject({ projectPath: workspacePath });\n const analysisContent = analysisResult.content[0];\n \n if (analysisContent.type === 'text') {\n const analysisData = JSON.parse(analysisContent.text);\n \n if (analysisData.success && analysisData.features) {\n // 根据项目特征推荐 Agents\n const agentIds: string[] = [];\n const features = analysisData.features;\n \n // Vue 3 项目\n if (features.frameworks?.includes('Vue 3') || features.frameworks?.includes('Vue')) {\n agentIds.push('vue3');\n }\n \n // LogicFlow\n if (features.tools?.includes('LogicFlow')) {\n agentIds.push('logicflow');\n }\n \n // 国际化\n if (features.keywords?.includes('i18n') || features.keywords?.includes('国际化')) {\n agentIds.push('i18n');\n }\n \n // Flutter\n if (features.projectType === 'flutter') {\n agentIds.push('flutter');\n }\n \n // 微信小程序\n if (features.projectType === 'wechat-miniprogram') {\n agentIds.push('wechat-miniprogram');\n }\n \n // 生成配置文件\n if (agentIds.length > 0) {\n const configResult = await generateConfig({\n projectPath: workspacePath,\n agentIds,\n autoMatch: false,\n updateMode: 'merge'\n });\n \n const configContent = configResult.content[0];\n if (configContent.type === 'text') {\n const configData = JSON.parse(configContent.text);\n \n if (configData.success) {\n results.steps.push({ \n step: '生成 copilot-instructions.md', \n status: 'success',\n detail: `应用了 ${configData.agents?.length || 0} 个 Agents: ${agentIds.join(', ')}`\n });\n } else {\n results.warnings.push(`配置生成失败: ${configData.error || '未知错误'}`);\n }\n }\n } else {\n results.warnings.push('未找到匹配的 Agents,跳过配置生成');\n results.warnings.push('你可以稍后手动运行 generate_config 工具并指定 agentIds');\n }\n } else {\n results.warnings.push(`项目分析失败: ${analysisData.error || '未知错误'}`);\n }\n }\n } catch (error) {\n results.warnings.push(`自动生成配置失败: ${error instanceof Error ? error.message : String(error)}`);\n results.warnings.push('你可以稍后手动运行 generate_config 工具生成配置');\n }\n } else {\n results.steps.push({ step: '跳过 copilot-instructions.md 生成', status: 'skip' });\n }\n\n logger.log('✅ 自动配置完成!');\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n message: '🎉 MCP 服务器已自动配置到工作区',\n ...results,\n nextSteps: [\n '1. 重新加载 VS Code 窗口 (Cmd+Shift+P → Reload Window)',\n '2. 打开 GitHub Copilot Chat',\n '3. 开始使用:Copilot 会自动应用项目规范',\n '4. 高级用法:尝试说\"获取 Vue 3 相关规范\"'\n ]\n }, null, 2)\n }]\n };\n } catch (error) {\n logger.error(`自动配置失败: ${error}`);\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error)\n }, null, 2)\n }]\n };\n }\n}\n","import * as fs from 'fs';\nimport { StandardsManager } from '../core/standardsManager';\nimport { ConsoleLogger } from '../core/types';\nimport { AutoInitializer } from '../core/autoInitializer';\n\n/**\n * 智能规范推荐工具\n * 零参数,自动检测上下文并推荐规范\n * v1.9.0: 集成自动项目配置检测\n */\nexport async function getSmartStandards(args: {\n currentFile?: string;\n fileContent?: string;\n}): Promise<{\n content: Array<{ type: string; text: string }>;\n}> {\n const logger = new ConsoleLogger();\n const manager = new StandardsManager();\n const autoInit = new AutoInitializer(logger);\n \n try {\n // ✨ 新增:自动检测并初始化项目配置\n const initResult = await autoInit.ensureProjectConfig();\n \n if (initResult.needsInit) {\n logger.log('📋 ' + initResult.message);\n \n // 如果初始化成功,提示用户\n if (initResult.initialized) {\n return {\n content: [{\n type: 'text',\n text: `🎉 **首次使用自动配置完成**\\n\\n${initResult.message}\\n\\n现在可以继续使用 @mta 进行开发了!\\n\\n💡 提示:项目配置文件已生成在 .github/copilot-instructions.md`\n }]\n };\n }\n }\n \n let detectedFileType = 'unknown';\n let detectedImports: string[] = [];\n let detectedScenario = '';\n let analysisSource = 'none';\n\n // 策略 1: 使用提供的文件路径\n if (args.currentFile && fs.existsSync(args.currentFile)) {\n analysisSource = 'file-path';\n const ext = args.currentFile.split('.').pop()?.toLowerCase() || '';\n \n const extMap: Record<string, string> = {\n 'vue': 'vue',\n 'ts': 'ts',\n 'tsx': 'tsx',\n 'js': 'js',\n 'jsx': 'jsx'\n };\n detectedFileType = extMap[ext] || 'unknown';\n\n // 读取文件内容分析\n try {\n const content = fs.readFileSync(args.currentFile, 'utf-8');\n const imports = extractImports(content);\n detectedImports = imports;\n detectedScenario = inferScenario(content, detectedFileType);\n } catch {\n logger.log('无法读取文件内容,仅使用文件类型');\n }\n }\n\n // 策略 2: 使用提供的文件内容\n if (args.fileContent) {\n analysisSource = 'file-content';\n const imports = extractImports(args.fileContent);\n detectedImports = [...detectedImports, ...imports];\n \n // 从内容推断文件类型\n if (detectedFileType === 'unknown') {\n if (args.fileContent.includes('<template>')) {\n detectedFileType = 'vue';\n } else if (args.fileContent.includes('interface ') || args.fileContent.includes('type ')) {\n detectedFileType = 'ts';\n }\n }\n \n const scenario = inferScenario(args.fileContent, detectedFileType);\n if (scenario) detectedScenario = scenario;\n }\n\n // 策略 3: 环境检测(进程当前目录)\n if (detectedFileType === 'unknown') {\n analysisSource = 'environment';\n const cwd = process.cwd();\n const packageJsonPath = `${cwd}/package.json`;\n \n if (fs.existsSync(packageJsonPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n \n if (deps['vue']) {\n detectedFileType = 'vue';\n detectedImports.push('vue');\n }\n if (deps['react']) {\n detectedFileType = 'tsx';\n detectedImports.push('react');\n }\n if (deps['element-plus']) detectedImports.push('element-plus');\n if (deps['pinia']) detectedImports.push('pinia');\n if (deps['vue-i18n']) detectedImports.push('vue-i18n');\n } catch {\n logger.log('无法解析 package.json');\n }\n }\n }\n\n // 去重\n detectedImports = [...new Set(detectedImports)];\n\n logger.log(`🔍 智能检测结果: fileType=${detectedFileType}, imports=${detectedImports.join(',')}, scenario=${detectedScenario}`);\n\n // 获取相关规范\n const standards = manager.getRelevantStandards({\n fileType: detectedFileType !== 'unknown' ? detectedFileType : undefined,\n imports: detectedImports.length > 0 ? detectedImports : undefined,\n scenario: detectedScenario || undefined\n });\n\n const combinedContent = manager.combineStandards(standards);\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n analysis: {\n source: analysisSource,\n fileType: detectedFileType,\n imports: detectedImports,\n scenario: detectedScenario\n },\n standards: standards,\n content: combinedContent,\n stats: {\n standardsCount: standards.length,\n contentLength: combinedContent.length,\n estimatedTokens: Math.ceil(combinedContent.length / 4)\n }\n }, null, 2)\n }]\n };\n } catch (error) {\n logger.error(`智能规范推荐失败: ${error}`);\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error)\n }, null, 2)\n }]\n };\n }\n}\n\n/**\n * 从代码中提取导入语句\n */\nfunction extractImports(content: string): string[] {\n const imports: string[] = [];\n \n // ES6 imports\n const es6Regex = /import\\s+.*?\\s+from\\s+['\"]([^'\"]+)['\"]/g;\n let match;\n while ((match = es6Regex.exec(content)) !== null) {\n const pkg = match[1];\n if (!pkg.startsWith('.') && !pkg.startsWith('/')) {\n imports.push(pkg.split('/')[0]);\n }\n }\n \n // require statements\n const requireRegex = /require\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\n while ((match = requireRegex.exec(content)) !== null) {\n const pkg = match[1];\n if (!pkg.startsWith('.') && !pkg.startsWith('/')) {\n imports.push(pkg.split('/')[0]);\n }\n }\n \n return [...new Set(imports)];\n}\n\n/**\n * 从代码推断开发场景\n */\nfunction inferScenario(content: string, fileType: string): string {\n const scenarios: string[] = [];\n \n // Vue 相关\n if (fileType === 'vue') {\n if (content.includes('ElForm') || content.includes('<el-form')) {\n scenarios.push('表单组件');\n }\n if (content.includes('ElTable') || content.includes('<el-table')) {\n scenarios.push('表格组件');\n }\n if (content.includes('defineStore')) {\n scenarios.push('状态管理');\n }\n if (content.includes('useI18n') || content.includes('$t(')) {\n scenarios.push('国际化');\n }\n }\n \n // API 调用\n if (content.includes('fetch(') || content.includes('axios.')) {\n scenarios.push('API 调用');\n }\n \n // TypeScript\n if (content.includes('interface ') || content.includes('type ')) {\n scenarios.push('类型定义');\n }\n \n return scenarios.join('、');\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n/**\n * 缓存条目\n */\ninterface CacheEntry {\n content: string;\n timestamp: number;\n accessCount: number;\n}\n\n/**\n * 使用统计\n */\ninterface UsageStats {\n standardCombinations: Map<string, number>; // 规范组合 -> 使用次数\n individualStandards: Map<string, number>; // 单个规范 -> 使用次数\n averageTokens: number; // 平均 token 消耗\n totalCalls: number; // 总调用次数\n}\n\n/**\n * 性能指标\n */\ninterface PerformanceMetrics {\n totalCalls: number;\n cacheHits: number;\n cacheMisses: number;\n averageResponseTime: number;\n totalTokensSaved: number;\n cacheHitRate?: string; // 可选,在 getPerformanceMetrics 中添加\n}\n\n/**\n * 规范资源管理器(Phase 3 增强)\n */\nexport class StandardsManager {\n private standardsPath: string;\n \n // v1.2.0: 底层必须加载的核心规范\n private readonly MANDATORY_CORE_STANDARDS = [\n 'standards://core/code-style', // 代码风格规范(命名、格式等)\n 'standards://core/typescript-base', // TypeScript基础规范\n 'standards://core/code-generation' // 代码生成规范(注释、文档等)\n ];\n \n // Phase 3: 缓存系统\n private contentCache: Map<string, CacheEntry> = new Map();\n private readonly CACHE_DURATION = 30 * 60 * 1000; // 30分钟\n private readonly MAX_CACHE_SIZE = 50; // 最多缓存50个条目\n \n // Phase 3: 使用统计\n private stats: UsageStats = {\n standardCombinations: new Map(),\n individualStandards: new Map(),\n averageTokens: 0,\n totalCalls: 0\n };\n \n // Phase 3: 性能指标\n private metrics: PerformanceMetrics = {\n totalCalls: 0,\n cacheHits: 0,\n cacheMisses: 0,\n averageResponseTime: 0,\n totalTokensSaved: 0\n };\n \n constructor() {\n // 标准规范目录路径\n // 开发环境: mcp-server/build/core -> copilot-prompts/standards\n // npm 包环境: node_modules/mta-mcp/build/core -> node_modules/mta-mcp/standards\n const devPath = path.resolve(__dirname, '../../../standards');\n const npmPath = path.resolve(__dirname, '../../standards');\n \n // 优先使用 npm 包内的路径,如果不存在则使用开发路径\n this.standardsPath = fs.existsSync(npmPath) ? npmPath : devPath;\n }\n \n /**\n * 获取所有可用的规范资源\n */\n getAvailableStandards(): Array<{ uri: string; name: string; description: string; category: string }> {\n const standards: Array<{ uri: string; name: string; description: string; category: string }> = [];\n \n const categories = [\n { dir: 'core', name: '核心规范' },\n { dir: 'frameworks', name: '框架规范' },\n { dir: 'libraries', name: '库规范' },\n { dir: 'patterns', name: '设计模式' }\n ];\n \n categories.forEach(({ dir, name: categoryName }) => {\n const categoryPath = path.join(this.standardsPath, dir);\n \n if (!fs.existsSync(categoryPath)) {\n return;\n }\n \n const files = fs.readdirSync(categoryPath)\n .filter(file => file.endsWith('.md'));\n \n files.forEach(file => {\n const standardId = file.replace('.md', '');\n standards.push({\n uri: `standards://${dir}/${standardId}`,\n name: this.getStandardName(dir, standardId),\n description: `${categoryName} - ${this.getStandardDescription(dir, standardId)}`,\n category: dir\n });\n });\n });\n \n return standards;\n }\n \n /**\n * 读取特定规范内容(Phase 3: 带缓存)\n */\n readStandard(uri: string): string {\n const startTime = Date.now();\n \n // 检查缓存\n const cached = this.contentCache.get(uri);\n if (cached && (Date.now() - cached.timestamp) < this.CACHE_DURATION) {\n cached.accessCount++;\n this.metrics.cacheHits++;\n return cached.content;\n }\n \n this.metrics.cacheMisses++;\n \n // 解析 URI: standards://category/standard-name\n const match = uri.match(/^standards:\\/\\/([^/]+)\\/(.+)$/);\n \n if (!match) {\n throw new Error(`Invalid standards URI: ${uri}`);\n }\n \n const [, category, standardId] = match;\n const filePath = path.join(this.standardsPath, category, `${standardId}.md`);\n \n if (!fs.existsSync(filePath)) {\n throw new Error(`Standard not found: ${uri}`);\n }\n \n const content = fs.readFileSync(filePath, 'utf-8');\n \n // 更新缓存\n this.updateCache(uri, content);\n \n // 更新统计\n this.stats.individualStandards.set(\n uri,\n (this.stats.individualStandards.get(uri) || 0) + 1\n );\n \n // 记录响应时间\n const responseTime = Date.now() - startTime;\n this.updateAverageResponseTime(responseTime);\n \n return content;\n }\n \n /**\n * 更新缓存\n */\n private updateCache(uri: string, content: string): void {\n // 如果缓存已满,移除最少使用的条目\n if (this.contentCache.size >= this.MAX_CACHE_SIZE) {\n let minAccessCount = Infinity;\n let lruKey: string | null = null;\n \n this.contentCache.forEach((entry, key) => {\n if (entry.accessCount < minAccessCount) {\n minAccessCount = entry.accessCount;\n lruKey = key;\n }\n });\n \n if (lruKey) {\n this.contentCache.delete(lruKey);\n }\n }\n \n this.contentCache.set(uri, {\n content,\n timestamp: Date.now(),\n accessCount: 1\n });\n }\n \n /**\n * 根据技术栈获取相关规范(增强版 - Phase 2)\n */\n getRelevantStandards(context: {\n fileType?: string;\n imports?: string[];\n scenario?: string;\n fileContent?: string; // 新增:文件内容(用于自动检测)\n }): string[] {\n const standardScores = new Map<string, number>();\n \n // 权重系统\n const WEIGHTS = {\n CORE: 100, // 核心规范始终包含\n FILE_TYPE: 50, // 文件类型匹配\n IMPORT_DIRECT: 40, // 直接导入匹配\n IMPORT_RELATED: 20, // 相关导入匹配\n SCENARIO: 30, // 场景匹配\n CONTENT: 15, // 内容关键词匹配\n THRESHOLD: 10 // 最低阈值\n };\n \n // v1.2.0: 始终包含底层必须加载的核心规范\n this.MANDATORY_CORE_STANDARDS.forEach(standard => {\n standardScores.set(standard, WEIGHTS.CORE);\n });\n \n // 自动检测导入(如果提供了文件内容)\n let detectedImports = context.imports || [];\n if (context.fileContent && !context.imports) {\n detectedImports = this.detectImports(context.fileContent);\n }\n \n // 根据文件类型评分\n if (context.fileType) {\n this.scoreByFileType(context.fileType, standardScores, WEIGHTS);\n }\n \n // 根据导入评分\n if (detectedImports.length > 0) {\n this.scoreByImports(detectedImports, standardScores, WEIGHTS);\n }\n \n // 根据场景评分\n if (context.scenario) {\n this.scoreByScenario(context.scenario, standardScores, WEIGHTS);\n }\n \n // 根据内容关键词评分\n if (context.fileContent) {\n this.scoreByContent(context.fileContent, standardScores, WEIGHTS);\n }\n \n // 过滤并排序\n const sortedStandards = Array.from(standardScores.entries())\n .filter(([_, score]) => score >= WEIGHTS.THRESHOLD)\n .sort((a, b) => b[1] - a[1])\n .map(([uri]) => uri);\n \n // Phase 3: 记录使用统计\n this.stats.totalCalls++;\n const combinationKey = sortedStandards.join('|');\n this.stats.standardCombinations.set(\n combinationKey,\n (this.stats.standardCombinations.get(combinationKey) || 0) + 1\n );\n \n return sortedStandards;\n }\n \n /**\n * 自动检测文件中的导入语句\n */\n private detectImports(content: string): string[] {\n const imports: string[] = [];\n \n // 匹配 ES6 import 语句\n const importRegex = /import\\s+(?:(?:{[^}]*}|\\*\\s+as\\s+\\w+|\\w+)\\s+from\\s+)?['\"]([^'\"]+)['\"]/g;\n let match;\n \n while ((match = importRegex.exec(content)) !== null) {\n imports.push(match[1]);\n }\n \n // 匹配 require 语句\n const requireRegex = /require\\(['\"]([^'\"]+)['\"]\\)/g;\n while ((match = requireRegex.exec(content)) !== null) {\n imports.push(match[1]);\n }\n \n return imports;\n }\n \n /**\n * 根据文件类型评分\n */\n private scoreByFileType(\n fileType: string, \n scores: Map<string, number>, \n weights: Record<string, number>\n ): void {\n const type = fileType.toLowerCase();\n \n if (type === 'vue' || type.endsWith('.vue')) {\n this.addScore(scores, 'standards://frameworks/vue3-composition', weights.FILE_TYPE);\n this.addScore(scores, 'standards://patterns/component-design', weights.FILE_TYPE * 0.6);\n }\n \n // 微信小程序文件类型\n if (type === 'wxml' || type.endsWith('.wxml') ||\n type === 'wxss' || type.endsWith('.wxss') ||\n type === 'wxs' || type.endsWith('.wxs')) {\n this.addScore(scores, 'standards://frameworks/wechat-miniprogram', weights.FILE_TYPE);\n }\n \n if (type === 'ts' || type === 'typescript' || type.endsWith('.ts')) {\n // TypeScript 文件,略微提升 TS 规范权重\n this.addScore(scores, 'standards://core/typescript-base', weights.FILE_TYPE * 0.3);\n }\n \n // Flutter/Dart 文件类型\n if (type === 'dart' || type.endsWith('.dart')) {\n this.addScore(scores, 'standards://frameworks/flutter', weights.FILE_TYPE);\n this.addScore(scores, 'standards://frameworks/flutter-ui-system', weights.FILE_TYPE);\n this.addScore(scores, 'standards://core/dart-base', weights.FILE_TYPE * 0.5);\n }\n }\n \n /**\n * 根据导入评分\n */\n private scoreByImports(\n imports: string[], \n scores: Map<string, number>, \n weights: Record<string, number>\n ): void {\n imports.forEach(imp => {\n const normalized = imp.toLowerCase();\n \n // Vue 生态\n if (normalized === 'vue' || normalized.startsWith('vue/')) {\n this.addScore(scores, 'standards://frameworks/vue3-composition', weights.IMPORT_DIRECT);\n } else if (normalized.includes('vue')) {\n this.addScore(scores, 'standards://frameworks/vue3-composition', weights.IMPORT_RELATED);\n }\n \n // Pinia\n if (normalized === 'pinia' || normalized.startsWith('pinia/')) {\n this.addScore(scores, 'standards://frameworks/pinia', weights.IMPORT_DIRECT);\n }\n \n // Element Plus\n if (normalized === 'element-plus' || normalized.startsWith('element-plus/')) {\n this.addScore(scores, 'standards://libraries/element-plus', weights.IMPORT_DIRECT);\n } else if (normalized.includes('element')) {\n this.addScore(scores, 'standards://libraries/element-plus', weights.IMPORT_RELATED);\n }\n \n // i18n\n if (normalized === 'vue-i18n' || normalized.includes('i18n')) {\n this.addScore(scores, 'standards://libraries/i18n', weights.IMPORT_DIRECT);\n }\n \n // 微信小程序\n if (normalized === 'wx' || normalized.includes('weixin') || \n normalized.includes('miniprogram')) {\n this.addScore(scores, 'standards://frameworks/wechat-miniprogram', weights.IMPORT_DIRECT);\n }\n \n // Axios / API 相关\n if (normalized === 'axios' || normalized.includes('axios')) {\n this.addScore(scores, 'standards://patterns/api-layer', weights.IMPORT_DIRECT);\n }\n \n // 通用组件库导入提示组件设计\n if (normalized.includes('component') || normalized.startsWith('./components/')) {\n this.addScore(scores, 'standards://patterns/component-design', weights.IMPORT_RELATED);\n }\n \n // Flutter 相关\n if (normalized === 'flutter' || normalized.startsWith('flutter/') ||\n normalized.startsWith('package:flutter')) {\n this.addScore(scores, 'standards://frameworks/flutter', weights.IMPORT_DIRECT);\n this.addScore(scores, 'standards://frameworks/flutter-ui-system', weights.IMPORT_DIRECT);\n }\n \n // GetX 状态管理\n if (normalized === 'get' || normalized.startsWith('get/') ||\n normalized.startsWith('package:get')) {\n this.addScore(scores, 'standards://frameworks/flutter', weights.IMPORT_DIRECT);\n }\n });\n }\n \n /**\n * 根据场景评分\n */\n private scoreByScenario(\n scenario: string, \n scores: Map<string, number>, \n weights: Record<string, number>\n ): void {\n const normalized = scenario.toLowerCase();\n \n // API 相关场景\n if (normalized.includes('api') || normalized.includes('request') || \n normalized.includes('fetch') || normalized.includes('axios')) {\n this.addScore(scores, 'standards://patterns/api-layer', weights.SCENARIO);\n }\n \n // 组件相关场景\n if (normalized.includes('component') || normalized.includes('组件') ||\n normalized.includes('widget') || normalized.includes('封装')) {\n this.addScore(scores, 'standards://patterns/component-design', weights.SCENARIO);\n }\n \n // 表单场景\n if (normalized.includes('form') || normalized.includes('表单') ||\n normalized.includes('input') || normalized.includes('validation')) {\n this.addScore(scores, 'standards://libraries/element-plus', weights.SCENARIO);\n this.addScore(scores, 'standards://patterns/component-design', weights.SCENARIO * 0.5);\n }\n \n // 状态管理场景\n if (normalized.includes('store') || normalized.includes('state') ||\n normalized.includes('状态') || normalized.includes('pinia')) {\n this.addScore(scores, 'standards://frameworks/pinia', weights.SCENARIO);\n }\n \n // 国际化场景\n if (normalized.includes('i18n') || normalized.includes('translate') ||\n normalized.includes('国际化') || normalized.includes('翻译') ||\n normalized.includes('locale') || normalized.includes('多语言') ||\n normalized.includes('messages.ts') || normalized.includes('$t(')) {\n this.addScore(scores, 'standards://libraries/i18n', weights.SCENARIO);\n }\n \n // Vue CSS 嵌套场景\n if (normalized.includes('css') || normalized.includes('样式') ||\n normalized.includes('style') || normalized.includes('scoped') ||\n normalized.includes('嵌套') || normalized.includes('nesting') ||\n normalized.includes('内联') || normalized.includes('inline') ||\n normalized.includes('工具类') || normalized.includes('utilities') ||\n normalized.includes('.ml_') || normalized.includes('.mr_') ||\n normalized.includes('.mt_') || normalized.includes('.mb_') ||\n normalized.includes('.w_') || normalized.includes(':deep(')) {\n this.addScore(scores, 'standards://patterns/vue-css-nesting', weights.SCENARIO);\n }\n \n // 微信小程序场景\n if (normalized.includes('小程序') || normalized.includes('miniprogram') ||\n normalized.includes('wechat') || normalized.includes('微信') ||\n normalized.includes('wx.') || normalized.includes('page(') ||\n normalized.includes('component(') || normalized.includes('云开发') ||\n normalized.includes('云函数') || normalized.includes('云数据库') ||\n normalized.includes('云存储')) {\n this.addScore(scores, 'standards://frameworks/wechat-miniprogram', weights.SCENARIO);\n }\n \n // Flutter UI 系统场景\n if (normalized.includes('flutter') || normalized.includes('dart') ||\n normalized.includes('widget') || normalized.includes('ui系统') ||\n normalized.includes('ui 系统') || normalized.includes('flutter ui') ||\n normalized.includes('design token') || normalized.includes('token') ||\n normalized.includes('主题') || normalized.includes('theme')) {\n this.addScore(scores, 'standards://frameworks/flutter', weights.SCENARIO);\n this.addScore(scores, 'standards://frameworks/flutter-ui-system', weights.SCENARIO);\n }\n \n // Flex 组件场景\n if (normalized.includes('flexbutton') || normalized.includes('flexcard') ||\n normalized.includes('flexinput') || normalized.includes('flex组件') ||\n normalized.includes('$c') || normalized.includes('$s') ||\n normalized.includes('$t') || normalized.includes('$r')) {\n this.addScore(scores, 'standards://frameworks/flutter-ui-system', weights.SCENARIO * 1.5);\n }\n }\n \n /**\n * 根据文件内容关键词评分\n */\n private scoreByContent(\n content: string, \n scores: Map<string, number>, \n weights: Record<string, number>\n ): void {\n const normalized = content.toLowerCase();\n \n // Vue Composition API 关键词\n if (normalized.includes('defineprops') || normalized.includes('defineemits') ||\n normalized.includes('ref(') || normalized.includes('computed(') ||\n normalized.includes('watch(') || normalized.includes('onmounted')) {\n this.addScore(scores, 'standards://frameworks/vue3-composition', weights.CONTENT);\n }\n \n // Pinia 关键词\n if (normalized.includes('definestore') || normalized.includes('usestore') ||\n normalized.includes('$patch') || normalized.includes('$subscribe')) {\n this.addScore(scores, 'standards://frameworks/pinia', weights.CONTENT);\n }\n \n // Element Plus 关键词\n if (normalized.includes('el-form') || normalized.includes('el-table') ||\n normalized.includes('el-dialog') || normalized.includes('elmessage')) {\n this.addScore(scores, 'standards://libraries/element-plus', weights.CONTENT);\n }\n \n // i18n 关键词\n if (normalized.includes('$t(') || normalized.includes('t(\\'') ||\n normalized.includes('usei18n') || normalized.includes('locale') ||\n normalized.includes('messages.ts') || normalized.includes('localestore') ||\n normalized.includes('setlocale') || normalized.includes('togglelocale')) {\n this.addScore(scores, 'standards://libraries/i18n', weights.CONTENT);\n }\n \n // Vue CSS 嵌套关键词\n if (normalized.includes('<style scoped>') || normalized.includes('&:hover') ||\n normalized.includes('&.active') || normalized.includes('&::before') ||\n normalized.includes(':deep(') || normalized.includes(':global(') ||\n normalized.includes('style=\"') || normalized.includes('class=\"ml_') ||\n normalized.includes('class=\"mr_') || normalized.includes('class=\"mt_') ||\n normalized.includes('class=\"w_')) {\n this.addScore(scores, 'standards://patterns/vue-css-nesting', weights.CONTENT);\n }\n \n // 微信小程序关键词\n if (normalized.includes('wx.') || normalized.includes('page({') ||\n normalized.includes('component({') || normalized.includes('setdata') ||\n normalized.includes('onload') || normalized.includes('onshow') ||\n normalized.includes('wx:for') || normalized.includes('wx:if') ||\n normalized.includes('wx.cloud') || normalized.includes('cloudfunctions') ||\n normalized.includes('callfunction') || normalized.includes('wx-server-sdk') ||\n normalized.includes('cloud.init') || normalized.includes('exports.main')) {\n this.addScore(scores, 'standards://frameworks/wechat-miniprogram', weights.CONTENT);\n }\n \n // API 层关键词\n if (normalized.includes('axios.') || normalized.includes('.get(') ||\n normalized.includes('.post(') || normalized.includes('interceptor')) {\n this.addScore(scores, 'standards://patterns/api-layer', weights.CONTENT);\n }\n \n // Flutter Widget 关键词\n if (normalized.includes('statelesswidget') || normalized.includes('statefulwidget') ||\n normalized.includes('buildcontext') || normalized.includes('@override') ||\n normalized.includes('widget build(') || normalized.includes('getx') ||\n normalized.includes('get.find') || normalized.includes('obx(')) {\n this.addScore(scores, 'standards://frameworks/flutter', weights.CONTENT);\n }\n \n // Flutter UI Token 系统关键词\n if (normalized.includes('$c.') || normalized.includes('$s.') ||\n normalized.includes('$t.') || normalized.includes('$r.') ||\n normalized.includes('$shadow.') || normalized.includes('$b.') ||\n normalized.includes('flexbutton') || normalized.includes('flexcard') ||\n normalized.includes('flexinput') || normalized.includes('flexbox') ||\n normalized.includes('tokenmanager') || normalized.includes('designtokens') ||\n normalized.includes('thememanager') || normalized.includes('gap(')) {\n this.addScore(scores, 'standards://frameworks/flutter-ui-system', weights.CONTENT * 2);\n }\n }\n \n /**\n * 添加分数(累加)\n */\n private addScore(scores: Map<string, number>, uri: string, points: number): void {\n const current = scores.get(uri) || 0;\n scores.set(uri, current + points);\n }\n \n /**\n * 组合多个规范内容(Phase 3: 优化去重与顺序)\n */\n combineStandards(uris: string[]): string {\n const startTime = Date.now();\n \n // 去重(保持顺序)\n const uniqueUris = Array.from(new Set(uris));\n \n // 优化顺序:核心规范放在最前面\n const coreUris = uniqueUris.filter(uri => uri.startsWith('standards://core/'));\n const otherUris = uniqueUris.filter(uri => !uri.startsWith('standards://core/'));\n const sortedUris = [...coreUris, ...otherUris];\n \n const contents: string[] = [];\n let totalSize = 0;\n \n sortedUris.forEach(uri => {\n try {\n const content = this.readStandard(uri);\n const standardName = this.extractStandardName(uri);\n \n const section = `\\n## 📚 ${standardName}\\n\\n${content}\\n`;\n contents.push(section);\n totalSize += section.length;\n } catch (error) {\n console.error(`Failed to read standard ${uri}:`, error);\n }\n });\n \n const combined = contents.join('\\n---\\n');\n \n // 计算 token 节省(假设完整规范 ~10000 tokens)\n const estimatedTokens = Math.ceil(combined.length / 4);\n const baselineTokens = 10000;\n const tokensSaved = baselineTokens - estimatedTokens;\n \n this.metrics.totalTokensSaved += Math.max(0, tokensSaved);\n \n // 记录处理时间\n const processingTime = Date.now() - startTime;\n console.log(`[StandardsManager] Combined ${sortedUris.length} standards in ${processingTime}ms, ~${estimatedTokens} tokens (saved ${tokensSaved})`);\n \n return combined;\n }\n \n /**\n * 提取规范名称\n */\n private extractStandardName(uri: string): string {\n const match = uri.match(/^standards:\\/\\/([^/]+)\\/(.+)$/);\n if (match) {\n const [, category, standardId] = match;\n return this.getStandardName(category, standardId);\n }\n return uri;\n }\n \n /**\n * 获取规范显示名称\n */\n private getStandardName(category: string, standardId: string): string {\n const nameMap: Record<string, Record<string, string>> = {\n core: {\n 'code-style': '代码风格规范',\n 'typescript-base': 'TypeScript 基础',\n 'dart-base': 'Dart 基础'\n },\n frameworks: {\n 'vue3-composition': 'Vue 3 Composition API',\n 'pinia': 'Pinia 状态管理',\n 'flutter': 'Flutter 开发规范',\n 'flutter-ui-system': 'Flutter UI 系统规范',\n 'wechat-miniprogram': '微信小程序开发'\n },\n libraries: {\n 'element-plus': 'Element Plus 组件库',\n 'i18n': '国际化 (i18n)'\n },\n patterns: {\n 'api-layer': 'API 层设计',\n 'component-design': '组件设计模式',\n 'vue-css-nesting': 'Vue CSS 嵌套写法',\n 'vue-api-mock-layer': 'Vue API Mock 层'\n }\n };\n \n return nameMap[category]?.[standardId] || standardId;\n }\n \n /**\n * 获取规范描述\n */\n private getStandardDescription(category: string, standardId: string): string {\n const descMap: Record<string, Record<string, string>> = {\n core: {\n 'code-style': '命名规范、代码组织、注释规范',\n 'typescript-base': '基础类型、函数、泛型使用',\n 'dart-base': '空安全、异步编程、类和对象'\n },\n frameworks: {\n 'vue3-composition': 'Props、Emits、生命周期、Composables',\n 'pinia': 'Store 定义、状态管理、持久化',\n 'flutter': 'Widget 设计、状态管理、性能优化',\n 'flutter-ui-system': 'Design Token、Flex组件、主题系统、$快捷方式',\n 'wechat-miniprogram': 'Page/Component、网络请求、性能优化'\n },\n libraries: {\n 'element-plus': '表单、表格、对话框、消息提示',\n 'i18n': '翻译文件、组件使用、参数化'\n },\n patterns: {\n 'api-layer': 'Axios 配置、API 模块化、错误处理',\n 'component-design': '组件通信、Props 验证、性能优化',\n 'vue-css-nesting': '原生嵌套语法、伪类伪元素、深度选择器',\n 'vue-api-mock-layer': 'Axios封装、Mock数据、模块化API'\n }\n };\n \n return descMap[category]?.[standardId] || '';\n }\n \n /**\n * 更新平均响应时间\n */\n private updateAverageResponseTime(responseTime: number): void {\n const { totalCalls, averageResponseTime } = this.metrics;\n this.metrics.totalCalls++;\n this.metrics.averageResponseTime = \n (averageResponseTime * totalCalls + responseTime) / this.metrics.totalCalls;\n }\n \n /**\n * 获取性能指标\n */\n getPerformanceMetrics(): PerformanceMetrics {\n return {\n ...this.metrics,\n cacheHitRate: this.metrics.totalCalls > 0 \n ? (this.metrics.cacheHits / this.metrics.totalCalls * 100).toFixed(2) + '%'\n : '0%'\n } as any;\n }\n \n /**\n * 获取使用统计\n */\n getUsageStats(): {\n topCombinations: Array<{ combination: string; count: number }>;\n topStandards: Array<{ standard: string; count: number }>;\n totalCalls: number;\n } {\n // 获取最常用的规范组合(Top 5)\n const topCombinations = Array.from(this.stats.standardCombinations.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5)\n .map(([combination, count]) => ({ combination, count }));\n \n // 获取最常用的单个规范(Top 5)\n const topStandards = Array.from(this.stats.individualStandards.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5)\n .map(([standard, count]) => ({ standard, count }));\n \n return {\n topCombinations,\n topStandards,\n totalCalls: this.stats.totalCalls\n };\n }\n \n /**\n * 清除缓存\n */\n clearCache(): void {\n this.contentCache.clear();\n console.log('[StandardsManager] Cache cleared');\n }\n \n /**\n * 获取缓存统计\n */\n getCacheStats(): {\n size: number;\n maxSize: number;\n entries: Array<{ uri: string; accessCount: number; age: number }>;\n } {\n const entries = Array.from(this.contentCache.entries())\n .map(([uri, entry]) => ({\n uri,\n accessCount: entry.accessCount,\n age: Math.floor((Date.now() - entry.timestamp) / 1000) // 秒\n }))\n .sort((a, b) => b.accessCount - a.accessCount);\n \n return {\n size: this.contentCache.size,\n maxSize: this.MAX_CACHE_SIZE,\n entries\n };\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport { analyzeProject } from '../tools/analyzeProject';\nimport { generateConfig } from '../tools/generateConfig';\nimport { Logger } from './types.js';\n\n/**\n * 自动初始化器\n * 在工具调用前检查项目配置,如果不存在则自动生成\n */\nexport class AutoInitializer {\n private initialized: Map<string, boolean> = new Map();\n \n constructor(private logger?: Logger) {}\n\n /**\n * 检查并初始化项目配置\n * @param workspacePath 工作区路径\n * @returns 是否需要初始化(返回 true 表示已执行初始化)\n */\n async ensureProjectConfig(workspacePath?: string): Promise<{\n needsInit: boolean;\n initialized: boolean;\n message: string;\n }> {\n // 检测工作区路径\n const projectPath = workspacePath || this.detectWorkspacePath();\n \n if (!projectPath) {\n return {\n needsInit: false,\n initialized: false,\n message: '未检测到工作区路径'\n };\n }\n\n // 检查是否已经初始化过(避免重复)\n if (this.initialized.get(projectPath)) {\n return {\n needsInit: false,\n initialized: true,\n message: `项目已配置: ${path.basename(projectPath)}`\n };\n }\n\n // 检查是否存在配置文件\n const configPath = path.join(projectPath, '.github', 'copilot-instructions.md');\n const hasConfig = fs.existsSync(configPath);\n\n if (hasConfig) {\n this.initialized.set(projectPath, true);\n return {\n needsInit: false,\n initialized: true,\n message: `项目已有配置: ${path.basename(projectPath)}`\n };\n }\n\n // 需要初始化\n this.log(`🔍 检测到项目未配置,开始自动分析和生成配置...`);\n this.log(`📁 项目路径: ${projectPath}`);\n\n try {\n // 1. 分析项目\n this.log('1️⃣ 分析项目技术栈...');\n const analysisResult = await analyzeProject({ projectPath });\n \n if (analysisResult.content?.[0]?.text) {\n const analysis = JSON.parse(analysisResult.content[0].text);\n this.log(`✅ 检测到: ${analysis.frameworks?.join(', ') || '未知技术栈'}`);\n\n // 2. 生成配置\n this.log('2️⃣ 生成项目配置文件...');\n await generateConfig({\n projectPath,\n autoMatch: true\n });\n\n this.initialized.set(projectPath, true);\n\n return {\n needsInit: true,\n initialized: true,\n message: `✅ 项目配置已自动生成\\n📁 路径: ${configPath}\\n🎯 技术栈: ${analysis.frameworks?.join(', ')}`\n };\n }\n } catch (error) {\n this.log(`❌ 自动初始化失败: ${error}`);\n return {\n needsInit: true,\n initialized: false,\n message: `⚠️ 自动初始化失败: ${error instanceof Error ? error.message : String(error)}`\n };\n }\n\n return {\n needsInit: true,\n initialized: false,\n message: '⚠️ 无法完成自动初始化'\n };\n }\n\n /**\n * 检测工作区路径\n */\n private detectWorkspacePath(): string | null {\n // 优先级 1: 环境变量\n if (process.env.WORKSPACE_PATH) {\n return process.env.WORKSPACE_PATH;\n }\n\n // 优先级 2: 当前工作目录\n const cwd = process.cwd();\n if (this.isValidProject(cwd)) {\n return cwd;\n }\n\n // 优先级 3: 尝试从常见位置检测\n const possiblePaths = [\n path.join(cwd, '..'),\n path.join(cwd, '../..'),\n ];\n\n for (const possiblePath of possiblePaths) {\n if (this.isValidProject(possiblePath)) {\n return possiblePath;\n }\n }\n\n return null;\n }\n\n /**\n * 判断是否是有效的项目目录\n */\n private isValidProject(dirPath: string): boolean {\n if (!fs.existsSync(dirPath)) {\n return false;\n }\n\n // 检查是否有项目标志文件\n const markers = [\n 'package.json',\n 'pubspec.yaml',\n 'pom.xml',\n 'go.mod',\n 'Cargo.toml',\n '.git'\n ];\n\n return markers.some(marker => \n fs.existsSync(path.join(dirPath, marker))\n );\n }\n\n /**\n * 重置初始化状态(用于测试)\n */\n reset(): void {\n this.initialized.clear();\n }\n\n private log(message: string): void {\n if (this.logger) {\n this.logger.log(message);\n } else {\n console.error(`[AutoInit] ${message}`);\n }\n }\n}\n","import { StandardsManager } from '../core/standardsManager';\nimport { ConsoleLogger } from '../core/types';\n\n/**\n * 预设场景定义\n */\nconst PRESETS = {\n 'vue3-component': {\n name: 'Vue 3 组件开发',\n fileType: 'vue',\n imports: ['vue', 'element-plus'],\n scenario: '组件开发',\n description: '开发 Vue 3 单文件组件,包含 Composition API 和 Element Plus'\n },\n 'vue3-form': {\n name: 'Vue 3 表单开发',\n fileType: 'vue',\n imports: ['vue', 'element-plus'],\n scenario: '表单组件',\n description: 'Element Plus 表单组件开发,包含验证和国际化'\n },\n 'vue3-table': {\n name: 'Vue 3 表格开发',\n fileType: 'vue',\n imports: ['vue', 'element-plus'],\n scenario: '表格组件',\n description: 'Element Plus 表格组件开发,包含分页和操作'\n },\n 'pinia-store': {\n name: 'Pinia 状态管理',\n fileType: 'ts',\n imports: ['vue', 'pinia'],\n scenario: '状态管理',\n description: 'Pinia store 定义,包含 actions、getters 和持久化'\n },\n 'api-call': {\n name: 'API 调用层',\n fileType: 'ts',\n imports: ['axios'],\n scenario: 'API 调用',\n description: 'RESTful API 调用封装,包含错误处理和类型定义'\n },\n 'typescript-strict': {\n name: 'TypeScript 严格模式',\n fileType: 'ts',\n imports: [],\n scenario: '类型定义',\n description: 'TypeScript 严格类型定义和类型守卫'\n },\n 'i18n': {\n name: '国际化开发',\n fileType: 'vue',\n imports: ['vue', 'vue-i18n'],\n scenario: '国际化',\n description: 'Vue I18n 多语言支持,包含翻译文件管理'\n },\n 'composable': {\n name: 'Vue 3 Composable',\n fileType: 'ts',\n imports: ['vue'],\n scenario: '可组合函数',\n description: 'Vue 3 组合式函数开发,复用逻辑'\n }\n} as const;\n\ntype PresetId = keyof typeof PRESETS;\n\n/**\n * 预设场景快捷工具\n * 使用预定义的场景配置快速获取规范\n */\nexport async function usePreset(args: {\n preset: string;\n customImports?: string[];\n}): Promise<{\n content: Array<{ type: string; text: string }>;\n}> {\n const logger = new ConsoleLogger();\n const manager = new StandardsManager();\n \n try {\n // 验证预设\n if (!(args.preset in PRESETS)) {\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: `未知的预设: ${args.preset}`,\n availablePresets: Object.keys(PRESETS).map(id => ({\n id,\n name: PRESETS[id as PresetId].name,\n description: PRESETS[id as PresetId].description\n }))\n }, null, 2)\n }]\n };\n }\n\n const preset = PRESETS[args.preset as PresetId];\n logger.log(`🎯 使用预设: ${preset.name}`);\n\n // 合并自定义导入\n const imports = args.customImports \n ? [...preset.imports, ...args.customImports]\n : [...preset.imports]; // 创建新数组避免只读问题\n\n // 获取相关规范\n const standards = manager.getRelevantStandards({\n fileType: preset.fileType,\n imports: imports.length > 0 ? imports : undefined,\n scenario: preset.scenario\n });\n\n const combinedContent = manager.combineStandards(standards);\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n preset: {\n id: args.preset,\n name: preset.name,\n description: preset.description\n },\n applied: {\n fileType: preset.fileType,\n imports,\n scenario: preset.scenario\n },\n standards: standards,\n content: combinedContent,\n stats: {\n standardsCount: standards.length,\n contentLength: combinedContent.length,\n estimatedTokens: Math.ceil(combinedContent.length / 4)\n }\n }, null, 2)\n }]\n };\n } catch (error) {\n logger.error(`使用预设失败: ${error}`);\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error)\n }, null, 2)\n }]\n };\n }\n}\n\n/**\n * 列出所有可用预设\n */\nexport async function listPresets(): Promise<{\n content: Array<{ type: string; text: string }>;\n}> {\n const presetList = Object.entries(PRESETS).map(([id, preset]) => ({\n id,\n name: preset.name,\n description: preset.description,\n fileType: preset.fileType,\n imports: preset.imports,\n scenario: preset.scenario\n }));\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n total: presetList.length,\n presets: presetList,\n usage: '使用方式: 调用 use_preset 工具并指定 preset 参数'\n }, null, 2)\n }]\n };\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport { fileURLToPath } from 'url';\nimport { ConsoleLogger } from '../core/types';\n\n// ES 模块中获取 __dirname\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n/**\n * 健康检查工具\n * 诊断 MCP 服务器配置和运行状态\n */\nexport async function healthCheck(args: {\n workspacePath?: string;\n verbose?: boolean;\n}): Promise<{\n content: Array<{ type: string; text: string }>;\n}> {\n const logger = new ConsoleLogger();\n const verbose = args.verbose ?? false;\n \n try {\n const checks = {\n server: { status: 'unknown', details: [] as string[] },\n configuration: { status: 'unknown', details: [] as string[] },\n dependencies: { status: 'unknown', details: [] as string[] },\n standards: { status: 'unknown', details: [] as string[] },\n workspace: { status: 'unknown', details: [] as string[] }\n };\n\n // Check 1: 服务器运行状态\n logger.log('🔍 检查服务器状态...');\n try {\n checks.server.status = 'healthy';\n checks.server.details.push('✅ MCP 服务器正在运行');\n checks.server.details.push(`📍 进程 PID: ${process.pid}`);\n checks.server.details.push(`🕐 运行时间: ${Math.floor(process.uptime())}秒`);\n } catch {\n checks.server.status = 'error';\n checks.server.details.push('❌ 服务器未响应');\n }\n\n // Check 2: 配置文件\n logger.log('🔍 检查配置文件...');\n const workspacePath = args.workspacePath || process.cwd();\n const vscodeDir = path.join(workspacePath, '.vscode');\n \n if (fs.existsSync(vscodeDir)) {\n checks.workspace.status = 'healthy';\n checks.workspace.details.push(`✅ 工作区路径: ${workspacePath}`);\n \n // mcp.json\n const mcpJsonPath = path.join(vscodeDir, 'mcp.json');\n if (fs.existsSync(mcpJsonPath)) {\n try {\n const config = JSON.parse(fs.readFileSync(mcpJsonPath, 'utf-8'));\n \n // 检查新格式 (servers) 和旧格式 (mcpServers)\n const hasNewFormat = config.servers?.['copilot-prompts'];\n const hasOldFormat = config.mcpServers?.['copilot-prompts'];\n \n if (hasNewFormat) {\n checks.configuration.status = 'healthy';\n checks.configuration.details.push('✅ mcp.json 配置正确 (使用新格式)');\n \n const serverConfig = config.servers['copilot-prompts'];\n if (verbose) {\n checks.configuration.details.push(` Command: ${serverConfig.command}`);\n checks.configuration.details.push(` Args: ${serverConfig.args?.join(' ')}`);\n checks.configuration.details.push(` AutoStart: ${serverConfig.autoStart ?? 'undefined'}`);\n checks.configuration.details.push(` Env: ${JSON.stringify(serverConfig.env ?? {})}`);\n }\n \n // 检查是否包含推荐字段\n if (!serverConfig.env) {\n checks.configuration.details.push('💡 建议: 添加 \"env\": {} 字段');\n }\n if (!serverConfig.autoStart) {\n checks.configuration.details.push('💡 建议: 添加 \"autoStart\": true 字段');\n }\n } else if (hasOldFormat) {\n checks.configuration.status = 'warning';\n checks.configuration.details.push('⚠️ mcp.json 使用旧格式 (mcpServers)');\n checks.configuration.details.push('💡 建议: 运行 auto_setup 工具升级到新格式 (servers)');\n \n if (verbose) {\n const serverConfig = config.mcpServers['copilot-prompts'];\n checks.configuration.details.push(` Command: ${serverConfig.command}`);\n checks.configuration.details.push(` Args: ${serverConfig.args?.join(' ')}`);\n }\n } else {\n checks.configuration.status = 'warning';\n checks.configuration.details.push('⚠️ mcp.json 缺少 copilot-prompts 配置');\n checks.configuration.details.push('💡 建议: 运行 auto_setup 工具添加配置');\n }\n } catch (error) {\n checks.configuration.status = 'error';\n checks.configuration.details.push(`❌ mcp.json 格式错误: ${error}`);\n checks.configuration.details.push('💡 修复: 运行 auto_setup 工具重新生成配置');\n }\n } else {\n checks.configuration.status = 'warning';\n checks.configuration.details.push('⚠️ mcp.json 不存在');\n checks.configuration.details.push('💡 建议: 运行 auto_setup 工具自动配置');\n }\n \n // settings.json\n const settingsPath = path.join(vscodeDir, 'settings.json');\n if (fs.existsSync(settingsPath)) {\n try {\n const settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));\n if (settings['github.copilot.chat.mcp.enabled'] === true) {\n checks.configuration.details.push('✅ VS Code MCP 已启用');\n } else {\n checks.configuration.details.push('⚠️ VS Code MCP 未启用');\n }\n } catch {\n checks.configuration.details.push('⚠️ settings.json 格式错误');\n }\n }\n } else {\n checks.workspace.status = 'error';\n checks.workspace.details.push('❌ .vscode 目录不存在');\n }\n\n // Check 3: 依赖检查\n logger.log('🔍 检查依赖...');\n const serverRoot = path.resolve(__dirname, '../..');\n const packageJsonPath = path.join(serverRoot, 'package.json');\n \n if (fs.existsSync(packageJsonPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n checks.dependencies.status = 'healthy';\n checks.dependencies.details.push(`✅ 服务器版本: ${pkg.version}`);\n \n if (verbose && pkg.dependencies) {\n const deps = Object.entries(pkg.dependencies).slice(0, 3);\n deps.forEach(([name, version]) => {\n checks.dependencies.details.push(` ${name}: ${version}`);\n });\n }\n \n // 检查关键依赖\n const requiredDeps = ['@modelcontextprotocol/sdk'];\n const missing = requiredDeps.filter(dep => !pkg.dependencies?.[dep]);\n if (missing.length > 0) {\n checks.dependencies.status = 'error';\n checks.dependencies.details.push(`❌ 缺少依赖: ${missing.join(', ')}`);\n }\n } catch {\n checks.dependencies.status = 'error';\n checks.dependencies.details.push('❌ 无法读取 package.json');\n }\n }\n\n // Check 4: 规范文件\n logger.log('🔍 检查规范文件...');\n const standardsDir = path.join(serverRoot, 'standards');\n \n if (fs.existsSync(standardsDir)) {\n const categories = ['core', 'frameworks', 'libraries', 'patterns'];\n const foundStandards: string[] = [];\n \n for (const category of categories) {\n const categoryPath = path.join(standardsDir, category);\n if (fs.existsSync(categoryPath)) {\n const files = fs.readdirSync(categoryPath).filter(f => f.endsWith('.md'));\n foundStandards.push(...files.map(f => `${category}/${f}`));\n }\n }\n \n if (foundStandards.length > 0) {\n checks.standards.status = 'healthy';\n checks.standards.details.push(`✅ 找到 ${foundStandards.length} 个规范文件`);\n if (verbose) {\n foundStandards.slice(0, 5).forEach(s => {\n checks.standards.details.push(` 📄 ${s}`);\n });\n if (foundStandards.length > 5) {\n checks.standards.details.push(` ... 还有 ${foundStandards.length - 5} 个文件`);\n }\n }\n } else {\n checks.standards.status = 'warning';\n checks.standards.details.push('⚠️ 未找到规范文件');\n }\n } else {\n checks.standards.status = 'error';\n checks.standards.details.push('❌ standards 目录不存在');\n }\n\n // 生成总体健康状态\n const allStatuses = Object.values(checks).map(c => c.status);\n const overallStatus = allStatuses.includes('error') ? 'error' \n : allStatuses.includes('warning') ? 'warning' \n : 'healthy';\n\n const statusEmoji = {\n healthy: '✅',\n warning: '⚠️',\n error: '❌',\n unknown: '❓'\n };\n\n logger.log(`${statusEmoji[overallStatus]} 健康检查完成`);\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n overallStatus,\n summary: `${statusEmoji[overallStatus]} MCP 服务器状态: ${overallStatus}`,\n checks,\n recommendations: generateRecommendations(checks)\n }, null, 2)\n }]\n };\n } catch (error) {\n logger.error(`健康检查失败: ${error}`);\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error)\n }, null, 2)\n }]\n };\n }\n}\n\n/**\n * 根据检查结果生成建议\n */\nfunction generateRecommendations(checks: any): string[] {\n const recommendations: string[] = [];\n \n if (checks.configuration.status !== 'healthy') {\n recommendations.push('🔧 运行 auto_setup 工具自动配置 MCP 服务器');\n }\n \n if (checks.workspace.status === 'error') {\n recommendations.push('📁 确保在正确的工作区目录中运行');\n }\n \n if (checks.dependencies.status === 'error') {\n recommendations.push('📦 运行 npm install 安装依赖');\n }\n \n if (checks.standards.status !== 'healthy') {\n recommendations.push('📚 检查 standards 目录是否存在规范文件');\n }\n \n if (recommendations.length === 0) {\n recommendations.push('🎉 一切正常!您可以开始使用 MCP 服务器了');\n }\n \n return recommendations;\n}\n","import * as fs from 'fs';\nimport { StandardsManager } from '../core/standardsManager';\nimport { ConsoleLogger } from '../core/types';\n\n/**\n * 紧凑规范工具 - Token 优化版\n * \n * 优化策略:\n * 1. 只返回规范摘要而非完整内容\n * 2. 提供规范 URI 供按需加载\n * 3. 针对特定场景返回精简的关键规则\n */\nexport async function getCompactStandards(args: {\n currentFile?: string;\n fileContent?: string;\n scenario?: string;\n // 新增:返回模式\n mode?: 'summary' | 'key-rules' | 'full';\n}): Promise<{\n content: Array<{ type: string; text: string }>;\n}> {\n const logger = new ConsoleLogger();\n const manager = new StandardsManager();\n const mode = args.mode || 'key-rules';\n \n try {\n // 检测上下文(复用智能检测逻辑)\n const context = detectContext(args, logger);\n \n // 获取相关规范 URI\n const standardUris = manager.getRelevantStandards({\n fileType: context.fileType,\n imports: context.imports,\n scenario: args.scenario || context.scenario\n });\n\n // 根据模式返回不同内容\n let responseContent: any;\n \n switch (mode) {\n case 'summary':\n // 只返回规范名称和描述,约 500 tokens\n responseContent = buildSummaryResponse(standardUris, manager);\n break;\n \n case 'key-rules':\n // 返回关键规则摘要,约 2000-3000 tokens\n responseContent = buildKeyRulesResponse(standardUris, context, manager);\n break;\n \n case 'full':\n // 完整内容(原有行为)\n responseContent = buildFullResponse(standardUris, manager);\n break;\n }\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify(responseContent, null, 2)\n }]\n };\n } catch (error) {\n logger.error(`规范获取失败: ${error}`);\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error)\n }, null, 2)\n }]\n };\n }\n}\n\n/**\n * 检测上下文\n */\nfunction detectContext(args: any, logger: ConsoleLogger): {\n fileType: string;\n imports: string[];\n scenario: string;\n} {\n let fileType = 'unknown';\n let imports: string[] = [];\n let scenario = '';\n\n // 从文件路径检测\n if (args.currentFile && fs.existsSync(args.currentFile)) {\n const ext = args.currentFile.split('.').pop()?.toLowerCase() || '';\n const extMap: Record<string, string> = {\n 'vue': 'vue', 'ts': 'ts', 'tsx': 'tsx', \n 'js': 'js', 'jsx': 'jsx', 'dart': 'dart'\n };\n fileType = extMap[ext] || 'unknown';\n\n try {\n const content = fs.readFileSync(args.currentFile, 'utf-8');\n imports = extractImports(content);\n scenario = inferScenario(content, fileType);\n } catch {\n // 忽略读取错误\n }\n }\n\n // 从内容检测\n if (args.fileContent) {\n imports = [...imports, ...extractImports(args.fileContent)];\n if (fileType === 'unknown') {\n if (args.fileContent.includes('<template>')) fileType = 'vue';\n else if (args.fileContent.includes('interface ')) fileType = 'ts';\n }\n scenario = scenario || inferScenario(args.fileContent, fileType);\n }\n\n return { fileType, imports: [...new Set(imports)], scenario };\n}\n\n/**\n * 构建摘要响应(约 500 tokens)\n */\nfunction buildSummaryResponse(uris: string[], manager: StandardsManager): any {\n const standards = manager.getAvailableStandards();\n const matched = uris.map(uri => {\n const std = standards.find(s => s.uri === uri);\n return {\n uri,\n name: std?.name || uri,\n description: std?.description || ''\n };\n });\n\n return {\n success: true,\n mode: 'summary',\n message: '已识别相关规范,如需详细内容请使用 mode: \"key-rules\" 或 \"full\"',\n standards: matched,\n stats: {\n count: matched.length,\n estimatedTokens: 500\n }\n };\n}\n\n/**\n * 构建关键规则响应(约 2000-3000 tokens)\n * 针对不同场景提取关键规则\n */\nfunction buildKeyRulesResponse(\n uris: string[], \n context: { fileType: string; imports: string[]; scenario: string },\n manager: StandardsManager\n): any {\n const keyRules: string[] = [];\n \n // 根据文件类型添加关键规则\n if (context.fileType === 'vue') {\n keyRules.push(...getVueKeyRules(context.imports));\n } else if (context.fileType === 'dart') {\n keyRules.push(...getFlutterKeyRules());\n } else if (context.fileType === 'ts' || context.fileType === 'tsx') {\n keyRules.push(...getTypeScriptKeyRules());\n }\n \n // 根据导入添加特定规则\n if (context.imports.includes('element-plus')) {\n keyRules.push(...getElementPlusKeyRules());\n }\n if (context.imports.some(i => i.includes('i18n') || i.includes('locale'))) {\n keyRules.push(...getI18nKeyRules());\n }\n if (context.imports.includes('pinia')) {\n keyRules.push(...getPiniaKeyRules());\n }\n\n return {\n success: true,\n mode: 'key-rules',\n context: {\n fileType: context.fileType,\n detectedImports: context.imports,\n scenario: context.scenario\n },\n keyRules: keyRules.join('\\n\\n'),\n standardUris: uris, // 提供完整 URI 供按需加载\n stats: {\n rulesCount: keyRules.length,\n estimatedTokens: Math.ceil(keyRules.join('').length / 4)\n }\n };\n}\n\n/**\n * 构建完整响应(原有行为)\n */\nfunction buildFullResponse(uris: string[], manager: StandardsManager): any {\n const content = manager.combineStandards(uris);\n return {\n success: true,\n mode: 'full',\n standards: uris,\n content,\n stats: {\n standardsCount: uris.length,\n contentLength: content.length,\n estimatedTokens: Math.ceil(content.length / 4)\n }\n };\n}\n\n// ==================== 关键规则提取 ====================\n\nfunction getVueKeyRules(imports: string[]): string[] {\n return [\n `## Vue 3 关键规则\n\n1. **使用 \\`<script setup lang=\"ts\">\\`** - 必须使用 Composition API\n2. **Props/Emits 类型定义** - 必须使用 interface 定义类型\n3. **禁止内联样式** - 使用 scoped CSS 或 class\n4. **模板简洁** - 复杂逻辑提取到 computed 或方法\n5. **响应式** - 基本类型用 ref,对象用 reactive(不重新赋值)`,\n\n `## 组件结构顺序\n\\`\\`\\`vue\n<script setup lang=\"ts\">\n// 1. 类型导入\n// 2. Props/Emits 定义\n// 3. 响应式状态\n// 4. 计算属性\n// 5. 方法\n// 6. 生命周期\n</script>\n\\`\\`\\``\n ];\n}\n\nfunction getElementPlusKeyRules(): string[] {\n return [\n `## Element Plus 关键规则\n\n### 表格规范\n- **必须** \\`border\\` + \\`highlight-current-row\\`\n- 操作列 \\`fixed=\"right\"\\`,宽度:2按钮160px/3按钮240px/4按钮280px\n- 使用 \\`v-loading\\` 显示加载状态\n\n### 表单规范\n- 使用 \\`label-position=\"top\"\\` 或 \\`label-width=\"120px\"\\`\n- 验证规则使用 \\`FormRules<T>\\` 类型\n- 验证消息必须国际化\n\n### 弹窗规范\n- 使用 \\`destroy-on-close\\` 重置状态\n- 宽度:简单500px/标准700px/复杂900px\n\n### 消息提示\n\\`\\`\\`typescript\nElMessage.success($t('保存成功'))\nElMessageBox.confirm($t('确认删除?'), $t('警告'), { type: 'warning' })\n\\`\\`\\``,\n\n `## 表格示例\n\\`\\`\\`vue\n<el-table v-loading=\"listLoading\" :data=\"list\" border highlight-current-row>\n <el-table-column type=\"index\" :label=\"$t('序号')\" width=\"70\" />\n <el-table-column prop=\"name\" :label=\"$t('名称')\" min-width=\"120\" />\n <el-table-column fixed=\"right\" :label=\"$t('操作')\" width=\"240\">\n <template #default=\"{ row }\">\n <el-button link type=\"primary\" @click=\"handleEdit(row)\">{{ $t('编辑') }}</el-button>\n <el-button link type=\"danger\" @click=\"handleDelete(row)\">{{ $t('删除') }}</el-button>\n </template>\n </el-table-column>\n</el-table>\n\\`\\`\\``\n ];\n}\n\nfunction getI18nKeyRules(): string[] {\n return [\n `## 国际化关键规则\n\n### 必须国际化的内容\n- 所有按钮文字:\\`{{ $t('保存') }}\\`\n- 表单标签:\\`:label=\"$t('客户名称')\"\\`\n- 占位符:\\`:placeholder=\"$t('请输入')\"\\`\n- 表格列标题:\\`:label=\"$t('订单编号')\"\\`\n- 弹窗标题:\\`:title=\"$t('新增客户')\"\\`\n- 提示消息:\\`ElMessage.success($t('保存成功'))\\`\n- 验证规则:\\`message: $t('请输入用户名')\\`\n\n### 禁止\n- ❌ \\`<el-button>新增</el-button>\\` (硬编码)\n- ❌ \\`label=\"客户名称\"\\` (硬编码)\n- ❌ \\`ElMessage.success('保存成功')\\` (硬编码)`\n ];\n}\n\nfunction getPiniaKeyRules(): string[] {\n return [\n `## Pinia 关键规则\n\n### Setup Store 语法(推荐)\n\\`\\`\\`typescript\nexport const useUserStore = defineStore('user', () => {\n const user = ref<User | null>(null)\n const isLoggedIn = computed(() => !!user.value)\n \n async function login(credentials: Credentials) {\n user.value = await authApi.login(credentials)\n }\n \n return { user, isLoggedIn, login }\n})\n\\`\\`\\`\n\n### 规范要求\n- Store ID 使用小写短横线命名\n- 使用 Setup Store 语法而非 Options Store\n- 异步操作直接用 async/await\n- 复杂状态操作使用 $patch`\n ];\n}\n\nfunction getTypeScriptKeyRules(): string[] {\n return [\n `## TypeScript 关键规则\n\n### 类型定义\n- 必须定义函数参数和返回类型\n- 使用 interface 定义对象类型\n- 避免使用 any,使用 unknown 替代\n\n### 命名规范\n- 变量/函数:camelCase\n- 类/接口/类型:PascalCase\n- 常量:UPPER_SNAKE_CASE\n\n### 示例\n\\`\\`\\`typescript\ninterface User {\n id: number\n name: string\n email?: string\n}\n\nasync function fetchUser(id: number): Promise<User | null> {\n // ...\n}\n\\`\\`\\``\n ];\n}\n\nfunction getFlutterKeyRules(): string[] {\n return [\n `## Flutter UI 系统关键规则\n\n### Design Token 快捷方式(必须使用)\n| 快捷方式 | 用途 | 示例 |\n|---------|------|------|\n| \\`$c\\` | 颜色 | \\`$c.primary\\`, \\`$c.text.primary\\` |\n| \\`$s\\` | 间距 | \\`$s.sm\\`, \\`$s.md\\`, \\`$s.px(14)\\` |\n| \\`$t\\` | 排版 | \\`$t.displayLarge\\`, \\`$t.bodyMedium\\` |\n| \\`$r\\` | 圆角 | \\`$r.sm\\`, \\`$r.md\\`, \\`$r.full\\` |\n\n### Flex 组件库(必须使用)\n- \\`FlexButton\\` 替代 ElevatedButton/TextButton\n- \\`FlexCard\\` 替代 Card/Container\n- \\`FlexInput\\` 替代 TextField\n- \\`Gap\\` 替代 SizedBox(间隔)\n\n### 禁止\n- ❌ \\`Color(0xFF3B82F6)\\` 硬编码颜色\n- ❌ \\`EdgeInsets.all(16)\\` 硬编码间距\n- ❌ \\`Colors.blue\\` Material 颜色常量`\n ];\n}\n\n// ==================== 辅助函数 ====================\n\nfunction extractImports(content: string): string[] {\n const imports: string[] = [];\n \n // ES6 imports\n const esImportRegex = /import\\s+(?:(?:\\{[^}]*\\}|\\*\\s+as\\s+\\w+|\\w+)\\s+from\\s+)?['\"]([^'\"]+)['\"]/g;\n let match;\n while ((match = esImportRegex.exec(content)) !== null) {\n imports.push(match[1]);\n }\n \n // require\n const requireRegex = /require\\(['\"]([^'\"]+)['\"]\\)/g;\n while ((match = requireRegex.exec(content)) !== null) {\n imports.push(match[1]);\n }\n \n return imports;\n}\n\nfunction inferScenario(content: string, fileType: string): string {\n const scenarios: string[] = [];\n const lower = content.toLowerCase();\n \n if (lower.includes('el-table') || lower.includes('el-form')) {\n scenarios.push('表格组件', '表单组件');\n }\n if (lower.includes('$t(') || lower.includes('i18n')) {\n scenarios.push('国际化');\n }\n if (lower.includes('interface ') || lower.includes('type ')) {\n scenarios.push('类型定义');\n }\n \n return scenarios.join('、');\n}\n","/**\n * 按 ID 获取规范工具\n * \n * 设计理念:AI 已经知道需要什么规范,直接按 ID 获取\n * 这是最简洁高效的方式,不做任何\"智能\"匹配\n * \n * @module tools/getStandardById\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { ConsoleLogger } from '../core/types';\n\n/**\n * 规范目录结构\n */\nconst STANDARD_DIRS = [\n 'standards/core',\n 'standards/frameworks',\n 'standards/libraries',\n 'standards/patterns',\n 'standards/workflows'\n];\n\n/**\n * 规范 ID 到文件路径的映射(缓存)\n */\nlet standardsCache: Map<string, string> | null = null;\n\n/**\n * 加载模式\n */\ntype LoadMode = 'summary' | 'key-rules' | 'full';\n\n/**\n * 按 ID 获取规范\n * \n * @example\n * // AI 直接调用\n * get_standard_by_id({ id: 'vue3-composition', mode: 'key-rules' })\n * \n * @example\n * // 获取多个规范\n * get_standard_by_id({ ids: ['vue3-composition', 'element-plus'], mode: 'summary' })\n */\nexport async function getStandardById(args: {\n /** 单个规范 ID */\n id?: string;\n /** 多个规范 ID */\n ids?: string[];\n /** 加载模式:summary(摘要) | key-rules(关键规则) | full(完整) */\n mode?: LoadMode;\n}): Promise<{\n content: Array<{ type: string; text: string }>;\n}> {\n const logger = new ConsoleLogger();\n const mode = args.mode || 'key-rules';\n \n try {\n // 获取要加载的 ID 列表\n const idsToLoad = args.ids || (args.id ? [args.id] : []);\n \n if (idsToLoad.length === 0) {\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: '请提供 id 或 ids 参数',\n availableIds: listAvailableStandards()\n }, null, 2)\n }]\n };\n }\n\n // 确保缓存已加载\n ensureCache();\n\n // 加载规范\n const results: Array<{\n id: string;\n found: boolean;\n content?: string;\n error?: string;\n }> = [];\n\n for (const id of idsToLoad) {\n const filePath = standardsCache!.get(id);\n \n if (!filePath) {\n results.push({\n id,\n found: false,\n error: `规范 \"${id}\" 不存在`\n });\n continue;\n }\n\n try {\n const fullContent = fs.readFileSync(filePath, 'utf-8');\n const content = formatContent(fullContent, mode);\n \n results.push({\n id,\n found: true,\n content\n });\n } catch (error) {\n results.push({\n id,\n found: false,\n error: `读取失败: ${error}`\n });\n }\n }\n\n // 统计\n const successCount = results.filter(r => r.found).length;\n const totalLength = results.reduce((sum, r) => sum + (r.content?.length || 0), 0);\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n mode,\n stats: {\n requested: idsToLoad.length,\n found: successCount,\n totalChars: totalLength,\n estimatedTokens: Math.ceil(totalLength / 4)\n },\n standards: results\n }, null, 2)\n }]\n };\n } catch (error) {\n logger.error(`获取规范失败: ${error}`);\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error)\n }, null, 2)\n }]\n };\n }\n}\n\n/**\n * 列出所有可用的规范\n */\nexport function listAvailableStandards(): string[] {\n ensureCache();\n return Array.from(standardsCache!.keys());\n}\n\n/**\n * 确保缓存已加载\n */\nfunction ensureCache(): void {\n if (standardsCache) return;\n\n standardsCache = new Map();\n const baseDir = findBaseDir();\n\n for (const dir of STANDARD_DIRS) {\n const fullDir = path.join(baseDir, dir);\n if (!fs.existsSync(fullDir)) continue;\n\n scanDirectory(fullDir, standardsCache);\n }\n}\n\n/**\n * 查找基础目录\n */\nfunction findBaseDir(): string {\n // 尝试多个可能的位置\n const possiblePaths = [\n process.cwd(),\n path.join(process.cwd(), '..'),\n path.join(__dirname, '..', '..', '..')\n ];\n\n for (const p of possiblePaths) {\n if (fs.existsSync(path.join(p, 'standards'))) {\n return p;\n }\n }\n\n return process.cwd();\n}\n\n/**\n * 扫描目录\n */\nfunction scanDirectory(dir: string, cache: Map<string, string>): void {\n const items = fs.readdirSync(dir);\n\n for (const item of items) {\n const fullPath = path.join(dir, item);\n const stat = fs.statSync(fullPath);\n\n if (stat.isDirectory()) {\n scanDirectory(fullPath, cache);\n } else if (item.endsWith('.md')) {\n // 使用文件名(不含扩展名)作为 ID\n const id = path.basename(item, '.md');\n cache.set(id, fullPath);\n }\n }\n}\n\n/**\n * 根据模式格式化内容\n */\nfunction formatContent(content: string, mode: LoadMode): string {\n switch (mode) {\n case 'summary':\n return extractSummary(content);\n case 'key-rules':\n return extractKeyRules(content);\n case 'full':\n return content;\n default:\n return content;\n }\n}\n\n/**\n * 提取摘要(约 200-500 字符)\n */\nfunction extractSummary(content: string): string {\n const lines = content.split('\\n');\n const summaryLines: string[] = [];\n \n // 提取标题\n const titleMatch = content.match(/^#\\s+(.+)$/m);\n if (titleMatch) {\n summaryLines.push(`# ${titleMatch[1]}`);\n }\n\n // 提取描述(第一个非空、非标题段落)\n let foundDescription = false;\n for (const line of lines) {\n if (line.startsWith('#') || line.trim() === '') continue;\n if (line.startsWith('>')) {\n summaryLines.push(line);\n foundDescription = true;\n break;\n }\n if (line.startsWith('-') || line.startsWith('*')) continue;\n \n summaryLines.push(line);\n foundDescription = true;\n break;\n }\n\n // 提取主要章节标题\n const sectionHeaders = lines.filter(l => l.match(/^##\\s+/)).slice(0, 5);\n if (sectionHeaders.length > 0) {\n summaryLines.push('\\n**主要章节**:');\n summaryLines.push(...sectionHeaders.map(h => `- ${h.replace(/^##\\s+/, '')}`));\n }\n\n return summaryLines.join('\\n');\n}\n\n/**\n * 提取关键规则(约 1000-3000 字符)\n */\nfunction extractKeyRules(content: string): string {\n const lines = content.split('\\n');\n const keyRulesLines: string[] = [];\n \n // 提取标题\n const titleMatch = content.match(/^#\\s+(.+)$/m);\n if (titleMatch) {\n keyRulesLines.push(`# ${titleMatch[1]}`);\n }\n\n // 寻找关键规则相关的章节\n const keyPatterns = [\n /强制|必须|禁止|规则|核心|关键|重要/,\n /MUST|REQUIRED|SHOULD|必选|核心原则/,\n /✅|❌|⚠️/\n ];\n\n let inKeySection = false;\n let sectionDepth = 0;\n let lineCount = 0;\n const maxLines = 80;\n\n for (const line of lines) {\n // 检测章节开始\n const headerMatch = line.match(/^(#{2,3})\\s+(.+)$/);\n if (headerMatch) {\n const depth = headerMatch[1].length;\n const title = headerMatch[2];\n \n // 判断是否是关键章节\n inKeySection = keyPatterns.some(p => p.test(title));\n sectionDepth = depth;\n \n if (inKeySection) {\n keyRulesLines.push('');\n keyRulesLines.push(line);\n lineCount++;\n }\n continue;\n }\n\n // 在关键章节内收集内容\n if (inKeySection && lineCount < maxLines) {\n // 遇到同级或更高级标题时结束\n if (line.match(/^#{2}\\s+/) && sectionDepth >= 2) {\n inKeySection = false;\n continue;\n }\n \n keyRulesLines.push(line);\n lineCount++;\n }\n\n // 收集带特殊标记的行(即使不在关键章节)\n if (!inKeySection && lineCount < maxLines) {\n if (line.includes('✅') || line.includes('❌') || line.includes('⚠️')) {\n keyRulesLines.push(line);\n lineCount++;\n }\n }\n }\n\n // 如果关键规则太少,添加代码示例\n if (keyRulesLines.length < 20) {\n const codeBlockMatch = content.match(/```[\\s\\S]{50,500}?```/);\n if (codeBlockMatch) {\n keyRulesLines.push('\\n**示例**:');\n keyRulesLines.push(codeBlockMatch[0]);\n }\n }\n\n return keyRulesLines.join('\\n').trim() || extractSummary(content);\n}\n","/**\n * 场景-规范映射表\n * \n * 这是一个简单的映射关系,供 AI 快速查询使用\n * MCP 只提供这些映射信息,具体选择由 AI 决定\n * \n * @module core/mappings/scenarioMappings\n */\n\n/**\n * 场景到规范的映射\n * \n * AI 可以直接查询这个映射来获取建议的规范列表\n * 最终使用哪些规范由 AI 自己决定\n */\nexport const SCENARIO_STANDARDS: Record<string, string[]> = {\n // ========== Vue 相关场景 ==========\n 'vue3-component': ['vue3-composition', 'typescript-strict'],\n 'vue3-form': ['vue3-composition', 'element-plus', 'form-validation'],\n 'vue3-table': ['vue3-composition', 'element-plus', 'pagination'],\n 'pinia-store': ['pinia-store', 'typescript-strict'],\n 'composable': ['vue3-composition', 'composable-patterns'],\n \n // ========== API 相关 ==========\n 'api-call': ['axios-interceptor', 'error-handling', 'typescript-strict'],\n 'api-design': ['api-design', 'restful-patterns'],\n \n // ========== 国际化 ==========\n 'i18n': ['i18n', 'vue-i18n'],\n \n // ========== 测试 ==========\n 'unit-test': ['vitest-guide', 'testing-patterns'],\n \n // ========== 特殊场景 ==========\n 'logicflow': ['logicflow', 'vue3-composition'],\n 'permission': ['permission-design', 'route-guard'],\n 'performance': ['performance-optimization', 'lazy-loading']\n};\n\n/**\n * 文件类型到规范的映射\n */\nexport const FILETYPE_STANDARDS: Record<string, string[]> = {\n 'vue': ['vue3-composition'],\n 'ts': ['typescript-strict'],\n 'tsx': ['react-hooks', 'typescript-strict'],\n 'dart': ['dart-style', 'flutter-bloc']\n};\n\n/**\n * 导入包到规范的映射\n */\nexport const IMPORT_STANDARDS: Record<string, string[]> = {\n 'vue': ['vue3-composition'],\n 'element-plus': ['element-plus'],\n 'pinia': ['pinia-store'],\n 'axios': ['axios-interceptor'],\n 'vue-i18n': ['i18n'],\n '@logicflow/core': ['logicflow'],\n 'vitest': ['vitest-guide']\n};\n\n/**\n * 获取场景对应的规范列表\n */\nexport function getStandardsForScenario(scenario: string): string[] {\n return SCENARIO_STANDARDS[scenario] || [];\n}\n\n/**\n * 获取文件类型对应的规范列表\n */\nexport function getStandardsForFileType(fileType: string): string[] {\n return FILETYPE_STANDARDS[fileType] || [];\n}\n\n/**\n * 获取导入包对应的规范列表\n */\nexport function getStandardsForImport(importName: string): string[] {\n // 处理带路径的导入,如 '@logicflow/core' -> '@logicflow/core'\n const normalizedImport = importName.startsWith('@') \n ? importName.split('/').slice(0, 2).join('/')\n : importName.split('/')[0];\n \n return IMPORT_STANDARDS[normalizedImport] || [];\n}\n\n/**\n * 获取所有可用的场景列表\n */\nexport function listAvailableScenarios(): string[] {\n return Object.keys(SCENARIO_STANDARDS);\n}\n\n/**\n * 查询规范建议(简单版)\n * \n * 这个函数只是汇总各种来源的规范建议,去重后返回\n * AI 可以参考这些建议,但最终决定权在 AI\n */\nexport function suggestStandards(options: {\n scenario?: string;\n fileType?: string;\n imports?: string[];\n}): string[] {\n const suggestions: string[] = [];\n \n if (options.scenario) {\n suggestions.push(...getStandardsForScenario(options.scenario));\n }\n \n if (options.fileType) {\n suggestions.push(...getStandardsForFileType(options.fileType));\n }\n \n if (options.imports) {\n for (const imp of options.imports) {\n suggestions.push(...getStandardsForImport(imp));\n }\n }\n \n // 去重\n return [...new Set(suggestions)];\n}\n","/**\n * 查询场景-规范映射工具\n * \n * 设计理念:提供映射信息给 AI,让 AI 自己决定使用哪些规范\n * 不做\"智能推荐\",只提供数据查询\n * \n * @module tools/queryMappings\n */\n\nimport { \n SCENARIO_STANDARDS, \n FILETYPE_STANDARDS, \n IMPORT_STANDARDS,\n suggestStandards,\n listAvailableScenarios\n} from '../core/mappings/scenarioMappings';\nimport { ConsoleLogger } from '../core/types';\n\n/**\n * 查询场景-规范映射\n * \n * 这个工具只返回映射关系,不做任何\"智能\"处理\n * AI 可以参考这些映射自己做决策\n * \n * @example\n * // 查询特定场景的规范\n * query_mappings({ scenario: 'vue3-form' })\n * \n * @example\n * // 查询文件类型对应的规范\n * query_mappings({ fileType: 'vue' })\n * \n * @example\n * // 查询导入包对应的规范\n * query_mappings({ imports: ['element-plus', 'pinia'] })\n * \n * @example\n * // 获取所有映射关系\n * query_mappings({ listAll: true })\n */\nexport async function queryMappings(args: {\n /** 场景名称 */\n scenario?: string;\n /** 文件类型 */\n fileType?: string;\n /** 导入的包 */\n imports?: string[];\n /** 列出所有映射 */\n listAll?: boolean;\n}): Promise<{\n content: Array<{ type: string; text: string }>;\n}> {\n const logger = new ConsoleLogger();\n \n try {\n // 如果请求列出所有映射\n if (args.listAll) {\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n description: '场景-规范映射表,AI 可参考这些映射自行决定使用哪些规范',\n mappings: {\n scenarios: SCENARIO_STANDARDS,\n fileTypes: FILETYPE_STANDARDS,\n imports: IMPORT_STANDARDS\n },\n availableScenarios: listAvailableScenarios()\n }, null, 2)\n }]\n };\n }\n\n // 查询特定映射\n const result: any = {\n success: true,\n query: {},\n suggestions: []\n };\n\n if (args.scenario) {\n result.query.scenario = args.scenario;\n result.scenarioStandards = SCENARIO_STANDARDS[args.scenario] || [];\n }\n\n if (args.fileType) {\n result.query.fileType = args.fileType;\n result.fileTypeStandards = FILETYPE_STANDARDS[args.fileType] || [];\n }\n\n if (args.imports && args.imports.length > 0) {\n result.query.imports = args.imports;\n result.importStandards = {};\n for (const imp of args.imports) {\n const normalizedImport = imp.startsWith('@') \n ? imp.split('/').slice(0, 2).join('/')\n : imp.split('/')[0];\n result.importStandards[imp] = IMPORT_STANDARDS[normalizedImport] || [];\n }\n }\n\n // 汇总建议(去重)\n result.suggestions = suggestStandards({\n scenario: args.scenario,\n fileType: args.fileType,\n imports: args.imports\n });\n\n result.note = 'AI 可根据具体情况选择使用哪些规范,这只是建议列表';\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify(result, null, 2)\n }]\n };\n } catch (error) {\n logger.error(`查询映射失败: ${error}`);\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error)\n }, null, 2)\n }]\n };\n }\n}\n\n/**\n * 获取可用场景列表\n */\nexport async function listScenarios(): Promise<{\n content: Array<{ type: string; text: string }>;\n}> {\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n scenarios: listAvailableScenarios(),\n description: 'AI 可使用这些场景名称调用 use_preset 或 query_mappings'\n }, null, 2)\n }]\n };\n}\n","/**\n * 模板发现器\n * \n * 扫描模板目录,解析 _CONFIG.md 获取元数据\n * 只负责发现和读取,不做任何\"智能\"处理\n * \n * @module core/templates/discovery\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { \n TemplateMetadata, \n TemplateType, \n TemplateFile, \n TemplateResult,\n TemplateListItem \n} from './types.js';\nimport { ConsoleLogger } from '../types';\n\n/**\n * 模板根目录\n */\nconst TEMPLATES_DIR = path.resolve(\n path.dirname(new URL(import.meta.url).pathname),\n '../../../../templates'\n);\n\n/**\n * 模板缓存\n */\nlet templatesCache: Map<string, TemplateMetadata> | null = null;\n\n/**\n * 确保缓存已加载\n */\nfunction ensureCache(): void {\n if (templatesCache) return;\n \n templatesCache = new Map();\n scanTemplates(TEMPLATES_DIR, '');\n}\n\n/**\n * 递归扫描模板目录\n */\nfunction scanTemplates(dir: string, prefix: string): void {\n if (!fs.existsSync(dir)) return;\n \n const entries = fs.readdirSync(dir, { withFileTypes: true });\n \n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n if (entry.name.startsWith('.') || entry.name === 'node_modules') continue;\n \n const fullPath = path.join(dir, entry.name);\n const templateId = prefix ? `${prefix}/${entry.name}` : entry.name;\n \n // 检查是否有 _CONFIG.md(表示这是一个模板目录)\n const configPath = path.join(fullPath, '_CONFIG.md');\n if (fs.existsSync(configPath)) {\n const metadata = parseConfigMd(configPath, templateId, fullPath);\n if (metadata) {\n templatesCache!.set(templateId, metadata);\n }\n }\n \n // 继续递归扫描子目录\n scanTemplates(fullPath, templateId);\n }\n}\n\n/**\n * 解析 _CONFIG.md 获取模板元数据\n */\nfunction parseConfigMd(configPath: string, templateId: string, templateDir: string): TemplateMetadata | null {\n try {\n const content = fs.readFileSync(configPath, 'utf-8');\n \n // 提取标题作为名称\n const titleMatch = content.match(/^#\\s+(.+)$/m);\n const name = titleMatch ? titleMatch[1].trim() : templateId;\n \n // 提取描述(第一个 > 引用块)\n const descMatch = content.match(/^>\\s*(.+)$/m);\n const description = descMatch ? descMatch[1].trim() : '';\n \n // 提取适用框架\n const frameworkMatch = content.match(/\\*\\*适用框架\\*\\*:\\s*(.+)/i);\n const frameworks = frameworkMatch \n ? frameworkMatch[1].split(/[,\\/+]/).map(f => f.trim())\n : [];\n \n // 推断模板类型\n const type = inferTemplateType(templateId, name);\n \n // 获取文件列表(排除 _CONFIG.md 和 _template.json)\n const files = getTemplateFiles(templateDir);\n \n // 提取依赖\n const dependencies = extractDependencies(content);\n \n // 提取建议路径\n const pathMatch = content.match(/复制到.*?`([^`]+)`/i);\n const suggestedPath = pathMatch ? pathMatch[1] : undefined;\n \n return {\n id: templateId,\n name,\n description,\n frameworks,\n type,\n files,\n dependencies,\n configFile: '_CONFIG.md',\n suggestedPath,\n keywords: extractKeywords(name, description, frameworks)\n };\n } catch (error) {\n console.error(`解析模板配置失败: ${configPath}`, error);\n return null;\n }\n}\n\n/**\n * 推断模板类型\n */\nfunction inferTemplateType(templateId: string, name: string): TemplateType {\n const lower = (templateId + name).toLowerCase();\n \n if (lower.includes('api') || lower.includes('request') || lower.includes('axios')) {\n return 'api-layer';\n }\n if (lower.includes('component')) return 'component';\n if (lower.includes('store') || lower.includes('pinia')) return 'store';\n if (lower.includes('composable') || lower.includes('hook')) return 'composable';\n if (lower.includes('config')) return 'config';\n if (lower.includes('type')) return 'types';\n \n return 'other';\n}\n\n/**\n * 获取模板目录下的所有文件\n */\nfunction getTemplateFiles(dir: string, prefix: string = ''): string[] {\n const files: string[] = [];\n \n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;\n \n // 跳过配置文件\n if (entry.name === '_CONFIG.md' || entry.name === '_template.json') {\n continue;\n }\n \n if (entry.isDirectory()) {\n files.push(...getTemplateFiles(path.join(dir, entry.name), relativePath));\n } else {\n files.push(relativePath);\n }\n }\n \n return files;\n}\n\n/**\n * 从 _CONFIG.md 提取依赖\n */\nfunction extractDependencies(content: string): Record<string, string> | undefined {\n const depsMatch = content.match(/\"dependencies\":\\s*\\{([^}]+)\\}/);\n if (!depsMatch) return undefined;\n \n const deps: Record<string, string> = {};\n const pairs = depsMatch[1].matchAll(/\"([^\"]+)\":\\s*\"([^\"]+)\"/g);\n \n for (const match of pairs) {\n deps[match[1]] = match[2];\n }\n \n return Object.keys(deps).length > 0 ? deps : undefined;\n}\n\n/**\n * 提取关键词\n */\nfunction extractKeywords(name: string, description: string, frameworks: string[]): string[] {\n const text = `${name} ${description}`.toLowerCase();\n const keywords = new Set<string>(frameworks.map(f => f.toLowerCase()));\n \n // 添加常见关键词\n const commonKeywords = ['axios', 'api', 'mock', 'request', 'http', 'fetch', 'store', 'pinia', 'vuex'];\n for (const kw of commonKeywords) {\n if (text.includes(kw)) keywords.add(kw);\n }\n \n return Array.from(keywords);\n}\n\n/**\n * 列出所有可用模板\n */\nexport function listAllTemplates(): TemplateListItem[] {\n ensureCache();\n \n const result: TemplateListItem[] = [];\n \n for (const [id, metadata] of templatesCache!) {\n result.push({\n id,\n name: metadata.name,\n description: metadata.description,\n frameworks: metadata.frameworks,\n type: metadata.type,\n fileCount: metadata.files.length,\n suggestedPath: metadata.suggestedPath\n });\n }\n \n return result;\n}\n\n/**\n * 按类型筛选模板\n */\nexport function listTemplatesByType(type: TemplateType): TemplateListItem[] {\n return listAllTemplates().filter(t => t.type === type);\n}\n\n/**\n * 按框架筛选模板\n */\nexport function listTemplatesByFramework(framework: string): TemplateListItem[] {\n const lower = framework.toLowerCase();\n return listAllTemplates().filter(t => \n t.frameworks.some(f => f.toLowerCase().includes(lower))\n );\n}\n\n/**\n * 获取模板详情\n * \n * @param templateId 模板 ID\n * @param includeFiles 是否包含文件内容(默认 false,只返回配置说明)\n */\nexport function getTemplateById(templateId: string, includeFiles: boolean = false): TemplateResult | null {\n ensureCache();\n \n const metadata = templatesCache!.get(templateId);\n if (!metadata) return null;\n \n const templateDir = path.join(TEMPLATES_DIR, templateId);\n \n // 读取配置说明\n const configPath = path.join(templateDir, '_CONFIG.md');\n const configGuide = fs.existsSync(configPath) \n ? fs.readFileSync(configPath, 'utf-8')\n : '';\n \n const result: TemplateResult = {\n metadata,\n configGuide\n };\n \n // 如果需要完整文件内容\n if (includeFiles) {\n result.files = [];\n \n for (const filePath of metadata.files) {\n const fullPath = path.join(templateDir, filePath);\n if (fs.existsSync(fullPath)) {\n result.files.push({\n path: filePath,\n content: fs.readFileSync(fullPath, 'utf-8'),\n isConfig: filePath.startsWith('_')\n });\n }\n }\n }\n \n return result;\n}\n\n/**\n * 获取模板目录的绝对路径\n */\nexport function getTemplateDir(templateId: string): string | null {\n ensureCache();\n \n if (!templatesCache!.has(templateId)) return null;\n \n return path.join(TEMPLATES_DIR, templateId);\n}\n\n/**\n * 搜索模板\n */\nexport function searchTemplates(query: string): TemplateListItem[] {\n const lower = query.toLowerCase();\n \n return listAllTemplates().filter(t => \n t.id.toLowerCase().includes(lower) ||\n t.name.toLowerCase().includes(lower) ||\n t.description.toLowerCase().includes(lower) ||\n t.frameworks.some(f => f.toLowerCase().includes(lower))\n );\n}\n\n/**\n * 刷新缓存\n */\nexport function refreshCache(): void {\n templatesCache = null;\n ensureCache();\n}\n","/**\n * 列出可用模板工具\n * \n * 设计理念:提供模板列表信息给 AI,AI 自己决定使用哪个\n * \n * @module tools/listTemplates\n */\n\nimport { \n listAllTemplates, \n listTemplatesByType, \n listTemplatesByFramework,\n searchTemplates \n} from '../core/templates/discovery';\nimport { TemplateType } from '../core/templates/types';\nimport { ConsoleLogger } from '../core/types';\n\n/**\n * 列出可用模板\n * \n * @example\n * // 列出所有模板\n * list_templates({})\n * \n * @example\n * // 按类型筛选\n * list_templates({ type: 'api-layer' })\n * \n * @example\n * // 按框架筛选\n * list_templates({ framework: 'vue' })\n * \n * @example\n * // 搜索模板\n * list_templates({ search: 'axios' })\n */\nexport async function listTemplates(args: {\n /** 按类型筛选 */\n type?: TemplateType;\n /** 按框架筛选 */\n framework?: string;\n /** 搜索关键词 */\n search?: string;\n}): Promise<{\n content: Array<{ type: string; text: string }>;\n}> {\n const logger = new ConsoleLogger();\n \n try {\n let templates;\n \n if (args.search) {\n templates = searchTemplates(args.search);\n } else if (args.type) {\n templates = listTemplatesByType(args.type);\n } else if (args.framework) {\n templates = listTemplatesByFramework(args.framework);\n } else {\n templates = listAllTemplates();\n }\n \n // 按类型分组展示\n const grouped: Record<string, typeof templates> = {};\n for (const t of templates) {\n if (!grouped[t.type]) grouped[t.type] = [];\n grouped[t.type].push(t);\n }\n \n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n total: templates.length,\n templates,\n byType: grouped,\n usage: {\n getDetails: 'get_template({ id: \"模板ID\" })',\n getWithFiles: 'get_template({ id: \"模板ID\", includeFiles: true })',\n note: 'AI 可直接读取模板文件并复制到目标项目'\n }\n }, null, 2)\n }]\n };\n } catch (error) {\n logger.error(`列出模板失败: ${error}`);\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error)\n }, null, 2)\n }]\n };\n }\n}\n","/**\n * 获取模板工具\n * \n * 设计理念:提供模板内容给 AI,AI 自己决定如何使用和修改\n * 不做复杂的渲染逻辑,让 AI 发挥其强大的代码理解和修改能力\n * \n * @module tools/getTemplate\n */\n\nimport { \n getTemplateById,\n getTemplateDir \n} from '../core/templates/discovery';\nimport { ConsoleLogger } from '../core/types';\n\n/**\n * 获取模板\n * \n * @example\n * // 获取模板配置说明(不含文件内容,节省 token)\n * get_template({ id: 'vue/api-layer' })\n * \n * @example\n * // 获取完整模板(含所有文件内容)\n * get_template({ id: 'vue/api-layer', includeFiles: true })\n * \n * @example\n * // 获取特定文件\n * get_template({ id: 'vue/api-layer', files: ['request.ts', 'types.ts'] })\n */\nexport async function getTemplate(args: {\n /** 模板 ID */\n id: string;\n /** 是否包含文件内容(默认 false,只返回配置说明) */\n includeFiles?: boolean;\n /** 指定要获取的文件列表(可选,不填则获取全部) */\n files?: string[];\n}): Promise<{\n content: Array<{ type: string; text: string }>;\n}> {\n const logger = new ConsoleLogger();\n \n try {\n const result = getTemplateById(args.id, args.includeFiles ?? false);\n \n if (!result) {\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: `模板 \"${args.id}\" 不存在`,\n hint: '使用 list_templates 查看可用模板'\n }, null, 2)\n }]\n };\n }\n \n // 如果指定了特定文件,过滤文件列表\n if (args.files && result.files) {\n result.files = result.files.filter(f => \n args.files!.some(requested => \n f.path === requested || f.path.endsWith(requested)\n )\n );\n }\n \n // 获取模板目录路径(方便 AI 直接操作)\n const templateDir = getTemplateDir(args.id);\n \n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: true,\n template: {\n ...result,\n absolutePath: templateDir\n },\n aiGuidance: {\n step1: '阅读 configGuide 了解配置要求',\n step2: '根据目标项目情况决定如何修改模板',\n step3: '将文件复制到目标项目并适配',\n note: '模板文件可能需要根据项目实际情况调整(如 UI 框架、后端响应格式等)'\n }\n }, null, 2)\n }]\n };\n } catch (error) {\n logger.error(`获取模板失败: ${error}`);\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error)\n }, null, 2)\n }]\n };\n }\n}\n","/**\n * MCP 错误处理模块\n * \n * 提供统一的错误类型、错误码和错误响应格式\n * \n * @module core/errors\n */\n\n/**\n * 错误码枚举\n */\nexport enum ErrorCode {\n // 通用错误 1xxx\n UNKNOWN = 1000,\n INVALID_PARAMETER = 1001,\n NOT_FOUND = 1002,\n PERMISSION_DENIED = 1003,\n \n // 项目分析错误 2xxx\n PROJECT_NOT_FOUND = 2001,\n PROJECT_PARSE_ERROR = 2002,\n CONFIG_READ_ERROR = 2003,\n \n // 规范相关错误 3xxx\n STANDARD_NOT_FOUND = 3001,\n STANDARD_LOAD_ERROR = 3002,\n PRESET_NOT_FOUND = 3003,\n \n // 模板相关错误 4xxx\n TEMPLATE_NOT_FOUND = 4001,\n TEMPLATE_PARSE_ERROR = 4002,\n \n // Agent 相关错误 5xxx\n AGENT_NOT_FOUND = 5001,\n AGENT_LOAD_ERROR = 5002,\n \n // 配置生成错误 6xxx\n CONFIG_GENERATE_ERROR = 6001,\n FILE_WRITE_ERROR = 6002,\n}\n\n/**\n * 错误码到消息的映射\n */\nconst ERROR_MESSAGES: Record<ErrorCode, string> = {\n [ErrorCode.UNKNOWN]: '未知错误',\n [ErrorCode.INVALID_PARAMETER]: '参数无效',\n [ErrorCode.NOT_FOUND]: '资源未找到',\n [ErrorCode.PERMISSION_DENIED]: '权限不足',\n \n [ErrorCode.PROJECT_NOT_FOUND]: '项目目录不存在',\n [ErrorCode.PROJECT_PARSE_ERROR]: '项目解析失败',\n [ErrorCode.CONFIG_READ_ERROR]: '配置文件读取失败',\n \n [ErrorCode.STANDARD_NOT_FOUND]: '规范未找到',\n [ErrorCode.STANDARD_LOAD_ERROR]: '规范加载失败',\n [ErrorCode.PRESET_NOT_FOUND]: '预设未找到',\n \n [ErrorCode.TEMPLATE_NOT_FOUND]: '模板未找到',\n [ErrorCode.TEMPLATE_PARSE_ERROR]: '模板解析失败',\n \n [ErrorCode.AGENT_NOT_FOUND]: 'Agent 未找到',\n [ErrorCode.AGENT_LOAD_ERROR]: 'Agent 加载失败',\n \n [ErrorCode.CONFIG_GENERATE_ERROR]: '配置生成失败',\n [ErrorCode.FILE_WRITE_ERROR]: '文件写入失败',\n};\n\n/**\n * MCP 统一错误类\n */\nexport class MCPError extends Error {\n /** 错误码 */\n readonly code: ErrorCode;\n /** 原始错误 */\n readonly cause?: Error;\n /** 错误上下文 */\n readonly context?: Record<string, unknown>;\n \n constructor(\n code: ErrorCode,\n message?: string,\n options?: {\n cause?: Error;\n context?: Record<string, unknown>;\n }\n ) {\n const defaultMessage = ERROR_MESSAGES[code] || '未知错误';\n super(message || defaultMessage);\n \n this.name = 'MCPError';\n this.code = code;\n this.cause = options?.cause;\n this.context = options?.context;\n \n // 保持正确的原型链\n Object.setPrototypeOf(this, MCPError.prototype);\n }\n \n /**\n * 转换为 JSON 格式(用于 MCP 响应)\n */\n toJSON(): Record<string, unknown> {\n return {\n error: true,\n code: this.code,\n message: this.message,\n ...(this.context && { context: this.context }),\n };\n }\n \n /**\n * 转换为 MCP 响应格式\n */\n toResponse(): { content: Array<{ type: string; text: string }> } {\n return {\n content: [{\n type: 'text',\n text: JSON.stringify(this.toJSON(), null, 2)\n }]\n };\n }\n}\n\n/**\n * 便捷错误创建函数\n */\nexport const Errors = {\n invalidParam: (param: string, reason?: string) => \n new MCPError(ErrorCode.INVALID_PARAMETER, \n `参数 \"${param}\" 无效${reason ? `: ${reason}` : ''}`,\n { context: { param } }\n ),\n \n notFound: (resource: string, id?: string) =>\n new MCPError(ErrorCode.NOT_FOUND,\n `${resource}${id ? ` \"${id}\"` : ''} 未找到`,\n { context: { resource, id } }\n ),\n \n projectNotFound: (path: string) =>\n new MCPError(ErrorCode.PROJECT_NOT_FOUND,\n `项目目录不存在: ${path}`,\n { context: { path } }\n ),\n \n standardNotFound: (id: string) =>\n new MCPError(ErrorCode.STANDARD_NOT_FOUND,\n `规范 \"${id}\" 未找到`,\n { context: { standardId: id } }\n ),\n \n presetNotFound: (preset: string) =>\n new MCPError(ErrorCode.PRESET_NOT_FOUND,\n `预设 \"${preset}\" 未找到`,\n { context: { preset } }\n ),\n \n templateNotFound: (id: string) =>\n new MCPError(ErrorCode.TEMPLATE_NOT_FOUND,\n `模板 \"${id}\" 未找到`,\n { context: { templateId: id } }\n ),\n \n agentNotFound: (id: string) =>\n new MCPError(ErrorCode.AGENT_NOT_FOUND,\n `Agent \"${id}\" 未找到`,\n { context: { agentId: id } }\n ),\n \n fileWriteError: (path: string, cause?: Error) =>\n new MCPError(ErrorCode.FILE_WRITE_ERROR,\n `文件写入失败: ${path}`,\n { cause, context: { path } }\n ),\n \n wrap: (error: unknown, code: ErrorCode = ErrorCode.UNKNOWN) => {\n if (error instanceof MCPError) return error;\n \n const message = error instanceof Error ? error.message : String(error);\n return new MCPError(code, message, {\n cause: error instanceof Error ? error : undefined\n });\n }\n};\n\n/**\n * 安全执行函数,捕获错误并转换为 MCPError\n */\nexport async function safeExecute<T>(\n fn: () => Promise<T>,\n errorCode: ErrorCode = ErrorCode.UNKNOWN\n): Promise<T> {\n try {\n return await fn();\n } catch (error) {\n throw Errors.wrap(error, errorCode);\n }\n}\n\n/**\n * 创建标准的错误响应\n */\nexport function errorResponse(error: unknown): { content: Array<{ type: string; text: string }> } {\n if (error instanceof MCPError) {\n return error.toResponse();\n }\n \n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n error: true,\n code: ErrorCode.UNKNOWN,\n message\n }, null, 2)\n }]\n };\n}\n","/**\n * MCP 日志模块\n * \n * 统一的日志接口,支持不同级别和格式化输出\n * MCP 服务器通过 stderr 输出日志,避免污染 stdout\n * \n * @module core/logger\n */\n\n/**\n * 日志级别\n */\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n SILENT = 4\n}\n\n/**\n * 日志级别名称\n */\nconst LOG_LEVEL_NAMES: Record<LogLevel, string> = {\n [LogLevel.DEBUG]: 'DEBUG',\n [LogLevel.INFO]: 'INFO',\n [LogLevel.WARN]: 'WARN',\n [LogLevel.ERROR]: 'ERROR',\n [LogLevel.SILENT]: 'SILENT'\n};\n\n/**\n * 日志配置\n */\ninterface LoggerConfig {\n /** 最小日志级别 */\n level: LogLevel;\n /** 是否显示时间戳 */\n timestamp: boolean;\n /** 前缀 */\n prefix: string;\n}\n\n/**\n * 全局日志配置\n */\nlet globalConfig: LoggerConfig = {\n level: process.env.DEBUG ? LogLevel.DEBUG : LogLevel.INFO,\n timestamp: false,\n prefix: '[MCP]'\n};\n\n/**\n * Logger 类\n */\nexport class Logger {\n private readonly name: string;\n private readonly config: LoggerConfig;\n \n constructor(name?: string, config?: Partial<LoggerConfig>) {\n this.name = name || '';\n this.config = { ...globalConfig, ...config };\n }\n \n /**\n * 格式化日志消息\n */\n private format(level: LogLevel, message: string, ...args: unknown[]): string {\n const parts: string[] = [];\n \n if (this.config.timestamp) {\n parts.push(new Date().toISOString());\n }\n \n parts.push(this.config.prefix);\n \n if (this.name) {\n parts.push(`[${this.name}]`);\n }\n \n parts.push(`[${LOG_LEVEL_NAMES[level]}]`);\n parts.push(message);\n \n // 处理额外参数\n if (args.length > 0) {\n const formatted = args.map(arg => {\n if (typeof arg === 'object') {\n try {\n return JSON.stringify(arg, null, 2);\n } catch {\n return String(arg);\n }\n }\n return String(arg);\n });\n parts.push(...formatted);\n }\n \n return parts.join(' ');\n }\n \n /**\n * 检查日志级别是否应该输出\n */\n private shouldLog(level: LogLevel): boolean {\n return level >= this.config.level;\n }\n \n /**\n * 调试日志\n */\n debug(message: string, ...args: unknown[]): void {\n if (this.shouldLog(LogLevel.DEBUG)) {\n console.error(this.format(LogLevel.DEBUG, message, ...args));\n }\n }\n \n /**\n * 信息日志\n */\n info(message: string, ...args: unknown[]): void {\n if (this.shouldLog(LogLevel.INFO)) {\n console.error(this.format(LogLevel.INFO, message, ...args));\n }\n }\n \n /**\n * 简化的 log 方法(等同于 info)\n */\n log(message: string, ...args: unknown[]): void {\n this.info(message, ...args);\n }\n \n /**\n * 警告日志\n */\n warn(message: string, ...args: unknown[]): void {\n if (this.shouldLog(LogLevel.WARN)) {\n console.error(this.format(LogLevel.WARN, message, ...args));\n }\n }\n \n /**\n * 错误日志\n */\n error(message: string, ...args: unknown[]): void {\n if (this.shouldLog(LogLevel.ERROR)) {\n console.error(this.format(LogLevel.ERROR, message, ...args));\n }\n }\n \n /**\n * 创建子 Logger\n */\n child(name: string): Logger {\n const childName = this.name ? `${this.name}:${name}` : name;\n return new Logger(childName, this.config);\n }\n}\n\n/**\n * 配置全局日志\n */\nexport function configureLogger(config: Partial<LoggerConfig>): void {\n globalConfig = { ...globalConfig, ...config };\n}\n\n/**\n * 设置日志级别\n */\nexport function setLogLevel(level: LogLevel): void {\n globalConfig.level = level;\n}\n\n/**\n * 默认 Logger 实例\n */\nexport const logger = new Logger();\n\n/**\n * 创建带名称的 Logger\n */\nexport function createLogger(name: string): Logger {\n return new Logger(name);\n}\n\n/**\n * 工具函数:计时日志\n */\nexport function createTimer(logger: Logger, operation: string): () => void {\n const start = Date.now();\n logger.debug(`开始: ${operation}`);\n \n return () => {\n const duration = Date.now() - start;\n logger.debug(`完成: ${operation} (${duration}ms)`);\n };\n}\n"],"mappings":"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","names":["fs","path","path","logger","fs","path","glob","logger","logger","logger","logger","fs","path","fileURLToPath","logger","__filename","fileURLToPath","__dirname","logger","content","fs","path","logger","fs","fs","path","fileURLToPath","__filename","__dirname","fs","path","logger","logger","logger","fs","path","fileURLToPath","__filename","fileURLToPath","__dirname","logger","_a","fs","logger","extractImports","inferScenario","fs","path","logger","logger","fs","path","ensureCache","logger","logger","logger"]}
|