opencode-antigravity-auth 1.2.6 → 1.2.7-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +224 -153
  2. package/dist/src/constants.d.ts +8 -0
  3. package/dist/src/constants.d.ts.map +1 -1
  4. package/dist/src/constants.js +8 -0
  5. package/dist/src/constants.js.map +1 -1
  6. package/dist/src/plugin/config/schema.d.ts +12 -0
  7. package/dist/src/plugin/config/schema.d.ts.map +1 -1
  8. package/dist/src/plugin/config/schema.js +14 -0
  9. package/dist/src/plugin/config/schema.js.map +1 -1
  10. package/dist/src/plugin/core/streaming/index.d.ts +3 -0
  11. package/dist/src/plugin/core/streaming/index.d.ts.map +1 -0
  12. package/dist/src/plugin/core/streaming/index.js +3 -0
  13. package/dist/src/plugin/core/streaming/index.js.map +1 -0
  14. package/dist/src/plugin/core/streaming/transformer.d.ts +9 -0
  15. package/dist/src/plugin/core/streaming/transformer.d.ts.map +1 -0
  16. package/dist/src/plugin/core/streaming/transformer.js +134 -0
  17. package/dist/src/plugin/core/streaming/transformer.js.map +1 -0
  18. package/dist/src/plugin/core/streaming/types.d.ts +26 -0
  19. package/dist/src/plugin/core/streaming/types.d.ts.map +1 -0
  20. package/dist/src/plugin/core/streaming/types.js +1 -0
  21. package/dist/src/plugin/core/streaming/types.js.map +1 -0
  22. package/dist/src/plugin/logger.d.ts.map +1 -1
  23. package/dist/src/plugin/logger.js +3 -2
  24. package/dist/src/plugin/logger.js.map +1 -1
  25. package/dist/src/plugin/recovery.d.ts.map +1 -1
  26. package/dist/src/plugin/recovery.js +42 -14
  27. package/dist/src/plugin/recovery.js.map +1 -1
  28. package/dist/src/plugin/request-helpers.d.ts +38 -0
  29. package/dist/src/plugin/request-helpers.d.ts.map +1 -1
  30. package/dist/src/plugin/request-helpers.js +250 -19
  31. package/dist/src/plugin/request-helpers.js.map +1 -1
  32. package/dist/src/plugin/request.d.ts +50 -3
  33. package/dist/src/plugin/request.d.ts.map +1 -1
  34. package/dist/src/plugin/request.js +89 -177
  35. package/dist/src/plugin/request.js.map +1 -1
  36. package/dist/src/plugin/storage.d.ts +1 -0
  37. package/dist/src/plugin/storage.d.ts.map +1 -1
  38. package/dist/src/plugin/storage.js +70 -5
  39. package/dist/src/plugin/storage.js.map +1 -1
  40. package/dist/src/plugin/stores/signature-store.d.ts +5 -0
  41. package/dist/src/plugin/stores/signature-store.d.ts.map +1 -0
  42. package/dist/src/plugin/stores/signature-store.js +25 -0
  43. package/dist/src/plugin/stores/signature-store.js.map +1 -0
  44. package/dist/src/plugin/transform/claude.d.ts.map +1 -1
  45. package/dist/src/plugin/transform/claude.js +30 -8
  46. package/dist/src/plugin/transform/claude.js.map +1 -1
  47. package/dist/src/plugin/transform/model-resolver.d.ts +12 -5
  48. package/dist/src/plugin/transform/model-resolver.d.ts.map +1 -1
  49. package/dist/src/plugin/transform/model-resolver.js +73 -20
  50. package/dist/src/plugin/transform/model-resolver.js.map +1 -1
  51. package/dist/src/plugin/transform/types.d.ts +3 -5
  52. package/dist/src/plugin/transform/types.d.ts.map +1 -1
  53. package/dist/src/plugin/transform/types.js +0 -5
  54. package/dist/src/plugin/transform/types.js.map +1 -1
  55. package/dist/src/plugin.d.ts.map +1 -1
  56. package/dist/src/plugin.js +113 -44
  57. package/dist/src/plugin.js.map +1 -1
  58. package/package.json +7 -3
