Files
gravity_control/better-antigravity-main/FIXES.md
CD c97414cd37 fix(bridge): stall-based approval detection + known issues from deep debugging
- IDLE→stall detection: RUNNING+delta=0 for 6 polls (30s)
- lastModifiedTime-based thinking filter (partial)
- ResolveOutstandingSteps confirmed CANCELS steps (removed)
- HandleCascadeUserInteraction always socket hang up (removed)
- VS Code accept commands: silent success, no effect
- Hybrid approval: focus+all commands sequential, no break
- logToFile: console.log backup added
- Known issues: 4 critical findings documented
- better-antigravity reference added for future research
2026-03-08 14:38:41 +09:00

106 lines
3.6 KiB
Markdown

# Fixes — Technical Details
Detailed root cause analysis and patch descriptions for each fix in Better Antigravity.
---
## Auto-Run Fix
**Status:** Working
**Affected versions:** 1.107.0+
**Files patched:** `workbench.desktop.main.js`, `jetskiAgent.js`
### The Problem
You set **Settings -> Agent -> Terminal Execution -> "Always Proceed"**, but Antigravity **still asks you to click "Run"** on every single terminal command. Every. Single. Time.
The setting saves correctly, Strict Mode is off -- it just doesn't work.
### Root Cause
Found in the source code: the `run_command` step renderer component has an `onChange` handler that auto-confirms commands when you switch the dropdown to "Always run" **on a specific step**. But there's **no `useEffect` hook** that checks the saved policy at mount time and auto-confirms **new steps**.
In other words: the UI reads your setting, displays the correct dropdown value, but never actually acts on it automatically.
```javascript
// What exists (only fires on dropdown CHANGE):
y = Mt(_ => {
setTerminalAutoExecutionPolicy(_),
_ === EAGER && confirm(true) // <- only when you manually switch
}, [])
// What's MISSING (should fire on component mount):
useEffect(() => {
if (policy === EAGER && !secureMode) confirm(true) // <- auto-confirm new steps
}, [])
```
### How the Patch Works
The patcher uses **structural regex matching** to find the `onChange` handler in the minified source. It matches the code by shape, not by variable names -- so it works even when Antigravity re-minifies on update.
**Step 1: Find the onChange handler**
Pattern: `<callback>=<useCallback>((<arg>)=>{<setFn>(<arg>),<arg>===<ENUM>.EAGER&&<confirm>(!0)},[...])`
This matches the handler structurally:
- An assignment to a variable
- A `useCallback` call
- Arrow function with one argument
- Two expressions: set state + check EAGER and confirm
**Step 2: Extract variable names from context**
From the surrounding 3000 characters, extract:
- `policyVar`: `<var>=<something>?.terminalAutoExecutionPolicy??<ENUM>.OFF`
- `secureVar`: `<var>=<something>?.secureModeEnabled??!1`
- `useEffectFn`: the most frequently used short-named function matching the `fn(()=>{...})` pattern (frequency analysis)
**Step 3: Generate and inject the patch**
```javascript
/*BA:autorun*/<useEffect>(()=>{<policyVar>===<ENUM>.EAGER&&!<secureVar>&&<confirm>(!0)},[])
```
The patch is injected immediately after the `onChange` handler's closing bracket.
### Example Output
```
Antigravity "Always Proceed" Auto-Run Fix
C:\Users\user\AppData\Local\Programs\Antigravity
Version: 1.107.0 (IDE 1.19.5)
[workbench] Found onChange at offset 12362782
callback=Mt, enum=Dhe, confirm=b
policyVar=u
secureVar=d
useEffect=mn (confidence: 30 hits)
[workbench] Patched (+43 bytes)
[jetskiAgent] Found onChange at offset 8388797
callback=ve, enum=rx, confirm=F
policyVar=d
secureVar=f
useEffect=At (confidence: 55 hits)
[jetskiAgent] Patched (+42 bytes)
Done! Restart Antigravity.
```
### Safety
- Original files are saved as `.ba-backup` before patching
- The patch marker `/*BA:autorun*/` prevents double-patching
- Only **adds** code, never removes existing logic
- `--revert` restores the original file from backup
- Async I/O in the extension prevents blocking the Extension Host
### Why two files?
The `run_command` step renderer exists in **two** bundles:
1. `workbench.desktop.main.js` -- the main workbench bundle (~15MB)
2. `jetskiAgent.js` -- the Cascade chat panel webview (~10MB)
Both contain the same bug with slightly different minified variable names. The structural matcher handles both transparently.