opencode-antigravity-auth 1.2.8-beta.1 → 1.2.8-beta.3
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.
- package/README.md +254 -132
- package/dist/src/plugin/accounts.d.ts +9 -1
- package/dist/src/plugin/accounts.d.ts.map +1 -1
- package/dist/src/plugin/accounts.js +59 -1
- package/dist/src/plugin/accounts.js.map +1 -1
- package/dist/src/plugin/config/loader.d.ts.map +1 -1
- package/dist/src/plugin/config/loader.js +10 -1
- package/dist/src/plugin/config/loader.js.map +1 -1
- package/dist/src/plugin/config/schema.d.ts +32 -0
- package/dist/src/plugin/config/schema.d.ts.map +1 -1
- package/dist/src/plugin/config/schema.js +29 -0
- package/dist/src/plugin/config/schema.js.map +1 -1
- package/dist/src/plugin/core/streaming/transformer.d.ts +2 -1
- package/dist/src/plugin/core/streaming/transformer.d.ts.map +1 -1
- package/dist/src/plugin/core/streaming/transformer.js +98 -4
- package/dist/src/plugin/core/streaming/transformer.js.map +1 -1
- package/dist/src/plugin/core/streaming/types.d.ts +1 -0
- package/dist/src/plugin/core/streaming/types.d.ts.map +1 -1
- package/dist/src/plugin/request-helpers.d.ts +22 -17
- package/dist/src/plugin/request-helpers.d.ts.map +1 -1
- package/dist/src/plugin/request-helpers.js +100 -25
- package/dist/src/plugin/request-helpers.js.map +1 -1
- package/dist/src/plugin/request.d.ts.map +1 -1
- package/dist/src/plugin/request.js +80 -16
- package/dist/src/plugin/request.js.map +1 -1
- package/dist/src/plugin/storage.d.ts.map +1 -1
- package/dist/src/plugin/storage.js +104 -3
- package/dist/src/plugin/storage.js.map +1 -1
- package/dist/src/plugin/transform/gemini.d.ts.map +1 -1
- package/dist/src/plugin/transform/gemini.js +22 -3
- package/dist/src/plugin/transform/gemini.js.map +1 -1
- package/dist/src/plugin/transform/index.d.ts +2 -1
- package/dist/src/plugin/transform/index.d.ts.map +1 -1
- package/dist/src/plugin/transform/index.js +1 -1
- package/dist/src/plugin/transform/index.js.map +1 -1
- package/dist/src/plugin/transform/model-resolver.d.ts +14 -3
- package/dist/src/plugin/transform/model-resolver.d.ts.map +1 -1
- package/dist/src/plugin/transform/model-resolver.js +74 -16
- package/dist/src/plugin/transform/model-resolver.js.map +1 -1
- package/dist/src/plugin/transform/types.d.ts +2 -0
- package/dist/src/plugin/transform/types.d.ts.map +1 -1
- package/dist/src/plugin.d.ts.map +1 -1
- package/dist/src/plugin.js +17 -13
- package/dist/src/plugin.js.map +1 -1
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://www.npmjs.com/package/opencode-antigravity-auth)
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
|
|
7
|
-
Enable Opencode to authenticate against **Antigravity** (Google's IDE) via OAuth so you can use Antigravity rate limits and access models like `gemini-3-pro
|
|
7
|
+
Enable Opencode to authenticate against **Antigravity** (Google's IDE) via OAuth so you can use Antigravity rate limits and access models like `gemini-3-pro` and `claude-opus-4-5-thinking` with your Google credentials.
|
|
8
8
|
|
|
9
9
|
## What you get
|
|
10
10
|
|
|
@@ -12,6 +12,7 @@ Enable Opencode to authenticate against **Antigravity** (Google's IDE) via OAuth
|
|
|
12
12
|
- **Dual Quota System** - Access both Antigravity quota (Claude, Gemini 3) and Gemini CLI quota from a single plugin
|
|
13
13
|
- **Multi-Account Rotation** - Add multiple Google accounts; automatically rotates when one is rate-limited
|
|
14
14
|
- **Real-time SSE streaming** including thinking blocks and incremental output
|
|
15
|
+
- **Model Variants** - Configure thinking budget dynamically via OpenCode's variant system
|
|
15
16
|
- **Extended Thinking** - Native support for Claude thinking budgets and Gemini 3 thinking levels
|
|
16
17
|
- **Auto Recovery** - Automatic session recovery from Claude tool_result_missing errors
|
|
17
18
|
- **Plugin Compatible** - Works alongside other OpenCode plugins (opencodesync, etc.)
|
|
@@ -52,11 +53,15 @@ Install the opencode-antigravity-auth plugin and add the Antigravity model defin
|
|
|
52
53
|
"provider": {
|
|
53
54
|
"google": {
|
|
54
55
|
"models": {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
"antigravity-claude-sonnet-4-5-thinking": {
|
|
57
|
+
"name": "Claude Sonnet 4.5 Thinking",
|
|
58
|
+
"limit": { "context": 200000, "output": 64000 },
|
|
59
|
+
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
|
|
60
|
+
"variants": {
|
|
61
|
+
"low": { "thinkingConfig": { "thinkingBudget": 8192 } },
|
|
62
|
+
"max": { "thinkingConfig": { "thinkingBudget": 32768 } }
|
|
63
|
+
}
|
|
64
|
+
}
|
|
60
65
|
}
|
|
61
66
|
}
|
|
62
67
|
}
|
|
@@ -66,7 +71,7 @@ Install the opencode-antigravity-auth plugin and add the Antigravity model defin
|
|
|
66
71
|
4. **Use it:**
|
|
67
72
|
|
|
68
73
|
```bash
|
|
69
|
-
opencode run "Hello" --model=google/antigravity-claude-sonnet-4-5
|
|
74
|
+
opencode run "Hello" --model=google/antigravity-claude-sonnet-4-5-thinking --variant=max
|
|
70
75
|
```
|
|
71
76
|
|
|
72
77
|
<details>
|
|
@@ -92,69 +97,67 @@ Create `~/.config/opencode/opencode.json`:
|
|
|
92
97
|
"provider": {
|
|
93
98
|
"google": {
|
|
94
99
|
"models": {
|
|
95
|
-
"antigravity-gemini-3-pro
|
|
96
|
-
"name": "Gemini 3 Pro
|
|
100
|
+
"antigravity-gemini-3-pro": {
|
|
101
|
+
"name": "Gemini 3 Pro (Antigravity)",
|
|
97
102
|
"limit": { "context": 1048576, "output": 65535 },
|
|
98
|
-
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
103
|
+
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
|
|
104
|
+
"variants": {
|
|
105
|
+
"low": { "thinkingLevel": "low" },
|
|
106
|
+
"high": { "thinkingLevel": "high" }
|
|
107
|
+
}
|
|
104
108
|
},
|
|
105
109
|
"antigravity-gemini-3-flash": {
|
|
106
110
|
"name": "Gemini 3 Flash (Antigravity)",
|
|
107
111
|
"limit": { "context": 1048576, "output": 65536 },
|
|
108
|
-
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
"gemini-3-pro-high": {
|
|
116
|
-
"name": "Gemini 3 Pro High (Antigravity)",
|
|
117
|
-
"limit": { "context": 1048576, "output": 65535 },
|
|
118
|
-
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
119
|
-
},
|
|
120
|
-
"gemini-3-flash": {
|
|
121
|
-
"name": "Gemini 3 Flash (Antigravity)",
|
|
122
|
-
"limit": { "context": 1048576, "output": 65536 },
|
|
123
|
-
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
112
|
+
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
|
|
113
|
+
"variants": {
|
|
114
|
+
"minimal": { "thinkingLevel": "minimal" },
|
|
115
|
+
"low": { "thinkingLevel": "low" },
|
|
116
|
+
"medium": { "thinkingLevel": "medium" },
|
|
117
|
+
"high": { "thinkingLevel": "high" }
|
|
118
|
+
}
|
|
124
119
|
},
|
|
125
120
|
"antigravity-claude-sonnet-4-5": {
|
|
126
121
|
"name": "Claude Sonnet 4.5 (Antigravity)",
|
|
127
122
|
"limit": { "context": 200000, "output": 64000 },
|
|
128
123
|
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
129
124
|
},
|
|
130
|
-
"antigravity-claude-sonnet-4-5-thinking
|
|
131
|
-
"name": "Claude Sonnet 4.5
|
|
125
|
+
"antigravity-claude-sonnet-4-5-thinking": {
|
|
126
|
+
"name": "Claude Sonnet 4.5 Thinking (Antigravity)",
|
|
132
127
|
"limit": { "context": 200000, "output": 64000 },
|
|
133
|
-
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
128
|
+
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
|
|
129
|
+
"variants": {
|
|
130
|
+
"low": { "thinkingConfig": { "thinkingBudget": 8192 } },
|
|
131
|
+
"max": { "thinkingConfig": { "thinkingBudget": 32768 } }
|
|
132
|
+
}
|
|
134
133
|
},
|
|
135
|
-
"antigravity-claude-
|
|
136
|
-
"name": "Claude
|
|
134
|
+
"antigravity-claude-opus-4-5-thinking": {
|
|
135
|
+
"name": "Claude Opus 4.5 Thinking (Antigravity)",
|
|
137
136
|
"limit": { "context": 200000, "output": 64000 },
|
|
138
|
-
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
137
|
+
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
|
|
138
|
+
"variants": {
|
|
139
|
+
"low": { "thinkingConfig": { "thinkingBudget": 8192 } },
|
|
140
|
+
"max": { "thinkingConfig": { "thinkingBudget": 32768 } }
|
|
141
|
+
}
|
|
139
142
|
},
|
|
140
|
-
"
|
|
141
|
-
"name": "
|
|
142
|
-
"limit": { "context":
|
|
143
|
+
"gemini-2.5-flash": {
|
|
144
|
+
"name": "Gemini 2.5 Flash (Gemini CLI)",
|
|
145
|
+
"limit": { "context": 1048576, "output": 65536 },
|
|
143
146
|
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
144
147
|
},
|
|
145
|
-
"
|
|
146
|
-
"name": "
|
|
147
|
-
"limit": { "context":
|
|
148
|
+
"gemini-2.5-pro": {
|
|
149
|
+
"name": "Gemini 2.5 Pro (Gemini CLI)",
|
|
150
|
+
"limit": { "context": 1048576, "output": 65536 },
|
|
148
151
|
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
149
152
|
},
|
|
150
|
-
"
|
|
151
|
-
"name": "
|
|
152
|
-
"limit": { "context":
|
|
153
|
+
"gemini-3-flash-preview": {
|
|
154
|
+
"name": "Gemini 3 Flash Preview (Gemini CLI)",
|
|
155
|
+
"limit": { "context": 1048576, "output": 65536 },
|
|
153
156
|
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
154
157
|
},
|
|
155
|
-
"
|
|
156
|
-
"name": "
|
|
157
|
-
"limit": { "context":
|
|
158
|
+
"gemini-3-pro-preview": {
|
|
159
|
+
"name": "Gemini 3 Pro Preview (Gemini CLI)",
|
|
160
|
+
"limit": { "context": 1048576, "output": 65535 },
|
|
158
161
|
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
159
162
|
}
|
|
160
163
|
}
|
|
@@ -166,31 +169,33 @@ Create `~/.config/opencode/opencode.json`:
|
|
|
166
169
|
### Verification
|
|
167
170
|
|
|
168
171
|
```bash
|
|
169
|
-
opencode run "Hello" --model=google/antigravity-claude-sonnet-4-5
|
|
172
|
+
opencode run "Hello" --model=google/antigravity-claude-sonnet-4-5-thinking --variant=max
|
|
170
173
|
```
|
|
171
174
|
|
|
172
175
|
</details>
|
|
173
176
|
|
|
174
177
|
## Available Models
|
|
175
178
|
|
|
176
|
-
### Antigravity Quota
|
|
179
|
+
### Antigravity Quota (with Variants)
|
|
177
180
|
|
|
178
|
-
Models with `antigravity-` prefix use Antigravity quota:
|
|
181
|
+
Models with `antigravity-` prefix use Antigravity quota. **Thinking models support variants** for dynamic thinking budget configuration:
|
|
179
182
|
|
|
180
|
-
| Model | Description |
|
|
181
|
-
|
|
182
|
-
| `google/antigravity-gemini-3-
|
|
183
|
-
| `google/antigravity-gemini-3-
|
|
184
|
-
| `google/antigravity-
|
|
185
|
-
| `google/antigravity-claude-sonnet-4-5` | Claude Sonnet
|
|
186
|
-
| `google/antigravity-claude-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
183
|
+
| Model | Variants | Description |
|
|
184
|
+
|-------|----------|-------------|
|
|
185
|
+
| `google/antigravity-gemini-3-pro` | low, high | Gemini 3 Pro with configurable thinking |
|
|
186
|
+
| `google/antigravity-gemini-3-flash` | minimal, low, medium, high | Gemini 3 Flash with configurable thinking |
|
|
187
|
+
| `google/antigravity-claude-sonnet-4-5` | - | Claude Sonnet 4.5 (no thinking) |
|
|
188
|
+
| `google/antigravity-claude-sonnet-4-5-thinking` | low, max | Claude Sonnet with configurable thinking |
|
|
189
|
+
| `google/antigravity-claude-opus-4-5-thinking` | low, max | Claude Opus with configurable thinking |
|
|
190
|
+
|
|
191
|
+
**Variant configuration:**
|
|
192
|
+
- **Gemini 3**: Uses `thinkingLevel` string (`"low"`, `"medium"`, `"high"`)
|
|
193
|
+
- **Claude**: Uses `thinkingBudget` number (8192, 32768 tokens)
|
|
194
|
+
|
|
195
|
+
**Usage:**
|
|
196
|
+
```bash
|
|
197
|
+
opencode run "Hello" --model=google/antigravity-claude-sonnet-4-5-thinking --variant=max
|
|
198
|
+
```
|
|
194
199
|
|
|
195
200
|
### Gemini CLI Quota
|
|
196
201
|
|
|
@@ -204,7 +209,7 @@ Models with `-preview` suffix use Gemini CLI quota:
|
|
|
204
209
|
| `google/gemini-3-pro-preview` | Gemini 3 Pro (preview) |
|
|
205
210
|
|
|
206
211
|
<details>
|
|
207
|
-
<summary><b>Full models configuration</b></summary>
|
|
212
|
+
<summary><b>Full models configuration (copy-paste ready)</b></summary>
|
|
208
213
|
|
|
209
214
|
```json
|
|
210
215
|
{
|
|
@@ -213,88 +218,66 @@ Models with `-preview` suffix use Gemini CLI quota:
|
|
|
213
218
|
"provider": {
|
|
214
219
|
"google": {
|
|
215
220
|
"models": {
|
|
216
|
-
"antigravity-gemini-3-pro
|
|
217
|
-
"name": "Gemini 3 Pro
|
|
221
|
+
"antigravity-gemini-3-pro": {
|
|
222
|
+
"name": "Gemini 3 Pro (Antigravity)",
|
|
218
223
|
"limit": { "context": 1048576, "output": 65535 },
|
|
219
|
-
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
224
|
+
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
|
|
225
|
+
"variants": {
|
|
226
|
+
"low": { "thinkingLevel": "low" },
|
|
227
|
+
"high": { "thinkingLevel": "high" }
|
|
228
|
+
}
|
|
225
229
|
},
|
|
226
230
|
"antigravity-gemini-3-flash": {
|
|
227
231
|
"name": "Gemini 3 Flash (Antigravity)",
|
|
228
232
|
"limit": { "context": 1048576, "output": 65536 },
|
|
229
|
-
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
"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
|
-
"gemini-3-flash": {
|
|
242
|
-
"name": "Gemini 3 Flash (Antigravity)",
|
|
243
|
-
"limit": { "context": 1048576, "output": 65536 },
|
|
244
|
-
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
233
|
+
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
|
|
234
|
+
"variants": {
|
|
235
|
+
"minimal": { "thinkingLevel": "minimal" },
|
|
236
|
+
"low": { "thinkingLevel": "low" },
|
|
237
|
+
"medium": { "thinkingLevel": "medium" },
|
|
238
|
+
"high": { "thinkingLevel": "high" }
|
|
239
|
+
}
|
|
245
240
|
},
|
|
246
241
|
"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 Think 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 Think Medium (Antigravity)",
|
|
258
|
-
"limit": { "context": 200000, "output": 64000 },
|
|
259
|
-
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
260
|
-
},
|
|
261
|
-
"antigravity-claude-sonnet-4-5-thinking-high": {
|
|
262
|
-
"name": "Claude Sonnet 4.5 Think 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 Think Low (Antigravity)",
|
|
242
|
+
"name": "Claude Sonnet 4.5 (no thinking) (Antigravity)",
|
|
268
243
|
"limit": { "context": 200000, "output": 64000 },
|
|
269
244
|
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
270
245
|
},
|
|
271
|
-
"antigravity-claude-
|
|
272
|
-
"name": "Claude
|
|
246
|
+
"antigravity-claude-sonnet-4-5-thinking": {
|
|
247
|
+
"name": "Claude Sonnet 4.5 Thinking (Antigravity)",
|
|
273
248
|
"limit": { "context": 200000, "output": 64000 },
|
|
274
|
-
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
249
|
+
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
|
|
250
|
+
"variants": {
|
|
251
|
+
"low": { "thinkingConfig": { "thinkingBudget": 8192 } },
|
|
252
|
+
"max": { "thinkingConfig": { "thinkingBudget": 32768 } }
|
|
253
|
+
}
|
|
275
254
|
},
|
|
276
|
-
"antigravity-claude-opus-4-5-thinking
|
|
277
|
-
"name": "Claude Opus 4.5
|
|
255
|
+
"antigravity-claude-opus-4-5-thinking": {
|
|
256
|
+
"name": "Claude Opus 4.5 Thinking (Antigravity)",
|
|
278
257
|
"limit": { "context": 200000, "output": 64000 },
|
|
279
|
-
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
258
|
+
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
|
|
259
|
+
"variants": {
|
|
260
|
+
"low": { "thinkingConfig": { "thinkingBudget": 8192 } },
|
|
261
|
+
"max": { "thinkingConfig": { "thinkingBudget": 32768 } }
|
|
262
|
+
}
|
|
280
263
|
},
|
|
281
264
|
"gemini-2.5-flash": {
|
|
282
|
-
"name": "Gemini 2.5 Flash (CLI)",
|
|
265
|
+
"name": "Gemini 2.5 Flash (Gemini CLI)",
|
|
283
266
|
"limit": { "context": 1048576, "output": 65536 },
|
|
284
267
|
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
285
268
|
},
|
|
286
269
|
"gemini-2.5-pro": {
|
|
287
|
-
"name": "Gemini 2.5 Pro (CLI)",
|
|
270
|
+
"name": "Gemini 2.5 Pro (Gemini CLI)",
|
|
288
271
|
"limit": { "context": 1048576, "output": 65536 },
|
|
289
272
|
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
290
273
|
},
|
|
291
274
|
"gemini-3-flash-preview": {
|
|
292
|
-
"name": "Gemini 3 Flash Preview (CLI)",
|
|
275
|
+
"name": "Gemini 3 Flash Preview (Gemini CLI)",
|
|
293
276
|
"limit": { "context": 1048576, "output": 65536 },
|
|
294
277
|
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
295
278
|
},
|
|
296
279
|
"gemini-3-pro-preview": {
|
|
297
|
-
"name": "Gemini 3 Pro Preview (CLI)",
|
|
280
|
+
"name": "Gemini 3 Pro Preview (Gemini CLI)",
|
|
298
281
|
"limit": { "context": 1048576, "output": 65535 },
|
|
299
282
|
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
|
|
300
283
|
}
|
|
@@ -306,6 +289,74 @@ Models with `-preview` suffix use Gemini CLI quota:
|
|
|
306
289
|
|
|
307
290
|
</details>
|
|
308
291
|
|
|
292
|
+
## Model Variants
|
|
293
|
+
|
|
294
|
+
OpenCode's variant system allows you to configure thinking budget dynamically instead of defining separate models for each thinking level.
|
|
295
|
+
|
|
296
|
+
### How Variants Work
|
|
297
|
+
|
|
298
|
+
When you define a model with `variants`, OpenCode will show variant options in the model picker. Selecting a variant passes the `providerOptions` to the plugin, which extracts the thinking configuration.
|
|
299
|
+
|
|
300
|
+
### Variant Configuration
|
|
301
|
+
|
|
302
|
+
```json
|
|
303
|
+
{
|
|
304
|
+
"antigravity-claude-sonnet-4-5-thinking": {
|
|
305
|
+
"name": "Claude Sonnet 4.5 Thinking",
|
|
306
|
+
"limit": { "context": 200000, "output": 64000 },
|
|
307
|
+
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
|
|
308
|
+
"variants": {
|
|
309
|
+
"low": { "thinkingConfig": { "thinkingBudget": 8192 } },
|
|
310
|
+
"max": { "thinkingConfig": { "thinkingBudget": 32768 } }
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### Supported Variant Formats
|
|
317
|
+
|
|
318
|
+
The plugin accepts different variant formats depending on the model family:
|
|
319
|
+
|
|
320
|
+
| Model Family | Variant Format |
|
|
321
|
+
|--------------|----------------|
|
|
322
|
+
| **Gemini 3** | `{ "thinkingLevel": "low" \| "medium" \| "high" }` |
|
|
323
|
+
| **Claude** | `{ "thinkingConfig": { "thinkingBudget": N } }` |
|
|
324
|
+
| **Gemini 2.5** | `{ "thinkingConfig": { "thinkingBudget": N } }` |
|
|
325
|
+
|
|
326
|
+
### Gemini 3 Thinking Levels
|
|
327
|
+
|
|
328
|
+
Gemini 3 models use string-based thinking levels. Available levels differ by model:
|
|
329
|
+
|
|
330
|
+
| Level | Flash | Pro | Description |
|
|
331
|
+
|-------|-------|-----|-------------|
|
|
332
|
+
| `minimal` | Yes | No | Minimal thinking, lowest latency |
|
|
333
|
+
| `low` | Yes | Yes | Light thinking |
|
|
334
|
+
| `medium` | Yes | No | Balanced thinking |
|
|
335
|
+
| `high` | Yes | Yes | Maximum thinking (default for both Pro and Flash) |
|
|
336
|
+
|
|
337
|
+
> **Note:** The API will reject invalid levels (e.g., `"minimal"` on Pro). Configure variants accordingly.
|
|
338
|
+
|
|
339
|
+
### Legacy Budget Format (Deprecated)
|
|
340
|
+
|
|
341
|
+
For Gemini 3 models, the old `thinkingBudget` format is still supported but deprecated:
|
|
342
|
+
|
|
343
|
+
| Budget Range | Maps to Level |
|
|
344
|
+
|--------------|---------------|
|
|
345
|
+
| ≤ 8192 | low |
|
|
346
|
+
| ≤ 16384 | medium |
|
|
347
|
+
| > 16384 | high |
|
|
348
|
+
|
|
349
|
+
### Backward Compatibility
|
|
350
|
+
|
|
351
|
+
Legacy tier-suffixed models still work:
|
|
352
|
+
- `antigravity-claude-sonnet-4-5-thinking-low`
|
|
353
|
+
- `antigravity-claude-sonnet-4-5-thinking-medium`
|
|
354
|
+
- `antigravity-claude-sonnet-4-5-thinking-high`
|
|
355
|
+
- `antigravity-gemini-3-pro-low`
|
|
356
|
+
- `antigravity-gemini-3-pro-high`
|
|
357
|
+
|
|
358
|
+
However, **we recommend using variants** for a cleaner model picker and more flexibility.
|
|
359
|
+
|
|
309
360
|
## Multi-Account Setup
|
|
310
361
|
|
|
311
362
|
Add multiple Google accounts for higher combined quotas. The plugin automatically rotates between accounts when one is rate-limited.
|
|
@@ -395,13 +446,39 @@ Create `~/.config/opencode/antigravity.json` (or `.opencode/antigravity.json` in
|
|
|
395
446
|
| `max_rate_limit_wait_seconds` | `300` | Max wait time when rate limited (0=unlimited) |
|
|
396
447
|
| `quota_fallback` | `false` | Try alternate quota when rate limited |
|
|
397
448
|
|
|
449
|
+
### Account Selection
|
|
450
|
+
|
|
451
|
+
| Option | Default | Description |
|
|
452
|
+
|--------|---------|-------------|
|
|
453
|
+
| `account_selection_strategy` | `"sticky"` | Strategy for distributing requests across accounts |
|
|
454
|
+
| `pid_offset_enabled` | `false` | Use PID-based offset for multi-session distribution |
|
|
455
|
+
|
|
456
|
+
**Available strategies:**
|
|
457
|
+
|
|
458
|
+
| Strategy | Behavior | Best For |
|
|
459
|
+
|----------|----------|----------|
|
|
460
|
+
| `sticky` | Same account until rate-limited | Prompt cache preservation |
|
|
461
|
+
| `round-robin` | Rotate to next account on every request | Maximum throughput |
|
|
462
|
+
| `hybrid` | Touch all fresh accounts first, then sticky | Sync reset timers + cache |
|
|
463
|
+
|
|
464
|
+
**Error handling:**
|
|
465
|
+
|
|
466
|
+
| Error Type | Behavior |
|
|
467
|
+
|------------|----------|
|
|
468
|
+
| `MODEL_CAPACITY_EXHAUSTED` | Wait (escalating 5s→60s) and retry same account |
|
|
469
|
+
| `QUOTA_EXCEEDED` | Switch to next available account immediately |
|
|
470
|
+
|
|
471
|
+
This prevents unnecessary account switching when server-side capacity issues affect all accounts equally.
|
|
472
|
+
|
|
398
473
|
### Environment Overrides
|
|
399
474
|
|
|
400
475
|
```bash
|
|
401
|
-
OPENCODE_ANTIGRAVITY_QUIET=1
|
|
402
|
-
OPENCODE_ANTIGRAVITY_DEBUG=1
|
|
403
|
-
OPENCODE_ANTIGRAVITY_LOG_DIR=/path
|
|
404
|
-
OPENCODE_ANTIGRAVITY_KEEP_THINKING=1
|
|
476
|
+
OPENCODE_ANTIGRAVITY_QUIET=1 # quiet_mode
|
|
477
|
+
OPENCODE_ANTIGRAVITY_DEBUG=1 # debug
|
|
478
|
+
OPENCODE_ANTIGRAVITY_LOG_DIR=/path # log_dir
|
|
479
|
+
OPENCODE_ANTIGRAVITY_KEEP_THINKING=1 # keep_thinking
|
|
480
|
+
OPENCODE_ANTIGRAVITY_ACCOUNT_SELECTION_STRATEGY=round-robin # account_selection_strategy
|
|
481
|
+
OPENCODE_ANTIGRAVITY_PID_OFFSET_ENABLED=1 # pid_offset_enabled
|
|
405
482
|
```
|
|
406
483
|
|
|
407
484
|
<details>
|
|
@@ -427,6 +504,8 @@ OPENCODE_ANTIGRAVITY_KEEP_THINKING=1 # keep_thinking
|
|
|
427
504
|
"proactive_refresh_check_interval_seconds": 300,
|
|
428
505
|
"max_rate_limit_wait_seconds": 300,
|
|
429
506
|
"quota_fallback": false,
|
|
507
|
+
"account_selection_strategy": "sticky",
|
|
508
|
+
"pid_offset_enabled": false,
|
|
430
509
|
"signature_cache": {
|
|
431
510
|
"enabled": true,
|
|
432
511
|
"memory_ttl_seconds": 3600,
|
|
@@ -455,14 +534,59 @@ DCP creates synthetic assistant messages that lack thinking blocks. **Our plugin
|
|
|
455
534
|
|
|
456
535
|
### oh-my-opencode
|
|
457
536
|
|
|
458
|
-
When spawning parallel subagents, multiple processes may select the same account causing rate limit errors. **Workaround:**
|
|
537
|
+
When spawning parallel subagents, multiple processes may select the same account causing rate limit errors. **Workaround:** Enable `pid_offset_enabled: true` to distribute sessions across accounts, or add more accounts via `opencode auth login`.
|
|
459
538
|
|
|
460
539
|
### Plugins You Don't Need
|
|
461
540
|
|
|
462
541
|
- **gemini-auth plugins** - Not needed. This plugin handles all Google OAuth authentication.
|
|
463
542
|
|
|
464
543
|
<details>
|
|
465
|
-
<summary><b>Migration Guide (v1.2.
|
|
544
|
+
<summary><b>Migration Guide (v1.2.8+ - Variants)</b></summary>
|
|
545
|
+
|
|
546
|
+
### What Changed
|
|
547
|
+
|
|
548
|
+
v1.2.8+ introduces **model variants** for dynamic thinking configuration. Instead of separate models for each thinking level, you now define one model with variants.
|
|
549
|
+
|
|
550
|
+
### Before (v1.2.7)
|
|
551
|
+
|
|
552
|
+
```json
|
|
553
|
+
{
|
|
554
|
+
"antigravity-claude-sonnet-4-5-thinking-low": { ... },
|
|
555
|
+
"antigravity-claude-sonnet-4-5-thinking-medium": { ... },
|
|
556
|
+
"antigravity-claude-sonnet-4-5-thinking-high": { ... }
|
|
557
|
+
}
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
### After (v1.2.8+)
|
|
561
|
+
|
|
562
|
+
```json
|
|
563
|
+
{
|
|
564
|
+
"antigravity-claude-sonnet-4-5-thinking": {
|
|
565
|
+
"name": "Claude Sonnet 4.5 Thinking",
|
|
566
|
+
"limit": { "context": 200000, "output": 64000 },
|
|
567
|
+
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
|
|
568
|
+
"variants": {
|
|
569
|
+
"low": { "thinkingConfig": { "thinkingBudget": 8192 } },
|
|
570
|
+
"max": { "thinkingConfig": { "thinkingBudget": 32768 } }
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
### Benefits
|
|
577
|
+
|
|
578
|
+
- **Cleaner model picker** - 4 models instead of 12+
|
|
579
|
+
- **Flexible budgets** - Define any budget, not just low/max
|
|
580
|
+
- **Future-proof** - Works with OpenCode's native variant system
|
|
581
|
+
|
|
582
|
+
### Backward Compatibility
|
|
583
|
+
|
|
584
|
+
Old tier-suffixed models (`antigravity-claude-sonnet-4-5-thinking-low`, etc.) still work. No action required if you prefer the old style.
|
|
585
|
+
|
|
586
|
+
</details>
|
|
587
|
+
|
|
588
|
+
<details>
|
|
589
|
+
<summary><b>Migration Guide (v1.2.7 - Prefix)</b></summary>
|
|
466
590
|
|
|
467
591
|
If upgrading from v1.2.6 or earlier:
|
|
468
592
|
|
|
@@ -472,9 +596,7 @@ v1.2.7+ uses explicit prefixes to distinguish quota sources:
|
|
|
472
596
|
|
|
473
597
|
| Model Type | New Name (Recommended) | Old Name (Still Works) |
|
|
474
598
|
|------------|------------------------|------------------------|
|
|
475
|
-
| Gemini 3 (Antigravity) | `antigravity-gemini-3-pro
|
|
476
|
-
| Gemini 3 (Antigravity) | `antigravity-gemini-3-pro-high` | `gemini-3-pro-high` |
|
|
477
|
-
| Gemini 3 (Antigravity) | `antigravity-gemini-3-flash` | `gemini-3-flash` |
|
|
599
|
+
| Gemini 3 (Antigravity) | `antigravity-gemini-3-pro` | `gemini-3-pro-low` |
|
|
478
600
|
| Gemini 3 (CLI) | `gemini-3-pro-preview` | N/A |
|
|
479
601
|
| Claude | `antigravity-claude-sonnet-4-5` | `claude-sonnet-4-5` |
|
|
480
602
|
|
|
@@ -484,7 +606,7 @@ v1.2.7+ uses explicit prefixes to distinguish quota sources:
|
|
|
484
606
|
|
|
485
607
|
```diff
|
|
486
608
|
- "gemini-3-pro-low": { ... }
|
|
487
|
-
+ "antigravity-gemini-3-pro
|
|
609
|
+
+ "antigravity-gemini-3-pro": { ... }
|
|
488
610
|
```
|
|
489
611
|
|
|
490
612
|
> **Why update?** Old names work now as a fallback, but this depends on Gemini CLI using `-preview` suffix. If Google removes `-preview` in the future, old names may route to the wrong quota. The `antigravity-` prefix is explicit and stable.
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { type AccountStorageV3, type RateLimitStateV3, type ModelFamily, type HeaderStyle, type CooldownReason } from "./storage";
|
|
2
2
|
import type { OAuthAuthDetails, RefreshParts } from "./types";
|
|
3
|
+
import type { AccountSelectionStrategy } from "./config/schema";
|
|
3
4
|
export type { ModelFamily, HeaderStyle, CooldownReason } from "./storage";
|
|
5
|
+
export type { AccountSelectionStrategy } from "./config/schema";
|
|
4
6
|
export type BaseQuotaKey = "claude" | "gemini-antigravity" | "gemini-cli";
|
|
5
7
|
export type QuotaKey = BaseQuotaKey | `${BaseQuotaKey}:${string}`;
|
|
6
8
|
export interface ManagedAccount {
|
|
@@ -15,6 +17,8 @@ export interface ManagedAccount {
|
|
|
15
17
|
lastSwitchReason?: "rate-limit" | "initial" | "rotation";
|
|
16
18
|
coolingDownUntil?: number;
|
|
17
19
|
cooldownReason?: CooldownReason;
|
|
20
|
+
touchedForQuota: Record<string, number>;
|
|
21
|
+
consecutiveFailures?: number;
|
|
18
22
|
}
|
|
19
23
|
/**
|
|
20
24
|
* In-memory multi-account manager with sticky account selection.
|
|
@@ -29,6 +33,7 @@ export declare class AccountManager {
|
|
|
29
33
|
private accounts;
|
|
30
34
|
private cursor;
|
|
31
35
|
private currentAccountIndexByFamily;
|
|
36
|
+
private sessionOffsetApplied;
|
|
32
37
|
private lastToastAccountIndex;
|
|
33
38
|
private lastToastTime;
|
|
34
39
|
static loadFromDisk(authFallback?: OAuthAuthDetails): Promise<AccountManager>;
|
|
@@ -39,13 +44,16 @@ export declare class AccountManager {
|
|
|
39
44
|
markSwitched(account: ManagedAccount, reason: "rate-limit" | "initial" | "rotation", family: ModelFamily): void;
|
|
40
45
|
shouldShowAccountToast(accountIndex: number, debounceMs?: number): boolean;
|
|
41
46
|
markToastShown(accountIndex: number): void;
|
|
42
|
-
getCurrentOrNextForFamily(family: ModelFamily, model?: string | null): ManagedAccount | null;
|
|
47
|
+
getCurrentOrNextForFamily(family: ModelFamily, model?: string | null, strategy?: AccountSelectionStrategy, headerStyle?: HeaderStyle, pidOffsetEnabled?: boolean): ManagedAccount | null;
|
|
43
48
|
getNextForFamily(family: ModelFamily, model?: string | null): ManagedAccount | null;
|
|
44
49
|
markRateLimited(account: ManagedAccount, retryAfterMs: number, family: ModelFamily, headerStyle?: HeaderStyle, model?: string | null): void;
|
|
45
50
|
markAccountCoolingDown(account: ManagedAccount, cooldownMs: number, reason: CooldownReason): void;
|
|
46
51
|
isAccountCoolingDown(account: ManagedAccount): boolean;
|
|
47
52
|
clearAccountCooldown(account: ManagedAccount): void;
|
|
48
53
|
getAccountCooldownReason(account: ManagedAccount): CooldownReason | undefined;
|
|
54
|
+
markTouchedForQuota(account: ManagedAccount, quotaKey: string): void;
|
|
55
|
+
isFreshForQuota(account: ManagedAccount, quotaKey: string): boolean;
|
|
56
|
+
getFreshAccountsForQuota(quotaKey: string, family: ModelFamily, model?: string | null): ManagedAccount[];
|
|
49
57
|
isRateLimitedForHeaderStyle(account: ManagedAccount, family: ModelFamily, headerStyle: HeaderStyle, model?: string | null): boolean;
|
|
50
58
|
getAvailableHeaderStyle(account: ManagedAccount, family: ModelFamily, model?: string | null): HeaderStyle | null;
|
|
51
59
|
removeAccount(account: ManagedAccount): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../../src/plugin/accounts.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAC9J,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../../src/plugin/accounts.ts"],"names":[],"mappings":"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"}
|