package/README.md CHANGED
@@ -9,7 +9,7 @@ Enable Opencode to authenticate against **Antigravity** (Google's IDE) via OAuth
9
9
 
10
10
  - **Google OAuth sign-in** (multi-account via `opencode auth login`) with automatic token refresh
11
11
  - **Multi-account load balancing** Automatically cycle through multiple Google accounts to maximize throughput
12
- - **Two quota sources for Gemini** Automatic fallback between **Antigravity quota** and **Gemini CLI quota** (same account) before switching accounts
12
+ - **Two quota sources for Gemini** Choose between **Antigravity quota** (`antigravity-` prefix) or **Gemini CLI quota** (no prefix) per request
13
13
  - **Real-time SSE streaming** including thinking blocks and incremental output
14
14
  - **Advanced Claude support** Interleaved thinking, stable multi-turn signatures, and validated tool calling
15
15
  - **Automatic endpoint fallback** between Antigravity API endpoints (daily → autopush → prod)
@@ -43,7 +43,7 @@ If the agent only installs the plugin, ask it to also add models under `provider
43
43
 
44
44
  ```json
45
45
  {
46
- "plugin": ["opencode-antigravity-auth@1.2.6"]
46
+ "plugin": ["opencode-antigravity-auth@1.2.7"]
47
47
  }
48
48
  ```
49
49
 
@@ -59,34 +59,34 @@ If the agent only installs the plugin, ask it to also add models under `provider
59
59
 
60
60
  Add the models you want to use to the same config file:
61
61
 
62
- ```json
63
- {
64
- "plugin": ["opencode-antigravity-auth@1.2.6"],
65
- "provider": {
66
- "google": {
67
- "models": {
68
- "gemini-3-pro-high": {
69
- "name": "Gemini 3 Pro High (Antigravity)",
70
- "limit": { "context": 1048576, "output": 65535 },
71
- "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
72
- },
73
- "claude-sonnet-4-5": {
74
- "name": "Claude Sonnet 4.5 (Antigravity)",
75
- "limit": { "context": 200000, "output": 64000 },
76
- "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
77
- }
78
- }
79
- }
80
- }
81
- }
82
- ```
62
+ ```json
63
+ {
64
+ "plugin": ["opencode-antigravity-auth@1.2.7"],
65
+ "provider": {
66
+ "google": {
67
+ "models": {
68
+ "antigravity-gemini-3-pro-high": {
69
+ "name": "Gemini 3 Pro High (Antigravity)",
70
+ "limit": { "context": 1048576, "output": 65535 },
71
+ "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
72
+ },
73
+ "antigravity-claude-sonnet-4-5": {
74
+ "name": "Claude Sonnet 4.5 (Antigravity)",
75
+ "limit": { "context": 200000, "output": 64000 },
76
+ "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
77
+ }
78
+ }
79
+ }
80
+ }
81
+ }
82
+ ```
83
83
 
84
84
  > See [Available models](#available-models) for the full list.
85
85
 
86
86
  4. **Use it:**
87
87
 
88
88
  ```bash
89
- opencode run "Hello" --model=google/gemini-3-pro-high
89
+ opencode run "Hello" --model=google/antigravity-gemini-3-pro-high
90
90
  ```
91
91
 
92
92
  ---
@@ -111,14 +111,14 @@ mkdir -p ~/.config/opencode
111
111
 
112
112
  if [ -f ~/.config/opencode/opencode.json ]; then
113
113
  if command -v jq &> /dev/null; then
114
- jq '.plugin = ((.plugin // []) + ["opencode-antigravity-auth@1.2.6"] | unique)' \
114
+ jq '.plugin = ((.plugin // []) + ["opencode-antigravity-auth@1.2.7"] | unique)' \
115
115
  ~/.config/opencode/opencode.json > /tmp/oc.json && \
116
116
  mv /tmp/oc.json ~/.config/opencode/opencode.json
117
117
  else
118
- echo "Add \"opencode-antigravity-auth@1.2.6\" to the plugin array manually"
118
+ echo "Add \"opencode-antigravity-auth@1.2.7\" to the plugin array manually"
119
119
  fi
120
120
  else
121
- echo '{"plugin":["opencode-antigravity-auth@1.2.6"]}' > ~/.config/opencode/opencode.json
121
+ echo '{"plugin":["opencode-antigravity-auth@1.2.7"]}' > ~/.config/opencode/opencode.json
122
122
  fi
123
123
  ```
124
124
 
@@ -157,17 +157,18 @@ Merge model definitions into the user's config file (`~/.config/opencode/opencod
157
157
  # If jq is available, merge models programmatically
158
158
  if command -v jq &> /dev/null; then
159
159
  jq '.provider.google.models = {
160
- "gemini-3-pro-low": {"name": "Gemini 3 Pro Low (Antigravity)", "limit": {"context": 1048576, "output": 65535}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
161
- "gemini-3-pro-high": {"name": "Gemini 3 Pro High (Antigravity)", "limit": {"context": 1048576, "output": 65535}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
162
- "gemini-3-flash": {"name": "Gemini 3 Flash (Antigravity)", "limit": {"context": 1048576, "output": 65536}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
163
- "claude-sonnet-4-5": {"name": "Claude Sonnet 4.5 (Antigravity)", "limit": {"context": 200000, "output": 64000}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
164
- "claude-sonnet-4-5-thinking-low": {"name": "Claude Sonnet 4.5 Thinking Low (Antigravity)", "limit": {"context": 200000, "output": 64000}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
165
- "claude-sonnet-4-5-thinking-medium": {"name": "Claude Sonnet 4.5 Thinking Medium (Antigravity)", "limit": {"context": 200000, "output": 64000}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
166
- "claude-sonnet-4-5-thinking-high": {"name": "Claude Sonnet 4.5 Thinking High (Antigravity)", "limit": {"context": 200000, "output": 64000}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
167
- "claude-opus-4-5-thinking-low": {"name": "Claude Opus 4.5 Thinking Low (Antigravity)", "limit": {"context": 200000, "output": 64000}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
168
- "claude-opus-4-5-thinking-medium": {"name": "Claude Opus 4.5 Thinking Medium (Antigravity)", "limit": {"context": 200000, "output": 64000}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
169
- "claude-opus-4-5-thinking-high": {"name": "Claude Opus 4.5 Thinking High (Antigravity)", "limit": {"context": 200000, "output": 64000}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
170
- "gpt-oss-120b-medium": {"name": "GPT-OSS 120B Medium (Antigravity)", "limit": {"context": 131072, "output": 32768}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}}
160
+ "antigravity-gemini-3-pro-low": {"name": "Gemini 3 Pro Low (Antigravity)", "limit": {"context": 1048576, "output": 65535}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
161
+ "antigravity-gemini-3-pro-medium": {"name": "Gemini 3 Pro Medium (Antigravity)", "limit": {"context": 1048576, "output": 65535}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
162
+ "antigravity-gemini-3-pro-high": {"name": "Gemini 3 Pro High (Antigravity)", "limit": {"context": 1048576, "output": 65535}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
163
+ "antigravity-gemini-3-flash": {"name": "Gemini 3 Flash (Antigravity)", "limit": {"context": 1048576, "output": 65536}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
164
+ "antigravity-claude-sonnet-4-5": {"name": "Claude Sonnet 4.5 (Antigravity)", "limit": {"context": 200000, "output": 64000}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
165
+ "antigravity-claude-sonnet-4-5-thinking-low": {"name": "Claude Sonnet 4.5 Thinking Low (Antigravity)", "limit": {"context": 200000, "output": 64000}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
166
+ "antigravity-claude-sonnet-4-5-thinking-medium": {"name": "Claude Sonnet 4.5 Thinking Medium (Antigravity)", "limit": {"context": 200000, "output": 64000}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
167
+ "antigravity-claude-sonnet-4-5-thinking-high": {"name": "Claude Sonnet 4.5 Thinking High (Antigravity)", "limit": {"context": 200000, "output": 64000}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
168
+ "antigravity-claude-opus-4-5-thinking-low": {"name": "Claude Opus 4.5 Thinking Low (Antigravity)", "limit": {"context": 200000, "output": 64000}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
169
+ "antigravity-claude-opus-4-5-thinking-medium": {"name": "Claude Opus 4.5 Thinking Medium (Antigravity)", "limit": {"context": 200000, "output": 64000}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
170
+ "antigravity-claude-opus-4-5-thinking-high": {"name": "Claude Opus 4.5 Thinking High (Antigravity)", "limit": {"context": 200000, "output": 64000}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}},
171
+ "antigravity-gpt-oss-120b-medium": {"name": "GPT-OSS 120B Medium (Antigravity)", "limit": {"context": 131072, "output": 32768}, "modalities": {"input": ["text", "image", "pdf"], "output": ["text"]}}
171
172
  } + (.provider.google.models // {})' ~/.config/opencode/opencode.json > /tmp/oc.json && mv /tmp/oc.json ~/.config/opencode/opencode.json
172
173
  fi
173
174
  ```
@@ -177,7 +178,7 @@ Or edit the file manually and add the models from the [Available models](#availa
177
178
  #### Step 6: Verify setup
178
179
 
179
180
  ```bash
180
- opencode run "Hello" --model=google/gemini-3-pro-high
181
+ opencode run "Hello" --model=google/antigravity-gemini-3-pro-high
181
182
  ```
182
183
 
183
184
  If successful, tell the user: **"Setup complete! You can now use Antigravity models in OpenCode."**
@@ -188,18 +189,15 @@ If successful, tell the user: **"Setup complete! You can now use Antigravity mod
188
189
 
189
190
  ## Migration Guide
190
191
 
191
- ### Upgrading to v1.2.5
192
+ ### Upgrading to v1.2.7
192
193
 
193
- Version 1.2.5 introduces significant reliability improvements for Claude models. No breaking changes—existing configurations continue to work.
194
+ Version 1.2.7 standardizes model naming with the `antigravity-` prefix for all models using Antigravity quota.
194
195
 
195
- #### What's New
196
+ #### What Changed
196
197
 
197
- | Feature | Description |
198
- |---------|-------------|
199
- | **Session Recovery** | Auto-recovers from `tool_result_missing` errors |
200
- | **Defense-in-Depth Tool Pairing** | Multi-layer fix for "Could not process tool results" errors |
201
- | **Proactive Token Refresh** | Refreshes tokens 30min before expiry to prevent mid-session failures |
202
- | **Signature Caching** | Persistent disk cache for thinking block signatures |
198
+ All Antigravity-routed models now use the `antigravity-` prefix consistently. This ensures clear distinction between:
199
+ - **Antigravity models** (`antigravity-gemini-3-pro-high`) → Routed through this plugin, uses Antigravity quota
200
+ - **Gemini CLI models** (`gemini-2.5-flash`) → Handled by OpenCode's built-in Gemini support, uses Gemini CLI quota
203
201
 
204
202
  #### Upgrade Steps
205
203
 
@@ -207,36 +205,83 @@ Version 1.2.5 introduces significant reliability improvements for Claude models.
207
205
 
208
206
  ```json
209
207
  {
210
- "plugin": ["opencode-antigravity-auth@1.2.6"]
208
+ "plugin": ["opencode-antigravity-auth@1.2.7"]
211
209
  }
212
210
  ```
213
211
 
214
- 2. **Update model names to new thinking budget format** (REQUIRED for thinking models):
212
+ 2. **Add `antigravity-` prefix to your model IDs:**
215
213
 
216
- The old generic `-thinking` suffix is now replaced with explicit budget tiers:
214
+ | Old Model ID | New Model ID |
215
+ |--------------|--------------|
216
+ | `gemini-3-pro-high` | `antigravity-gemini-3-pro-high` |
217
+ | `gemini-3-flash` | `antigravity-gemini-3-flash` |
218
+ | `claude-sonnet-4-5` | `antigravity-claude-sonnet-4-5` |
219
+ | `claude-opus-4-5-thinking-high` | `antigravity-claude-opus-4-5-thinking-high` |
217
220
 
218
- | Old Model ID (deprecated) | New Model ID | Thinking Budget |
219
- |---------------------------|--------------|-----------------|
220
- | `claude-sonnet-4-5-thinking` | `claude-sonnet-4-5-thinking-low` | 8,192 tokens |
221
- | `claude-sonnet-4-5-thinking` | `claude-sonnet-4-5-thinking-medium` | 16,384 tokens |
222
- | `claude-sonnet-4-5-thinking` | `claude-sonnet-4-5-thinking-high` | 32,768 tokens |
223
- | `claude-opus-4-5-thinking` | `claude-opus-4-5-thinking-low` | 8,192 tokens |
224
- | `claude-opus-4-5-thinking` | `claude-opus-4-5-thinking-medium` | 16,384 tokens |
225
- | `claude-opus-4-5-thinking` | `claude-opus-4-5-thinking-high` | 32,768 tokens |
221
+ 3. **Replace your model configuration** in `~/.config/opencode/opencode.json`:
226
222
 
227
- Update your `~/.config/opencode/opencode.json`:
223
+ Copy the full configuration from the [Full model configuration](#available-models) section, or use this complete config:
228
224
 
229
- ```diff
225
+ ```json
230
226
  {
227
+ "plugin": ["opencode-antigravity-auth@1.2.7"],
231
228
  "provider": {
232
229
  "google": {
233
230
  "models": {
234
- - "claude-sonnet-4-5-thinking": {
235
- - "name": "Claude Sonnet 4.5 Thinking (Antigravity)",
236
- + "claude-sonnet-4-5-thinking-medium": {
237
- + "name": "Claude Sonnet 4.5 Thinking Medium (Antigravity)",
231
+ "antigravity-gemini-3-pro-low": {
232
+ "name": "Gemini 3 Pro Low (Antigravity)",
233
+ "limit": { "context": 1048576, "output": 65535 },
234
+ "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
235
+ },
236
+ "antigravity-gemini-3-pro-high": {
237
+ "name": "Gemini 3 Pro High (Antigravity)",
238
+ "limit": { "context": 1048576, "output": 65535 },
239
+ "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
240
+ },
241
+ "antigravity-gemini-3-flash": {
242
+ "name": "Gemini 3 Flash (Antigravity)",
243
+ "limit": { "context": 1048576, "output": 65536 },
244
+ "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
245
+ },
246
+ "antigravity-claude-sonnet-4-5": {
247
+ "name": "Claude Sonnet 4.5 (Antigravity)",
248
+ "limit": { "context": 200000, "output": 64000 },
249
+ "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
250
+ },
251
+ "antigravity-claude-sonnet-4-5-thinking-low": {
252
+ "name": "Claude Sonnet 4.5 Thinking Low (Antigravity)",
253
+ "limit": { "context": 200000, "output": 64000 },
254
+ "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
255
+ },
256
+ "antigravity-claude-sonnet-4-5-thinking-medium": {
257
+ "name": "Claude Sonnet 4.5 Thinking Medium (Antigravity)",
238
258
  "limit": { "context": 200000, "output": 64000 },
239
259
  "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
260
+ },
261
+ "antigravity-claude-sonnet-4-5-thinking-high": {
262
+ "name": "Claude Sonnet 4.5 Thinking High (Antigravity)",
263
+ "limit": { "context": 200000, "output": 64000 },
264
+ "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
265
+ },
266
+ "antigravity-claude-opus-4-5-thinking-low": {
267
+ "name": "Claude Opus 4.5 Thinking Low (Antigravity)",
268
+ "limit": { "context": 200000, "output": 64000 },
269
+ "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
270
+ },
271
+ "antigravity-claude-opus-4-5-thinking-medium": {
272
+ "name": "Claude Opus 4.5 Thinking Medium (Antigravity)",
273
+ "limit": { "context": 200000, "output": 64000 },
274
+ "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
275
+ },
276
+ "antigravity-claude-opus-4-5-thinking-high": {
277
+ "name": "Claude Opus 4.5 Thinking High (Antigravity)",
278
+ "limit": { "context": 200000, "output": 64000 },
279
+ "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
280
+ },
281
+ "antigravity-gpt-oss-120b-medium": {
282
+ "name": "GPT-OSS 120B Medium (Antigravity)",
283
+ "limit": { "context": 131072, "output": 32768 },
284
+ "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
240
285
  }
241
286
  }
242
287
  }
@@ -244,48 +289,7 @@ Version 1.2.5 introduces significant reliability improvements for Claude models.
244
289
  }
245
290
  ```
246
291
 
247
- > **Tip:** Use `-medium` as a balanced default. Use `-high` for complex reasoning tasks, `-low` for faster responses.
248
-
249
- 3. **Restart OpenCode** to load the new version:
250
-
251
- ```bash
252
- # If OpenCode is running, exit and restart
253
- opencode
254
- ```
255
-
256
- 4. **(Optional) Review new config options** in `~/.config/opencode/antigravity.json`:
257
-
258
- ```json
259
- {
260
- "session_recovery": true,
261
- "auto_resume": true,
262
- "resume_text": "continue",
263
- "tool_id_recovery": true,
264
- "claude_tool_hardening": true,
265
- "proactive_token_refresh": true,
266
- "signature_cache": {
267
- "enabled": true,
268
- "memory_ttl_seconds": 3600,
269
- "disk_ttl_seconds": 172800
270
- }
271
- }
272
- ```
273
-
274
- All new options are **enabled by default**—no action required for most users.
275
-
276
- #### Breaking Changes
277
-
278
- **None.** v1.2.5 is fully backward compatible.
279
-
280
- #### Troubleshooting
281
-
282
- | Issue | Solution |
283
- |-------|----------|
284
- | Signature errors after upgrade | Delete `~/.config/opencode/antigravity-signature-cache.json` and restart |
285
- | Recovery not triggering | Ensure `session_recovery: true` in config (default) |
286
- | Old version still loading | Clear npm cache: `npm cache clean --force` and restart OpenCode |
287
-
288
- For detailed changes, see [docs/MILESTONE_v1.2.5.md](docs/MILESTONE_v1.2.5.md).
292
+ 4. **Restart OpenCode** to load the new version.
289
293
 
290
294
  ---
291
295
 
@@ -293,31 +297,35 @@ For detailed changes, see [docs/MILESTONE_v1.2.5.md](docs/MILESTONE_v1.2.5.md).
293
297
 
294
298
  Add these models to your `~/.config/opencode/opencode.json` under `provider.google.models`:
295
299
 
296
- ### Gemini Models
300
+ > **Two Gemini sources:** This plugin provides Antigravity-routed Gemini models (`antigravity-` prefix). OpenCode also has built-in Gemini CLI support (no prefix, e.g., `gemini-2.5-flash`). See [How Quota Routing Works](#how-quota-routing-works) for details.
301
+
302
+ ### Gemini Models (Antigravity)
297
303
 
298
- | Model ID | Description | Thinking |
299
- |----------|-------------|----------|
300
- | `gemini-3-pro-low` | Gemini 3 Pro (low thinking) | thinkingLevel: "low" |
301
- | `gemini-3-pro-high` | Gemini 3 Pro (high thinking) | thinkingLevel: "high" |
302
- | `gemini-3-flash` | Gemini 3 Flash | Default |
304
+ | Model ID | Description | Thinking | Quota |
305
+ |----------|-------------|----------|-------|
306
+ | `antigravity-gemini-3-pro-low` | Gemini 3 Pro (low thinking) | thinkingLevel: "low" | Antigravity |
307
+ | `antigravity-gemini-3-pro-high` | Gemini 3 Pro (high thinking) | thinkingLevel: "high" | Antigravity |
308
+ | `antigravity-gemini-3-flash` | Gemini 3 Flash | Default | Antigravity |
303
309
 
304
310
  ### Claude Models
305
311
 
306
312
  | Model ID | Description | Thinking Budget |
307
313
  |----------|-------------|-----------------|
308
- | `claude-sonnet-4-5` | Claude Sonnet 4.5 (no thinking) | None |
309
- | `claude-sonnet-4-5-thinking-low` | Claude Sonnet 4.5 Thinking | 8,192 tokens |
310
- | `claude-sonnet-4-5-thinking-medium` | Claude Sonnet 4.5 Thinking | 16,384 tokens |
311
- | `claude-sonnet-4-5-thinking-high` | Claude Sonnet 4.5 Thinking | 32,768 tokens |
312
- | `claude-opus-4-5-thinking-low` | Claude Opus 4.5 Thinking | 8,192 tokens |
313
- | `claude-opus-4-5-thinking-medium` | Claude Opus 4.5 Thinking | 16,384 tokens |
314
- | `claude-opus-4-5-thinking-high` | Claude Opus 4.5 Thinking | 32,768 tokens |
314
+ | `antigravity-claude-sonnet-4-5` | Claude Sonnet 4.5 (no thinking) | None |
315
+ | `antigravity-claude-sonnet-4-5-thinking-low` | Claude Sonnet 4.5 Thinking | 8,192 tokens |
316
+ | `antigravity-claude-sonnet-4-5-thinking-medium` | Claude Sonnet 4.5 Thinking | 16,384 tokens |
317
+ | `antigravity-claude-sonnet-4-5-thinking-high` | Claude Sonnet 4.5 Thinking | 32,768 tokens |
318
+ | `antigravity-claude-opus-4-5-thinking-low` | Claude Opus 4.5 Thinking | 8,192 tokens |
319
+ | `antigravity-claude-opus-4-5-thinking-medium` | Claude Opus 4.5 Thinking | 16,384 tokens |
320
+ | `antigravity-claude-opus-4-5-thinking-high` | Claude Opus 4.5 Thinking | 32,768 tokens |
321
+
322
+ > **Note:** Claude and GPT models are only available through Antigravity API. The `antigravity-` prefix is required for these models.
315
323
 
316
324
  ### Other Models
317
325
 
318
326
  | Model ID | Description |
319
327
  |----------|-------------|
320
- | `gpt-oss-120b-medium` | GPT-OSS 120B Medium |
328
+ | `antigravity-gpt-oss-120b-medium` | GPT-OSS 120B Medium |
321
329
 
322
330
  > **Tier suffixes:** Use `-low`, `-medium`, or `-high` to control thinking budget. Higher tiers = more reasoning tokens.
323
331
 
@@ -329,57 +337,57 @@ Add these models to your `~/.config/opencode/opencode.json` under `provider.goog
329
337
  "provider": {
330
338
  "google": {
331
339
  "models": {
332
- "gemini-3-pro-low": {
340
+ "antigravity-gemini-3-pro-low": {
333
341
  "name": "Gemini 3 Pro Low (Antigravity)",
334
342
  "limit": { "context": 1048576, "output": 65535 },
335
343
  "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
336
344
  },
337
- "gemini-3-pro-high": {
345
+ "antigravity-gemini-3-pro-high": {
338
346
  "name": "Gemini 3 Pro High (Antigravity)",
339
347
  "limit": { "context": 1048576, "output": 65535 },
340
348
  "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
341
349
  },
342
- "gemini-3-flash": {
350
+ "antigravity-gemini-3-flash": {
343
351
  "name": "Gemini 3 Flash (Antigravity)",
344
352
  "limit": { "context": 1048576, "output": 65536 },
345
353
  "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
346
354
  },
347
- "claude-sonnet-4-5": {
355
+ "antigravity-claude-sonnet-4-5": {
348
356
  "name": "Claude Sonnet 4.5 (Antigravity)",
349
357
  "limit": { "context": 200000, "output": 64000 },
350
358
  "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
351
359
  },
352
- "claude-sonnet-4-5-thinking-low": {
360
+ "antigravity-claude-sonnet-4-5-thinking-low": {
353
361
  "name": "Claude Sonnet 4.5 Thinking Low (Antigravity)",
354
362
  "limit": { "context": 200000, "output": 64000 },
355
363
  "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
356
364
  },
357
- "claude-sonnet-4-5-thinking-medium": {
365
+ "antigravity-claude-sonnet-4-5-thinking-medium": {
358
366
  "name": "Claude Sonnet 4.5 Thinking Medium (Antigravity)",
359
367
  "limit": { "context": 200000, "output": 64000 },
360
368
  "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
361
369
  },
362
- "claude-sonnet-4-5-thinking-high": {
370
+ "antigravity-claude-sonnet-4-5-thinking-high": {
363
371
  "name": "Claude Sonnet 4.5 Thinking High (Antigravity)",
364
372
  "limit": { "context": 200000, "output": 64000 },
365
373
  "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
366
374
  },
367
- "claude-opus-4-5-thinking-low": {
375
+ "antigravity-claude-opus-4-5-thinking-low": {
368
376
  "name": "Claude Opus 4.5 Thinking Low (Antigravity)",
369
377
  "limit": { "context": 200000, "output": 64000 },
370
378
  "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
371
379
  },
372
- "claude-opus-4-5-thinking-medium": {
380
+ "antigravity-claude-opus-4-5-thinking-medium": {
373
381
  "name": "Claude Opus 4.5 Thinking Medium (Antigravity)",
374
382
  "limit": { "context": 200000, "output": 64000 },
375
383
  "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
376
384
  },
377
- "claude-opus-4-5-thinking-high": {
385
+ "antigravity-claude-opus-4-5-thinking-high": {
378
386
  "name": "Claude Opus 4.5 Thinking High (Antigravity)",
379
387
  "limit": { "context": 200000, "output": 64000 },
380
388
  "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
381
389
  },
382
- "gpt-oss-120b-medium": {
390
+ "antigravity-gpt-oss-120b-medium": {
383
391
  "name": "GPT-OSS 120B Medium (Antigravity)",
384
392
  "limit": { "context": 131072, "output": 32768 },
385
393
  "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
@@ -392,6 +400,61 @@ Add these models to your `~/.config/opencode/opencode.json` under `provider.goog
392
400
 
393
401
  </details>
394
402
 
403
+ ## How Quota Routing Works
404
+
405
+ This plugin gives you access to **two separate quota pools** for Gemini models, allowing you to maximize your usage by switching between them.
406
+
407
+ ### Two Gemini Model Sources
408
+
409
+ | Source | Model ID Example | Handled By | Quota Pool |
410
+ |--------|------------------|------------|------------|
411
+ | **Antigravity** | `google/antigravity-gemini-3-pro-high` | This plugin | Antigravity quota |
412
+ | **Gemini CLI** | `google/gemini-2.5-flash` | OpenCode built-in | Gemini CLI quota |
413
+
414
+ ### Request Flow
415
+
416
+ ```
417
+ ┌─────────────────────────────────────────────────────────────────────┐
418
+ │ Request Routing │
419
+ ├─────────────────────────────────────────────────────────────────────┤
420
+ │ │
421
+ │ google/antigravity-gemini-3-pro-high │
422
+ │ └─→ This plugin intercepts (has "antigravity-" prefix) │
423
+ │ └─→ Routes to Antigravity API │
424
+ │ └─→ Uses YOUR Antigravity quota │
425
+ │ │
426
+ │ google/gemini-2.5-flash (no prefix) │
427
+ │ └─→ This plugin ignores (no "antigravity-" prefix) │
428
+ │ └─→ Falls through to OpenCode's built-in Gemini handler │
429
+ │ └─→ Uses YOUR Gemini CLI quota │
430
+ │ │
431
+ │ google/antigravity-claude-sonnet-4-5 │
432
+ │ └─→ This plugin intercepts (Claude only via Antigravity) │
433
+ │ └─→ Routes to Antigravity API │
434
+ │ └─→ Uses YOUR Antigravity quota │
435
+ │ │
436
+ └─────────────────────────────────────────────────────────────────────┘
437
+ ```
438
+
439
+ ### Routing Examples
440
+
441
+ | Model ID | Routed Via | Quota Used |
442
+ |----------|------------|------------|
443
+ | `google/antigravity-gemini-3-pro-high` | This plugin | Antigravity |
444
+ | `google/antigravity-gemini-3-flash` | This plugin | Antigravity |
445
+ | `google/gemini-2.5-flash` | OpenCode built-in | Gemini CLI |
446
+ | `google/gemini-2.5-pro` | OpenCode built-in | Gemini CLI |
447
+ | `google/antigravity-claude-sonnet-4-5` | This plugin | Antigravity |
448
+ | `google/antigravity-claude-opus-4-5-thinking-high` | This plugin | Antigravity |
449
+
450
+ ### Why This Matters
451
+
452
+ - **Double your Gemini quota:** Use both Antigravity and Gemini CLI pools by switching model prefixes
453
+ - **Automatic failover strategy:** When Antigravity quota is exhausted, switch to non-prefixed Gemini models
454
+ - **Claude/GPT require Antigravity:** These models are only available through Antigravity API, so they always need the `antigravity-` prefix
455
+
456
+ > **Tip:** Configure both prefixed (`antigravity-gemini-3-pro-high`) and non-prefixed (`gemini-2.5-flash`) Gemini models in your config to maximize quota availability.
457
+
395
458
  ## Multi-account load balancing
396
459
 
397
460
  The plugin supports multiple Google accounts to maximize rate limits and provide automatic failover.
@@ -411,22 +474,14 @@ The plugin supports multiple Google accounts to maximize rate limits and provide
411
474
 
412
475
  ### Dual quota pools (Gemini only)
413
476
 
414
- For Gemini models, the plugin can access **two independent quota pools** using the same Google account:
477
+ Gemini models can access **two independent quota pools**. See [How Quota Routing Works](#how-quota-routing-works) for details.
415
478
 
416
- | Quota Pool | Headers Used | When Used |
417
- |------------|--------------|-----------|
418
- | **Antigravity** | Antigravity headers | Primary (tried first) |
419
- | **Gemini CLI** | Gemini CLI headers | Fallback when Antigravity is rate-limited |
479
+ | Quota Pool | Model ID Example | Endpoint |
480
+ |------------|------------------|----------|
481
+ | **Antigravity** | `antigravity-gemini-3-pro-high` | `daily-cloudcode-pa.sandbox.googleapis.com` |
482
+ | **Gemini CLI** | `gemini-2.5-flash` (no prefix) | `cloudcode-pa.googleapis.com` |
420
483
 
421
- This effectively **doubles your Gemini quota** per account.
422
-
423
- **How it works:**
424
- 1. Plugin tries Antigravity quota first
425
- 2. If rate-limited (429), it automatically retries using Gemini CLI headers
426
- 3. Only if **both** pools are exhausted does it switch to the next account
427
- 4. This happens seamlessly — conversation context is preserved when switching between quota pools.
428
-
429
- > **Note:** Claude models only work with Antigravity headers, so this dual-pool fallback only applies to Gemini models.
484
+ > **Tip:** When Antigravity quota is exhausted for one account, the plugin tries the next account. You can also switch to non-prefixed Gemini models to use Gemini CLI quota instead.
430
485
 
431
486
  ### Quiet mode
432
487
 
@@ -561,6 +616,22 @@ Environment variables override config file values.
561
616
 
562
617
  ## Known plugin interactions
563
618
 
619
+ ### opencode-gemini-auth (Gemini CLI OAuth)
620
+
621
+ **Compatibility:** This plugin (`opencode-antigravity-auth`) **fully covers** the Gemini CLI OAuth functionality provided by `opencode-gemini-auth`.
622
+
623
+ If you install this plugin, you **do not need** to install `opencode-gemini-auth` separately. Our plugin provides:
624
+ - All Gemini CLI OAuth features (authentication, token refresh)
625
+ - Additional Antigravity API access (Claude, GPT models)
626
+ - Dual quota pool support (both Antigravity and Gemini CLI quotas)
627
+
628
+ | Plugin | Gemini CLI OAuth | Antigravity API | Claude/GPT |
629
+ |--------|------------------|-----------------|------------|
630
+ | `opencode-gemini-auth` | Yes | No | No |
631
+ | `opencode-antigravity-auth` (this plugin) | Yes | Yes | Yes |
632
+
633
+ > **Note:** If you have both plugins installed, remove `opencode-gemini-auth` to avoid conflicts.
634
+
564
635
  ### @tarquinen/opencode-dcp (Dynamic Context Pruning)
565
636
 
566
637
  **Issue:** DCP creates synthetic assistant messages to summarize pruned tool outputs. These synthetic messages lack the thinking block that Claude's API requires for thinking-enabled models.
@@ -570,19 +641,19 @@ Environment variables override config file values.
570
641
  Expected 'thinking' or 'redacted_thinking', but found 'text'
571
642
  ```
572
643
 
573
- **Solution:** Ensure DCP loads **before** this plugin. We inject `redacted_thinking` blocks into any assistant message that lacks one.
644
+ **Solution:** Ensure this plugin loads **before** DCP. We inject `redacted_thinking` blocks into assistant messages, and DCP's processing runs after our fixes are applied.
574
645
 
575
646
  | Order | Result |
576
647
  |-------|--------|
577
- | DCPantigravity | Works - we fix DCP's synthetic messages |
578
- | antigravityDCP | Broken - DCP creates messages after our fix runs |
648
+ | antigravityDCP | Works - DCP processes messages after our fixes |
649
+ | DCPantigravity | Broken - DCP creates messages before our fix runs |
579
650
 
580
651
  **Correct:**
581
652
  ```json
582
653
  {
583
654
  "plugin": [
584
- "@tarquinen/opencode-dcp@latest",
585
- "opencode-antigravity-auth@latest"
655
+ "opencode-antigravity-auth@1.2.7",
656
+ "@tarquinen/opencode-dcp@latest"
586
657
  ]
587
658
  }
588
659
  ```
@@ -591,8 +662,8 @@ Expected 'thinking' or 'redacted_thinking', but found 'text'
591
662
  ```json
592
663
  {
593
664
  "plugin": [
594
- "opencode-antigravity-auth@latest",
595
- "@tarquinen/opencode-dcp@latest"
665
+ "@tarquinen/opencode-dcp@latest",
666
+ "opencode-antigravity-auth@1.2.7"
596
667
  ]
597
668
  }
598
669
  ```
@@ -36,6 +36,12 @@ export declare const ANTIGRAVITY_LOAD_ENDPOINTS: readonly ["https://cloudcode-pa
36
36
  * Primary endpoint to use (daily sandbox - same as CLIProxy/Vibeproxy).
37
37
  */
38
38
  export declare const ANTIGRAVITY_ENDPOINT = "https://daily-cloudcode-pa.sandbox.googleapis.com";
39
+ /**
40
+ * Gemini CLI endpoint (production).
41
+ * Used for models without :antigravity suffix.
42
+ * Same as opencode-gemini-auth's GEMINI_CODE_ASSIST_ENDPOINT.
43
+ */
44
+ export declare const GEMINI_CLI_ENDPOINT = "https://cloudcode-pa.googleapis.com";
39
45
  /**
40
46
  * Hardcoded project id used when Antigravity does not return one (e.g., business/workspace accounts).
41
47
  */
@@ -80,4 +86,6 @@ export declare const CLAUDE_TOOL_SYSTEM_INSTRUCTION = "CRITICAL TOOL USAGE INSTR
80
86
  * {params} will be replaced with the actual parameter list.
81
87
  */
82
88
  export declare const CLAUDE_DESCRIPTION_PROMPT = "\n\n\u26A0\uFE0F STRICT PARAMETERS: {params}.";
89
+ export declare const EMPTY_SCHEMA_PLACEHOLDER_NAME = "_placeholder";
90
+ export declare const EMPTY_SCHEMA_PLACEHOLDER_DESCRIPTION = "Placeholder. Always pass true.";
83
91
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,qBAAqB,8EAA8E,CAAC;AAEjH;;GAEG;AACH,eAAO,MAAM,yBAAyB,wCAAwC,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAM/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,0CAA0C,CAAC;AAEhF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,sDAAsD,CAAC;AAC9F,eAAO,MAAM,6BAA6B,yDAAyD,CAAC;AACpG,eAAO,MAAM,yBAAyB,wCAAwC,CAAC;AAE/E;;;GAGG;AACH,eAAO,MAAM,8BAA8B,+JAIjC,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,0BAA0B,+JAI7B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,oBAAoB,sDAA6B,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,8BAA8B,sBAAsB,CAAC;AAElE,eAAO,MAAM,mBAAmB;;;;CAItB,CAAC;AAEX,eAAO,MAAM,kBAAkB;;;;CAIrB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,YAAY,CAAC;AAEvD;;GAEG;AACH,eAAO,MAAM,uBAAuB,WAAW,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,SAE0B,CAAC;AAM5D;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,4zBAWiD,CAAC;AAE7F;;;GAGG;AACH,eAAO,MAAM,yBAAyB,kDAAwC,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,qBAAqB,8EAA8E,CAAC;AAEjH;;GAEG;AACH,eAAO,MAAM,yBAAyB,wCAAwC,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAM/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,0CAA0C,CAAC;AAEhF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,sDAAsD,CAAC;AAC9F,eAAO,MAAM,6BAA6B,yDAAyD,CAAC;AACpG,eAAO,MAAM,yBAAyB,wCAAwC,CAAC;AAE/E;;;GAGG;AACH,eAAO,MAAM,8BAA8B,+JAIjC,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,0BAA0B,+JAI7B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,oBAAoB,sDAA6B,CAAC;AAE/D;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,wCAA4B,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,8BAA8B,sBAAsB,CAAC;AAElE,eAAO,MAAM,mBAAmB;;;;CAItB,CAAC;AAEX,eAAO,MAAM,kBAAkB;;;;CAIrB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,YAAY,CAAC;AAEvD;;GAEG;AACH,eAAO,MAAM,uBAAuB,WAAW,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,SAE0B,CAAC;AAM5D;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,4zBAWiD,CAAC;AAE7F;;;GAGG;AACH,eAAO,MAAM,yBAAyB,kDAAwC,CAAC;AAE/E,eAAO,MAAM,6BAA6B,iBAAiB,CAAC;AAC5D,eAAO,MAAM,oCAAoC,mCAAmC,CAAC"}
@@ -50,6 +50,12 @@ export const ANTIGRAVITY_LOAD_ENDPOINTS = [
50
50
  * Primary endpoint to use (daily sandbox - same as CLIProxy/Vibeproxy).
51
51
  */
52
52
  export const ANTIGRAVITY_ENDPOINT = ANTIGRAVITY_ENDPOINT_DAILY;
53
+ /**
54
+ * Gemini CLI endpoint (production).
55
+ * Used for models without :antigravity suffix.
56
+ * Same as opencode-gemini-auth's GEMINI_CODE_ASSIST_ENDPOINT.
57
+ */
58
+ export const GEMINI_CLI_ENDPOINT = ANTIGRAVITY_ENDPOINT_PROD;
53
59
  /**
54
60
  * Hardcoded project id used when Antigravity does not return one (e.g., business/workspace accounts).
55
61
  */
@@ -108,4 +114,6 @@ If you are unsure about a tool's parameters, YOU MUST read the schema definition
108
114
  * {params} will be replaced with the actual parameter list.
109
115
  */
110
116
  export const CLAUDE_DESCRIPTION_PROMPT = "\n\n⚠️ STRICT PARAMETERS: {params}.";
117
+ export const EMPTY_SCHEMA_PLACEHOLDER_NAME = "_placeholder";
118
+ export const EMPTY_SCHEMA_PLACEHOLDER_DESCRIPTION = "Placeholder. Always pass true.";
111
119
  //# sourceMappingURL=constants.js.map