|
| 1 | +# Copilot Chat Modifier |
| 2 | + |
| 3 | +这是一个 Node.js 脚本,用于查找并修改 VS Code (和 VS Code Insiders) 中的 GitHub Copilot Chat 扩展文件 (`extension.js`)。它使用 AST (抽象语法树) 解析来安全地移除与 `x-onbehalf-extension-id` 相关的代码段,这可能用于某些自定义或绕过特定限制的场景。 |
| 4 | + |
| 5 | +**注意:** 修改扩展文件可能违反服务条款,并可能导致扩展行为异常或无法更新。请自行承担风险。 |
| 6 | + |
| 7 | +## 功能 |
| 8 | + |
| 9 | +* 自动在 Windows, macOS, Linux 的标准 VS Code / VS Code Insiders 扩展目录下查找 `github.copilot-chat-*/dist/extension.js` 文件。 |
| 10 | +* 使用 `@babel/parser`, `@babel/traverse`, `@babel/generator` 安全地修改 AST,移除以下模式: |
| 11 | + * `headers["x-onbehalf-extension-id"] = ...;` 形式的赋值语句。 |
| 12 | + * 对象属性 `"x-onbehalf-extension-id": ...` (包括各种写法的 key 和 value)。 |
| 13 | +* 在修改前自动创建备份文件 (`.bak.<pid>`)。 |
| 14 | +* 如果修改过程中发生错误,尝试从备份恢复原始文件。 |
| 15 | +* 如果修改成功,自动删除备份文件。 |
| 16 | + |
| 17 | +## 安装 |
| 18 | + |
| 19 | +1. 确保你已安装 [Node.js](https://nodejs.org/) (建议使用 LTS 版本)。 |
| 20 | +2. 克隆或下载此仓库。 |
| 21 | +3. 在项目根目录下打开终端,运行以下命令安装依赖: |
| 22 | + |
| 23 | + ```bash |
| 24 | + npm install |
| 25 | + ``` |
| 26 | + |
| 27 | +## 使用 |
| 28 | + |
| 29 | +### 自动查找并修改 |
| 30 | + |
| 31 | +直接运行脚本,它会自动查找并处理所有找到的 Copilot Chat `extension.js` 文件: |
| 32 | + |
| 33 | +```bash |
| 34 | +node src/run_modifier.js |
| 35 | +``` |
| 36 | + |
| 37 | +脚本会输出它找到的文件以及处理过程。 |
| 38 | + |
| 39 | +### 修改指定文件 |
| 40 | + |
| 41 | +如果你知道 `extension.js` 的确切路径,可以将其作为命令行参数传递给脚本: |
| 42 | + |
| 43 | +```bash |
| 44 | +node src/run_modifier.js /path/to/your/extension.js |
| 45 | +``` |
| 46 | + |
| 47 | +## 测试 |
| 48 | + |
| 49 | +项目包含使用 Jest 编写的测试套件,以验证核心修改逻辑。 |
| 50 | + |
| 51 | +运行测试: |
| 52 | + |
| 53 | +```bash |
| 54 | +npm test |
| 55 | +``` |
| 56 | + |
| 57 | +测试会创建一个临时副本 (`tests/test_extension_for_jest.js`),对其进行修改,然后使用 AST 分析来验证结果。 |
| 58 | + |
| 59 | +## (可选) 打包为可执行文件 |
| 60 | + |
| 61 | +如果你想创建一个不需要 Node.js 环境就能运行的独立可执行文件 (例如 `.exe` for Windows),可以使用 `pkg`。 |
| 62 | + |
| 63 | +**推荐步骤:** |
| 64 | + |
| 65 | +1. **安装 `pkg` :** |
| 66 | + ```bash |
| 67 | + npm install --save-dev pkg |
| 68 | + ``` |
| 69 | +2. **配置 `package.json` :** |
| 70 | + 我们已经在 `package.json` 中添加了 `pkg` 字段来指定打包目标 (Windows, macOS, Linux) 和输出目录 (`dist/`),并添加了 `scripts.build` 作为运行打包命令的快捷方式。这是推荐的做法,因为它使打包过程更简单、可重复。 |
| 71 | +3. **运行打包:** |
| 72 | + ```bash |
| 73 | + npm run build |
| 74 | + ``` |
| 75 | + 这会使用 `package.json` 中的配置,在项目根目录下创建一个 `dist/` 文件夹,其中包含为不同操作系统生成的可执行文件 (例如 `copilot-modifier-utils-win.exe`, `copilot-modifier-utils-macos`, `copilot-modifier-utils-linux`)。 |
| 76 | + |
| 77 | +**替代方法 (不推荐,但可行):** |
| 78 | + |
| 79 | +你可以跳过在 `package.json` 中配置 `pkg` 和 `scripts.build` 字段,直接在命令行调用 `pkg` 并指定所有参数: |
| 80 | + |
| 81 | +```bash |
| 82 | +# 示例:直接调用 pkg,需要手动指定入口、目标和输出路径 |
| 83 | +npx pkg src/run_modifier.js --targets node18-win-x64,node18-macos-x64,node18-linux-x64 --out-path dist/ |
| 84 | +``` |
| 85 | + |
| 86 | +### 使用可执行文件 |
| 87 | + |
| 88 | +将对应你操作系统的可执行文件复制到任意位置。在终端中运行它: |
| 89 | + |
| 90 | +* **自动查找并修改:** |
| 91 | + ```bash |
| 92 | + ./copilot-modifier-utils-linux # Linux/macOS 示例 |
| 93 | + .\copilot-modifier-utils-win.exe # Windows 示例 |
| 94 | + ``` |
| 95 | +* **修改指定文件:** |
| 96 | + ```bash |
| 97 | + ./copilot-modifier-utils-linux /path/to/your/extension.js # Linux/macOS 示例 |
| 98 | + .\copilot-modifier-utils-win.exe C:\path\to\your\extension.js # Windows 示例 |
| 99 | + ``` |
| 100 | + |
| 101 | +## 注意事项 |
| 102 | + |
| 103 | +* 每次 Copilot Chat 扩展更新后,`extension.js` 文件会被覆盖,你需要重新运行此脚本。 |
| 104 | +* 脚本依赖于 `@babel` 工具链来解析和生成 JavaScript。如果 `extension.js` 的代码结构发生重大变化,脚本可能需要更新。 |
| 105 | +* 始终建议在运行脚本前手动备份重要的扩展文件。 |
0 commit comments