修复 Antigravity 本地后端的上下文窗口 256K 限制,适用于支持的原生 1M 模型,保留原生自动摘要压缩与模型安全裁剪。交互菜单默认 1:512000 tokens(512K)压缩,输入 2:734000 tokens(734K)压缩,也可用 --context-limit TOKENS 自定义阈值。脚本同时调整规则读取预算,提供自动发现、适配检查、上下文查询、确认后备份修改及原版恢复。仅需 Python 3.9+ 标准库,不分发专有二进制。
| 系统 | 后端架构 / 格式 | 预期适用客户端 | 验证情况 |
|---|---|---|---|
| Windows | x86_64 / PE | Antigravity IDE、Antigravity Desktop、agy CLI | 本机 IDE / CLI (agy.exe 1.4.12 & 1.5.0) 与 Desktop (language_server.exe) 已实测修改、启动与新请求窗口 |
| Windows | ARM64 / PE | 暂不列入预期范围 | 未验证,不保证适配 |
| Linux | x86_64 / ELF | agy CLI;使用兼容后端的 IDE / Desktop 安装 | 已实现补丁支持;当前版本未完成 Linux 实机验证 |
| Linux | ARM64(aarch64)/ ELF | agy CLI;使用兼容后端的 IDE / Desktop 安装 | 已实现补丁支持;当前版本未完成 Linux 实机验证 |
| macOS | ARM64(Apple Silicon)/ 薄格式 Mach-O | Antigravity IDE、agy CLI | 本机 IDE / CLI (agy 1.4.12 & 1.5.0) 已实测修改、签名、启动与新请求窗口 |
| macOS | x86_64(Intel)或 Universal Mach-O | 暂不支持 | 解析器只支持薄格式 ARM64 Mach-O |
适用与否以本机后端的结构检查结果为准,不能保证所有版本。表中的客户端是预期范围,不代表每种安装布局均已实测。
Antigravity 的三个客户端(IDE、Desktop App、CLI / Remote Control)在底层采用**“两套后端、两套会话数据库”交叉复用**的设计:
| 客户端形态 | 使用的 Go 后端二进制 | 使用的会话数据库目录 (*.db) |
共用关系说明 |
|---|---|---|---|
| Antigravity IDE | ~/.gemini/bin/agy(.exe) |
~/.gemini/antigravity/conversations |
与 CLI 共用后端(加进 PATH 即可免重复安装 CLI),与 Desktop App 共用会话数据库 |
| Antigravity Desktop App | 安装目录 resources/bin/language_server(.exe) |
~/.gemini/antigravity/conversations |
拥有独立的 language_server 后端,但与 IDE 读写同一个会话数据库(IDE 里的对话在 App 中直接可见) |
| agy CLI / Remote Control | ~/.gemini/bin/agy(.exe)(或独立安装的 agy) |
~/.gemini/antigravity-cli/conversations |
与 IDE 共用 agy 后端,但使用独立的 antigravity-cli 会话库(避免与正在运行的 IDE / App 发生 SQLite 锁冲突) |
仓库根目录按操作系统与功能提供了一键快捷入口,核心 Python 脚本与单元测试统一收纳在 scripts/ 文件夹下:
| 系统 | 查看状态与实时上下文进度条(只读) | 一键备份并打补丁 | 一键恢复原版 |
|---|---|---|---|
| Windows(直接双击) | windows-check-status.cmd |
windows-fix-all.cmd |
windows-restore-all.cmd |
| macOS(Finder 直接双击) | macos-check-status.command |
macos-fix-all.command |
macos-restore-all.command |
| Linux(终端单条命令) | ./linux-autofix.sh --status |
./linux-autofix.sh |
./linux-autofix.sh --restore |
也可以直接调用 scripts/ 下的 Python 脚本(Windows 用 python,macOS / Linux 用 python3):
# 只检查:发现安装、检查适配、查看近期活跃对话的实时 Token 进度条
python3 scripts/fix_antigravity_context.py --status
# 正式运行:先汇总目标,只有输入 Y 才备份并修改
python3 scripts/fix_antigravity_context.py
# 恢复:先核验匹配备份,再输入 Y 恢复原始字节
python3 scripts/fix_antigravity_context.py --restore# 交互菜单:回车 / 1 = 512000;2 = 734000
python3 scripts/fix_antigravity_context.py
# 跳过阈值菜单,核对目标后仍需输入 Y
python3 scripts/fix_antigravity_context.py --context-limit 734000
python3 scripts/fix_antigravity_context.py --context-limit 600000
# 重启并发送新请求后,验收自定义阈值
python3 scripts/verify_session.py --db /实际路径/session.db --expected-limit 600000这里 K 按 1000 tokens 计,512K 为 512000,不是 524288;参数接收整数 token 数。所有系统的快捷入口均转发参数,例如 ./linux-autofix.sh --context-limit 600000。已有补丁切换阈值时,需要存在经过校验的原版备份,脚本会基于该备份重新生成补丁。直接 --status 会自动识别已安装阈值,不弹出菜单。非内置预设的自定义会话阈值显示为 OTHER_WINDOW,可用 --expected-limit 精确验收。--context-limit 不能与 --restore 混用。
- 发现当前用户默认位置、PATH 和已知应用目录的后端,解析符号链接并按真实路径去重。
- 逐个显示路径、格式、架构、SHA256、补丁状态、跳板宿主函数及是否兼容。
- 分别查询 IDE/App 与 CLI 各自最近活跃的数据库(同时考虑主文件和 -wal 修改时间),显示实时已用 Token 进度条(
Used / Limit tokens与百分比)、最后活跃时间与首句主题摘要,并列出近期活跃 Top 5 对话的上下文排行(代替 IDE / App 中缺失的/context面板)。不启动模型、不发送请求。 - 修改模式下,存在不兼容或部分修改的目标时停止,不修改任何目标;可用
--target只选择确认过的目标。恢复模式独立核验当前文件与备份哈希,不要求通过补丁适配检查。 - 修改模式先选择压缩阈值:回车 / 1 为 512000,2 为 734000;显式传入 --context-limit 时跳过此菜单。列出实际待修改或恢复的路径与备份目录,询问
Continue? [y/N]。只有明确输入 Y 才继续;回车、其他输入或无交互输入均取消。全部已修补则报告无需修改。 - 修改模式再询问老版本备份如何处理:
1(默认,回车即可)打完补丁后清理不属于当前构建的备份,只保留当前版本的原版与清单;2保留全部已有备份。无输入或无法识别的回答按保留处理(恢复模式不清理)。 - 检查同名后端进程,显示名称和 PID。关闭 IDE / CLI 后输入 Y 重查,仍占用则继续提示,其他输入取消。默认不杀进程。
- 备份原版并核验 SHA256,在临时文件上应用补丁;Mac 自动签名并校验,记录签名后的最终哈希。替换前再次检查进程和目标哈希,避免自动升级造成误写。
- 原子替换、更新
agy.version.json缓存并复查补丁。全部成功且第 6 步选了1时,才清理老版本备份;只删“同名二进制、且哈希与当前文件都不匹配”的清单及其备份,调试路径与目录外的文件不动。各目标独立处理;多目标中途失败时,已完成的目标保留备份,不自动全部回滚。
--status、--check、--dry-run 等效,只查询、不询问、不停止进程、不修改后端。指定 --json-out 时会写报告文件;查询可能使用临时只读数据库副本。
Linux 通过 /proc/PID/exe 匹配所选后端真实路径,避免长进程名截断漏检;Windows / macOS 按进程名保守匹配,可能包含另一安装的同名后端。进程检测不是文件锁完整枚举。读取进程列表失败则停止修改。替换遇到占用或目录权限问题,也会提示处理后输入 Y 重试。确需自动终止进程时可使用 --kill,仍需先确认操作,且可能影响其他安装的同名后端。
所有系统先检查当前用户主目录下的 .gemini/bin、.local/bin 及 PATH,再检查以下目录中名称含 Antigravity 的产品:
- Windows:LOCALAPPDATA/Programs、ProgramFiles、ProgramFiles(x86)。
- macOS:/Applications、~/Applications。
- Linux:/opt、/usr/share、/usr/lib、~/.local/share。
应用内只检查已知 bin、resources/bin、resources/app/bin、扩展 bin 等位置;macOS 对应 Contents/Resources。候选文件名包括 agy、language_server 及已知平台后缀名称。
不是全盘扫描,不查其他用户。 自定义目录、便携安装、容器、远端主机或未知布局可能漏掉,使用 --target 补充。该参数替代自动发现,可重复:
python3 scripts/fix_antigravity_context.py --status --target /实际路径/agy
python3 scripts/fix_antigravity_context.py --target /路径一/agy --target /路径二/language_server由于 Antigravity IDE 和 Desktop App 的图形界面目前没有提供 CLI 里的 /context 斜杠命令,双击运行 windows-check-status.cmd / macos-check-status.command(或执行 ./linux-autofix.sh --status)即可随时查看:
- 各端最近活跃会话快照:直接从
gen_metadata解码最后一轮请求的当前已用 Token 数(gen_used_tokens)、窗口上限(gen_max_context_tokens)以及使用的模型名称与编号(如gemini-4-argon#1419、gemini-3.8-flash#1320,兼容executor_metadata为空的实时活跃会话),绘制彩色进度条(<75%绿色、75%~90%黄色、>=90%红色预警)。 - 近期活跃 Top 5 对话排行:按数据库与
-wal预写日志的实时写入时间排序,同时显示距今活跃时间(如5s ago)、会话短 ID、项目文件夹名、模型名、Token 进度条以及从transcript.jsonl提取的首句主题摘要,一眼区分当前正在聊的是哪个窗口。
默认分别扫描以下两个会话库目录:
~/.gemini/antigravity/conversations/*.db(Antigravity IDE 与 Antigravity Desktop App 共用)~/.gemini/antigravity-cli/conversations/*.db(agy CLI 与 Remote Control 守护进程共用)
会话不强行关联到某个发现的后端,可能属于旧版本、另一安装或其他模型。最新空会话、数据库不可读、schema 变化报告 UNKNOWN。protobuf 截断、越界、非法 varint 或字段类型错误同样返回 UNKNOWN,不会验收通过。
| 状态 | 含义 |
|---|---|
| UNPATCHED / compatible=True | 当前结构和字节可匹配,尚未修补;出现已知 checkpoint 局部补丁会拒绝修改 |
| ALREADY_PATCHED / compatible=True | 磁盘已包含补丁,不代表运行中的进程已重启 |
| UNSUPPORTED_OR_UNRECOGNIZED | 当前脚本无法匹配文件格式、符号或指令 |
| UNKNOWN_OR_PARTIAL | 不能认定为完整原版或完整补丁,拒绝打补丁;恢复仍可按哈希核验 |
| LIMITED_256K | 历史请求的窗口为 256000 |
| EXPECTED_WINDOW | 请求窗口为 512000 / 734000(或旧版补丁记录的 900000 / 983040) |
| MIXED_LIMITS / OTHER_WINDOW | 两处不一致或其他窗口,结合模型排查 |
| UNKNOWN | 数据不足,不能推断锁在256K或已解锁 |
修改后重开 IDE / CLI,用任意 1M 模型(如 Argon、3.8 Flash 或 Claude)发新请求,再查对应会话:
python3 scripts/fix_antigravity_context.py --status --conversation-id <会话UUID>
python3 scripts/fix_antigravity_context.py --status --db /实际路径/session.db
# 查询上下文 JSON:latest_limit_ok 应为 true
python3 scripts/verify_session.py <会话UUID>
python3 scripts/verify_session.py --db /实际路径/session.db记录的请求窗口不等于未来请求、所有模型或超过256K的历史保留效果。切换模型后再查;已丢失/已摘要的历史不会恢复。脚本不自动发送测试请求。
- 可选压缩阈值:在最终配置出口处,将默认的 checkpoint.max_token_limit=256000 提升到所选阈值:默认 512000、菜单选项 2 为 734000,或 --context-limit 指定的数值。保留 hooks.checkpointNeeded 原生压缩与 ClampCheckpointConfigForModelInfo 模型安全裁剪。
- 窗口缓冲:对于 1048576-token 窗口的模型,默认 512000 阈值留出 536576 tokens,选项 2 留出 314576 tokens。自定义阈值越接近模型上限,留给单轮突发读取与分词误差的空间越少。
- 完整保留
hooks.checkpointNeeded原版指令(不短路自动压缩判断),改为在(*CheckpointConfig)的一组候选宿主中挑选:优先SetSessionSummaryPromptOverride,该符号被链接器裁掉时改用其余(*CheckpointConfig).*方法中没有外部进入(同时检查 CALL/JMP 与 B/BL/B.cond/CBZ,函数内部自跳转不算)、地址没有被存进任何非调试段(可执行段内的常量/指针也计入,仅排除__DWARF/.debug等调试段,因为那里记录的是每个函数的绝对地址)、长度足够的一个;实际宿主写入清单。 - 规则 / skill 单文件读取上限从24000字节提高到 1 MiB。
- Rules / Customizations 总预算从20000各提高到 131072 tokens。
- 若目标二进制已打过旧版补丁(如 900K / 983K),且备份目录存在经 SHA256 校验的原版备份,脚本会自动基于原版备份无缝升级到最新补丁。
- 若当前 Python(如 Microsoft Store 版)在目标目录拒绝
os.replace(WinError 6),先重试,再改为带校验的回滚式原地写入;没有可回滚的已验证字节时直接报错,绝不截断目标文件。
代码补丁保持长度;Mac 签名可能改变最终大小。使用系统 codesign --force --sign - 做本地 ad-hoc 签名,无需证书;签名和补丁校验通过才替换。不保留原厂开发者身份/公证信任,不关闭 Gatekeeper 或 SIP。
感谢 @lmxxf 的调查与方案,以及 Antigravity IDE 对 Windows 架构梳理、定位脚本和验证的协作贡献。
上游的绝对地址只适用于对应构建。这里通过 Go pclntab 重找函数、从 getter 解码部分字段,支持普通地址移动,以及1.4.7那类 max_token_limit +16 → +12;ARM64 模型 getter 兼容 LDR / LDRSW,x86_64 与 ARM64 的配置出口及预算赋值均兼容 1.4.12 与 1.5.0 的两种编译器布局。
不保证所有未来版本。 函数名、Go 表格式、指令模式、模型编号、返回约定及数据库字段仍有假设;ARM64 外层 checkpoint 指针目前要求 +16;ARM64 入口校验同时接受带 SUB 与不带 SUB 的两种栈检查布局,无法识别的入口在没有备份清单或可信备份佐证时一律拒绝。跳板宿主按构建现场挑选:若某构建里所有 (*CheckpointConfig).* 方法都被调用或规模不足,脚本会拒绝修改并列出被拒原因,不会退回老方案去短路 hooks.checkpointNeeded。变化超出模式时需要适配,不能删除校验或试填旧偏移;结构匹配不能替代真实请求测试。
自动升级会覆盖补丁,升级后先查状态再决定是否重打。备份按构建哈希区分,不把旧备份硬套到新版。
“原版备份”指修改前文件的逐字节备份,不是原厂身份认证。脚本校验已支持的 Go 栈检查入口指令及分支关系,并排除已知部分补丁;无法确认则停止。该检查不能证明整个二进制未被第三方修改,也不能替代厂商签名验证。
备份默认保存到用户主目录 ~/.gemini/agy-patches/:原版 .bak 与记录原版/修改版 SHA256、补丁位置的 JSON 清单。恢复要求当前哈希匹配清单,并核验备份;不要求当前文件通过补丁适配检查,原始签名字节也会恢复。替换程序前确保原版备份写入磁盘;支持的平台同时保存备份目录变更。
python3 scripts/fix_antigravity_context.py --restore --target /实际路径/agy
python3 scripts/fix_antigravity_context.py --restore --backup-dir /备份目录 --target /实际路径/agy
python3 scripts/fix_antigravity_context.py --status --json-out report.json| 参数 | 作用 |
|---|---|
| 无参数 | 自动发现、检查,确认后修改未修补目标 |
| --status / --check / --dry-run | 只检查 |
| --context-limit TOKENS | 自定义整数压缩阈值,范围 256001–1048576;跳过阈值菜单,仍需输入 Y 确认修改 |
| --target PATH | 指定目标,支持重复,替代自动发现 |
| --conversation-id UUID / --db PATH | 二选一,指定查询会话 |
| --restore | 核验备份、确认并恢复;与 --json-out 一起使用可输出恢复前后哈希和备份来源 |
| --backup-dir PATH | 自定义备份与清单目录;恢复时需指定同一目录 |
| --json-out PATH | 输出本次检查/修改报告;必须使用不存在的新文件,拒绝备份目录及受保护文件类型 |
| --kill | 可选,确认后终止选中目标的同名后端进程;默认不用,可能影响其他安装的同名进程 |
检查退出码0=全部目标兼容,2=没找到或不兼容;会话窗口不影响此退出码。verify_session.py:0=验收通过,1=窗口未达标,2=无法读取数据。恢复和只读模式不能混用,没有跳过 Y 确认的无人值守选项。
实机验证范围见开头表格:Windows 本机(agy.exe 1.4.12 / 1.5.0 与 language_server.exe)与 macOS 本机(agy 1.4.12 / 1.5.0 ARM64)均已完成补丁修改、签名、启动、单会话超 1000 轮连续多次自动触发 <CONTEXT_SUMMARY> 压缩回落至 ~2 万 Token 及实时进度条查询验证。
python3 -m unittest discover -s scripts -v
# Mac 可选集成:只修改临时副本,提供未修补原版或原版备份
AGY_TEST_BINARY=/路径/原版备份.bak python3 -m unittest discover -s scripts -p test_macos.py -v本仓库不分发 Google 专有程序,不要提交可执行文件、备份或数据库。属于非官方本地客户端修改,不涉及鉴权、计费或服务端配额绕过;不提高服务端能力。保留备份,效果以实际请求与使用验证为准。