反重力(antigravity)、cursor不能使用pylance解决方法

在非官方的 VS Code 环境(如 Antigravity等)中使用 Pylance,我们需要绕过 Pylance 内部针对编辑器名称和签名路径的双重验证逻辑. 客户端文件: dist/extension.bundle.js 作用: Pylance 启动时,第一步会读取 vscode.env.ap...
反重力(antigravity)、cursor不能使用pylance解决方法
重力antigravity)、cursor不能使用pylance解决方法

在非官方的 VS Code 环境(如 Antigravity等)中使用 Pylance,我们需要绕过 Pylance 内部针对编辑器名称和签名路径的双重验证逻辑.

  1. 客户端文件: dist/extension.bundle.js
  • 作用: Pylance 启动时,第一步会读取 vscode.env.appName 以及当前运行路径,判断其是否属于正版的 Visual Studio Code 系列。
  • 修改: 定位由 ! ( ["Visual Studio Code", ...].includes(...) && ...) 构成的判定条件,并直接用 false 替换掉了整个条件表达式,使得“检测为非合法编辑器则报错”这个逻辑永远不会被触发。
  1. 服务端文件: dist/server.bundle.js
  • 作用: 客户端放行后,会向语言服务端(Language Server)发送一长串授权文本(EULA协议内容)作为握手令牌。服务端拿到令牌后,会自己再校验一次。如果它发现不在 VSCode 官方环境里,就会强制比对这段文本并故意报错拒绝连接。
  • 修改: 在服务端文件中搜索 !==JSON.parse(e))throw Error((这是服务端判定握手令牌不符合要求并抛出异常的地方),将其强行修改为了 if(false)throw Error(。这样服务端就永远不会主动断开连接了。
const fs = require('fs');
const path = require('path');
const os = require('os');

// 1. 定义非 VS Code 的扩展目录 ((兼容 Windows/Linux 以及多种衍生版编辑器))
const possibleDirs = [
    path.join(os.homedir(), '.antigravity-ide-server', 'extensions'), // Antigravity 
    path.join(os.homedir(), '.cursor', 'extensions'),                 // Cursor
    path.join(os.homedir(), '.vscode-oss', 'extensions')              // VSCodium
    // 如果有其他编辑器的特定目录,可以继续往这里加
];

// 筛选出电脑上实际存在的非官方扩展目录
const targetDirs = possibleDirs.filter(dir => fs.existsSync(dir));

if (targetDirs.length === 0) {
    console.error("❌ 找不到任何非官方编辑器的扩展目录。");
    process.exit(1);
}

// 遍历每个存在的非官方扩展目录并执行破解
targetDirs.forEach(extDir => {
    console.log(`\n==============================================`);
    console.log(`📂 开始扫描扩展目录: ${extDir}`);
    
    // 找到该目录下所有的 pylance 文件夹 (可能安装了多个版本,全部进行破解)
    const pylanceFolders = fs.readdirSync(extDir)
        .filter(dir => dir.startsWith('ms-python.vscode-pylance-'));

    if (pylanceFolders.length === 0) {
        console.log("⚠️ 该目录下未找到 Pylance 插件,跳过。");
        return;
    }

    pylanceFolders.forEach(pylanceFolder => {
        const distPath = path.join(extDir, pylanceFolder, 'dist');
        const extensionPath = path.join(distPath, 'extension.bundle.js');
        const serverPath = path.join(distPath, 'server.bundle.js');

        console.log(`\n🔍 正在破解 Pylance 版本: ${pylanceFolder}`);

        // 2. 破解 extension.bundle.js (客户端检测)
        if (fs.existsSync(extensionPath)) {
            let content = fs.readFileSync(extensionPath, 'utf8');
            const clientRegex = /!\(\["Visual Studio Code","Visual Studio Code - Insiders","Visual Studio Code - Exploration"\]\.includes\([a-zA-Z0-9_.$]+\)&&\([a-zA-Z0-9_.$]+\([a-zA-Z0-9_.$]+,[^)]+\)\|\|[a-zA-Z0-9_.$]+\([a-zA-Z0-9_.$]+,\[[^\]]+\]\)\)\)\)/g;
            
            if (clientRegex.test(content)) {
                content = content.replace(clientRegex, 'false');
                fs.writeFileSync(extensionPath, content, 'utf8');
                console.log("  ✅ 成功解除 extension.bundle.js 客户端环境限制");
            } else {
                console.log("  ⚠️ extension.bundle.js 未找到匹配代码 (可能已破解)。");
            }
        }

        // 3. 破解 server.bundle.js (服务端检测)
        if (fs.existsSync(serverPath)) {
            let content = fs.readFileSync(serverPath, 'utf8');
            const serverRegex = /if\([^)]+!==JSON\.parse\(e\)\)throw Error\(/g;
            
            if (serverRegex.test(content)) {
                content = content.replace(serverRegex, 'if(false)throw Error(');
                fs.writeFileSync(serverPath, content, 'utf8');
                console.log("  ✅ 成功解除 server.bundle.js 服务端环境限制");
            } else {
                console.log("  ⚠️ server.bundle.js 未找到匹配代码 (可能已破解)。");
            }
        }
    });
});

console.log(`\n==============================================`);
console.log("🎉 所有非 VS Code 编辑器的 Pylance 破解完毕!请重启您的编辑器。");

需要安装Node.js

1 个帖子 - 1 位参与者

阅读完整话题

来源: LinuxDo 最新话题查看原文