opencode-antigravity-auth 1.1.4 → 1.2.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 (60) hide show
  1. package/README.md +223 -99
  2. package/dist/src/hooks/auto-update-checker/cache.d.ts +3 -0
  3. package/dist/src/hooks/auto-update-checker/cache.d.ts.map +1 -0
  4. package/dist/src/hooks/auto-update-checker/cache.js +71 -0
  5. package/dist/src/hooks/auto-update-checker/cache.js.map +1 -0
  6. package/dist/src/hooks/auto-update-checker/checker.d.ts +16 -0
  7. package/dist/src/hooks/auto-update-checker/checker.d.ts.map +1 -0
  8. package/dist/src/hooks/auto-update-checker/checker.js +237 -0
  9. package/dist/src/hooks/auto-update-checker/checker.js.map +1 -0
  10. package/dist/src/hooks/auto-update-checker/constants.d.ts +9 -0
  11. package/dist/src/hooks/auto-update-checker/constants.d.ts.map +1 -0
  12. package/dist/src/hooks/auto-update-checker/constants.js +23 -0
  13. package/dist/src/hooks/auto-update-checker/constants.js.map +1 -0
  14. package/dist/src/hooks/auto-update-checker/index.d.ts +34 -0
  15. package/dist/src/hooks/auto-update-checker/index.d.ts.map +1 -0
  16. package/dist/src/hooks/auto-update-checker/index.js +121 -0
  17. package/dist/src/hooks/auto-update-checker/index.js.map +1 -0
  18. package/dist/src/hooks/auto-update-checker/types.d.ts +25 -0
  19. package/dist/src/hooks/auto-update-checker/types.d.ts.map +1 -0
  20. package/dist/src/hooks/auto-update-checker/types.js +1 -0
  21. package/dist/src/hooks/auto-update-checker/types.js.map +1 -0
  22. package/dist/src/plugin/accounts.d.ts +21 -10
  23. package/dist/src/plugin/accounts.d.ts.map +1 -1
  24. package/dist/src/plugin/accounts.js +101 -55
  25. package/dist/src/plugin/accounts.js.map +1 -1
  26. package/dist/src/plugin/cache.d.ts +14 -0
  27. package/dist/src/plugin/cache.d.ts.map +1 -1
  28. package/dist/src/plugin/cache.js +82 -0
  29. package/dist/src/plugin/cache.js.map +1 -1
  30. package/dist/src/plugin/debug.d.ts +32 -0
  31. package/dist/src/plugin/debug.d.ts.map +1 -1
  32. package/dist/src/plugin/debug.js +140 -12
  33. package/dist/src/plugin/debug.js.map +1 -1
  34. package/dist/src/plugin/request-helpers.d.ts +13 -4
  35. package/dist/src/plugin/request-helpers.d.ts.map +1 -1
  36. package/dist/src/plugin/request-helpers.js +171 -18
  37. package/dist/src/plugin/request-helpers.js.map +1 -1
  38. package/dist/src/plugin/request.d.ts +10 -2
  39. package/dist/src/plugin/request.d.ts.map +1 -1
  40. package/dist/src/plugin/request.js +614 -67
  41. package/dist/src/plugin/request.js.map +1 -1
  42. package/dist/src/plugin/storage.d.ts +23 -7
  43. package/dist/src/plugin/storage.d.ts.map +1 -1
  44. package/dist/src/plugin/storage.js +54 -10
  45. package/dist/src/plugin/storage.js.map +1 -1
  46. package/dist/src/plugin/types.d.ts +13 -1
  47. package/dist/src/plugin/types.d.ts.map +1 -1
  48. package/dist/src/plugin.d.ts +3 -3
  49. package/dist/src/plugin.d.ts.map +1 -1
  50. package/dist/src/plugin.js +780 -474
  51. package/dist/src/plugin.js.map +1 -1
  52. package/package.json +1 -1
  53. package/dist/src/plugin/accounts.test.d.ts +0 -2
  54. package/dist/src/plugin/accounts.test.d.ts.map +0 -1
  55. package/dist/src/plugin/accounts.test.js +0 -139
  56. package/dist/src/plugin/accounts.test.js.map +0 -1
  57. package/dist/src/plugin/token.test.d.ts +0 -2
  58. package/dist/src/plugin/token.test.d.ts.map +0 -1
  59. package/dist/src/plugin/token.test.js +0 -64
  60. package/dist/src/plugin/token.test.js.map +0 -1
