github yuaotian/antigravity-proxy v2.5

46 minutes ago

✨ 新功能 (Features)

  • scripts: Windows 在线安装脚本 install-online.ps1(镜像下载 + 校验 + doctor 部署)
    • 一行命令(经 wget.la 获取脚本,PS 5.1 / pwsh 7 通用):
    • [Net.ServicePointManager]::SecurityProtocol=3072; & ([scriptblock]::Create((New-Object Net.WebClient).DownloadString('https://wget.la/https://raw.githubusercontent.com/yuaotian/antigravity-proxy/main/scripts/install-online.ps1')))
    • 检测 Antigravity IDE(Antigravity IDE.exe)/ Antigravity(Antigravity.exe)/ Antigravity CLI(agy.exe):
    • 运行中进程 > PATH(CLI)> 常见安装目录;排除 ~/.gemini/bin(IDE 管理的 agy,由 IDE 的 version.dll 注入);
    • 读 PE 头选择 x64 / x86 包;检测到多个时让用户选择,-Product / -InstallDir / -Yes 可跳过询问
    • 下载:直连 GitHub 与 updates.mirrors 同款镜像依次尝试,成功的源提到最前复用;显式接入 HTTPS_PROXY 等
    • 环境变量代理(PS 5.1 的 WebRequest 不读);镜像返回 200 + 错误页时按 zip 魔数识别并换源
    • 校验不阻断:有 SHA256SUMS.txt 时逐个比对、不一致换源;旧版本无清单(按 API 资产列表判断)只告警
    • 解压到 %LOCALAPPDATA%\antigravity-proxy<版本>\(安装目录之外,作为日后 Repair 的母本),
    • 调用包内 doctor.ps1 -Action Setup 部署(独立进程、保留已有 config.json、IDE 同时安装插件);
    • v2.4 及更早的包不含 doctor.ps1 时从仓库主分支获取
    • 经 scriptblock 在线执行时不调用 exit(避免关闭用户的 PowerShell 窗口);提示三语(界面语言不是中/俄时看区域格式)
    • doctor.ps1: 插件安装成功提示更正为「运行中的 IDE 会自动加载」(实测无需重启)
    • 验证(隔离副本,未触碰真实安装):PS 5.1 模拟一行命令 + pwsh 7 指定版本,下载 v2.4 → 补 doctor.ps1 →
    • 部署 → 哈希一致、config.json 保留、退出码 0、窗口未被关闭;函数级:三产品检测、伪造哈希逐源换源后失败、
    • 正确哈希通过、无效版本号与无效目录拒绝。
  • core: DLL 检测 IDE 配套插件未安装时提示一键安装
    • src/ide/IdeExtensionPrompt: 仅在 Antigravity IDE 主进程(非 --type= 子进程、非 RunAsNode)且 DLL 同目录存在
    • antigravity-proxy.vsix 时启用;后台线程延迟 8 秒,按 --extensions-dir > VSCODE_PORTABLE >
    • %USERPROFILE%<product.json dataFolderName>\extensions 定位扩展目录,读 extensions.json / 目录判断是否已安装
    • 未安装:三语询问框(是/否),每个 DLL 版本只问一次(logs\ide-extension-prompt.marker,按 DLL 身份);
    • 选择安装则调用 bin\antigravity-ide.cmd --install-extension(透传 --extensions-dir/--user-data-dir,
    • 无窗口、清理 ELECTRON_/VSCODE_ 环境变量、超时 180 秒);运行中的 IDE 会自动加载,成功无需重启也不再弹窗,
    • 失败时提示手动安装方法
    • src/ide/IdeExtensionLogic.hpp: 纯逻辑(主进程判定、命令行参数解析、product.json、extensions.json),附单元测试
    • src/core/DllIdentity.hpp: 从 main.cpp 提取 DLL 身份(路径 + 大小 + 修改时间),供加载提示与插件提示共用
    • 验证:ctest 8/8;IDE 2.6.0 隔离副本:未安装 → 弹窗 → 是 → 安装成功并热加载 → 插件首次引导接管;
    • 已安装 → 不弹窗;选择否 → 写入标记 → 再次启动不再询问。
  • ide-extension: 中英俄三语 + 首次引导自动扫描本机代理
    • media/i18n.js: 插件运行时文案三语词典(UMD,宿主与 Webview 共用),缺失回退英文再回退 key;
    • 默认跟随 IDE 显示语言,新增设置 antigravityProxy.language(auto/zh-cn/en/ru)可覆盖,切换后热更新
    • package.nls*.json: 命令标题、设置描述三语(VS Code 原生本地化,跟随 IDE 显示语言)
    • shared/config-core.js: validateForm 支持语言参数,校验文案三语化(中文与原文逐字一致,字段路径不变)
    • 状态栏 / 设置面板 / 连通测试 / 配置读写 / 补丁守护 / 重启器:全部文案改为 t(key)
    • lib/proxyScan.js: 本机代理扫描,来源按优先级合并去重:当前配置 > IDE http.proxy > 系统代理注册表 >
    • 环境变量 > 常用端口(与 doctor 一致);先 TCP 探活,再做 SOCKS5/HTTP 完整隧道探测,两者皆可用优先 SOCKS5
    • 首次引导(每个 profile 一次):当前代理可用则仅通知;不可用则自动打开面板定位到【代理】区并扫描——
    • 单个结果自动填入(不自动保存),多个结果列出供选择,无结果则提示手动填写并给代理区加呼吸描边
    • (3 次后停止,prefers-reduced-motion 下关闭),填入后保存按钮温和呼吸提示,保存成功后撤下
    • 新增命令「扫描本机代理」;附 i18n / proxyScan 单元测试
    • 验证:node 单元测试 33/33;IDE 2.6.0 隔离副本端到端:三语热切换、扫描命中 7890/7891、
    • 首次引导可用/不可用两条分支、无结果描边 + 聚焦端口输入框、填入 → 保存 → 撤下引导。
  • ide-extension: IDE 配置插件(状态栏 + 可视化设置 + 补丁守护)
    • resources/shared/config-core.js: config-web 与插件共享的配置核心(规范化/导出/校验/JSONC 容错),
    • config-web 改为引用该模块(构建时内联),消除两份校验规则漂移;附 node:test 单元测试
    • resources/ide-extension: Antigravity IDE 插件
    • 状态栏:补丁/配置/连通/待重启状态,点击打开设置面板,悬浮提示含快捷操作
    • 设置面板(Webview):基于 IDE 主题变量与 codicons,含连通测试、diff、导入导出、骨架/空/错误态、键盘可达
    • 配置写入:临时文件 + rename 原子替换,写前备份(保留 10 份),记录最后可用配置
    • 补丁守护(P2):IDE 更新清除 version.dll/config.json 后启动即恢复(DLL 取内置副本并校验 SHA256,
    • 配置优先恢复用户上次配置),已存在文件不覆盖
    • 重启:两段式 PowerShell 重启器(-EncodedCommand),按原启动参数重新打开 IDE
    • build.ps1: 打包 output/antigravity-proxy.vsix(内置同版本 version.dll + 默认 config.json);
    • -RunTests 追加 node 单元测试(无 Node 时跳过并告警)
    • doctor.ps1: Setup/Repair 检测到 Antigravity IDE.exe 时自动安装插件(-SkipExtension 可跳过);test-doctor 新增断言
    • package-release.ps1: IDE 发布包根目录携带 VSIX(CLI 包不含)
    • README/README_EN/README_RU: 补充插件安装、状态栏含义、补丁守护与设置项说明
    • .gitignore: 放行 resources/ide-extension/lib(原 [Ll]ib 规则会让干净克隆缺失全部插件模块)
    • 隔离副本实测(复制安装目录 + 临时 profile/extensions,未触碰用户正在运行的 IDE)发现并修复:
    • 重启后不再拉起 IDE:detached 的 powershell.exe 无控制台直接退出,非 detached 又会随扩展宿主的
    • libuv 作业被结束 → 改为两段式(附着外层抓参并 Start-Process 隐藏内层),新增真实拉起路径回归测试
    • 补丁被清除时状态栏不显示:启动流程 await 提示框阻塞刷新 → 先刷新再提示
    • 扩展宿主卡死约 14 秒:process.report.getReport() 默认对 socket 做同步反向 DNS → 临时开启
    • excludeNetwork 并按进程缓存结果
    • 代理类型分段控件选中态在深色主题下不可辨 → 改用 inputOption.active* 令牌
    • 验证:Release 构建通过;ctest 7/7;node 单元测试 23/23;test-doctor.ps1 76/76;
    • IDE 2.6.0 隔离副本端到端:状态栏 → 面板 → 修改保存 → 待重启 → 重启(参数保持)→ 已生效;
    • 删除 version.dll/config.json → 启动自动恢复(哈希一致、配置为上次保存值)→ 提示重启 → 重启后生效。
  • launcher: add dedicated proxy entry, config protection, and resilience tests (v2.5)
    • 入口解耦:在桌面与开始菜单创建独立命名的代理恢复入口(如「Antigravity (代理)」),避免 Squirrel 更新器重写官方同名快捷方式导致恢复失效
    • 快捷方式所有权保护:通过 COM 组件校验 TargetPath,严禁误删官方原生快捷方式,支持两者安全并存
    • 多语言平滑迁移:支持中文/英文/俄文三种语言快捷方式的无痕互迁,清理历史旧版本孤儿死链
    • 配置保护:启动器对已存在的 config.json 增加运行态保护,绝不抹除用户自定义端口(如 10808 等)
    • 自动化容灾测试:新增 test-resilience.ps1 全真模拟更新器清空与重置场景,7 项严苛用例 100% 通过
    • 文档与版本:三语 README 同步更新机制说明,版本号递增至 v2.5
  • doctor: 新增一键部署与体检修复脚本
    • Antigravity 后台静默自更新会重建安装目录,手动放入的 version.dll 与
    • config.json 被一起清掉;而 language_server.exe 是 Go 进程,只读环境变量、
    • 不读 Windows 系统代理,补丁一失效后端就退回直连 Google,主页表现为
    • ERR_TIMED_OUT 白屏(Issue #150)。README 已提示"更新后请重新复制文件",
    • 但让用户手工找目录、比对 PE 架构、保住自己配好的端口,失败率很高。
    • 新增 scripts/doctor.ps1,同一入口覆盖首次部署与故障修复:
    • Diagnose(只读):定位安装目录与母本、检查补丁文件与架构、按模块路径
    • 判断补丁是否真被进程加载(避免把 System32 的 version.dll 误判为注入成功,
    • 也避免把无关 node.exe 算作后端子进程)、探测代理端口、解析 proxy 日志与
    • Antigravity 日志并按判定码给出下一步;main.log 是累积追加的,按时间戳
    • 区分"本次仍在发生"和"历史残留"。还能识别"文件已被删除但旧镜像仍在内存
    • 中运行"这一更新冲掉后的典型状态。
    • Setup:自动发现安装目录与本机代理端口并写出 config.json。
    • Repair:从安装目录之外的母本原子补回缺失文件(临时文件 + SHA256 校验 +
    • Move-Item),默认不覆盖已存在的 DLL 与 config.json,避免重置用户端口。
    • 母本位于安装目录内部时直接拒绝,因为那会让母本随补丁一起被更新删除。
    • 不结束进程、不常驻、不注册计划任务或服务,只读注册表 Uninstall 项用于发现
    • 安装目录。发布包附带 doctor.bat 供双击运行。
    • 与 #143 / #148 的启动器思路互补:那两套方案依赖用户从自定义入口启动,
    • 而 #148 评论区已实测更新会把开始菜单快捷方式重置为直接启动官方 exe,
    • 自更新也用 --updated --force-run 绕过入口,因此本 PR 走"按需体检 + 修复"。
    • 验证:
    • scripts/test-doctor.ps1 在 %TEMP% 临时夹具内跑 69 项断言(PE 架构判定、
    • 补丁缺失、架构不匹配、哈希一致、母本位置校验、config 保留、JSONC 容错、
    • 日志判读、目录隔离统计),不触碰真实安装目录与注册表,全部通过。
    • 真机复现:2.23.0→2.23.1 自更新后 language_server.log 直连超时 157 条;
    • 运行 -Action Repair 补回并完全退出重开后,超时降为 0 条,主页恢复,
    • proxy 日志显示 Hook 安装成功与 SOCKS5 隧道建立成功。
    • 用模拟 output 目录跑 package-release.ps1,确认 ide/cli 两个 zip 都带上
    • doctor.ps1 与 doctor.bat;从解压后的发布包内直接运行可自动发现母本。
  • launcher: add cross-platform auto-healing launcher, shortcut installer and release updater

🐛 Bug 修复 (Bug Fixes)

  • doctor: IDE 命令行向 stderr 输出告警时不再中断插件安装 (52195bc)
    • 真实 IDE 2.6.0 的 antigravity-ide.cmd --install-extension 成功时也会向 stderr 输出 antigravityAnalytics NOT registered 告警;PS 5.1 下 2>&1 把它包装成 NativeCommandError,在脚本级 ErrorActionPreference=Stop 时中断整个 Setup/Repair(插件实际已装上,但后续复检与结论不再输出,在线安装同样受影响)。Install-IdeExtension 调用期间临时改为 Continue,只按退出码判定。
    • test-doctor.ps1:新增模拟 stderr 告警 + 退出码 0/3 的回归用例(旧代码复现失败,修复后 79/79 通过)。真实 IDE 复测:doctor -Action Setup 完整执行,退出码 0。
  • launcher: 启动器与安装脚本支持 Antigravity IDE.exe
    • IDE 2.6+ 主程序名为 Antigravity IDE.exe、默认安装到 Programs\Antigravity IDE,原启动器只识别
    • Antigravity.exe,导致找不到安装目录、无法同步 DLL 与拉起。
    • AntigravityLauncher.cpp: 新增 FindAppExe(Antigravity.exe / Antigravity IDE.exe),自动探测增加
    • Programs\Antigravity IDE、Program Files\Antigravity IDE;文件选择过滤器、目标 exe、CLI 同步判断同步调整;三语提示更新
    • install-windows.ps1: 同步上述探测逻辑(含内嵌 C# 备用启动器),图标与快捷方式取实际存在的主程序
    • test-resilience.ps1: 新增 -AppExeName 参数,可按 IDE 主程序名做韧性测试
    • 验证:Release 构建通过;install-windows.ps1 在 PS 5.1 下解析 0 错误;
    • 隔离副本经发布目录 launcher\AntigravityLauncher.exe 识别 IDE、同步 DLL 与 VSIX 后正常拉起。
  • core: 目标子进程创建失败时记录诊断日志;恢复 build.ps1 UTF-8 BOM
    • Hooks.cpp: DetourCreateProcessW/A 在 CreateProcess 失败且目标命中 target_processes 时输出
    • [警告] 日志(含 target_basename 与 GetLastError),并原样恢复 LastError,不改变调用方行为。
    • 背景(Issue #159):IDE 2.6.0 后端改为扩展下载到 ~/.gemini/bin 的 agy.exe --hub,
    • 若其因下载不完整/被拦截而创建失败,原实现日志中无任何痕迹,无法区分“未注入”与“未启动”。
    • build.ps1: 恢复 UTF-8 BOM(#148 引入的回归),修复 Windows PowerShell 5.1 下按 GBK 解析失败。
    • 验证:
    • IDE 2.6.0(干净配置、无代理环境变量)实测:agy.exe 被注入,oauth2/cloudcode/aicode 等 12 个连接全部经
    • SOCKS5 隧道,14 条隧道成功、0 错误;agy CLI 自动下载(cli-auto-updater/storage.googleapis.com)经代理成功。
    • 临时验证程序:启动不存在的 agy.exe 输出失败警告且 GetLastError=2 原样返回;非目标进程行为不变。
    • build.ps1 (PS 5.1) Release 构建通过,ctest 7/7 通过。
  • integration: 集成 #144 代理认证与 #148/#155 脚本,补齐账密保留与排障提示
    • Hooks.cpp: 出口 IP 诊断经 HTTP 代理明文转发时携带 Proxy-Authorization,避免开启认证后误报 407
    • Hooks.cpp: 连接代理失败(10061/10060)日志追加 proxy.host:port 核对提示(Issue #154)
    • Socks5Udp.hpp: 移除已无调用方的 NegotiateNoAuth(YAGNI)
    • install-windows.ps1: 抽取 Merge-ExistingProxySettings,补丁同步时保留 username/password
    • update-patch.ps1/.sh: 在线升级时保留本地代理账密,不被新版母本空值覆盖
    • doctor.ps1: Setup 重写 config.json 时保留已有账密;test-doctor.ps1 新增 4 条回归断言
    • README/README_EN/README_RU/build.ps1: 补充 proxy.username/proxy.password 字段说明,明确 setup.bat 为主入口、doctor 为体检排障工具
    • 验证:Release 构建通过;ctest 7/7 通过(含 proxy_auth_tests、dbghelp_shim_tests);test-doctor.ps1 73/73 通过
  • cli: load proxy module on attach in dbghelp shim (#149)
    • In commit 63c7495, EnsureProxyLoadedForCli() was moved to lazy execution inside ResolveSystemExport. However, agy.exe only imports SymFromAddr for crash symbol resolution, which is never called during normal execution. As a result, antigravity_proxy.dll was never loaded into memory, causing network requests from agy.exe to fail to be proxied.
    • This commit restores EnsureProxyLoadedForCli() during DLL_PROCESS_ATTACH in DllMain (which already safely guards against non-CLI processes via IsAntigravityCliProcess()), and updates test_dbghelp_shim to assert that the proxy module is loaded immediately upon attaching.
  • launcher: support cli release directory and prevent option P crash

♻️ 代码重构 (Refactoring)

  • launcher: unify setup entry to setup.bat with tri-lingual and cli-ide adaptation
    • Unify multiple bat scripts into single setup.bat (Windows) and setup.sh (Linux) in root
    • Add full tri-lingual i18n support (zh/en/ru) with auto-detection and runtime switching
    • Add auto-adaptation between Desktop IDE and Console CLI packages
    • Sync build, packaging, and compatibility test assertions
    • Refine Method A documentation across README.md, README_EN.md, and README_RU.md

📝 文档更新 (Documentation)

  • 本轮总结(插件三语、首次引导扫描、DLL 安装提示、在线安装、README 精简)
    • docs/ide-extension-i18n-online-install-summary.md:需求与方案对照、改动清单、验证结果、过程中发现的问题与后续事项。
  • 精简三语 README(1314 → 245 行),技术细节迁入 docs/
    • README / README_EN / README_RU 按同一结构重写,只保留用户需要的内容:
    • 简介 → 安装(在线安装一行命令 + 参数 / 发布包与资产说明 / 默认安装目录)→ IDE 插件(功能、安装、
    • 状态栏、设置项含 language)→ 配置(最小示例)→ 更新后补丁失效 → 常见问题(出口 IP、白屏、日志、
    • 启动错误码、WSL)→ 文档索引 → 编译 → 许可证 / 作者 / 打赏 → 伪代码来源说明(精简)。
    • 去掉了反问式痛点、对比表、流程图、与他人环境对比表等内容;英 / 俄版状态栏表使用插件对应语言的真实文案。
    • 技术细节原样迁移(不改技术结论):
    • docs/configuration.md(新):完整配置示例与配置项表、路由规则、IPv6 / UDP 注意事项、强制代理其他程序
    • docs/troubleshooting.md(新):代理软件端口速查、诊断流程、日志关键行、代理软件 / 系统环境排查、错误码
    • docs/wsl.md(新):WSL 限制原因与 antissh / Mirrored / TUN 三种替代方案
    • docs/DEVELOPMENT.md:追加功能特性、工作原理、Hook API 列表、编译构建、二次开发入口
    • 同步修正(对照源码 / 实测):
    • 注入成功日志原文为「已注入新建进程」(Hooks.cpp:3812),README 与 agent-ip-diagnosis.md 旧写法「已注入目标进程」已更正
    • setup.bat 快捷方式名随向导语言为 Antigravity (代理) / (Proxy) / (Прокси)(install-windows.ps1),英 / 俄版按实际名称书写
    • docs/ide-extension.md:新增多语言、首次引导与本机代理扫描、DLL 侧插件安装提示三节;测试方法补充新单测、
    • 端到端场景与本轮发现并修复的问题;已知限制更新
    • doctor.ps1:VSIX 未找到时的提示改为指向 ide\ 目录与独立 Release 资产
  • 新增 IDE 插件技术文档;修复 README_RU 路径反斜杠丢失
    • docs/ide-extension.md: 背景、模块职责、状态模型与状态栏优先级、补丁守护恢复策略与安全约束、
    • 两段式重启器原理与实测约束、单元测试 + 隔离副本 CDP 端到端测试方法、已知限制
    • README_RU.md: 修复历史遗留的 Windows 路径反斜杠丢失(安装目录、日志目录、快速跳转命令、目录树),
    • 以及被转义成退格符 \x08 的 ".\build.ps1"(6 处),共 18 处;文件中已无控制字符
  • sync launcher guide in build.ps1 usageDoc

📦 构建相关 (Build)

  • ci: VSIX 随 DLL 部署到 ide/ 并作为 Release 资产;修复 build.ps1 误选旧 DLL
    • build.ps1: VSIX 输出到 output/ide/antigravity-proxy.vsix(与 DLL 同目录,供 DLL 检测并提示安装);
    • 打包 package.nls*.json,清单描述解析 %description%
    • build.ps1(修复): 查找编译产物时排除 ide-extension-stage 暂存目录并按修改时间取最新——
    • 原 Select-Object -First 1 会选中暂存目录里上一次构建的 payload\version.dll,导致 output 循环输出旧 DLL
    • package-release.ps1: IDE 包内置 ide\antigravity-proxy.vsix;另输出独立资产 *-ide-extension-win-.vsix
    • release.yml: 上传 VSIX 资产(VSIX 本身已是 zip,artifact 不再二次压缩);生成 SHA256SUMS.txt 一并发布
    • build.yml: 上传 IDE 插件构建产物
    • doctor.ps1: 查找 VSIX 时优先 ide\ 目录,兼容旧路径
    • 验证:Release x64 构建通过;output、CLI、payload 三处 DLL 哈希一致;package-release 本地打包通过。

🔧 杂项 (Chores)

  • 同步版本号到 v2.4 [skip ci]

📋 其他更新 (Other)

  • bfa1072
    • Update HttpConnect.hpp
  • 8b6b7b5
    • Add HTTP Basic Auth (RFC 7617) and SOCKS5 Auth (RFC1929)
  • 32785d2
    • 在README文件中添加了俄语版本的链接,
    • 使用户可以更方便地切换到俄语版本文档
  • 5690e95
    • 移除包含系统诊断信息的summary.json和summary.md文件,
    • 包括进程信息、注册表配置、日志路径等敏感数据以保护用户隐私

Don't miss a new antigravity-proxy release

NewReleases is sending notifications on new releases.