'use strict'; var __createBinding = this && this.__createBinding || (Object.create ? function (arg1, arg2, arg3, arg4) { if (arg4 === undefined) { arg4 = arg3; } var var2 = Object.getOwnPropertyDescriptor(arg2, arg3); if (!var2 || ("get" in var2 ? !arg2.__esModule : var2.writable || var2.configurable)) { var2 = { 'enumerable': true, 'get': function () { return arg2[arg3]; } }; } Object.defineProperty(arg1, arg4, var2); } : function (arg9, arg10, arg11, arg12) { if (arg12 === undefined) { arg12 = arg11; } arg9[arg12] = arg10[arg11]; }); var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (arg15, arg16) { Object.defineProperty(arg15, "default", { 'enumerable': true, 'value': arg16 }); } : function (arg17, arg18) { arg17["default"] = arg18; }); var __importStar = this && this.__importStar || function () { var var7 = function (arg34) { var7 = Object.getOwnPropertyNames || function (arg35) { var var8 = []; for (var var9 in arg35) if (Object.prototype.hasOwnProperty.call(arg35, var9)) { var8[var8.length] = var9; } return var8; }; return var7(arg34); }; return function (arg36) { const var10 = "1|4|0|3|2".split('|'); let var11 = 0x0; if (arg36 && arg36.__esModule) { return arg36; } var v14 = {}; if (arg36 != null) { var var12 = var7(arg36); for (var var13 = 0x0; var13 < var12.length; var13++) { if (var12[var13] !== "default") { __createBinding(v14, arg36, var12[var13]); } } } __setModuleDefault(v14, arg36); return v14; }; }(); Object.defineProperty(exports, '__esModule', { 'value': true }); exports.CursorProViewProvider = undefined; const vscode = __importStar(require("vscode")); const client_1 = require("../api/client"); const extension_1 = require("../extension"); const account_1 = require('../utils/account'); const path = __importStar(require("path")); const fs = __importStar(require('fs')); const child_process_1 = require('child_process'); const util_1 = require("util"); const sqlite_1 = require('../utils/sqlite'); 0x0; const execAsync = util_1.promisify(child_process_1.exec); class CursorProViewProvider { constructor(arg37, arg38) { this._extensionUri = arg37; this._context = arg38; this._hostsPermissionGranted = false; this.SNI_PROXY_IP = "154.36.154.163"; this.CURSOR_DOMAINS = ["api2.cursor.sh", "api3.cursor.sh"]; this.HOSTS_MARKER_START = "# ===== CursorPro SNI Proxy Start ====="; this.HOSTS_MARKER_END = "# ===== CursorPro SNI Proxy End ====="; this._cachedCursorPath = null; 0x0; this._onlineStatusUnsubscribe = client_1.onOnlineStatusChange(arg39 => { this._postMessage({ 'type': "networkStatus", 'online': arg39 }); }); } resolveWebviewView(arg40, arg41, arg42) { this._view = arg40; arg40.webview.options = { 'enableScripts': true, 'localResourceRoots': [this._extensionUri] }; arg40.webview.html = this._getHtmlContent(arg40.webview); arg40.webview.onDidReceiveMessage(async arg43 => { const var17 = { 'WZyWQ': "\u6CA1\u6709\u5199\u5165\u6743\u9650", 'ZXhkG': "seamlessRestored" }; if ("GfeNG" !== "LNoTP") { switch (arg43.type) { case "activate": await this._handleActivate(arg43.key); break; case "switch": await this._handleSwitch(); break; case "resetMachineId": await this._handleResetMachineId(); break; case "disableUpdate": await this._handleDisableUpdate(); break; case "cleanEnv": await this._handleCleanEnv(); break; case "disable": await this._handleDisable(); break; case "toggleProxy": await this._handleToggleProxy(arg43.enabled, arg43.url); break; case 'getProxyStatus': await this._handleGetProxyStatus(); break; case "getState": await this._sendState(); break; case "retryConnect": await this._handleRetryConnect(); break; case "getSeamlessStatus": await this._handleGetSeamlessStatus(); break; case "injectSeamless": await this._handleInjectSeamless(); break; case "restoreSeamless": await this._handleRestoreSeamless(); break; case "toggleSeamless": await this._handleToggleSeamless(arg43.enabled); break; case "getUserSwitchStatus": await this._handleGetUserSwitchStatus(); break; case "manualSeamlessSwitch": await this._handleManualSeamlessSwitch(); break; case "checkUsageBeforeSwitch": await this._handleCheckUsageBeforeSwitch(arg43.email); break; case "confirmSwitch": await this._handleManualSeamlessSwitch(); break; case "getCursorPath": await this._handleGetCursorPath(); break; case 'getAccountUsage': await this._handleGetAccountUsage(arg43.email); break; case "getAnnouncement": await this._handleGetAnnouncement(); break; case "checkVersion": await this._handleCheckVersion(); break; case "getCursorRunningPath": await this._handleGetCursorRunningPath(); break; case "reloadWindow": vscode.commands.executeCommand("workbench.action.reloadWindow"); break; case 'closeCursor': 0x0; await account_1.closeCursor(); break; } } else { const var18 = var17.WZyWQ; this._postMessage({ 'type': var17.ZXhkG, 'success': false, 'error': var18, 'needAdmin': true }); return; } }); this._sendState(); this._checkKeyStatus(); } async _checkKeyStatus() { const var20 = this._context.globalState.get("cursorpro.key"); if (!var20) { if ('NCQkd' !== "FAZar") { return; } else { this._postMessage({ 'type': "accountUsage", 'success': false, 'error': "未提供账号邮箱" }); return; } } try { if ("QlWcq" !== 'QlWcq') { v21.writeFileSync(v22, v23, "utf-8"); } else { 0x0; const var24 = await client_1.verifyKey(var20); if (var24.success && var24.valid) { if ("EtMGw" === "DVTND") { const var25 = v26.readFileSync(v27, "utf-8"); v28 = this._checkInjected(var25); } else { await this._context.globalState.update("cursorpro.expireDate", var24.expire_date); await this._context.globalState.update("cursorpro.switchRemaining", var24.switch_remaining); await this._context.globalState.update("cursorpro.switchLimit", var24.switch_limit); this._postMessage({ 'type': "keyStatusChecked", 'valid': true, 'expireDate': var24.expire_date, 'switchRemaining': var24.switch_remaining, 'switchLimit': var24.switch_limit }); } } else { this._postMessage({ 'type': "keyStatusChecked", 'valid': false, 'expired': true, 'error': var24.error || "\u6FC0\u6D3B\u7801\u5DF2\u8FC7\u671F\u6216\u65E0\u6548" }); } } } catch (v29) { console.error("[CursorPro] 检查激活码状态失败:", v29); } } async _handleActivate(arg48) { try { const var31 = await this._isSeamlessInjected(); if (var31) { if ("ZPKij" === "ZPKij") { this._postMessage({ 'type': "activated", 'success': false, 'error': "\u65E0\u611F\u6362\u53F7\u5DF2\u542F\u7528\uFF0C\u8BF7\u5148\u7981\u7528\u540E\u518D\u66F4\u6362\u6388\u6743\u7801" }); return; } else { const var32 = this._getHostsPath(); if (v33.existsSync(var32)) { return v34.readFileSync(var32, "utf-8"); } } } this._cleanProxySettings(); 0x0; const var35 = await client_1.verifyKey(arg48); if (var35.success && var35.valid) { if ('ZyMNB' === "ZyMNB") { console.log("[CursorPro] 激活成功,后端返回:", { 'expire_date': var35.expire_date, 'switch_remaining': var35.switch_remaining, 'switch_limit': var35.switch_limit }); await this._context.globalState.update("cursorpro.key", arg48); await this._context.globalState.update("cursorpro.expireDate", var35.expire_date); await this._context.globalState.update("cursorpro.switchRemaining", var35.switch_remaining); await this._context.globalState.update("cursorpro.switchLimit", var35.switch_limit); this._postMessage({ 'type': "activated", 'success': true, 'key': arg48, 'expireDate': var35.expire_date, 'switchRemaining': var35.switch_remaining, 'switchLimit': var35.switch_limit }); 0x0; extension_1.showStatusBar(); await this._handleGetUserSwitchStatus(); } else { v36.warn("[CursorPro] 清理失败: " + v37, v38); } } else { if ("aVnan" === "SOGed") { const var39 = v40("vscode"); if (var39.version) { v41.log("[CursorPro] \u4F7F\u7528 VS Code API \u83B7\u53D6\u7248\u672C:", var39.version); return var39.version; } } else { this._postMessage({ 'type': "activated", 'success': false, 'error': var35.error || "\u6388\u6743\u7801\u65E0\u6548" }); } } } catch (v42) { this._postMessage({ 'type': "activated", 'success': false, 'error': "\u8FDE\u63A5\u670D\u52A1\u5668\u5931\u8D25" }); } } async _handleSwitch() { const var44 = this._context.globalState.get("cursorpro.key"); if (!var44) { this._postMessage({ 'type': "showToast", 'message': "\u8BF7\u5148\u6FC0\u6D3B\u6388\u6743\u7801", 'icon': '⚠️' }); return; } try { 0x0; const var45 = await client_1.switchSeamlessToken(var44); if (var45.switched) { await this._context.globalState.update("cursorpro.switchRemaining", var45.switchRemaining); this._postMessage({ 'type': "switched", 'success': true, 'email': var45.email, 'switchRemaining': var45.switchRemaining, 'switchLimit': this._context.globalState.get("cursorpro.switchLimit") || 0x64 }); const var46 = var45.switchRemaining ?? 0x0; this._postMessage({ 'type': "userSwitchStatus", 'switchRemaining': var46, 'canSwitch': var46 > 0x0, 'lockedAccount': var45.email ? { 'email': var45.email } : null }); } else if ("yFoId" !== "kqrkg") { this._postMessage({ 'type': "switched", 'success': false, 'error': var45.message || '换号失败' }); } else { v47 = v48[0x1]; } } catch (v49) { if ("CyYkO" !== "QcuMv") { this._postMessage({ 'type': 'switched', 'success': false, 'error': "连接服务器失败" }); } else { v50.log("[CursorPro] WMIC \u83B7\u53D6\u8DEF\u5F84\u5931\u8D25:", v51); } } } async _writeAccountToLocal(arg59) { try { if ("MClbP" === "hdUrt") { let var53; if (v54 === "darwin") { var53 = v55.join(this._cachedCursorPath, "Contents", 'Resources', "app", "out", 'vs', "workbench", "workbench.desktop.main.js"); } else { var53 = v56.join(this._cachedCursorPath, "resources", "app", "out", 'vs', "workbench", "workbench.desktop.main.js"); } if (v57.existsSync(var53)) { return var53; } } else { const var58 = process.env.APPDATA || ''; const var59 = path.join(var58, "Cursor", "User", "globalStorage", "state.vscdb"); const var60 = path.join(var58, "Cursor", "User", "globalStorage", 'storage.json'); const var61 = path.join(var58, "Cursor", "machineid"); if (fs.existsSync(var59)) { const var62 = []; if (arg59.accessToken) { var62.push(["cursorAuth/accessToken", arg59.accessToken]); } if (arg59.refreshToken) { var62.push(["cursorAuth/refreshToken", arg59.refreshToken]); } if (arg59.email) { if ("rmAmZ" === 'mIiuu') { v63 = v64.dirname(v65.trim()); } else { var62.push(["cursorAuth/cachedEmail", arg59.email]); } } if (arg59.membership_type) { if ('vhcuB' === "pAlKG") { const var66 = v67.platform; let var68 = '没有写入权限'; if (var66 === "darwin") { var68 = "\u6CA1\u6709\u5199\u5165\u6743\u9650\uFF0C\u8BF7\u5728\u7EC8\u7AEF\u6267\u884C: sudo chmod -R 777 /Applications/Cursor.app"; } else if (var66 === "linux") { var68 = "\u6CA1\u6709\u5199\u5165\u6743\u9650\uFF0C\u8BF7\u4F7F\u7528 sudo \u6743\u9650\u8FD0\u884C\u6216\u4FEE\u6539\u6587\u4EF6\u6743\u9650"; } this._postMessage({ 'type': 'seamlessInjected', 'success': false, 'error': var68, 'needAdmin': true, 'path': v69 }); return; } else { var62.push(["cursorAuth/stripeMembershipType", arg59.membership_type]); } } if (arg59.sign_up_type) { if ("ptOKi" !== 'yLQZc') { var62.push(["cursorAuth/cachedSignUpType", arg59.sign_up_type]); } else { v70 = v71.dirname(v72); } } if (arg59.serviceMachineId) { if ('fYfXI' !== "eNCnU") { var62.push(["storage.serviceMachineId", arg59.serviceMachineId]); } else { this._postMessage({ 'type': "usageCheckResult", 'success': true, 'needConfirm': true, 'costUSD': v73.toFixed(0x2), 'email': v74 }); } } 0x0; await sqlite_1.sqliteSetBatch(var59, var62); console.log("[CursorPro] SQLite 数据库已更新"); } if (fs.existsSync(var60)) { if ("xouQM" === "nqqWG") { const var75 = v76.message || v77.error || "\u6362\u53F7\u5931\u8D25"; this._postMessage({ 'type': "manualSeamlessSwitched", 'success': false, 'error': var75 }); } else { const var78 = JSON.parse(fs.readFileSync(var60, 'utf-8')); if (arg59.machineId) { var78["telemetry.machineId"] = arg59.machineId; } if (arg59.macMachineId) { var78['telemetry.macMachineId'] = arg59.macMachineId; } if (arg59.devDeviceId) { var78["telemetry.devDeviceId"] = arg59.devDeviceId; } if (arg59.sqmId) { if ("eBQqu" === "hCBnO") { this._postMessage({ 'type': "proxyUpdated", 'success': false, 'error': "修改 hosts 文件失败,请确保有管理员权限" }); this._postMessage({ 'type': "showToast", 'message': "需要管理员权限修改 hosts 文件", 'icon': '⚠️' }); } else { var78["telemetry.sqmId"] = arg59.sqmId; } } fs.writeFileSync(var60, JSON.stringify(var78, null, 0x4)); console.log("[CursorPro] storage.json \u5DF2\u66F4\u65B0"); } } if (arg59.machineId) { fs.writeFileSync(var61, arg59.machineId); console.log("[CursorPro] machineid \u6587\u4EF6\u5DF2\u66F4\u65B0"); } if (arg59.registryGuid && process.platform === "win32") { if ("hhZyB" === "hhZyB") { try { const var79 = 'reg add "HKLM\SOFTWARE\Microsoft\Cryptography" /v MachineGuid /t REG_SZ /d "' + arg59.registryGuid + '" /f'; await execAsync(var79); console.log("[CursorPro] 注册表 MachineGuid 已更新"); } catch (v80) { console.warn("[CursorPro] \u6CE8\u518C\u8868\u5199\u5165\u5931\u8D25\uFF08\u53EF\u80FD\u9700\u8981\u7BA1\u7406\u5458\u6743\u9650\uFF09:", v80); } } else { v81 = "\u6CA1\u6709\u5199\u5165\u6743\u9650\uFF0C\u8BF7\u4F7F\u7528 sudo \u6743\u9650\u8FD0\u884C\u6216\u4FEE\u6539\u6587\u4EF6\u6743\u9650"; } } return true; } } catch (v82) { console.error("[CursorPro] 写入本地失败:", v82); vscode.window.showErrorMessage("写入失败: " + v82); return false; } } async _handleReset() { const var84 = '4|0|3|5|2|1'.split('|'); let var85 = 0x0; await this._context.globalState.update("cursorpro.key", undefined); await this._context.globalState.update("cursorpro.expireDate", undefined); await this._context.globalState.update("cursorpro.switchRemaining", undefined); 0x0; extension_1.hideStatusBar(); this._postMessage({ 'type': 'reset', 'success': true }); vscode.window.showInformationMessage("插件已重置"); } async _handleDisable() { await this._handleReset(); vscode.window.showInformationMessage("插件已停用"); } async _checkAdminPrivilege() { if (process.platform !== "win32") { if ("FIUZS" === 'FIUZS') { return true; } else { v87 = v88.join(v89, 'Contents', "Resources", 'app', "package.json"); } } try { await execAsync('reg query "HKLM\SOFTWARE\Microsoft\Cryptography" /v MachineGuid 2>nul'); const var90 = await execAsync("net session 2>nul").catch(() => ({ 'stdout': '', 'stderr': 'error' })); return !var90.stderr; } catch (v91) { return false; } } async _handleResetMachineId() { try { const var93 = process.platform; if (var93 === 'win32') { const var94 = await this._checkAdminPrivilege(); if (!var94) { this._postMessage({ 'type': "adminPermissionRequired" }); return; } } 0x0; const var95 = account_1.getCursorPaths(); const { dbPath: v96, storagePath: v97, machineidPath: v98 } = var95; const var99 = require("crypto"); const var100 = var99.randomBytes(0x20).toString("hex"); const var101 = var99.randomBytes(0x20).toString("hex"); const var102 = var99.randomUUID(); const var103 = '{' + var99.randomUUID().toUpperCase() + '}'; let var104 = 0x0; let var105 = []; if (fs.existsSync(v97)) { if ("EIFLO" !== "EIFLO") { let var106; if (v107 === "darwin") { var106 = v108.join(v109, 'Contents', "Resources", "app", "out", 'vs', "workbench", "workbench.desktop.main.js"); } else { var106 = v110.join(v111, "resources", "app", "out", 'vs', "workbench", "workbench.desktop.main.js"); } if (v112.existsSync(var106)) { return var106; } } else { let var113 = 0x3; while (var113 > 0x0) { try { const var114 = JSON.parse(fs.readFileSync(v97, "utf-8")); var114["telemetry.machineId"] = var100; var114["telemetry.macMachineId"] = var101; var114["telemetry.devDeviceId"] = var102; var114["telemetry.sqmId"] = var103; fs.writeFileSync(v97, JSON.stringify(var114, null, 0x4)); console.log("[CursorPro] storage.json \u5DF2\u66F4\u65B0"); var104++; break; } catch (v115) { var113--; if (var113 === 0x0) { if ("VbcUu" === "OKDBI") { v116.rmSync(v117, { 'recursive': true, 'force': true }); v118++; v119.log("[CursorPro] 已清理: " + v120); } else { console.warn("[CursorPro] storage.json \u66F4\u65B0\u5931\u8D25:", v115.message); var105.push("storage.json"); } } else { await new Promise(arg110 => setTimeout(arg110, 0x64)); } } } } } { if ("AGUOM" === "omtSK") { var var121 = []; for (var var122 in v123) if (v124.prototype.hasOwnProperty.call(v125, var122)) { var121[var121.length] = var122; } return var121; } else { let var126 = 0x3; while (var126 > 0x0) { try { const var127 = path.dirname(v98); if (!fs.existsSync(var127)) { if ('UjEXX' !== "XygLc") { fs.mkdirSync(var127, { 'recursive': true }); } else { return v128; } } fs.writeFileSync(v98, var100); console.log("[CursorPro] machineid \u6587\u4EF6\u5DF2\u66F4\u65B0"); var104++; break; } catch (v129) { var126--; if (var126 === 0x0) { console.warn("[CursorPro] machineid 更新失败:", v129.message); var105.push("machineid"); } else { await new Promise(arg111 => setTimeout(arg111, 0x64)); } } } } } if (fs.existsSync(v96)) { let var130 = 0x3; while (var130 > 0x0) { if ("UbSjF" === "UbSjF") { try { if ("EvWMl" !== "SxHmQ") { const var131 = var99.randomUUID(); 0x0; const var132 = await sqlite_1.sqliteSetBatch(v96, [['storage.serviceMachineId', var131]]); if (var132) { console.log("[CursorPro] SQLite 数据库已更新"); var104++; break; } else { if ('edqsV' !== "edqsV") { const var133 = { 'JDiGp': function (arg112, arg113) { return arg112 != arg113; }, 'UJfLB': function (arg114, arg115) { return arg114 !== arg115; }, 'YIhbu': "default", 'hQSHL': function (arg116, arg117, arg118, arg119) { return arg116(arg117, arg118, arg119); }, 'iFgQw': function (arg120, arg121, arg122) { return arg120(arg121, arg122); } }; var var134 = function (arg123) { var134 = v135.getOwnPropertyNames || function (arg124) { var var136 = []; for (var var137 in arg124) if (v138.prototype.hasOwnProperty.call(arg124, var137)) { var136[var136.length] = var137; } return var136; }; return var134(arg123); }; return function (arg125) { if (arg125 && arg125.__esModule) { return arg125; } var var139 = {}; if (var133.JDiGp(arg125, null)) { var var140 = var134(arg125); for (var var141 = 0x0; var141 < var140.length; var141++) { if (var140[var141] !== var133.YIhbu) { v142(var139, arg125, var140[var141]); } } } v143(var139, arg125); return var139; }; } else { throw new Error("sqliteSetBatch 返回 false"); } } } else { throw new v144("sqliteSetBatch 返回 false"); } } catch (v145) { var130--; if (var130 === 0x0) { if ('pUuQI' === "EvLtz") { v146.error("[CursorPro] Retry connect failed:", v147); this._postMessage({ 'type': 'networkStatus', 'online': false }); } else { console.warn("[CursorPro] SQLite \u66F4\u65B0\u5931\u8D25:", v145.message); var105.push("SQLite"); } } else { await new Promise(arg126 => setTimeout(arg126, 0x1f4)); } } } else { v148 = v149.trim(); } } } if (var93 === "win32") { if ("uxdjv" === 'uxdjv') { const var150 = var99.randomUUID(); try { if ("qWEGL" !== "lGcMr") { await execAsync('reg add "HKLM\SOFTWARE\Microsoft\Cryptography" /v MachineGuid /t REG_SZ /d "' + var150 + '" /f'); console.log("[CursorPro] \u6CE8\u518C\u8868 MachineGuid \u5DF2\u66F4\u65B0"); var104++; } else { this._postMessage({ 'type': "seamlessInjected", 'success': false, 'error': v151.error || "\u6388\u6743\u7801\u65E0\u6548" }); return; } } catch (v152) { console.warn("[CursorPro] 注册表更新失败(需要管理员权限),已跳过"); var105.push("注册表"); } } else { v153 = v154.getOwnPropertyNames || function (arg127) { var var155 = []; for (var var156 in arg127) if (v157.prototype.hasOwnProperty.call(arg127, var156)) { var155[var155.length] = var156; } return var155; }; return v158(v159); } } if (var104 >= 0x2) { this._postMessage({ 'type': "machineIdReset", 'success': true, 'needRestart': true, 'message': var105.length > 0x0 ? "机器码重置成功(" + var105.join(", ") + " 更新失败,不影响使用)" : "\u673A\u5668\u7801\u91CD\u7F6E\u6210\u529F" }); } else if ("uIJXM" === "gGIGL") { v160.log("[CursorPro] 尝试路径失败:", v161, v162); } else { this._postMessage({ 'type': "showToast", 'message': "重置部分失败: " + var105.join(", ") + "。请先完全关闭 Cursor 再试", 'icon': '⚠️' }); } } catch (v163) { if ("KokEE" !== "KokEE") { v164.log("[CursorPro] where \u547D\u4EE4\u83B7\u53D6\u8DEF\u5F84\u5931\u8D25"); } else { this._postMessage({ 'type': "showToast", 'message': "重置机器码失败: " + v163, 'icon': '❌' }); } } } _generateRandomMAC() { const var166 = require("crypto"); const var167 = var166.randomBytes(0x6); var167[0x0] = (var167[0x0] | 0x2) & 0xfe; return Array.from(var167).map(arg134 => arg134.toString(0x10).padStart(0x2, '0')).join(':'); } async _handleDisableUpdate() { try { const var169 = process.env.LOCALAPPDATA || ''; const var170 = path.join(var169, "cursor-updater"); if (fs.existsSync(var170)) { if ("Fkark" !== "Fkark") { return false; } else if (fs.statSync(var170).isDirectory()) { if ("IvZQp" !== "IvZQp") { v171 = v172.substring(0x0, v173) + v174.substring(v175 + 0x7); } else { fs.rmSync(var170, { 'recursive': true, 'force': true }); } } else { fs.unlinkSync(var170); } } fs.writeFileSync(var170, ''); this._postMessage({ 'type': 'showToast', 'message': "\u5DF2\u7981\u7528 Cursor \u81EA\u52A8\u66F4\u65B0", 'icon': '✅' }); } catch (v176) { this._postMessage({ 'type': "showToast", 'message': "禁用自动更新失败: " + v176, 'icon': '❌' }); } } async _handleCleanEnv() { try { if (process.platform === "win32") { await execAsync("taskkill /F /IM Cursor.exe").catch(() => {}); } else if ("rhIFB" === "xYuSE") { this._postMessage({ 'type': "showToast", 'message': "禁用自动更新失败: " + v178, 'icon': '❌' }); } else { await execAsync("pkill -f Cursor").catch(() => {}); } await new Promise(arg153 => setTimeout(arg153, 0x7d0)); const var179 = process.env.APPDATA || ''; const var180 = process.env.LOCALAPPDATA || ''; const var181 = process.env.HOME || process.env.USERPROFILE || ''; let var182 = 0x0; if (process.platform === "win32") { if ('OMLAe' !== "uKgvW") { const var183 = [path.join(var179, "Cursor"), path.join(var180, "Cursor"), path.join(var180, "cursor-updater"), path.join(var181, ".cursor")]; for (const var184 of var183) { if ("CTJTi" !== "CTJTi") { this._postMessage({ 'type': 'userSwitchStatus', 'valid': false, 'switchRemaining': 0x0, 'canSwitch': false, 'error': '获取状态失败' }); } else { try { if (fs.existsSync(var184)) { if ("YZsoE" === "jAgIw") { this._postMessage({ 'type': "networkStatus", 'online': v185 }); } else { fs.rmSync(var184, { 'recursive': true, 'force': true }); var182++; console.log("[CursorPro] 已清理: " + var184); } } } catch (v186) { console.warn("[CursorPro] 清理失败: " + var184, v186); } } } } else { v187.log("[CursorPro] WMIC \u83B7\u53D6\u8DEF\u5F84\u5931\u8D25"); } } else { if (process.platform === "darwin") { const var188 = [path.join(var181, "Library", "Application Support", "Cursor"), path.join(var181, "Library", "Caches", "Cursor"), path.join(var181, "Library", "Logs", "Cursor"), path.join(var181, 'Library', "Application Support", 'Caches', "cursor-updater"), path.join(var181, ".cursor")]; for (const var189 of var188) { if ("ZwnwK" === "juOiE") { const var190 = v191.readFileSync(v192, 'utf-8'); const var193 = v194.parse(var190); if (var193.version) { v195.log("[CursorPro] \u627E\u5230 Cursor \u7248\u672C:", var193.version, "\u8DEF\u5F84:", v196); return var193.version; } } else { try { if (fs.existsSync(var189)) { if ("WKeGp" !== "rxZvP") { fs.rmSync(var189, { 'recursive': true, 'force': true }); var182++; } else { this._postMessage({ 'type': "announcement", 'success': false, 'error': v197.error || "\u83B7\u53D6\u516C\u544A\u5931\u8D25" }); } } } catch (v198) { if ("pLQpn" !== "udDhy") { console.warn("[CursorPro] 清理失败: " + var189, v198); } else { this._postMessage({ 'type': "activated", 'success': false, 'error': v199.error || "\u6388\u6743\u7801\u65E0\u6548" }); } } } } } else { const var200 = [path.join(var181, ".config", "Cursor"), path.join(var181, ".cache", "Cursor"), path.join(var181, ".local", "share", "Cursor"), path.join(var181, ".cursor")]; for (const var201 of var200) { if ('lkchx' !== "lkchx") { v202.error("[CursorPro] \u6CE8\u5165\u5931\u8D25\uFF0C\u672A\u627E\u5230\u4EFB\u4F55\u6CE8\u5165\u70B9"); v203.error("[CursorPro] \u6587\u4EF6\u8DEF\u5F84:", v204); v205.error("[CursorPro] \u6587\u4EF6\u5927\u5C0F:", v206.length); v207.error("[CursorPro] \u672A\u627E\u5230\u7684\u6CE8\u5165\u70B9:", v208); const var209 = v210.includes('_showNotification'); const var211 = v212.includes("getItems()"); v213.error("[CursorPro] 包含 _showNotification:", var209); v214.error("[CursorPro] 包含 getItems():", var211); this._postMessage({ 'type': "seamlessInjected", 'success': false, 'error': "Cursor \u7248\u672C\u4E0D\u517C\u5BB9\uFF0C\u6CE8\u5165\u70B9\u672A\u627E\u5230", 'details': "路径: " + v215 }); return; } else { try { if (fs.existsSync(var201)) { fs.rmSync(var201, { 'recursive': true, 'force': true }); var182++; } } catch (v216) { if ('SPIaC' === "SPIaC") { console.warn("[CursorPro] 清理失败: " + var201, v216); } else { if (v217 === v218) { v219 = v220; } var var221 = v222.getOwnPropertyDescriptor(v223, v224); if (!var221 || ('get' in var221 ? !v225.__esModule : var221.writable || var221.configurable)) { var221 = { 'enumerable': true, 'get': function () { return v226[v227]; } }; } v228.defineProperty(v229, v230, var221); } } } } } } vscode.window.showInformationMessage("✅ Cursor 环境清理完成!已清理 " + var182 + " 个目录。请重新启动 Cursor。"); } catch (v231) { if ("FbJEH" !== "UEqoH") { vscode.window.showErrorMessage("清理失败: " + v231); } else { return; } } } _cleanProxySettings() { try { if ("uJNLm" === "uJNLm") { const var233 = process.platform; const var234 = process.env.HOME || process.env.USERPROFILE || ''; let var235; if (var233 === "win32") { if ("xHyzt" !== "xHyzt") { return "/etc/hosts"; } else { const var236 = process.env.APPDATA || ''; var235 = path.join(var236, "Cursor", "User", "settings.json"); } } else { if (var233 === "darwin") { var235 = path.join(var234, "Library", "Application Support", "Cursor", 'User', "settings.json"); } else { if ("UAknb" === 'UAknb') { var235 = path.join(var234, ".config", "Cursor", "User", "settings.json"); } else { const var237 = v238.version; const var239 = v240.CURRENT_VERSION; const var241 = this._compareVersions(var237, var239) > 0x0; this._postMessage({ 'type': "versionCheck", 'success': true, 'currentVersion': var239, 'latestVersion': var237, 'hasUpdate': var241 }); } } } if (!fs.existsSync(var235)) { return; } const var242 = fs.readFileSync(var235, 'utf-8'); let var243; try { var243 = JSON.parse(var242); } catch { if ("TSToT" === "TSToT") { return; } else { v244 = v245.join(v246, "resources", "app", "package.json"); } } const var247 = ["http.proxy", "http.proxyStrictSSL", "http.proxySupport", "cursor.general.disableHttp2", "http.noProxy"]; let var248 = false; for (const var249 of var247) { if (var249 in var243) { var248 = true; delete var243[var249]; } } if (var248) { if ("tQfhG" !== 'xvUoy') { fs.writeFileSync(var235, JSON.stringify(var243, null, 0x4), "utf-8"); console.log("[CursorPro] 已清理 settings.json 中的旧代理配置"); } else { v250 = v251[0x1].trim(); } } } else { const var252 = v253?.message || '连接服务器失败'; this._postMessage({ 'type': "manualSeamlessSwitched", 'success': false, 'error': var252 }); } } catch (v254) { console.warn("[CursorPro] \u6E05\u7406 settings.json \u4EE3\u7406\u914D\u7F6E\u5931\u8D25:", v254); } } _getHostsPath() { return process.platform === "win32" ? "C:\\Windows\\System32\\drivers\\etc\\hosts" : '/etc/hosts'; } _readHostsFile() { try { if ('SLTdx' !== "SLTdx") { v257.error("[CursorPro] \u5199\u5165\u672C\u5730\u5931\u8D25:", v258); v259.window.showErrorMessage("写入失败: " + v260); return false; } else { const var261 = this._getHostsPath(); if (fs.existsSync(var261)) { return fs.readFileSync(var261, "utf-8"); } } } catch (v262) { console.error("[CursorPro] Read hosts error:", v262); } return ''; } _hasHostsConfig() { const var263 = this._readHostsFile(); return var263.includes(this.HOSTS_MARKER_START); } async _grantHostsWritePermission() { if (process.platform !== "win32") { return false; } try { if ("ffBKI" === "ffBKI") { const var265 = this._getHostsPath(); const var266 = process.env.USERNAME || ''; if (!var266) { return false; } const var267 = var265.replace(/\\/g, "\\\\"); const var268 = "powershell -WindowStyle Hidden -Command \"Start-Process powershell -ArgumentList '-WindowStyle Hidden -Command icacls \\\"" + var267 + '\" /grant ' + var266 + ":M' -Verb RunAs -Wait\""; await execAsync(var268); this._hostsPermissionGranted = true; console.log("[CursorPro] Hosts file permission granted to user:", var266); return true; } else { this._postMessage({ 'type': "seamlessStatus", 'is_injected': false, 'error': "\u68C0\u6D4B\u72B6\u6001\u5931\u8D25" }); } } catch (v269) { console.error("[CursorPro] Grant hosts permission error:", v269); return false; } } async _writeHostsFile(arg168) { const var271 = this._getHostsPath(); try { if (process.platform === "win32") { let var272 = false; try { if ("qQhXV" !== "qQhXV") { v273 = v274.dirname(v275.trim()); } else { fs.writeFileSync(var271, arg168, "utf-8"); var272 = true; } } catch (v276) { console.log("[CursorPro] Direct write failed, trying to grant permission"); } if (!var272) { if (!this._hostsPermissionGranted) { const var277 = await this._grantHostsWritePermission(); if (var277) { if ("gFBAJ" === "UnshK") { this._postMessage({ 'type': "usageCheckResult", 'success': false, 'error': "\u672A\u6FC0\u6D3B\u6388\u6743\u7801" }); return; } else { try { fs.writeFileSync(var271, arg168, "utf-8"); var272 = true; } catch (v278) { console.log("[CursorPro] Write still failed after permission grant"); } } } } } if (!var272) { const var279 = path.join(process.env.TEMP || '', "cursorpro_hosts_temp.txt"); fs.writeFileSync(var279, arg168, "utf-8"); const var280 = var279.replace(/\\/g, "\\\\"); const var281 = var271.replace(/\\/g, "\\\\"); const var282 = "powershell -WindowStyle Hidden -Command \"Start-Process powershell -ArgumentList '-WindowStyle Hidden -Command Copy-Item -Path \\\"" + var280 + '\" -Destination \"' + var281 + "\\\" -Force' -Verb RunAs -Wait\""; await execAsync(var282); try { if ("XVhkW" !== "kizvY") { fs.unlinkSync(var279); } else { v283.push(["cursorAuth/cachedSignUpType", v284.sign_up_type]); } } catch {} } try { await execAsync("ipconfig /flushdns"); console.log("[CursorPro] Windows DNS 缓存已刷新"); } catch (v285) { console.warn("[CursorPro] Windows DNS 刷新失败:", v285); } } else { if (process.platform === "darwin") { const var286 = "/tmp/hosts_cursor_temp"; fs.writeFileSync(var286, arg168, "utf-8"); const var287 = "do shell script \"cp '" + var286 + "' '" + var271 + "' && rm '" + var286 + "' && dscacheutil -flushcache && killall -HUP mDNSResponder\" with administrator privileges"; await execAsync('osascript -e "' + var287.replace(/"/g, "\\\"") + "\""); } else { fs.writeFileSync(var271, arg168, "utf-8"); } } return true; } catch (v288) { console.error("[CursorPro] Write hosts error:", v288); return false; } } async _handleToggleProxy(arg179, arg180) { try { if ("JCMUi" === "JCMUi") { if (arg179) { if ("owyly" !== "JZnQC") { const var290 = this._context.globalState.get("cursorpro.key"); const var291 = this._context.globalState.get('cursorpro.expireDate'); if (!var290) { this._postMessage({ 'type': "proxyUpdated", 'success': false, 'error': "\u8BF7\u5148\u6FC0\u6D3B\u6388\u6743\u7801" }); this._postMessage({ 'type': "showToast", 'message': '请先激活授权码', 'icon': '⚠️' }); return; } if (var291) { if ("nMubd" === "nMubd") { const var292 = new Date(var291).getTime(); if (Date.now() > var292) { this._postMessage({ 'type': "proxyUpdated", 'success': false, 'error': "\u6388\u6743\u7801\u5DF2\u8FC7\u671F\uFF0C\u65E0\u6CD5\u5F00\u542F\u514D\u9B54\u6CD5" }); this._postMessage({ 'type': "showToast", 'message': "\u6388\u6743\u7801\u5DF2\u8FC7\u671F\uFF0C\u65E0\u6CD5\u5F00\u542F\u514D\u9B54\u6CD5", 'icon': '⚠️' }); return; } } else { v293.error("[CursorPro] 检测无感换号状态失败:", v294); return false; } } } else { return true; } } this._cleanProxySettings(); let var295 = this._readHostsFile(); const var296 = var295.indexOf(this.HOSTS_MARKER_START); const var297 = var295.indexOf(this.HOSTS_MARKER_END); if (var296 !== -0x1 && var297 !== -0x1) { if ("BHFHl" !== 'jcvMA') { var295 = var295.substring(0x0, var296) + var295.substring(var297 + this.HOSTS_MARKER_END.length); } else { return v298.platform === "win32" ? "C:\\Windows\\System32\\drivers\\etc\\hosts" : "/etc/hosts"; } } var295 = var295.replace(/\n{3,}/g, "\n\n").trim(); if (arg179) { const var299 = this.CURSOR_DOMAINS.map(arg193 => this.SNI_PROXY_IP + " " + arg193).join("\n"); const var300 = "\n\n" + this.HOSTS_MARKER_START + "\n" + var299 + "\n" + this.HOSTS_MARKER_END + "\n"; var295 += var300; } const var301 = await this._writeHostsFile(var295); if (var301) { if ("ejFIc" !== "QrGmP") { 0x0; await client_1.updateProxyConfig(arg179, this.SNI_PROXY_IP); this._postMessage({ 'type': "proxyUpdated", 'success': true, 'enabled': arg179, 'url': this.SNI_PROXY_IP }); this._postMessage({ 'type': "showToast", 'message': arg179 ? "免魔法已开启" : "\u514D\u9B54\u6CD5\u5DF2\u5173\u95ED", 'icon': '✅' }); } else { v302.log("[CursorPro] 快捷方式解析获取路径失败"); } } else { this._postMessage({ 'type': "proxyUpdated", 'success': false, 'error': "\u4FEE\u6539 hosts \u6587\u4EF6\u5931\u8D25\uFF0C\u8BF7\u786E\u4FDD\u6709\u7BA1\u7406\u5458\u6743\u9650" }); this._postMessage({ 'type': "showToast", 'message': "需要管理员权限修改 hosts 文件", 'icon': '⚠️' }); } } else { v303.warn("[CursorPro] macOS \u83B7\u53D6\u8FDB\u7A0B\u8DEF\u5F84\u5931\u8D25:", v304); } } catch (v305) { console.error("[CursorPro] Toggle proxy error:", v305); this._postMessage({ 'type': "proxyUpdated", 'success': false, 'error': "\u66F4\u65B0\u914D\u7F6E\u5931\u8D25" }); } } async _handleGetProxyStatus() { try { const var307 = this._hasHostsConfig(); this._postMessage({ 'type': "proxyStatus", 'enabled': var307, 'url': var307 ? this.SNI_PROXY_IP : '' }); } catch (v308) { console.error("[CursorPro] Get proxy status error:", v308); this._postMessage({ 'type': "proxyStatus", 'enabled': false, 'url': '' }); } } async _handleGetSeamlessStatus() { try { const var310 = await this._getWorkbenchPathAsync(); let var311 = false; if (var310 && fs.existsSync(var310)) { const var312 = fs.readFileSync(var310, 'utf-8'); var311 = this._checkInjected(var312); } this._postMessage({ 'type': "seamlessStatus", 'is_injected': var311, 'workbench_path': var310 || '未找到' }); } catch (v313) { this._postMessage({ 'type': "seamlessStatus", 'is_injected': false, 'error': "检测状态失败" }); } } async _getCursorInstallPath() { if (this._cachedCursorPath) { return this._cachedCursorPath; } const var315 = vscode.workspace.getConfiguration("cursorpro"); const var316 = var315.get("cursorPath"); if (var316 && fs.existsSync(var316)) { console.log("[CursorPro] \u4F7F\u7528\u7528\u6237\u914D\u7F6E\u7684 Cursor \u8DEF\u5F84:", var316); this._cachedCursorPath = var316; return var316; } const var317 = process.platform; let var318 = null; try { if (var317 === "win32") { try { const { stdout: v319 } = await execAsync("wmic process where \"name='Cursor.exe'\" get ExecutablePath /format:list 2>nul"); if (v319) { if ("qoucU" !== "qoucU") { this._postMessage({ 'type': "showToast", 'message': "\u8BF7\u5148\u6FC0\u6D3B\u6388\u6743\u7801", 'icon': '⚠️' }); return; } else { const var320 = v319.match(/ExecutablePath=(.+)/); if (var320 && var320[0x1]) { if ("DFFnS" === "qzRkG") { this._postMessage({ 'type': "showToast", 'message': "重置机器码失败: " + v321, 'icon': '❌' }); } else { const var322 = var320[0x1].trim(); var318 = path.dirname(var322); } } } } } catch (v323) { console.log("[CursorPro] WMIC \u83B7\u53D6\u8DEF\u5F84\u5931\u8D25"); } if (!var318) { if ('YbsJH' !== "KgPWK") { try { const { stdout: v324 } = await execAsync("powershell -Command \"Get-Process Cursor -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty Path\""); if (v324 && v324.trim()) { var318 = path.dirname(v324.trim()); } } catch (v325) { if ("PCmsj" !== "idSrD") { console.log("[CursorPro] PowerShell Get-Process \u83B7\u53D6\u8DEF\u5F84\u5931\u8D25"); } else if (v326.includes(v327.scode)) { v328 = v329.replace(v330.scode, v331.replacement); v332.push(v333.name); } else { v334.push(v335.name); } } } else { v336 = v337.dirname(v338); } } if (!var318) { try { const { stdout: v339 } = await execAsync("reg query \"HKCUSoftwareMicrosoftWindowsCurrentVersionUninstall\" /s /f \"Cursor\" 2>nul | findstr \"InstallLocation\""); if (v339 && v339.trim()) { const var340 = v339.match(/InstallLocation\s+REG_SZ\s+(.+)/); if (var340 && var340[0x1] && fs.existsSync(var340[0x1].trim())) { if ("xkLFN" !== "VRqTq") { var318 = var340[0x1].trim(); } else { this._postMessage({ 'type': "proxyUpdated", 'success': false, 'error': "\u8BF7\u5148\u6FC0\u6D3B\u6388\u6743\u7801" }); this._postMessage({ 'type': "showToast", 'message': "\u8BF7\u5148\u6FC0\u6D3B\u6388\u6743\u7801", 'icon': '⚠️' }); return; } } } } catch (v341) { if ("qGOpJ" !== "WEzFK") { console.log("[CursorPro] \u6CE8\u518C\u8868\u65B9\u6CD51\u83B7\u53D6\u8DEF\u5F84\u5931\u8D25"); } else { this._postMessage({ 'type': 'seamlessConfigUpdated', 'success': false, 'error': "\u66F4\u65B0\u914D\u7F6E\u5931\u8D25" }); } } } if (!var318) { try { const { stdout: v342 } = await execAsync("reg query \"HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\" /s /f \"Cursor\" 2>nul | findstr \"InstallLocation\""); if (v342 && v342.trim()) { const var343 = v342.match(/InstallLocation\s+REG_SZ\s+(.+)/); if (var343 && var343[0x1] && fs.existsSync(var343[0x1].trim())) { if ("vnDbD" === "xFoOA") { v344 = v345.replace(v346.scode, v347.replacement); v348.push(v349.name); } else { var318 = var343[0x1].trim(); } } } } catch (v350) { console.log("[CursorPro] 注册表方法2获取路径失败"); } } if (!var318) { if ("OHDPB" !== 'ASYNt') { try { const var351 = path.join(process.env.APPDATA || '', "Microsoft", "Windows", "Start Menu", 'Programs', "Cursor.lnk"); const var352 = path.join("C:\\ProgramData", "Microsoft", 'Windows', "Start Menu", "Programs", "Cursor.lnk"); for (const var353 of [var351, var352]) { if (fs.existsSync(var353)) { const { stdout: v354 } = await execAsync("powershell -Command \"(New-Object -ComObject WScript.Shell).CreateShortcut('" + var353.replace(/'/g, "''") + "').TargetPath\""); if (v354 && v354.trim() && fs.existsSync(v354.trim())) { if ("EzvlI" === "EzvlI") { var318 = path.dirname(v354.trim()); break; } else { v355 = ["/Applications/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.desktop.main.js"]; } } } } } catch (v356) { console.log("[CursorPro] \u5FEB\u6377\u65B9\u5F0F\u89E3\u6790\u83B7\u53D6\u8DEF\u5F84\u5931\u8D25"); } } else { const var357 = v358.match(/ExecutablePath=(.+)/); if (var357 && var357[0x1]) { const var359 = var357[0x1].trim(); v360 = v361.dirname(var359); } } } if (!var318) { if ("vhjCP" === "vhjCP") { try { const { stdout: v362 } = await execAsync("where cursor 2>nul"); if (v362 && v362.trim()) { const var363 = v362.trim().split("\n"); for (const var364 of var363) { const var365 = var364.trim(); if (var365 && fs.existsSync(var365)) { var318 = path.dirname(var365); break; } } } } catch (v366) { if ("BQAEU" !== "BQAEU") { v367.copyFileSync(v368, v369); v370.log("[CursorPro] \u521B\u5EFA\u5907\u4EFD\u6587\u4EF6"); } else { console.log("[CursorPro] where \u547D\u4EE4\u83B7\u53D6\u8DEF\u5F84\u5931\u8D25"); } } } else { const var371 = v372[0x1].trim(); v373 = v374.dirname(var371); v375 = v376.join(v377, "resources", "app", "package.json"); } } if (!var318) { const var378 = process.env.LOCALAPPDATA || ''; const var379 = process.env.USERPROFILE || ''; const var380 = process.env.ProgramFiles || "C:\\Program Files"; const var381 = process.env["ProgramFiles(x86)"] || "C:\\Program Files (x86)"; const var382 = [path.join(var378, "Programs", "Cursor"), path.join(var378, "Programs", "cursor"), path.join(var379, "AppData", "Local", "Programs", "Cursor"), path.join(var380, "Cursor"), path.join(var381, "Cursor"), path.join(var378, "Cursor"), path.join(var378, "cursor")]; for (const var383 of var382) { if ("mDWBe" === "XrXcG") { v384.error("[CursorPro] \u8BFB\u53D6\u8D26\u53F7\u5931\u8D25:", v385); return []; } else { if (var383 && fs.existsSync(var383)) { var318 = var383; break; } } } } } else { if (var317 === "darwin") { if ("iDOKM" !== "mPbmb") { try { if ("VYhDm" === "EZQju") { v386.error("[CursorPro] \u5199\u5165\u6587\u4EF6\u5931\u8D25:", v387); if (v388.code === "EPERM" || v389.code === "EACCES" || v390.code === "EROFS") { const var391 = v392.platform; let var393 = "没有写入权限"; if (var391 === 'darwin') { var393 = "\u6CA1\u6709\u5199\u5165\u6743\u9650\uFF0C\u8BF7\u5728\u7EC8\u7AEF\u6267\u884C: sudo chmod -R 777 /Applications/Cursor.app"; } else if (var391 === "linux") { var393 = "没有写入权限,请使用 sudo 权限运行或修改文件权限"; } this._postMessage({ 'type': "seamlessInjected", 'success': false, 'error': var393, 'needAdmin': true, 'path': v394 }); return; } throw v395; } else { const { stdout: v396 } = await execAsync("lsof -c Cursor 2>/dev/null | grep \"txt\" | grep -i \"Cursor.app\" | head -1 | awk '{print $9}'"); if (v396 && v396.trim()) { if ("kFqGj" !== "kFqGj") { this._postMessage({ 'type': "usageCheckResult", 'success': true, 'needConfirm': false }); } else { const var397 = v396.trim().match(/(.+\.app)/); if (var397) { if ("AvPWh" === 'hsffN') { this._postMessage({ 'type': "usageCheckResult", 'success': true, 'needConfirm': false }); return; } else { var318 = var397[0x1]; } } } } } } catch (v398) {} if (!var318) { try { if ("DLzJi" === "fmKaB") { const var399 = v400.data.usage || {}; const var401 = v402(var399.totalCostUSD || 0x0); if (var401 < 0xa) { this._postMessage({ 'type': "usageCheckResult", 'success': true, 'needConfirm': true, 'costUSD': var401.toFixed(0x2), 'email': v403 }); } else { this._postMessage({ 'type': "usageCheckResult", 'success': true, 'needConfirm': false }); } } else { const { stdout: v404 } = await execAsync("ps -eo comm,args | grep -i \"[C]ursor\" | grep -v \"grep\" | head -1"); if (v404 && v404.trim()) { const var405 = v404.match(/(\/.+\.app)/); if (var405) { var318 = var405[0x1]; } } } } catch (v406) { console.warn("[CursorPro] macOS \u83B7\u53D6\u8FDB\u7A0B\u8DEF\u5F84\u5931\u8D25:", v406); } } if (!var318) { if ("LPxcr" !== "LPxcr") { v407.error("[CursorPro] Write hosts error:", v408); return false; } else { try { const { stdout: v409 } = await execAsync("mdfind \"kMDItemCFBundleIdentifier == 'com.todesktop.*cursor*'\" 2>/dev/null | head -1"); if (v409 && v409.trim() && fs.existsSync(v409.trim())) { var318 = v409.trim(); } } catch (v410) {} } } if (!var318 && fs.existsSync('/Applications/Cursor.app')) { var318 = "/Applications/Cursor.app"; } } else { v411.warn("[CursorPro] SQLite \u66F4\u65B0\u5931\u8D25:", v412.message); v413.push("SQLite"); } } else { try { const { stdout: v414 } = await execAsync('pgrep -f "[c]ursor" | head -1'); const var415 = v414 && v414.trim(); if (var415) { const { stdout: v416 } = await execAsync("readlink -f /proc/" + var415 + "/exe 2>/dev/null"); if (v416 && v416.trim()) { const var417 = v416.trim(); var318 = path.dirname(var417); if (var318.endsWith("/bin")) { var318 = path.dirname(var318); } } } } catch (v418) {} if (!var318) { if ("BDrEe" !== "BDrEe") { let var419 = ''; const var420 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for (let var421 = 0x0; var421 < 0x20; var421++) { var419 += var420.charAt(v422.floor(v423.random() * var420.length)); } return var419; } else { try { const { stdout: v424 } = await execAsync("which cursor 2>/dev/null"); if (v424 && v424.trim()) { const var425 = await execAsync('readlink -f "' + v424.trim() + '" 2>/dev/null'); if (var425.stdout && var425.stdout.trim()) { var318 = path.dirname(var425.stdout.trim()); if (var318.endsWith('/bin')) { if ("RTVew" === "ZRSMl") { this._postMessage({ 'type': 'userSwitchStatus', 'valid': false, 'switchRemaining': 0x0, 'canSwitch': false, 'error': "\u672A\u6FC0\u6D3B\u6388\u6743\u7801" }); return; } else { var318 = path.dirname(var318); } } } } } catch (v426) { console.warn("[CursorPro] Linux \u83B7\u53D6\u8FDB\u7A0B\u8DEF\u5F84\u5931\u8D25:", v426); } } } if (!var318) { const var427 = ["/opt/Cursor", "/opt/cursor", "/usr/share/cursor", "/usr/lib/cursor", path.join(process.env.HOME || '', ".local/share/cursor"), path.join(process.env.HOME || '', "Applications/cursor")]; for (const var428 of var427) { if (fs.existsSync(var428)) { var318 = var428; break; } } } } } } catch (v429) { console.error("[CursorPro] \u83B7\u53D6 Cursor \u5B89\u88C5\u8DEF\u5F84\u5931\u8D25:", v429); } if (var318) { this._cachedCursorPath = var318; } return var318; } _getWorkbenchPath() { return this._getWorkbenchPathSync(); } _getWorkbenchPathSync() { const var431 = process.platform; if (this._cachedCursorPath) { if ('zZyLK' !== "PQRiM") { let var432; if (var431 === "darwin") { if ("xuLZV" === 'xuLZV') { var432 = path.join(this._cachedCursorPath, 'Contents', "Resources", "app", "out", 'vs', "workbench", "workbench.desktop.main.js"); } else { v433.push(["storage.serviceMachineId", v434.serviceMachineId]); } } else if ("XbfIf" !== "kWVws") { var432 = path.join(this._cachedCursorPath, "resources", "app", "out", 'vs', "workbench", "workbench.desktop.main.js"); } else { v435.warn("[CursorPro] machineid \u66F4\u65B0\u5931\u8D25:", v436.message); v437.push("machineid"); } if (fs.existsSync(var432)) { return var432; } } else { return []; } } if (var431 === 'win32') { return null; } let var438 = []; if (var431 === "darwin") { var438 = ["/Applications/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.desktop.main.js"]; } else { if ('DESET' !== "qRWfN") { var438 = ["/opt/Cursor/resources/app/out/vs/workbench/workbench.desktop.main.js", '/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js']; } else { const var439 = v440('crypto'); const var441 = var439.randomBytes(0x6); var441[0x0] = (var441[0x0] | 0x2) & 0xfe; return v442.from(var441).map(arg250 => arg250.toString(0x10).padStart(0x2, '0')).join(':'); } } for (const var443 of var438) { if (fs.existsSync(var443)) { return var443; } } return null; } async _getWorkbenchPathAsync() { const var445 = process.platform; const var446 = await this._getCursorInstallPath(); if (var446) { if ("EUUHA" === "eXeOK") { const var447 = v448[0x1].trim(); v449 = v450.dirname(var447); } else { let var451; if (var445 === "darwin") { if ("vUlDT" === "vUlDT") { var451 = path.join(var446, "Contents", "Resources", "app", "out", 'vs', "workbench", "workbench.desktop.main.js"); } else { const var452 = v453.env.LOCALAPPDATA || ''; const var454 = v455.env.USERPROFILE || ''; const var456 = v457.env.ProgramFiles || "C:\\Program Files"; const var458 = v459.env["ProgramFiles(x86)"] || "C:\\Program Files (x86)"; v460.push(v461.join(var452, "Programs", "Cursor", "resources", "app", "package.json"), v462.join(var452, "Programs", "cursor", "resources", "app", "package.json"), v463.join(var454, "AppData", "Local", "Programs", "Cursor", "resources", "app", "package.json"), v464.join(var456, "Cursor", "resources", "app", "package.json"), v465.join(var456, "cursor", "resources", "app", "package.json"), v466.join(var458, "Cursor", "resources", "app", "package.json")); } } else { var451 = path.join(var446, "resources", "app", "out", 'vs', "workbench", "workbench.desktop.main.js"); } if (fs.existsSync(var451)) { if ("dtGAS" === "dtGAS") { return var451; } else { this._postMessage({ 'type': "versionCheck", 'success': false, 'currentVersion': v467.CURRENT_VERSION, 'error': v468.message || "请求失败" }); } } } } return this._getWorkbenchPathSync(); } _checkInjected(arg257) { return arg257.includes("/*i0*/") || arg257.includes('/*i1s*/'); } async _isSeamlessInjected() { try { const var471 = await this._getWorkbenchPathAsync(); if (var471 && fs.existsSync(var471)) { const var472 = fs.readFileSync(var471, "utf-8"); return this._checkInjected(var472); } return false; } catch (v473) { console.error("[CursorPro] \u68C0\u6D4B\u65E0\u611F\u6362\u53F7\u72B6\u6001\u5931\u8D25:", v473); return false; } } _getInjectionConfig(arg258, arg259) { return [{ 'name': "注入点0: 完整性检查绕过", 'scode': "_showNotification(){", 'replacement': "_showNotification(){/*i0*/}_showNotificationOld(){", 'restore': { 'find': "_showNotification(){/*i0*/}_showNotificationOld(){", 'replace_with': "_showNotification(){" } }, { 'name': "注入点1: 核心模块初始化", 'scode': "this.database.getItems()))", 'replacement': "this.database.getItems()))/*i1s*/;await(async function(e){if(e.get('releaseNotes/lastVersion')){window.store=e;window.__cpKey='CursorPro2024!@#';window.__cpEnc=function(t){var k=window.__cpKey,r='';for(var i=0;i 0x0) { console.warn("[CursorPro] \u672A\u627E\u5230\u7684\u6CE8\u5165\u70B9:", var501); } try { if ("nYkuW" === "oAKop") { v506.warn("[CursorPro] 获取进程路径失败:", v507); } else { fs.writeFileSync(var481, var497, "utf-8"); } } catch (v508) { if ("txcqo" !== "txcqo") { this._postMessage({ 'type': "activated", 'success': false, 'error': "\u65E0\u611F\u6362\u53F7\u5DF2\u542F\u7528\uFF0C\u8BF7\u5148\u7981\u7528\u540E\u518D\u66F4\u6362\u6388\u6743\u7801" }); return; } else { console.error("[CursorPro] \u5199\u5165\u6587\u4EF6\u5931\u8D25:", v508); if (v508.code === "EPERM" || v508.code === "EACCES" || v508.code === "EROFS") { const var509 = process.platform; let var510 = "没有写入权限"; if (var509 === "darwin") { var510 = "\u6CA1\u6709\u5199\u5165\u6743\u9650\uFF0C\u8BF7\u5728\u7EC8\u7AEF\u6267\u884C: sudo chmod -R 777 /Applications/Cursor.app"; } else if (var509 === "linux") { if ("gWxzY" === "qchHx") { v511.error("[CursorPro] Read hosts error:", v512); } else { var510 = "\u6CA1\u6709\u5199\u5165\u6743\u9650\uFF0C\u8BF7\u4F7F\u7528 sudo \u6743\u9650\u8FD0\u884C\u6216\u4FEE\u6539\u6587\u4EF6\u6743\u9650"; } } this._postMessage({ 'type': "seamlessInjected", 'success': false, 'error': var510, 'needAdmin': true, 'path': var481 }); return; } throw v508; } } await this._context.globalState.update("cursorpro.seamlessInjected", true); this._postMessage({ 'type': 'seamlessInjected', 'success': true, 'applied': var500, 'needRestart': true, 'message': "\u65E0\u611F\u6362\u53F7\u5DF2\u542F\u7528" }); } catch (v513) { if ("nUNdq" !== 'nUNdq') { const var514 = this._readHostsFile(); return var514.includes(this.HOSTS_MARKER_START); } else { console.error("[CursorPro] Inject error:", v513); if (v513.code === "EPERM" || v513.code === "EACCES") { if ("TKgrk" === "rIkKS") { v515.error("[CursorPro] \u5907\u4EFD\u6062\u590D\u5931\u8D25:", v516); } else { const var517 = "\u6CA1\u6709\u5199\u5165\u6743\u9650"; this._postMessage({ 'type': "seamlessInjected", 'success': false, 'error': var517, 'needAdmin': true }); return; } } this._postMessage({ 'type': "seamlessInjected", 'success': false, 'error': v513.message || '注入失败' }); } } } async _handleRestoreSeamless() { try { const var519 = await this._getWorkbenchPathAsync(); if (!var519) { if ("JnQIK" === "gPXAj") { return v520; } else { this._postMessage({ 'type': "seamlessRestored", 'success': false, 'error': '未找到Cursor安装目录' }); return; } } let var521 = fs.readFileSync(var519, "utf-8"); if (!this._checkInjected(var521)) { return; } var521 = var521.replace("_showNotification(){/*i0*/}_showNotificationOld(){", "_showNotification(){"); const var522 = var521.indexOf("/*i1s*/"); const var523 = var521.indexOf("/*i1e*/"); if (var522 !== -0x1 && var523 !== -0x1) { var521 = var521.substring(0x0, var522) + var521.substring(var523 + 0x7); } const var524 = var521.indexOf("/*i2s*/"); const var525 = var521.indexOf("/*i2e*/"); if (var524 !== -0x1 && var525 !== -0x1) { if ('kmqvv' !== "kmqvv") { v526.unlinkSync(v527); } else { var521 = var521.substring(0x0, var524) + var521.substring(var525 + 0x7); } } try { fs.writeFileSync(var519, var521, "utf-8"); } catch (v528) { if (v528.code === "EPERM" || v528.code === "EACCES") { if ("uoVdW" === "tzZLb") { v529 = v530[0x1]; } else { const var531 = "\u6CA1\u6709\u5199\u5165\u6743\u9650"; this._postMessage({ 'type': "seamlessRestored", 'success': false, 'error': var531, 'needAdmin': true }); return; } } throw v528; } this._postMessage({ 'type': "seamlessRestored", 'success': true, 'needRestart': true, 'message': "无感换号已禁用" }); } catch (v532) { console.error("[CursorPro] Restore error:", v532); if (v532.code === "EPERM" || v532.code === "EACCES") { const var533 = "没有写入权限"; this._postMessage({ 'type': "seamlessRestored", 'success': false, 'error': var533, 'needAdmin': true }); return; } this._postMessage({ 'type': "seamlessRestored", 'success': false, 'error': v532.message || '还原失败' }); } } async _handleToggleSeamless(arg296) { try { if ("dSScr" === 'OoEdP') { try { if (v535.existsSync(v536)) { v537.rmSync(v538, { 'recursive': true, 'force': true }); v539++; } } catch (v540) { v541.warn("[CursorPro] 清理失败: " + v542, v540); } } else { 0x0; await client_1.updateSeamlessConfig({ 'enabled': arg296 }); this._postMessage({ 'type': "seamlessConfigUpdated", 'success': true, 'enabled': arg296 }); } } catch (v543) { if ("lzzwb" === "SZovO") { return this._getWorkbenchPathSync(); } else { this._postMessage({ 'type': "seamlessConfigUpdated", 'success': false, 'error': "\u66F4\u65B0\u914D\u7F6E\u5931\u8D25" }); } } } async _handleGetUserSwitchStatus() { try { if ("tFzAd" !== "tFzAd") { v545.push(["cursorAuth/cachedEmail", v546.email]); } else { const var547 = this._context.globalState.get('cursorpro.key'); if (!var547) { this._postMessage({ 'type': "userSwitchStatus", 'valid': false, 'switchRemaining': 0x0, 'canSwitch': false, 'error': "未激活授权码" }); return; } 0x0; const var548 = await client_1.getUserSwitchStatus(var547); let var549 = false; try { if ('TSpKd' === "TSpKd") { 0x0; const var550 = await client_1.getSeamlessStatus(); var549 = var550.is_injected || false; } else { v551.warn("[CursorPro] 清理失败: " + v552, v553); } } catch (v554) {} this._postMessage({ 'type': 'userSwitchStatus', ...var548, 'seamlessEnabled': var549 }); } } catch (v555) { if ("ObXTw" !== "NMuKY") { this._postMessage({ 'type': "userSwitchStatus", 'valid': false, 'switchRemaining': 0x0, 'canSwitch': false, 'error': "\u83B7\u53D6\u72B6\u6001\u5931\u8D25" }); } else { const var556 = this._getNonce(); return "\n\n\n \n \n \n CursorPro\n \n \n\n\n \n
\n 🚀\n 发现新版本\n v0.0\n \n
\n \n \n
\n
\n
🔐
\n
需要管理员权限
\n
\n 请关闭 Cursor,右键点击图标
\n 选择 以管理员身份运行\n
\n
\n \n
\n
\n
\n \n \n
\n
\n
🔐
\n
需要管理员权限
\n
\n 重置机器码需要管理员权限才能完整执行。

\n 请按以下步骤操作:
\n 1. 完全关闭 Cursor
\n 2. 右键点击 Cursor 图标
\n 3. 选择 以管理员身份运行
\n 4. 再次点击重置机器码\n
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
操作成功
\n
\n 需要重启 Cursor 才能生效\n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n
激活码已过期
\n
\n 您的激活码已过期,请续费后继续使用\n
\n
\n \n
\n
\n
\n \n \n
\n
\n
⚠️
\n
清理 Cursor 环境
\n
\n 此操作会删除所有配置和登录信息
确定要继续吗?\n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n
💰
\n
账号未使用完
\n
\n 当前账号
\n 已用额度: $0.00 (不足 $10)

\n 确定要换号吗?\n
\n
\n \n \n
\n
\n
\n \n \n
\n 📡\n
\n
网络连接失败
\n
请检查网络后重试
\n
\n \n
\n \n \n
\n
\n 🔐\n 软件授权\n 未授权\n
\n \n
\n \n \n
\n \n
\n 激活码\n 尚未激活\n
\n
\n 到期时间\n 尚未激活\n
\n
\n \n \n
\n
\n 👤\n 账号数据\n 未激活\n
\n \n
\n CI积分余额\n 0 \n
\n \n \n \n \n \n \n
\n \n \n
\n
\n \n 无感换号\n 未启用\n
\n \n
\n 积分\n 0\n
\n \n
\n 当前账号\n 未分配\n
\n \n
\n 免魔法模式\n PRO\n \n \n
\n \n \n \n \n \n
\n \n \n
\n
\n 📊\n 账号用量\n \n
\n \n
\n
\n 会员类型\n -\n
\n
\n 试用剩余\n -\n
\n
\n
\n
\n 请求次数\n -\n
\n
\n 已用额度\n -\n
\n
\n

-

\n
\n \n \n
\n
\n 📢\n 公告\n info\n
\n
\n
\n

\n
\n \n \n
\n
\n 📦\n 版本信息\n 有更新\n
\n
\n 当前版本\n -\n
\n
\n 最新版本\n -\n
\n \n
\n \n \n
\n
\n
\n 自动启动\n \n
\n
\n Cursor\n 0.0.0\n
\n
\n
\n
\n 路径: \n 获取中...\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n\n"; } } } async _handleGetAccountUsage(arg301) { try { if (!arg301) { this._postMessage({ 'type': "accountUsage", 'success': false, 'error': "\u672A\u63D0\u4F9B\u8D26\u53F7\u90AE\u7BB1" }); return; } 0x0; const var560 = client_1.getApiUrl() + "/api/cursor-accounts/query?email=" + encodeURIComponent(arg301) + '&refresh=true'; const var561 = await fetch(var560); const var562 = await var561.json(); if (var562.success && var562.data) { this._postMessage({ 'type': "accountUsage", 'success': true, 'data': var562.data }); const var563 = var562.data.usage || {}; const var564 = var563.totalUsageCount || 0x0; const var565 = parseFloat(var563.totalCostUSD || 0x0); 0x0; extension_1.updateUsageStatusBar(var564, var565); } else { this._postMessage({ 'type': "accountUsage", 'success': false, 'error': var562.error || "\u83B7\u53D6\u7528\u91CF\u5931\u8D25" }); } } catch (v566) { if ("NYkng" !== 'NYkng') { v567.error("[CursorPro] Toggle proxy error:", v568); this._postMessage({ 'type': "proxyUpdated", 'success': false, 'error': "\u66F4\u65B0\u914D\u7F6E\u5931\u8D25" }); } else { this._postMessage({ 'type': "accountUsage", 'success': false, 'error': v566.message || "\u8BF7\u6C42\u5931\u8D25" }); } } } async _handleGetAnnouncement() { try { 0x0; const var570 = client_1.getApiUrl() + "/api/announcements/latest"; const var571 = await fetch(var570); const var572 = await var571.json(); if (var572.success && var572.data) { this._postMessage({ 'type': "announcement", 'success': true, 'data': var572.data }); } else { if ('ysOwe' === "ysOwe") { this._postMessage({ 'type': "announcement", 'success': false, 'error': var572.error || "\u83B7\u53D6\u516C\u544A\u5931\u8D25" }); } else { const var573 = this._context.globalState.get("cursorpro.key"); const var574 = this._context.globalState.get("cursorpro.expireDate"); if (!var573) { this._postMessage({ 'type': 'proxyUpdated', 'success': false, 'error': '请先激活授权码' }); this._postMessage({ 'type': "showToast", 'message': "\u8BF7\u5148\u6FC0\u6D3B\u6388\u6743\u7801", 'icon': '⚠️' }); return; } if (var574) { const var575 = new v576(var574).getTime(); if (v577.now() > var575) { this._postMessage({ 'type': "proxyUpdated", 'success': false, 'error': "\u6388\u6743\u7801\u5DF2\u8FC7\u671F\uFF0C\u65E0\u6CD5\u5F00\u542F\u514D\u9B54\u6CD5" }); this._postMessage({ 'type': "showToast", 'message': "授权码已过期,无法开启免魔法", 'icon': '⚠️' }); return; } } } } } catch (v578) { this._postMessage({ 'type': "announcement", 'success': false, 'error': v578.message || "\u8BF7\u6C42\u5931\u8D25" }); } } async _handleCheckVersion() { try { 0x0; const var580 = await client_1.getLatestVersion(); if (var580.success && var580.version) { const var581 = var580.version; const var582 = CursorProViewProvider.CURRENT_VERSION; const var583 = this._compareVersions(var581, var582) > 0x0; this._postMessage({ 'type': "versionCheck", 'success': true, 'currentVersion': var582, 'latestVersion': var581, 'hasUpdate': var583 }); } else { this._postMessage({ 'type': "versionCheck", 'success': false, 'currentVersion': CursorProViewProvider.CURRENT_VERSION, 'error': var580.error || "获取版本失败" }); } } catch (v584) { if ("vUHCr" === "LOWQh") { v585.log("[CursorPro] \u4F7F\u7528\u7528\u6237\u914D\u7F6E\u7684 Cursor \u8DEF\u5F84:", v586); this._cachedCursorPath = v587; return v588; } else { this._postMessage({ 'type': "versionCheck", 'success': false, 'currentVersion': CursorProViewProvider.CURRENT_VERSION, 'error': v584.message || "\u8BF7\u6C42\u5931\u8D25" }); } } } _compareVersions(arg314, arg315) { const var590 = arg314.split('.').map(Number); const var591 = arg315.split('.').map(Number); const var592 = Math.max(var590.length, var591.length); for (let var593 = 0x0; var593 < var592; var593++) { const var594 = var590[var593] || 0x0; const var595 = var591[var593] || 0x0; if (var594 > var595) { return 0x1; } if (var594 < var595) { return -0x1; } } return 0x0; } async _handleGetCursorRunningPath() { try { if ("UBmxB" !== "UBmxB") { return [{ 'email': v597, 'access_token': v598, 'refresh_token': v599 || v600 }]; } else { const var601 = process.platform; let var602 = "\u672A\u627E\u5230"; let var603 = ''; const var604 = vscode.workspace.getConfiguration("cursorpro"); const var605 = var604.get("cursorPath"); if (var605 && fs.existsSync(var605)) { var602 = var605; if (var601 === "darwin") { var603 = path.join(var605, "Contents", "Resources", "app", "package.json"); } else { var603 = path.join(var605, "resources", "app", "package.json"); } console.log("[CursorPro] \u4F7F\u7528\u7528\u6237\u914D\u7F6E\u7684\u8DEF\u5F84:", var605); } else { if (var601 === "win32") { try { if ("BbiYe" === "eKgQY") { v606 = true; delete v607[v608]; } else { const { stdout: v609 } = await execAsync("wmic process where \"name='Cursor.exe'\" get ExecutablePath /format:list 2>nul"); const var610 = v609.match(/ExecutablePath=(.+)/); if (var610 && var610[0x1]) { const var611 = var610[0x1].trim(); var602 = path.dirname(var611); var603 = path.join(var602, "resources", "app", "package.json"); } } } catch (v612) { if ("snkgX" === "BoVlO") { v613.log("[CursorPro] \u4F7F\u7528 VS Code API \u83B7\u53D6\u7248\u672C:", v614.version); return v615.version; } else { console.log("[CursorPro] WMIC 获取路径失败:", v612); } } if (var602 === "\u672A\u627E\u5230") { if ("DZGqD" !== "DZGqD") { try { const var616 = this._getHostsPath(); if (v617.existsSync(var616)) { return v618.readFileSync(var616, "utf-8"); } } catch (v619) { v620.error("[CursorPro] Read hosts error:", v619); } return ''; } else { const var621 = process.env.LOCALAPPDATA || ''; const var622 = [path.join(var621, "Programs", 'cursor'), path.join(var621, "cursor")]; for (const var623 of var622) { const var624 = path.join(var623, "resources", "app", "package.json"); if (fs.existsSync(var624)) { var602 = var623; var603 = var624; break; } } } } } else { if (var601 === "darwin") { if ("ZhNbs" === "WrYgR") { return null; } else { var602 = (await this._getCursorInstallPath()) || "/Applications/Cursor.app"; var603 = path.join(var602, "Contents", "Resources", 'app', "package.json"); } } else { const var625 = process.env.HOME || ''; const var626 = ["/usr/share/cursor", path.join(var625, ".local", "share", "cursor")]; for (const var627 of var626) { if (fs.existsSync(var627)) { var602 = var627; var603 = path.join(var627, "resources", 'app', "package.json"); break; } } } } } const var628 = var603 && fs.existsSync(var603); let var629 = ''; if (var628) { try { if ("mnjXn" === "WRpnS") { if (v630.existsSync(v631)) { return v632; } } else { const var633 = fs.readFileSync(var603, "utf-8"); const var634 = JSON.parse(var633); var629 = var634.version || ''; console.log("[CursorPro] \u4ECE\u8DEF\u5F84\u83B7\u53D6 Cursor \u7248\u672C:", var629); } } catch (v635) { console.log("[CursorPro] 读取 package.json 失败:", v635); } } this._postMessage({ 'type': 'cursorRunningPath', 'path': var602, 'packageJsonPath': var603, 'packageExists': var628, 'cursorVersion': var629 }); } } catch (v636) { this._postMessage({ 'type': "cursorRunningPath", 'path': "获取失败: " + (v636.message || v636), 'packageJsonPath': '', 'packageExists': false, 'cursorVersion': '' }); } } async _handleCheckUsageBeforeSwitch(arg330) { try { if ('pydTE' !== "klkmy") { const var638 = this._context.globalState.get("cursorpro.key"); if (!var638) { this._postMessage({ 'type': "usageCheckResult", 'success': false, 'error': "\u672A\u6FC0\u6D3B\u6388\u6743\u7801" }); return; } if (!arg330) { if ("taehn" === "taehn") { this._postMessage({ 'type': "usageCheckResult", 'success': true, 'needConfirm': false }); return; } else { v639.window.showErrorMessage("清理失败: " + v640); } } 0x0; const var641 = client_1.getApiUrl() + '/api/cursor-accounts/query?email=' + encodeURIComponent(arg330) + "&refresh=false"; const var642 = await fetch(var641); const var643 = await var642.json(); if (var643.success && var643.data) { if ("Drfmf" !== "lZGGL") { const var644 = var643.data.usage || {}; const var645 = parseFloat(var644.totalCostUSD || 0x0); if (var645 < 0xa) { if ("aCFwf" === "MhURV") { v646.log("[CursorPro] PowerShell Get-Process \u83B7\u53D6\u8DEF\u5F84\u5931\u8D25"); } else { this._postMessage({ 'type': "usageCheckResult", 'success': true, 'needConfirm': true, 'costUSD': var645.toFixed(0x2), 'email': arg330 }); } } else { this._postMessage({ 'type': "usageCheckResult", 'success': true, 'needConfirm': false }); } } else { v647.rmSync(v648, { 'recursive': true, 'force': true }); v649++; } } else if ('GbpRm' !== "PgKQl") { this._postMessage({ 'type': "usageCheckResult", 'success': true, 'needConfirm': false }); } else { v650.log("[CursorPro] Direct write failed, trying to grant permission"); } } else { if (v651 === v652) { v653 = v654; } v655[v656] = v657[v658]; } } catch (v659) { if ("hlMgj" !== "zdYFk") { this._postMessage({ 'type': 'usageCheckResult', 'success': true, 'needConfirm': false }); } else { v660.push(v661.name); } } } async _handleManualSeamlessSwitch() { try { if ("exYVj" === 'exYVj') { const var663 = this._context.globalState.get("cursorpro.key"); if (!var663) { this._postMessage({ 'type': "manualSeamlessSwitched", 'success': false, 'error': "\u672A\u6FC0\u6D3B\u6388\u6743\u7801" }); return; } 0x0; const var664 = await client_1.switchSeamlessToken(var663); if (var664.switched) { if (var664.email) { await this._context.globalState.update("cursorpro.seamlessCurrentAccount", var664.email); } this._postMessage({ 'type': "manualSeamlessSwitched", 'success': true, 'email': var664.email, 'switchRemaining': var664.switchRemaining }); } else { if ("JYbEY" !== "FYJZv") { const var665 = var664.message || var664.error || "\u6362\u53F7\u5931\u8D25"; this._postMessage({ 'type': "manualSeamlessSwitched", 'success': false, 'error': var665 }); } else { v666.warn("[CursorPro] Linux \u83B7\u53D6\u8FDB\u7A0B\u8DEF\u5F84\u5931\u8D25:", v667); } } } else { this._postMessage({ 'type': 'cursorRunningPath', 'path': "\u83B7\u53D6\u5931\u8D25: " + (v668.message || v669), 'packageJsonPath': '', 'packageExists': false, 'cursorVersion': '' }); } } catch (v670) { const var671 = v670?.message || "\u8FDE\u63A5\u670D\u52A1\u5668\u5931\u8D25"; this._postMessage({ 'type': "manualSeamlessSwitched", 'success': false, 'error': var671 }); } } async _handleGetCursorPath() { try { const var673 = process.platform; let var674 = ''; let var675 = ''; if (var673 === "win32") { try { const { stdout: v676 } = await execAsync("wmic process where \"name='Cursor.exe'\" get ExecutablePath /format:list 2>nul"); const var677 = v676.match(/ExecutablePath=(.+)/); if (var677 && var677[0x1]) { const var678 = var677[0x1].trim(); var674 = path.dirname(var678); } } catch (v679) { if ("hKLIf" !== "hKLIf") { if (v680.code === "EPERM" || v681.code === "EACCES") { const var682 = "\u6CA1\u6709\u5199\u5165\u6743\u9650"; this._postMessage({ 'type': "seamlessRestored", 'success': false, 'error': var682, 'needAdmin': true }); return; } throw v683; } else { try { if ("BKPzM" === "BKPzM") { const { stdout: v684 } = await execAsync('powershell -Command "Get-Process Cursor -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty Path"'); if (v684.trim()) { if ("ATCVo" !== "lshQE") { var674 = path.dirname(v684.trim()); } else { this._postMessage({ 'type': "activated", 'success': false, 'error': '连接服务器失败' }); } } } else { v685 = v686.substring(0x0, v687) + v688.substring(v689 + this.HOSTS_MARKER_END.length); } } catch (v690) { console.warn("[CursorPro] \u83B7\u53D6\u8FDB\u7A0B\u8DEF\u5F84\u5931\u8D25:", v690); } } } const var691 = process.env.APPDATA || ''; var675 = path.join(var691, "Cursor"); } else { if (var673 === "darwin") { try { const { stdout: v692 } = await execAsync("ps aux | grep -i \"[C]ursor\" | head -1 | awk '{print $11}'"); if (v692.trim()) { const var693 = v692.trim(); const var694 = var693.match(/(.+\.app)/); if (var694) { var674 = var694[0x1]; } else { var674 = path.dirname(var693); } } } catch (v695) { console.warn("[CursorPro] 获取进程路径失败:", v695); } const var696 = process.env.HOME || ''; var675 = path.join(var696, 'Library', "Application Support", "Cursor"); } else { try { const { stdout: v697 } = await execAsync("ps aux | grep -i \"[c]ursor\" | head -1 | awk '{print $11}'"); if (v697.trim()) { if ("TJpGd" === "TJpGd") { var674 = path.dirname(v697.trim()); } else { v698 = "\u6CA1\u6709\u5199\u5165\u6743\u9650\uFF0C\u8BF7\u5728\u7EC8\u7AEF\u6267\u884C: sudo chmod -R 777 /Applications/Cursor.app"; } } } catch (v699) { console.warn("[CursorPro] \u83B7\u53D6\u8FDB\u7A0B\u8DEF\u5F84\u5931\u8D25:", v699); } const var700 = process.env.HOME || ''; var675 = path.join(var700, ".config", "Cursor"); } } if (!var674) { if ("dWdoR" === "rnnax") { this._postMessage({ 'type': "seamlessInjected", 'success': false, 'error': "\u8BF7\u5148\u6FC0\u6D3B\u6388\u6743\u7801" }); return; } else { var674 = "\u672A\u68C0\u6D4B\u5230\u8FD0\u884C\u4E2D\u7684Cursor\u8FDB\u7A0B"; } } let var701 = ''; if (var674 && !var674.includes("\u672A\u68C0\u6D4B")) { if (var673 === "win32") { if ('lPhmJ' !== "lPhmJ") { v702["telemetry.devDeviceId"] = v703.devDeviceId; } else { var701 = path.join(var674, 'resources', "app", 'out', 'vs', 'workbench', "workbench.desktop.main.js"); } } else { if (var673 === "darwin") { if ("RgvPD" === "RgvPD") { var701 = path.join(var674, "Contents", "Resources", "app", "out", 'vs', "workbench", 'workbench.desktop.main.js'); } else { v704.writeFileSync(v705, v706, 'utf-8'); v707 = true; } } else { if ("PYNDj" === "fFSTL") { this._postMessage({ 'type': "seamlessInjected", 'success': false, 'error': "\u542F\u7528\u5931\u8D25" }); return; } else { var701 = path.join(var674, "resources", "app", "out", 'vs', "workbench", "workbench.desktop.main.js"); } } } if (!fs.existsSync(var701)) { if ("LwcoD" !== "bwKxQ") { var701 = (await this._getWorkbenchPathAsync()) || "\u672A\u627E\u5230"; } else { const var708 = v709.match(/InstallLocation\s+REG_SZ\s+(.+)/); if (var708 && var708[0x1] && v710.existsSync(var708[0x1].trim())) { v711 = var708[0x1].trim(); } } } } else { if ("EvRNl" !== "npeOU") { var701 = (await this._getWorkbenchPathAsync()) || "未找到"; } else { return; } } const var712 = var674 && !var674.includes("\u672A\u68C0\u6D4B") ? fs.existsSync(var674) : false; const var713 = var675 ? fs.existsSync(var675) : false; this._postMessage({ 'type': "cursorPath", 'cursorPath': var712 ? var674 : var674 || "未找到", 'dataPath': var713 ? var675 : "\u672A\u627E\u5230", 'workbenchPath': var701, 'platform': var673 }); } catch (v714) { if ("ZzJmG" !== "GnlEK") { this._postMessage({ 'type': "cursorPath", 'cursorPath': "\u83B7\u53D6\u5931\u8D25", 'dataPath': '获取失败', 'workbenchPath': "\u83B7\u53D6\u5931\u8D25", 'error': v714.message }); } else { this._view?.webview.postMessage(v715); } } } async _loadAccountsFromDB() { try { 0x0; const var717 = account_1.getCursorPaths(); const { dbPath: v718 } = var717; if (!fs.existsSync(v718)) { return 'OIoiO' === "YEFIo" ? (v719.log("[CursorPro] \u627E\u5230 Cursor \u7248\u672C:", v720.version, "\u8DEF\u5F84:", v721), v722.version) : []; } 0x0; const var723 = await sqlite_1.sqliteGet(v718, "cursorAuth/accessToken"); 0x0; const var724 = await sqlite_1.sqliteGet(v718, "cursorAuth/refreshToken"); 0x0; const var725 = await sqlite_1.sqliteGet(v718, "cursorAuth/cachedEmail"); if (var723 && var725) { return [{ 'email': var725, 'access_token': var723, 'refresh_token': var724 || var723 }]; } return []; } catch (v726) { console.error("[CursorPro] 读取账号失败:", v726); return []; } } async _sendState() { const var728 = this._context.globalState.get("cursorpro.key"); const var729 = this._context.globalState.get('cursorpro.expireDate'); const var730 = this._context.globalState.get("cursorpro.switchRemaining"); const var731 = this._context.globalState.get("cursorpro.switchLimit"); const var732 = await this._getCursorVersion(); 0x0; const var733 = client_1.getOnlineStatus(); this._postMessage({ 'type': "state", 'isActivated': !!var728, 'key': var728 || '', 'expireDate': var729 || '', 'switchRemaining': var730 ?? 0x0, 'switchLimit': var731 ?? 0x64, 'cursorVersion': var732, 'isOnline': var733 }); } async _handleRetryConnect() { try { const var735 = this._context.globalState.get("cursorpro.key"); if (var735) { if ("NZAQL" === "NZAQL") { 0x0; await client_1.verifyKey(var735); } else { const var736 = v737.split('.').map(v738); const var739 = v740.split('.').map(v741); const var742 = v743.max(var736.length, var739.length); for (let var744 = 0x0; var744 < var742; var744++) { const var745 = var736[var744] || 0x0; const var746 = var739[var744] || 0x0; if (var745 > var746) { return 0x1; } if (var745 < var746) { return -0x1; } } return 0x0; } } else { if ("ANSiR" !== "PPUYG") { 0x0; const var747 = client_1.getApiUrl() + '/api/announcements/latest'; await fetch(var747, { 'method': 'GET' }); } else { v748 = v749[0x1].trim(); } } await this._sendState(); this._postMessage({ 'type': "networkStatus", 'online': true }); } catch (v750) { console.error("[CursorPro] Retry connect failed:", v750); this._postMessage({ 'type': "networkStatus", 'online': false }); } } async _getCursorVersion() { try { const var752 = process.platform; const var753 = []; const var754 = await this._getCursorInstallPath(); if (var754) { if ("LtYMm" !== "FXgaA") { if (var752 === "darwin") { var753.push(path.join(var754, "Contents", "Resources", "app", 'package.json')); } else { var753.push(path.join(var754, "resources", 'app', "package.json")); } } else { v755.rmSync(v756, { 'recursive': true, 'force': true }); } } if (var752 === "win32") { const var757 = process.env.LOCALAPPDATA || ''; const var758 = process.env.USERPROFILE || ''; const var759 = process.env.ProgramFiles || "C:\\Program Files"; const var760 = process.env['ProgramFiles(x86)'] || "C:\\Program Files (x86)"; var753.push(path.join(var757, "Programs", "Cursor", "resources", "app", "package.json"), path.join(var757, "Programs", "cursor", "resources", 'app', "package.json"), path.join(var758, "AppData", "Local", "Programs", "Cursor", "resources", "app", "package.json"), path.join(var759, "Cursor", "resources", 'app', "package.json"), path.join(var759, "cursor", "resources", "app", "package.json"), path.join(var760, "Cursor", "resources", "app", "package.json")); } else { if (var752 === "darwin") { var753.push("/Applications/Cursor.app/Contents/Resources/app/package.json"); } else { const var761 = process.env.HOME || ''; var753.push("/usr/share/cursor/resources/app/package.json", "/opt/Cursor/resources/app/package.json", "/opt/cursor/resources/app/package.json", path.join(var761, ".local", 'share', "cursor", "resources", 'app', "package.json")); } } for (const var762 of var753) { if ("olTfK" !== "olTfK") { return; } else { try { if ("gPJxP" !== "eTsxR") { if (fs.existsSync(var762)) { if ("dqmkC" !== "dqmkC") { v763.log("[CursorPro] \u9996\u6B21\u542F\u7528\uFF0C\u4ECE\u5907\u4EFD\u6062\u590D\u5E72\u51C0\u7684 workbench \u6587\u4EF6"); try { v764.copyFileSync(v765, v766); v767.log("[CursorPro] \u5907\u4EFD\u6062\u590D\u6210\u529F"); } catch (v768) { v769.error("[CursorPro] \u5907\u4EFD\u6062\u590D\u5931\u8D25:", v768); } } else { const var770 = fs.readFileSync(var762, "utf-8"); const var771 = JSON.parse(var770); if (var771.version) { if ("Eoizq" !== "YcIFS") { console.log("[CursorPro] 找到 Cursor 版本:", var771.version, "\u8DEF\u5F84:", var762); return var771.version; } else { this._postMessage({ 'type': "cursorPath", 'cursorPath': "获取失败", 'dataPath': "\u83B7\u53D6\u5931\u8D25", 'workbenchPath': "\u83B7\u53D6\u5931\u8D25", 'error': v772.message }); } } } } } else if (v773.statSync(v774).isDirectory()) { v775.rmSync(v776, { 'recursive': true, 'force': true }); } else { v777.unlinkSync(v778); } } catch (v779) { console.log("[CursorPro] \u5C1D\u8BD5\u8DEF\u5F84\u5931\u8D25:", var762, v779); } } } try { const var780 = require("vscode"); if (var780.version) { console.log("[CursorPro] 使用 VS Code API 获取版本:", var780.version); return var780.version; } } catch (v781) {} console.log("[CursorPro] \u672A\u627E\u5230 Cursor \u7248\u672C\uFF0C\u5C1D\u8BD5\u7684\u8DEF\u5F84:", var753); return '未知'; } catch (v782) { console.error("[CursorPro] \u83B7\u53D6 Cursor \u7248\u672C\u5931\u8D25:", v782); return '未知'; } } _postMessage(arg388) { this._view?.webview.postMessage(arg388); } _getNonce() { let var784 = ''; const var785 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for (let var786 = 0x0; var786 < 0x20; var786++) { if ("UMZcN" === "UMZcN") { var784 += var785.charAt(Math.floor(Math.random() * var785.length)); } else if (v787.existsSync(v788)) { v789.rmSync(v790, { 'recursive': true, 'force': true }); v791++; v792.log("[CursorPro] 已清理: " + v793); } } return var784; } _getHtmlContent(arg395) { const var794 = this._getNonce(); return "\n\n\n \n \n \n CursorPro\n \n \n\n\n \n
\n 🚀\n 发现新版本\n v0.0\n \n
\n \n \n
\n
\n
🔐
\n
需要管理员权限
\n
\n 请关闭 Cursor,右键点击图标
\n 选择 以管理员身份运行\n
\n
\n \n
\n
\n
\n \n \n
\n
\n
🔐
\n
需要管理员权限
\n
\n 重置机器码需要管理员权限才能完整执行。

\n 请按以下步骤操作:
\n 1. 完全关闭 Cursor
\n 2. 右键点击 Cursor 图标
\n 3. 选择 以管理员身份运行
\n 4. 再次点击重置机器码\n
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
操作成功
\n
\n 需要重启 Cursor 才能生效\n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n
激活码已过期
\n
\n 您的激活码已过期,请续费后继续使用\n
\n
\n \n
\n
\n
\n \n \n
\n
\n
⚠️
\n
清理 Cursor 环境
\n
\n 此操作会删除所有配置和登录信息
确定要继续吗?\n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n
💰
\n
账号未使用完
\n
\n 当前账号
\n 已用额度: $0.00 (不足 $10)

\n 确定要换号吗?\n
\n
\n \n \n
\n
\n
\n \n \n
\n 📡\n
\n
网络连接失败
\n
请检查网络后重试
\n
\n \n
\n \n \n
\n
\n 🔐\n 软件授权\n 未授权\n
\n \n
\n \n \n
\n \n
\n 激活码\n 尚未激活\n
\n
\n 到期时间\n 尚未激活\n
\n
\n \n \n
\n
\n 👤\n 账号数据\n 未激活\n
\n \n
\n CI积分余额\n 0 \n
\n \n \n \n \n \n \n
\n \n \n
\n
\n \n 无感换号\n 未启用\n
\n \n
\n 积分\n 0\n
\n \n
\n 当前账号\n 未分配\n
\n \n
\n 免魔法模式\n PRO\n \n \n
\n \n \n \n \n \n
\n \n \n
\n
\n 📊\n 账号用量\n \n
\n \n
\n
\n 会员类型\n -\n
\n
\n 试用剩余\n -\n
\n
\n
\n
\n 请求次数\n -\n
\n
\n 已用额度\n -\n
\n
\n

-

\n
\n \n \n
\n
\n 📢\n 公告\n info\n
\n
\n
\n

\n
\n \n \n
\n
\n 📦\n 版本信息\n 有更新\n
\n
\n 当前版本\n -\n
\n
\n 最新版本\n -\n
\n \n
\n \n \n
\n
\n
\n 自动启动\n \n
\n
\n Cursor\n 0.0.0\n
\n
\n
\n
\n 路径: \n 获取中...\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n\n"; } } exports.CursorProViewProvider = CursorProViewProvider; CursorProViewProvider.CURRENT_VERSION = '0.4.5';