@@ -9,14 +9,34 @@ function clampNonNegativeInt(value, fallback) {
9
9
  }
10
10
  return value < 0 ? 0 : Math.floor(value);
11
11
  }
12
+ function isRateLimitedForFamily(account, family) {
13
+ const resetTime = account.rateLimitResetTimes[family];
14
+ return resetTime !== undefined && nowMs() < resetTime;
15
+ }
16
+ function clearExpiredRateLimits(account) {
17
+ const now = nowMs();
18
+ if (account.rateLimitResetTimes.claude !== undefined && now >= account.rateLimitResetTimes.claude) {
19
+ delete account.rateLimitResetTimes.claude;
20
+ }
21
+ if (account.rateLimitResetTimes.gemini !== undefined && now >= account.rateLimitResetTimes.gemini) {
22
+ delete account.rateLimitResetTimes.gemini;
23
+ }
24
+ }
12
25
  /**
13
- * In-memory multi-account manager for round-robin routing.
26
+ * In-memory multi-account manager with sticky account selection.
27
+ *
28
+ * Uses the same account until it hits a rate limit (429), then switches.
29
+ * Rate limits are tracked per-model-family (claude/gemini) so an account
30
+ * rate-limited for Claude can still be used for Gemini.
14
31
  *
15
32
  * Source of truth for the pool is `antigravity-accounts.json`.
16
33
  */
17
34
  export class AccountManager {
18
35
  accounts = [];
19
36
  cursor = 0;
37
+ currentAccountIndex = -1;
38
+ lastToastAccountIndex = -1;
39
+ lastToastTime = 0;
20
40
  static async loadFromDisk(authFallback) {
21
41
  const stored = await loadAccounts();
22
42
  return new AccountManager(authFallback, stored);
@@ -51,14 +71,15 @@ export class AccountManager {
51
71
  },
52
72
  access: matchesFallback ? authFallback?.access : undefined,
53
73
  expires: matchesFallback ? authFallback?.expires : undefined,
54
- isRateLimited: !!acc.isRateLimited,
55
- rateLimitResetTime: clampNonNegativeInt(acc.rateLimitResetTime, 0),
74
+ rateLimitResetTimes: acc.rateLimitResetTimes ?? {},
75
+ lastSwitchReason: acc.lastSwitchReason,
56
76
  };
57
77
  })
58
78
  .filter((a) => a !== null);
59
79
  this.cursor = clampNonNegativeInt(stored.activeIndex, 0);
60
80
  if (this.accounts.length > 0) {
61
81
  this.cursor = this.cursor % this.accounts.length;
82
+ this.currentAccountIndex = this.cursor;
62
83
  }
63
84
  return;
64
85
  }
@@ -75,11 +96,11 @@ export class AccountManager {
75
96
  parts,
76
97
  access: authFallback.access,
77
98
  expires: authFallback.expires,
78
- isRateLimited: false,
79
- rateLimitResetTime: 0,
99
+ rateLimitResetTimes: {},
80
100
  },
81
101
  ];
82
102
  this.cursor = 0;
103
+ this.currentAccountIndex = 0;
83
104
  }
84
105
  }
85
106
  }
@@ -87,43 +108,62 @@ export class AccountManager {
87
108
  return this.accounts.length;
88
109
  }
