const path = require('path'); const fs = require('fs'); // 尝试加载自定义的cursor配置文件 const customConfigPath = path.join(process.cwd(), 'cursor-config.env'); if (fs.existsSync(customConfigPath)) { require('dotenv').config({ path: customConfigPath }); } // 辅助函数:解析布尔值 function parseBoolean(value, defaultValue = false) { if (typeof value === 'boolean') return value; if (typeof value === 'string') { return value.toLowerCase() === 'true' || value === '1'; } return defaultValue; } // 辅助函数:解析整数 function parseInteger(value, defaultValue = 0) { const parsed = parseInt(value, 10); return isNaN(parsed) ? defaultValue : parsed; } // 辅助函数:解析浮点数 function parseFloat(value, defaultValue = 0.0) { const parsed = global.parseFloat(value); return isNaN(parsed) ? defaultValue : parsed; } // 辅助函数:解析数组 function parseArray(value, defaultValue = []) { if (Array.isArray(value)) return value; if (typeof value === 'string') { try { return JSON.parse(value); } catch (e) { return value.split(',').map(item => item.trim()).filter(item => item); } } return defaultValue; } // Cursor配置对象 const cursorConfig = { // 🎯 核心模式设置 core: { maxModeEnabled: parseBoolean(process.env.CURSOR_MAX_MODE_ENABLED, true), agentMode: parseBoolean(process.env.CURSOR_AGENT_MODE, true), unifiedMode: parseInteger(process.env.CURSOR_UNIFIED_MODE, 1), chatModeEnum: parseInteger(process.env.CURSOR_CHAT_MODE_ENUM, 2), chatMode: process.env.CURSOR_CHAT_MODE || 'collaborative', preprocessingFlag: parseBoolean(process.env.CURSOR_PREPROCESSING_FLAG, false), streamMode: parseInteger(process.env.CURSOR_STREAM_MODE, 1), thinkingLevel: parseInteger(process.env.CURSOR_THINKING_LEVEL, 3) }, // 🤖 模型配置选项 model: { modelName: process.env.CURSOR_MODEL_NAME || 'claude-4-sonnet-thinking', streamingEnabled: parseBoolean(process.env.CURSOR_STREAMING_ENABLED, true), maxTokens: parseInteger(process.env.CURSOR_MAX_TOKENS, 4096), temperature: parseFloat(process.env.CURSOR_TEMPERATURE, 0.7), thinkingMode: parseBoolean(process.env.CURSOR_THINKING_MODE, true), thinkingDepth: parseInteger(process.env.CURSOR_THINKING_DEPTH, 5) }, // 🛠️ Agent能力配置 agentCapabilities: { codeUnderstanding: parseBoolean(process.env.CURSOR_CODE_UNDERSTANDING, true), codeGeneration: parseBoolean(process.env.CURSOR_CODE_GENERATION, true), codeRefactoring: parseBoolean(process.env.CURSOR_CODE_REFACTORING, true), debuggingAssistance: parseBoolean(process.env.CURSOR_DEBUGGING_ASSISTANCE, true), testGeneration: parseBoolean(process.env.CURSOR_TEST_GENERATION, true), errorAnalysis: parseBoolean(process.env.CURSOR_ERROR_ANALYSIS, true), fileReading: parseBoolean(process.env.CURSOR_FILE_READING, true), fileWriting: parseBoolean(process.env.CURSOR_FILE_WRITING, false), fileSearch: parseBoolean(process.env.CURSOR_FILE_SEARCH, true), filesystemAccess: parseBoolean(process.env.CURSOR_FILESYSTEM_ACCESS, false), projectAnalysis: parseBoolean(process.env.CURSOR_PROJECT_ANALYSIS, true), dependencyAnalysis: parseBoolean(process.env.CURSOR_DEPENDENCY_ANALYSIS, true), architectureAnalysis: parseBoolean(process.env.CURSOR_ARCHITECTURE_ANALYSIS, true), performanceOptimization: parseBoolean(process.env.CURSOR_PERFORMANCE_OPTIMIZATION, true), securityAnalysis: parseBoolean(process.env.CURSOR_SECURITY_ANALYSIS, true), documentationGeneration: parseBoolean(process.env.CURSOR_DOCUMENTATION_GENERATION, true), commentGeneration: parseBoolean(process.env.CURSOR_COMMENT_GENERATION, true) }, // 🧠 思考配置选项 thinking: { depthLevel: parseInteger(process.env.CURSOR_DEPTH_LEVEL, 5), showThinking: parseBoolean(process.env.CURSOR_SHOW_THINKING, true), stepByStep: parseBoolean(process.env.CURSOR_STEP_BY_STEP, true), reasoningChains: parseBoolean(process.env.CURSOR_REASONING_CHAINS, true), selfVerification: parseBoolean(process.env.CURSOR_SELF_VERIFICATION, true), alternativeApproaches: parseBoolean(process.env.CURSOR_ALTERNATIVE_APPROACHES, true) }, // 📚 上下文配置选项 context: { maxContextTokens: parseInteger(process.env.CURSOR_MAX_CONTEXT_TOKENS, 8192), maxFiles: parseInteger(process.env.CURSOR_MAX_FILES, 50), maxFileSize: parseInteger(process.env.CURSOR_MAX_FILE_SIZE, 1048576), conversationHistory: parseInteger(process.env.CURSOR_CONVERSATION_HISTORY, 10), includeEditHistory: parseBoolean(process.env.CURSOR_INCLUDE_EDIT_HISTORY, true), includeProjectStructure: parseBoolean(process.env.CURSOR_INCLUDE_PROJECT_STRUCTURE, true), includeDependencies: parseBoolean(process.env.CURSOR_INCLUDE_DEPENDENCIES, true), largeContext: parseInteger(process.env.CURSOR_LARGE_CONTEXT, 1) }, // 🔧 外部工具配置 tools: { webSearchEnabled: parseBoolean(process.env.CURSOR_WEB_SEARCH_ENABLED, false), codeExecutionEnabled: parseBoolean(process.env.CURSOR_CODE_EXECUTION_ENABLED, false), externalApiCalls: parseBoolean(process.env.CURSOR_EXTERNAL_API_CALLS, false), databaseAccess: parseBoolean(process.env.CURSOR_DATABASE_ACCESS, false), wikiTool: parseArray(process.env.CURSOR_WIKI_TOOL, []), webTool: parseInteger(process.env.CURSOR_WEB_TOOL, 0) }, // ⚙️ 高级控制选项 advanced: { enableMaxFeatures: parseInteger(process.env.CURSOR_ENABLE_MAX_FEATURES, 1), streamControlFlag: parseInteger(process.env.CURSOR_STREAM_CONTROL_FLAG, 1), tokenStartFlag: parseInteger(process.env.CURSOR_TOKEN_START_FLAG, 1), tokenControlFlag: parseInteger(process.env.CURSOR_TOKEN_CONTROL_FLAG, 1), sessionTrackingFlag: parseInteger(process.env.CURSOR_SESSION_TRACKING_FLAG, 1) }, // 🎛️ 请求控制标志 control: { controlFlag: parseBoolean(process.env.CURSOR_CONTROL_FLAG, true), instructionFlag: parseInteger(process.env.CURSOR_INSTRUCTION_FLAG, 1), modelFlag: parseInteger(process.env.CURSOR_MODEL_FLAG, 1), requestFlag: parseInteger(process.env.CURSOR_REQUEST_FLAG, 1), feedbackFlag: parseInteger(process.env.CURSOR_FEEDBACK_FLAG, 1), desiredMaxTokens: parseInteger(process.env.CURSOR_DESIRED_MAX_TOKENS, 2048), contentFormat: process.env.CURSOR_CONTENT_FORMAT || 'markdown' }, // 🌐 系统环境配置 system: { timezone: process.env.CURSOR_TIMEZONE || 'Asia/Shanghai', clientVersion: process.env.CURSOR_CLIENT_VERSION || '0.50.5', configVersion: process.env.CURSOR_CONFIG_VERSION || 'v1.0.0', projectType: process.env.CURSOR_PROJECT_TYPE || 'javascript' } }; // 导出配置和辅助函数 module.exports = { cursorConfig, // 生成能力数组(用于protobuf) getCapabilities() { const caps = []; const abilities = cursorConfig.agentCapabilities; if (abilities.codeUnderstanding) caps.push(1); if (abilities.codeGeneration) caps.push(3); if (abilities.codeRefactoring) caps.push(5); if (abilities.fileReading) caps.push(6); if (abilities.fileWriting) caps.push(7); if (abilities.fileSearch) caps.push(8); if (abilities.projectAnalysis) caps.push(9); if (abilities.debuggingAssistance) caps.push(11); if (abilities.testGeneration) caps.push(12); if (abilities.errorAnalysis) caps.push(14); if (abilities.documentationGeneration) caps.push(15); if (abilities.performanceOptimization) caps.push(17); if (abilities.securityAnalysis) caps.push(18); if (abilities.dependencyAnalysis) caps.push(20); if (abilities.architectureAnalysis) caps.push(19); if (abilities.commentGeneration) caps.push(21); // 添加基础能力 caps.push(22, 23, 24); return caps; }, // 生成模型配置对象 getModelConfiguration(modelName, stream) { return { model_name: modelName || cursorConfig.model.modelName, api_endpoint: 'https://api.openai.com/v1', streaming_enabled: stream !== undefined ? stream : cursorConfig.model.streamingEnabled, max_tokens: cursorConfig.model.maxTokens, temperature: cursorConfig.model.temperature, thinking_mode: cursorConfig.model.thinkingMode, thinking_depth: cursorConfig.model.thinkingDepth, agent_capabilities: cursorConfig.core.agentMode }; }, // 生成系统环境信息 getSystemEnvironment() { return { platform: 'win32', architecture: 'x64', os_version: '10.0.26100', executable_path: 'cursor.exe', timestamp: new Date().toISOString(), timezone: cursorConfig.system.timezone, client_version: cursorConfig.system.clientVersion, config_version: cursorConfig.system.configVersion }; }, // 生成MAX模式设置 getMaxModeSettings() { return { enabled: cursorConfig.core.maxModeEnabled, agent_caps: cursorConfig.agentCapabilities, thinking_config: cursorConfig.thinking, context_config: cursorConfig.context, tool_config: cursorConfig.tools }; }, // 检查是否启用了某个功能 isFeatureEnabled(feature) { const parts = feature.split('.'); let current = cursorConfig; for (const part of parts) { if (current[part] === undefined) return false; current = current[part]; } return parseBoolean(current, false); }, // 获取配置值 getValue(path, defaultValue) { const parts = path.split('.'); let current = cursorConfig; for (const part of parts) { if (current[part] === undefined) return defaultValue; current = current[part]; } return current; }, // 重新加载配置 reload() { if (fs.existsSync(customConfigPath)) { delete require.cache[require.resolve('dotenv')]; require('dotenv').config({ path: customConfigPath, override: true }); } // 重新计算配置值... // 这里可以重新执行配置初始化逻辑 } };