89
110
  getAccountsSnapshot() {
90
- return this.accounts.map((a) => ({ ...a, parts: { ...a.parts } }));
91
- }
92
- /**
93
- * Picks the next available account (round-robin), skipping accounts in cooldown.
94
- */
95
- pickNext() {
96
- const total = this.accounts.length;
97
- if (total === 0) {
98
- return null;
111
+ return this.accounts.map((a) => ({ ...a, parts: { ...a.parts }, rateLimitResetTimes: { ...a.rateLimitResetTimes } }));
112
+ }
113
+ getCurrentAccount() {
114
+ if (this.currentAccountIndex >= 0 && this.currentAccountIndex < this.accounts.length) {
115
+ return this.accounts[this.currentAccountIndex] ?? null;
99
116
  }
117
+ return null;
118
+ }
119
+ markSwitched(account, reason) {
120
+ account.lastSwitchReason = reason;
121
+ this.currentAccountIndex = account.index;
122
+ }
123
+ shouldShowAccountToast(accountIndex, debounceMs = 30000) {
100
124
  const now = nowMs();
101
- // Clear expired cooldowns.
102
- for (const acc of this.accounts) {
103
- if (acc.isRateLimited && acc.rateLimitResetTime > 0 && now > acc.rateLimitResetTime) {
104
- acc.isRateLimited = false;
105
- acc.rateLimitResetTime = 0;
106
- }
125
+ if (accountIndex === this.lastToastAccountIndex && now - this.lastToastTime < debounceMs) {
126
+ return false;
107
127
  }
108
- for (let i = 0; i < total; i++) {
109
- const idx = (this.cursor + i) % total;
110
- const candidate = this.accounts[idx];
111
- if (!candidate) {
112
- continue;
113
- }
114
- if (candidate.isRateLimited) {
115
- continue;
128
+ return true;
129
+ }
130
+ markToastShown(accountIndex) {
131
+ this.lastToastAccountIndex = accountIndex;
132
+ this.lastToastTime = nowMs();
133
+ }
134
+ getCurrentOrNextForFamily(family) {
135
+ const current = this.getCurrentAccount();
136
+ if (current) {
137
+ clearExpiredRateLimits(current);
138
+ if (!isRateLimitedForFamily(current, family)) {
139
+ current.lastUsed = nowMs();
140
+ return current;
116
141
  }
117
- this.cursor = (idx + 1) % total;
118
- candidate.lastUsed = now;
119
- return candidate;
120
142
  }
121
- return null;
143
+ const next = this.getNextForFamily(family);
144
+ if (next) {
145
+ this.currentAccountIndex = next.index;
146
+ }
147
+ return next;
148
+ }
149
+ getNextForFamily(family) {
150
+ const available = this.accounts.filter((a) => {
151
+ clearExpiredRateLimits(a);
152
+ return !isRateLimitedForFamily(a, family);
153
+ });
154
+ if (available.length === 0) {
155
+ return null;
156
+ }
157
+ const account = available[this.cursor % available.length];
158
+ if (!account) {
159
+ return null;
160
+ }
161
+ this.cursor++;
162
+ account.lastUsed = nowMs();
163
+ return account;
122
164
  }
123
- markRateLimited(account, retryAfterMs) {
124
- const duration = clampNonNegativeInt(retryAfterMs, 0);
125
- account.isRateLimited = true;
126
- account.rateLimitResetTime = nowMs() + duration;
165
+ markRateLimited(account, retryAfterMs, family) {
166
+ account.rateLimitResetTimes[family] = nowMs() + retryAfterMs;
127
167
  }
128
168
  removeAccount(account) {
129
169
  const idx = this.accounts.indexOf(account);
@@ -136,12 +176,19 @@ export class AccountManager {
136
176
  });
137
177
  if (this.accounts.length === 0) {
138
178
  this.cursor = 0;
179
+ this.currentAccountIndex = -1;
139
180
  return true;
140
181
  }
141
182
  if (this.cursor > idx) {
142
183
  this.cursor -= 1;
143
184
  }
144
185
  this.cursor = this.cursor % this.accounts.length;
186
+ if (this.currentAccountIndex > idx) {
187
+ this.currentAccountIndex -= 1;
188
+ }
189
+ if (this.currentAccountIndex >= this.accounts.length) {
190
+ this.currentAccountIndex = -1;
191
+ }
145
192
  return true;
146
193
  }
147
194
  updateFromAuth(account, auth) {
@@ -158,27 +205,26 @@ export class AccountManager {
158
205
  expires: account.expires,
159
206
  };
160
207
  }
161
- getMinWaitTimeMs() {
162
- const now = nowMs();
163
- // Clear expired cooldowns first (same logic as pickNext)
164
- for (const acc of this.accounts) {
165
- if (acc.isRateLimited && acc.rateLimitResetTime > 0 && now > acc.rateLimitResetTime) {
166
- acc.isRateLimited = false;
167
- acc.rateLimitResetTime = 0;
168
- }
169
- }
170
- const available = this.accounts.some((a) => !a.isRateLimited);
171
- if (available) {
208
+ getMinWaitTimeForFamily(family) {
209
+ const available = this.accounts.filter((a) => {
210
+ clearExpiredRateLimits(a);
211
+ return !isRateLimitedForFamily(a, family);
212
+ });
213
+ if (available.length > 0) {
172
214
  return 0;
173
215
  }
174
- const waits = this.accounts
175
- .filter((a) => a.isRateLimited && a.rateLimitResetTime > 0)
176
- .map((a) => Math.max(0, a.rateLimitResetTime - now));
177
- return waits.length > 0 ? Math.min(...waits) : 0;
216
+ const waitTimes = this.accounts
217
+ .map((a) => a.rateLimitResetTimes[family])
218
+ .filter((t) => t !== undefined)
219
+ .map((t) => Math.max(0, t - nowMs()));
220
+ return waitTimes.length > 0 ? Math.min(...waitTimes) : 0;
221
+ }
222
+ getAccounts() {
223
+ return [...this.accounts];
178
224
  }
179
225
  async saveToDisk() {
180
226
  const storage = {
181
- version: 1,
227
+ version: 2,
182
228
  accounts: this.accounts.map((a) => ({
183
229
  email: a.email,
184
230
  refreshToken: a.parts.refreshToken,
@@ -186,10 +232,10 @@ export class AccountManager {
186
232
  managedProjectId: a.parts.managedProjectId,
187
233
  addedAt: a.addedAt,
188
234
  lastUsed: a.lastUsed,
189
- isRateLimited: a.isRateLimited,
190
- rateLimitResetTime: a.rateLimitResetTime,
235
+ lastSwitchReason: a.lastSwitchReason,
236
+ rateLimitResetTimes: Object.keys(a.rateLimitResetTimes).length > 0 ? a.rateLimitResetTimes : undefined,
191
237
  })),
192
- activeIndex: this.cursor,
238
+ activeIndex: Math.max(0, this.currentAccountIndex),
193
239
  };
194
240
  await saveAccounts(storage);
195
241
  }
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../../src/plugin/accounts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../../src/plugin/accounts.ts"],"names":[],"mappings":"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"}
@@ -11,4 +11,18 @@ export declare function storeCachedAuth(auth: OAuthAuthDetails): void;
11
11
  * Clears cached auth globally or for a specific refresh token.
12
12
  */
13
13
  export declare function clearCachedAuth(refresh?: string): void;
14
+ /**
15
+ * Caches a thinking signature for a given session and text.
16
+ * Used for Claude models that require signed thinking blocks in multi-turn conversations.
17
+ */
18
+ export declare function cacheSignature(sessionId: string, text: string, signature: string): void;
19
+ /**
20
+ * Retrieves a cached signature for a given session and text.
21
+ * Returns undefined if not found or expired.
22
+ */
23
+ export declare function getCachedSignature(sessionId: string, text: string): string | undefined;
24
+ /**
25
+ * Clears signature cache for a specific session or all sessions.
26
+ */
27
+ export declare function clearSignatureCache(sessionId?: string): void;
14
28
  //# sourceMappingURL=cache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/plugin/cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAYhD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,gBAAgB,CAuB1E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAM5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAStD"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/plugin/cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAahD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,gBAAgB,CAuB1E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAM5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAStD;AAgCD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CA8BvF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiBtF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAM5D"}
@@ -1,4 +1,5 @@
1
1
  import { accessTokenExpired } from "./auth";
2
+ import { createHash } from "node:crypto";
2
3
  const authCache = new Map();
3
4
  /**
4
5
  * Produces a stable cache key from a refresh token string.
@@ -53,4 +54,85 @@ export function clearCachedAuth(refresh) {
53
54
  authCache.delete(key);
54
55
  }
55
56
  }
57
+ // Map: sessionId -> Map<textHash, SignatureEntry>
58
+ const signatureCache = new Map();
59
+ // Cache entries expire after 1 hour
60
+ const SIGNATURE_CACHE_TTL_MS = 60 * 60 * 1000;
61
+ // Maximum entries per session to prevent memory bloat
62
+ const MAX_ENTRIES_PER_SESSION = 100;
63
+ // 16 hex chars = 64-bit key space; keeps memory bounded while making collisions extremely unlikely.
64
+ const SIGNATURE_TEXT_HASH_HEX_LEN = 16;
65
+ /**
66
+ * Hashes text content into a stable, Unicode-safe key.
67
+ *
68
+ * Uses SHA-256 over UTF-8 bytes and truncates to keep memory usage bounded.
69
+ */
70
+ function hashText(text) {
71
+ return createHash("sha256").update(text, "utf8").digest("hex").slice(0, SIGNATURE_TEXT_HASH_HEX_LEN);
72
+ }
73
+ /**
74
+ * Caches a thinking signature for a given session and text.
75
+ * Used for Claude models that require signed thinking blocks in multi-turn conversations.
76
+ */
77
+ export function cacheSignature(sessionId, text, signature) {
78
+ if (!sessionId || !text || !signature)
79
+ return;
80
+ let sessionCache = signatureCache.get(sessionId);
81
+ if (!sessionCache) {
82
+ sessionCache = new Map();
83
+ signatureCache.set(sessionId, sessionCache);
84
+ }
85
+ // Evict old entries if we're at capacity
86
+ if (sessionCache.size >= MAX_ENTRIES_PER_SESSION) {
87
+ const now = Date.now();
88
+ for (const [key, entry] of sessionCache.entries()) {
89
+ if (now - entry.timestamp > SIGNATURE_CACHE_TTL_MS) {
90
+ sessionCache.delete(key);
91
+ }
92
+ }
93
+ // If still at capacity, remove oldest entries
94
+ if (sessionCache.size >= MAX_ENTRIES_PER_SESSION) {
95
+ const entries = Array.from(sessionCache.entries())
96
+ .sort((a, b) => a[1].timestamp - b[1].timestamp);
97
+ const toRemove = entries.slice(0, Math.floor(MAX_ENTRIES_PER_SESSION / 4));
98
+ for (const [key] of toRemove) {
99
+ sessionCache.delete(key);
100
+ }
101
+ }
102
+ }
103
+ const textHash = hashText(text);
104
+ sessionCache.set(textHash, { signature, timestamp: Date.now() });
105
+ }
106
+ /**
107
+ * Retrieves a cached signature for a given session and text.
108
+ * Returns undefined if not found or expired.
109
+ */
110
+ export function getCachedSignature(sessionId, text) {
111
+ if (!sessionId || !text)
112
+ return undefined;
113
+ const sessionCache = signatureCache.get(sessionId);
114
+ if (!sessionCache)
115
+ return undefined;
116
+ const textHash = hashText(text);
117
+ const entry = sessionCache.get(textHash);
118
+ if (!entry)
119
+ return undefined;
120
+ // Check if expired
121
+ if (Date.now() - entry.timestamp > SIGNATURE_CACHE_TTL_MS) {
122
+ sessionCache.delete(textHash);
123
+ return undefined;
124
+ }
125
+ return entry.signature;
126
+ }
127
+ /**
128
+ * Clears signature cache for a specific session or all sessions.
129
+ */
130
+ export function clearSignatureCache(sessionId) {
131
+ if (sessionId) {
132
+ signatureCache.delete(sessionId);
133
+ }
134
+ else {
135
+ signatureCache.clear();
136
+ }
137
+ }
56
138
  //# sourceMappingURL=cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/plugin/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAG5C,MAAM,SAAS,GAAG,IAAI,GAAG,EAA4B,CAAC;AAEtD;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAgB;IAC3C,MAAM,GAAG,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5B,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAsB;IACtD,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAsB;IACpD,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;IACT,CAAC;IACD,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,GAAG,EAAE,CAAC;QACR,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/plugin/cache.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
+ export declare const DEBUG_MESSAGE_PREFIX = "[opencode-antigravity-auth debug]";
2
+ export declare function isDebugEnabled(): boolean;
3
+ export declare function isVerboseEnabled(): boolean;
4
+ export declare function getLogFilePath(): string | undefined;
1
5
  export interface AntigravityDebugContext {
2
6
  id: string;
3
7
  streaming: boolean;
@@ -26,5 +30,33 @@ export declare function startAntigravityDebugRequest(meta: AntigravityDebugReque
26
30
  * Logs response details for a previously started debug trace when debugging is enabled.
27
31
  */
28
32
  export declare function logAntigravityDebugResponse(context: AntigravityDebugContext | null | undefined, response: Response, meta?: AntigravityDebugResponseMeta): void;
33
+ export interface AccountDebugInfo {
34
+ index: number;
35
+ email?: string;
36
+ family: string;
37
+ totalAccounts: number;
38
+ rateLimitState?: {
39
+ claude?: number;
40
+ gemini?: number;
41
+ };
42
+ }
43
+ export declare function logAccountContext(label: string, info: AccountDebugInfo): void;
44
+ export declare function logRateLimitEvent(accountIndex: number, email: string | undefined, family: string, status: number, retryAfterMs: number, bodyInfo: {
45
+ message?: string;
46
+ quotaResetTime?: string;
47
+ retryDelayMs?: number | null;
48
+ reason?: string;
49
+ }): void;
50
+ export declare function logRateLimitSnapshot(family: string, accounts: Array<{
51
+ index: number;
52
+ email?: string;
53
+ rateLimitResetTimes?: {
54
+ claude?: number;
55
+ gemini?: number;
56
+ };
57
+ }>): void;
58
+ export declare function logResponseBody(context: AntigravityDebugContext | null | undefined, response: Response, status: number): Promise<string | undefined>;
59
+ export declare function logModelFamily(url: string, extractedModel: string | null, family: string): void;
60
+ export declare function debugLogToFile(message: string): void;
29
61
  export {};
30
62
  //# sourceMappingURL=debug.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../src/plugin/debug.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,2BAA2B;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,4BAA4B;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,WAAW,CAAC;CAC/B;AAID;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,2BAA2B,GAAG,uBAAuB,GAAG,IAAI,CAsB9G;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,uBAAuB,GAAG,IAAI,GAAG,SAAS,EACnD,QAAQ,EAAE,QAAQ,EAClB,IAAI,GAAE,4BAAiC,GACtC,IAAI,CA4BN"}
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../src/plugin/debug.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,oBAAoB,sCAAsC,CAAC;AAgBxE,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAEnD;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,2BAA2B;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,4BAA4B;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,WAAW,CAAC;CAC/B;AAID;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,2BAA2B,GAAG,uBAAuB,GAAG,IAAI,CAsB9G;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,uBAAuB,GAAG,IAAI,GAAG,SAAS,EACnD,QAAQ,EAAE,QAAQ,EAClB,IAAI,GAAE,4BAAiC,GACtC,IAAI,CA4BN;AAoID,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAc7E;AAED,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACrG,IAAI,CAgBN;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,GAC7G,IAAI,CAcN;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,uBAAuB,GAAG,IAAI,GAAG,SAAS,EACnD,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAoB7B;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAG/F;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGpD"}
@@ -1,11 +1,34 @@
1
- import { createWriteStream } from "node:fs";
1
+ import { createWriteStream, mkdirSync } from "node:fs";
2
2
  import { join } from "node:path";
3
- import { cwd, env } from "node:process";
3
+ import { homedir } from "node:os";
4
+ import { env } from "node:process";
4
5
  const DEBUG_FLAG = env.OPENCODE_ANTIGRAVITY_DEBUG ?? "";
5
6
  const MAX_BODY_PREVIEW_CHARS = 12000;
6
- const debugEnabled = DEBUG_FLAG.trim() === "1";
7
+ const MAX_BODY_VERBOSE_CHARS = 50000;
8
+ export const DEBUG_MESSAGE_PREFIX = "[opencode-antigravity-auth debug]";
9
+ // Debug levels: 0 = off, 1 = basic, 2 = verbose (full bodies)
10
+ const debugLevel = parseDebugLevel(DEBUG_FLAG);
11
+ const debugEnabled = debugLevel >= 1;
12
+ const verboseEnabled = debugLevel >= 2;
7
13
  const logFilePath = debugEnabled ? defaultLogFilePath() : undefined;
8
14
  const logWriter = createLogWriter(logFilePath);
15
+ function parseDebugLevel(flag) {
16
+ const trimmed = flag.trim();
17
+ if (trimmed === "2" || trimmed === "verbose")
18
+ return 2;
19
+ if (trimmed === "1" || trimmed === "true")
20
+ return 1;
21
+ return 0;
22
+ }
23
+ export function isDebugEnabled() {
24
+ return debugEnabled;
25
+ }
26
+ export function isVerboseEnabled() {
27
+ return verboseEnabled;
28
+ }
29
+ export function getLogFilePath() {
30
+ return logFilePath;
31
+ }
9
32
  let requestCounter = 0;
10
33
  /**
11
34
  * Begins a debug trace for an Antigravity request, logging request metadata when debugging is enabled.
@@ -121,22 +144,127 @@ function formatError(error) {
121
144
  }
122
145
  }
123
146
  /**
124
- * Builds a timestamped log file path in the current working directory.
147
+ * Returns the logs directory inside the opencode config folder.
148
+ * Creates the directory if it doesn't exist.
125
149
  */
126
- function defaultLogFilePath() {
127
- const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
128
- return join(cwd(), `antigravity-debug-${timestamp}.log`);
150
+ function getLogsDir() {
151
+ const platform = process.platform;
152
+ let configDir;
153
+ if (platform === "win32") {
154
+ configDir = join(env.APPDATA || join(homedir(), "AppData", "Roaming"), "opencode");
155
+ }
156
+ else {
157
+ const xdgConfig = env.XDG_CONFIG_HOME || join(homedir(), ".config");
158
+ configDir = join(xdgConfig, "opencode");
159
+ }
160
+ const logsDir = env.OPENCODE_ANTIGRAVITY_LOG_DIR || join(configDir, "antigravity-logs");
161
+ try {
162
+ mkdirSync(logsDir, { recursive: true });
163
+ }
164
+ catch {
165
+ // Directory may already exist or we don't have permission
166
+ }
167
+ return logsDir;
129
168
  }
130
169
  /**
131
- * Creates a line writer that appends to a file when provided.
170
+ * Builds a timestamped log file path in the opencode logs directory.
132
171
  */
172
+ function defaultLogFilePath() {
173
+ const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
174
+ return join(getLogsDir(), `antigravity-debug-${timestamp}.log`);
175
+ }
133
176
  function createLogWriter(filePath) {
134
177
  if (!filePath) {
135
178
  return () => { };
136
179
  }
137
- const stream = createWriteStream(filePath, { flags: "a" });
138
- return (line) => {
139
- stream.write(`${line}\n`);
140
- };
180
+ try {
181
+ const stream = createWriteStream(filePath, { flags: "a" });
182
+ stream.on("error", () => { });
183
+ return (line) => {
184
+ const timestamp = new Date().toISOString();
185
+ const formatted = `[${timestamp}] ${line}`;
186
+ stream.write(`${formatted}\n`);
187
+ };
188
+ }
189
+ catch {
190
+ return () => { };
191
+ }
192
+ }
193
+ export function logAccountContext(label, info) {
194
+ if (!debugEnabled)
195
+ return;
196
+ const accountLabel = info.email
197
+ ? info.email
198
+ : info.index >= 0
199
+ ? `Account ${info.index + 1}`
200
+ : "All accounts";
201
+ const indexLabel = info.index >= 0 ? `${info.index + 1}/${info.totalAccounts}` : `-/${info.totalAccounts}`;
202
+ const rateLimitInfo = info.rateLimitState ? ` rateLimits=${JSON.stringify(info.rateLimitState)}` : "";
203
+ logDebug(`[Account] ${label}: ${accountLabel} (${indexLabel}) family=${info.family}${rateLimitInfo}`);
204
+ }
205
+ export function logRateLimitEvent(accountIndex, email, family, status, retryAfterMs, bodyInfo) {
206
+ if (!debugEnabled)
207
+ return;
208
+ const accountLabel = email || `Account ${accountIndex + 1}`;
209
+ logDebug(`[RateLimit] ${status} on ${accountLabel} family=${family} retryAfterMs=${retryAfterMs}`);
210
+ if (bodyInfo.message) {
211
+ logDebug(`[RateLimit] message: ${bodyInfo.message}`);
212
+ }
213
+ if (bodyInfo.quotaResetTime) {
214
+ logDebug(`[RateLimit] quotaResetTime: ${bodyInfo.quotaResetTime}`);
215
+ }
216
+ if (bodyInfo.retryDelayMs !== undefined && bodyInfo.retryDelayMs !== null) {
217
+ logDebug(`[RateLimit] body retryDelayMs: ${bodyInfo.retryDelayMs}`);
218
+ }
219
+ if (bodyInfo.reason) {
220
+ logDebug(`[RateLimit] reason: ${bodyInfo.reason}`);
221
+ }
222
+ }
223
+ export function logRateLimitSnapshot(family, accounts) {
224
+ if (!debugEnabled)
225
+ return;
226
+ const now = Date.now();
227
+ const entries = accounts.map((account) => {
228
+ const label = account.email ? account.email : `Account ${account.index + 1}`;
229
+ const reset = account.rateLimitResetTimes?.[family];
230
+ if (typeof reset !== "number") {
231
+ return `${label}=ready`;
232
+ }
233
+ const remaining = Math.max(0, reset - now);
234
+ const seconds = Math.ceil(remaining / 1000);
235
+ return `${label}=wait ${seconds}s`;
236
+ });
237
+ logDebug(`[RateLimit] snapshot family=${family} ${entries.join(" | ")}`);
238
+ }
239
+ export async function logResponseBody(context, response, status) {
240
+ if (!debugEnabled || !context)
241
+ return undefined;
242
+ const isError = status >= 400;
243
+ const shouldLogBody = verboseEnabled || isError;
244
+ if (!shouldLogBody)
245
+ return undefined;
246
+ try {
247
+ const text = await response.clone().text();
248
+ const maxChars = verboseEnabled ? MAX_BODY_VERBOSE_CHARS : MAX_BODY_PREVIEW_CHARS;
249
+ const preview = text.length <= maxChars
250
+ ? text
251
+ : `${text.slice(0, maxChars)}... (truncated ${text.length - maxChars} chars)`;
252
+ logDebug(`[Antigravity Debug ${context.id}] Response Body (${status}): ${preview}`);
253
+ return text;
254
+ }
255
+ catch (e) {
256
+ logDebug(`[Antigravity Debug ${context.id}] Failed to read response body: ${formatError(e)}`);
257
+ return undefined;
258
+ }
259
+ }
260
+ export function logModelFamily(url, extractedModel, family) {
261
+ if (!debugEnabled)
262
+ return;
263
+ logDebug(`[ModelFamily] url=${url} model=${extractedModel ?? "unknown"} family=${family}`);
264
+ }
265
+ export function debugLogToFile(message) {
266
+ if (!debugEnabled)
267
+ return;
268
+ logDebug(message);
141
269
  }
142
270
  //# sourceMappingURL=debug.js.map