opencode-openai-codex-multi-auth 4.4.1 → 4.4.6

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.
@@ -2,37 +2,240 @@ import { existsSync } from "node:fs";
2
2
  import { promises as fs } from "node:fs";
3
3
  import { homedir } from "node:os";
4
4
  import { dirname, join } from "node:path";
5
- const STORAGE_DIR = join(homedir(), ".opencode");
6
5
  const STORAGE_FILE = "openai-codex-accounts.json";
6
+ const AUTH_DEBUG_ENABLED = process.env.OPENCODE_OPENAI_AUTH_DEBUG === "1";
7
+ function debug(...args) {
8
+ if (!AUTH_DEBUG_ENABLED)
9
+ return;
10
+ console.debug(...args);
11
+ }
12
+ function getOpencodeConfigDir() {
13
+ const xdgConfigHome = process.env.XDG_CONFIG_HOME;
14
+ if (xdgConfigHome && xdgConfigHome.trim()) {
15
+ return join(xdgConfigHome, "opencode");
16
+ }
17
+ return join(homedir(), ".config", "opencode");
18
+ }
19
+ function getLegacyOpencodeDir() {
20
+ return join(homedir(), ".opencode");
21
+ }
7
22
  export function getStoragePath() {
8
- return join(STORAGE_DIR, STORAGE_FILE);
23
+ return join(getOpencodeConfigDir(), STORAGE_FILE);
24
+ }
25
+ function getLegacyStoragePath() {
26
+ return join(getLegacyOpencodeDir(), STORAGE_FILE);
27
+ }
28
+ function normalizeStorage(parsed) {
29
+ if (!parsed || typeof parsed !== "object")
30
+ return null;
31
+ const storage = parsed;
32
+ if (storage.version !== 3)
33
+ return null;
34
+ if (!Array.isArray(storage.accounts))
35
+ return null;
36
+ const activeIndex = typeof storage.activeIndex === "number" && Number.isFinite(storage.activeIndex)
37
+ ? Math.max(0, Math.floor(storage.activeIndex))
38
+ : 0;
39
+ const clampedActiveIndex = storage.accounts.length > 0
40
+ ? Math.min(activeIndex, storage.accounts.length - 1)
41
+ : 0;
42
+ return {
43
+ version: 3,
44
+ accounts: storage.accounts,
45
+ activeIndex: clampedActiveIndex,
46
+ activeIndexByFamily: storage.activeIndexByFamily ?? {},
47
+ };
48
+ }
49
+ function areRateLimitStatesEqual(left, right) {
50
+ const leftKeys = Object.keys(left);
51
+ const rightKeys = Object.keys(right);
52
+ if (leftKeys.length !== rightKeys.length)
53
+ return false;
54
+ for (const key of leftKeys) {
55
+ if (left[key] !== right[key])
56
+ return false;
57
+ }
58
+ return true;
59
+ }
60
+ function findAccountMatchIndex(accounts, candidate) {
61
+ if (candidate.accountId) {
62
+ const matchIndex = accounts.findIndex((account) => account.accountId === candidate.accountId);
63
+ if (matchIndex >= 0)
64
+ return matchIndex;
65
+ }
66
+ if (candidate.email) {
67
+ const matchIndex = accounts.findIndex((account) => account.email === candidate.email);
68
+ if (matchIndex >= 0)
69
+ return matchIndex;
70
+ }
71
+ if (candidate.refreshToken) {
72
+ return accounts.findIndex((account) => account.refreshToken === candidate.refreshToken);
73
+ }
74
+ return -1;
75
+ }
76
+ function mergeAccounts(existing, incoming) {
77
+ const merged = existing.map((account) => ({ ...account }));
78
+ let changed = false;
79
+ for (const candidate of incoming) {
80
+ const matchIndex = findAccountMatchIndex(merged, candidate);
81
+ if (matchIndex < 0) {
82
+ merged.push({ ...candidate });
83
+ changed = true;
84
+ continue;
85
+ }
86
+ const current = merged[matchIndex];
87
+ const updated = { ...current };
88
+ let didUpdate = false;
89
+ if (!updated.refreshToken && candidate.refreshToken) {
90
+ updated.refreshToken = candidate.refreshToken;
91
+ didUpdate = true;
92
+ }
93
+ if (!updated.accountId && candidate.accountId) {
94
+ updated.accountId = candidate.accountId;
95
+ didUpdate = true;
96
+ }
97
+ if (!updated.email && candidate.email) {
98
+ updated.email = candidate.email;
99
+ didUpdate = true;
100
+ }
101
+ const candidateAddedAt = typeof candidate.addedAt === "number" && Number.isFinite(candidate.addedAt)
102
+ ? candidate.addedAt
103
+ : undefined;
104
+ const currentAddedAt = typeof updated.addedAt === "number" && Number.isFinite(updated.addedAt)
105
+ ? updated.addedAt
106
+ : undefined;
107
+ if (typeof candidateAddedAt === "number" &&
108
+ (typeof currentAddedAt !== "number" || candidateAddedAt < currentAddedAt)) {
109
+ updated.addedAt = candidateAddedAt;
110
+ didUpdate = true;
111
+ }
112
+ const candidateLastUsed = typeof candidate.lastUsed === "number" && Number.isFinite(candidate.lastUsed)
113
+ ? candidate.lastUsed
114
+ : undefined;
115
+ const currentLastUsed = typeof updated.lastUsed === "number" && Number.isFinite(updated.lastUsed)
116
+ ? updated.lastUsed
117
+ : undefined;
118
+ if (typeof candidateLastUsed === "number" &&
119
+ (typeof currentLastUsed !== "number" || candidateLastUsed > currentLastUsed)) {
120
+ updated.lastUsed = candidateLastUsed;
121
+ didUpdate = true;
122
+ }
123
+ if (candidate.lastSwitchReason && !updated.lastSwitchReason) {
124
+ updated.lastSwitchReason = candidate.lastSwitchReason;
125
+ didUpdate = true;
126
+ }
127
+ if (candidate.rateLimitResetTimes) {
128
+ const mergedRateLimits = {
129
+ ...candidate.rateLimitResetTimes,
130
+ ...updated.rateLimitResetTimes,
131
+ };
132
+ const currentRateLimits = updated.rateLimitResetTimes ?? {};
133
+ if (!areRateLimitStatesEqual(currentRateLimits, mergedRateLimits)) {
134
+ updated.rateLimitResetTimes = mergedRateLimits;
135
+ didUpdate = true;
136
+ }
137
+ }
138
+ if (typeof candidate.coolingDownUntil === "number") {
139
+ const currentCooldown = typeof updated.coolingDownUntil === "number" &&
140
+ Number.isFinite(updated.coolingDownUntil)
141
+ ? updated.coolingDownUntil
142
+ : undefined;
143
+ if (typeof currentCooldown !== "number" ||
144
+ candidate.coolingDownUntil > currentCooldown) {
145
+ updated.coolingDownUntil = candidate.coolingDownUntil;
146
+ didUpdate = true;
147
+ }
148
+ }
149
+ if (candidate.cooldownReason && !updated.cooldownReason) {
150
+ updated.cooldownReason = candidate.cooldownReason;
151
+ didUpdate = true;
152
+ }
153
+ if (didUpdate) {
154
+ merged[matchIndex] = updated;
155
+ changed = true;
156
+ }
157
+ }
158
+ return { accounts: merged, changed };
159
+ }
160
+ async function migrateLegacyAccountsFileIfNeeded() {
161
+ const newPath = getStoragePath();
162
+ const legacyPath = getLegacyStoragePath();
163
+ const newExists = existsSync(newPath);
164
+ const legacyExists = existsSync(legacyPath);
165
+ if (!legacyExists)
166
+ return;
167
+ if (!newExists) {
168
+ await fs.mkdir(dirname(newPath), { recursive: true });
169
+ try {
170
+ await fs.rename(legacyPath, newPath);
171
+ }
172
+ catch {
173
+ try {
174
+ await fs.copyFile(legacyPath, newPath);
175
+ await fs.unlink(legacyPath);
176
+ }
177
+ catch {
178
+ // Best-effort; ignore.
179
+ }
180
+ }
181
+ return;
182
+ }
183
+ try {
184
+ const [newRaw, legacyRaw] = await Promise.all([
185
+ fs.readFile(newPath, "utf-8"),
186
+ fs.readFile(legacyPath, "utf-8"),
187
+ ]);
188
+ const newStorage = normalizeStorage(JSON.parse(newRaw));
189
+ const legacyStorage = normalizeStorage(JSON.parse(legacyRaw));
190
+ if (!legacyStorage || legacyStorage.accounts.length === 0)
191
+ return;
192
+ if (!newStorage) {
193
+ debug("[StorageMigration] New storage invalid, adopting legacy accounts");
194
+ await fs.writeFile(newPath, JSON.stringify(legacyStorage, null, 2), "utf-8");
195
+ return;
196
+ }
197
+ const { accounts: mergedAccounts, changed } = mergeAccounts(newStorage.accounts, legacyStorage.accounts);
198
+ if (!changed)
199
+ return;
200
+ const baseActiveIndex = newStorage.accounts.length > 0 ? newStorage.activeIndex : legacyStorage.activeIndex;
201
+ const activeIndex = mergedAccounts.length > 0
202
+ ? Math.min(Math.max(0, baseActiveIndex), mergedAccounts.length - 1)
203
+ : 0;
204
+ const activeIndexByFamily = {
205
+ ...legacyStorage.activeIndexByFamily,
206
+ ...newStorage.activeIndexByFamily,
207
+ };
208
+ const mergedStorage = {
209
+ version: 3,
210
+ accounts: mergedAccounts,
211
+ activeIndex,
212
+ activeIndexByFamily,
213
+ };
214
+ debug(`[StorageMigration] Merged legacy accounts (new: ${newStorage.accounts.length}, legacy: ${legacyStorage.accounts.length}, merged: ${mergedAccounts.length})`);
215
+ await fs.writeFile(newPath, JSON.stringify(mergedStorage, null, 2), "utf-8");
216
+ try {
217
+ await fs.unlink(legacyPath);
218
+ }
219
+ catch {
220
+ // Best-effort; ignore.
221
+ }
222
+ }
223
+ catch {
224
+ // Best-effort; ignore.
225
+ }
9
226
  }
10
227
  export async function loadAccounts() {
228
+ await migrateLegacyAccountsFileIfNeeded();
11
229
  const filePath = getStoragePath();
230
+ debug(`[LoadAccounts] Loading from: ${filePath}`);
12
231
  try {
13
- if (!existsSync(filePath))
232
+ if (!existsSync(filePath)) {
233
+ debug(`[LoadAccounts] File does not exist: ${filePath}`);
14
234
  return null;
235
+ }
15
236
  const raw = await fs.readFile(filePath, "utf-8");
16
237
  const parsed = JSON.parse(raw);
17
- if (!parsed || typeof parsed !== "object")
18
- return null;
19
- const storage = parsed;
20
- if (storage.version !== 3)
21
- return null;
22
- if (!Array.isArray(storage.accounts))
23
- return null;
24
- const activeIndex = typeof storage.activeIndex === "number" && Number.isFinite(storage.activeIndex)
25
- ? Math.max(0, Math.floor(storage.activeIndex))
26
- : 0;
27
- const clampedActiveIndex = storage.accounts.length > 0
28
- ? Math.min(activeIndex, storage.accounts.length - 1)
29
- : 0;
30
- return {
31
- version: 3,
32
- accounts: storage.accounts,
33
- activeIndex: clampedActiveIndex,
34
- activeIndexByFamily: storage.activeIndexByFamily ?? {},
35
- };
238
+ return normalizeStorage(parsed);
36
239
  }
37
240
  catch {
38
241
  return null;
@@ -40,7 +243,26 @@ export async function loadAccounts() {
40
243
  }
41
244
  export async function saveAccounts(storage) {
42
245
  const filePath = getStoragePath();
43
- await fs.mkdir(dirname(filePath), { recursive: true });
44
- await fs.writeFile(filePath, JSON.stringify(storage, null, 2), "utf-8");
246
+ debug(`[SaveAccounts] Saving to ${filePath} with ${storage.accounts.length} accounts`);
247
+ try {
248
+ await fs.mkdir(dirname(filePath), { recursive: true });
249
+ const jsonContent = JSON.stringify(storage, null, 2);
250
+ debug(`[SaveAccounts] Writing ${jsonContent.length} bytes`);
251
+ await fs.writeFile(filePath, jsonContent, "utf-8");
252
+ if (AUTH_DEBUG_ENABLED) {
253
+ const verifyContent = await fs.readFile(filePath, "utf-8");
254
+ const verifyStorage = normalizeStorage(JSON.parse(verifyContent));
255
+ if (verifyStorage) {
256
+ debug(`[SaveAccounts] Verification successful - ${verifyStorage.accounts.length} accounts in file`);
257
+ }
258
+ else {
259
+ debug("[SaveAccounts] Verification failed - invalid storage format");
260
+ }
261
+ }
262
+ }
263
+ catch (error) {
264
+ console.error("[SaveAccounts] Error saving accounts:", error);
265
+ throw error;
266
+ }
45
267
  }
46
268
  //# sourceMappingURL=storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../lib/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAI1C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AACjD,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAElD,MAAM,UAAU,cAAc;IAC7B,OAAO,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IACjC,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,IAAI,CAAC;QACJ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAE1C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACvD,MAAM,OAAO,GAAG,MAAmC,CAAC;QACpD,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QAElD,MAAM,WAAW,GAChB,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC;YAC9E,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC,CAAC;QACN,MAAM,kBAAkB,GACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAC1B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC,CAAC;QAEN,OAAO;YACN,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,OAAO,CAAC,QAAwC;YAC1D,WAAW,EAAE,kBAAkB;YAC/B,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,EAAE;SACtD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAyB;IAC3D,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../lib/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Run an interactive prompt without breaking OpenCode's TUI.
3
+ *
4
+ * OpenCode enables raw mode and mouse tracking for its UI. Node's readline can
5
+ * toggle raw mode on close, which can leave mouse tracking enabled but raw mode
6
+ * disabled — causing mouse movements to appear as garbage input (e.g. "M2^J").
7
+ */
8
+ export declare function withTerminalModeRestored<T>(fn: () => Promise<T>): Promise<T>;
9
+ //# sourceMappingURL=terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../lib/terminal.ts"],"names":[],"mappings":"AAoBA;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA8BlF"}
@@ -0,0 +1,56 @@
1
+ import { stdin as input, stdout as output } from "node:process";
2
+ const AUTH_DEBUG_ENABLED = process.env.OPENCODE_OPENAI_AUTH_DEBUG === "1";
3
+ function debug(...args) {
4
+ if (!AUTH_DEBUG_ENABLED)
5
+ return;
6
+ console.debug(...args);
7
+ }
8
+ function disableMouseTracking() {
9
+ if (!output.isTTY)
10
+ return;
11
+ // Disable common xterm mouse tracking modes.
12
+ output.write("\x1b[?1000l\x1b[?1002l\x1b[?1003l\x1b[?1006l");
13
+ }
14
+ function enableMouseTracking() {
15
+ if (!output.isTTY)
16
+ return;
17
+ output.write("\x1b[?1000h\x1b[?1002h\x1b[?1003h\x1b[?1006h");
18
+ }
19
+ /**
20
+ * Run an interactive prompt without breaking OpenCode's TUI.
21
+ *
22
+ * OpenCode enables raw mode and mouse tracking for its UI. Node's readline can
23
+ * toggle raw mode on close, which can leave mouse tracking enabled but raw mode
24
+ * disabled — causing mouse movements to appear as garbage input (e.g. "M2^J").
25
+ */
26
+ export async function withTerminalModeRestored(fn) {
27
+ if (!input.isTTY) {
28
+ debug("[TerminalGuard] No TTY detected, skipping terminal guard");
29
+ return await fn();
30
+ }
31
+ const wasRaw = input.isRaw;
32
+ debug(`[TerminalGuard] Starting guard - wasRaw: ${wasRaw}, isTTY: ${input.isTTY}`);
33
+ try {
34
+ debug("[TerminalGuard] Disabling mouse tracking");
35
+ disableMouseTracking();
36
+ // Ensure we can accept normal line input during prompts.
37
+ if (typeof input.setRawMode === "function") {
38
+ debug("[TerminalGuard] Setting raw mode to false");
39
+ input.setRawMode(false);
40
+ }
41
+ return await fn();
42
+ }
43
+ finally {
44
+ debug(`[TerminalGuard] Restoring terminal state - wasRaw: ${wasRaw}`);
45
+ if (typeof wasRaw === "boolean" && typeof input.setRawMode === "function") {
46
+ input.setRawMode(wasRaw);
47
+ }
48
+ // If OpenCode was previously in raw mode, re-enable mouse tracking so the UI
49
+ // doesn't get stuck in a non-mouse state.
50
+ if (wasRaw) {
51
+ debug("[TerminalGuard] Re-enabling mouse tracking");
52
+ enableMouseTracking();
53
+ }
54
+ }
55
+ }
56
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../lib/terminal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,GAAG,CAAC;AAE1E,SAAS,KAAK,CAAC,GAAG,IAAe;IAChC,IAAI,CAAC,kBAAkB;QAAE,OAAO;IAChC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,oBAAoB;IAC5B,IAAI,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO;IAC1B,6CAA6C;IAC7C,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,mBAAmB;IAC3B,IAAI,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO;IAC1B,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAI,EAAoB;IACrE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAClB,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAClE,OAAO,MAAM,EAAE,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAI,KAAwC,CAAC,KAAK,CAAC;IAC/D,KAAK,CAAC,4CAA4C,MAAM,YAAY,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAEnF,IAAI,CAAC;QACJ,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAClD,oBAAoB,EAAE,CAAC;QACvB,yDAAyD;QACzD,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YAC5C,KAAK,CAAC,2CAA2C,CAAC,CAAC;YACnD,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,MAAM,EAAE,EAAE,CAAC;IACnB,CAAC;YAAS,CAAC;QACV,KAAK,CAAC,sDAAsD,MAAM,EAAE,CAAC,CAAC;QACtE,IAAI,OAAO,MAAM,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YAC3E,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QACD,6EAA6E;QAC7E,0CAA0C;QAC1C,IAAI,MAAM,EAAE,CAAC;YACZ,KAAK,CAAC,4CAA4C,CAAC,CAAC;YACpD,mBAAmB,EAAE,CAAC;QACvB,CAAC;IACF,CAAC;AACF,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { Auth, Provider, Model } from "@opencode-ai/sdk";
2
2
  /**
3
- * Plugin configuration from ~/.opencode/openai-codex-auth-config.json
3
+ * Plugin configuration from ~/.config/opencode/openai-codex-auth-config.json
4
4
  */
5
5
  export interface PluginConfig {
6
6
  /**
@@ -55,7 +55,7 @@ export interface PluginConfig {
55
55
  */
56
56
  retryAllAccountsMaxRetries?: number;
57
57
  }
58
- export type AccountSelectionStrategy = "sticky" | "round-robin";
58
+ export type AccountSelectionStrategy = "sticky" | "round-robin" | "hybrid";
59
59
  export type OAuthAuthDetails = Extract<Auth, {
60
60
  type: "oauth";
61
61
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-openai-codex-multi-auth",
3
- "version": "4.4.1",
3
+ "version": "4.4.6",
4
4
  "description": "OpenAI ChatGPT (Codex backend) OAuth auth plugin for opencode - use your ChatGPT Plus/Pro subscription instead of API credits",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -49,7 +49,8 @@
49
49
  "config/",
50
50
  "scripts/",
51
51
  "README.md",
52
- "LICENSE"
52
+ "LICENSE",
53
+ "THIRD_PARTY_NOTICES.md"
53
54
  ],
54
55
  "engines": {
55
56
  "node": ">=20.0.0"
@@ -61,11 +61,10 @@ const cacheNodeModulesLegacyGitHub = join(cacheDir, "node_modules", LEGACY_GITHU
61
61
  const cacheBunLock = join(cacheDir, "bun.lock");
62
62
  const cachePackageJson = join(cacheDir, "package.json");
63
63
  const opencodeAuthPath = join(homedir(), ".opencode", "auth", "openai.json");
64
- const pluginConfigPath = join(
65
- homedir(),
66
- ".opencode",
67
- "openai-codex-auth-config.json",
68
- );
64
+ const pluginConfigPath = join(configDir, "openai-codex-auth-config.json");
65
+ const legacyPluginConfigPath = join(homedir(), ".opencode", "openai-codex-auth-config.json");
66
+ const legacyAccountsPath = join(homedir(), ".opencode", "openai-codex-accounts.json");
67
+ const accountsPath = join(configDir, "openai-codex-accounts.json");
69
68
  const pluginLogDir = join(homedir(), ".opencode", "logs", "codex-plugin");
70
69
  const opencodeCacheDir = join(homedir(), ".opencode", "cache");
71
70
 
@@ -272,10 +271,16 @@ async function clearPluginArtifacts() {
272
271
  if (dryRun) {
273
272
  log(`[dry-run] Would remove ${opencodeAuthPath}`);
274
273
  log(`[dry-run] Would remove ${pluginConfigPath}`);
274
+ log(`[dry-run] Would remove ${legacyPluginConfigPath}`);
275
+ log(`[dry-run] Would remove ${accountsPath}`);
276
+ log(`[dry-run] Would remove ${legacyAccountsPath}`);
275
277
  log(`[dry-run] Would remove ${pluginLogDir}`);
276
278
  } else {
277
279
  await rm(opencodeAuthPath, { force: true });
278
280
  await rm(pluginConfigPath, { force: true });
281
+ await rm(legacyPluginConfigPath, { force: true });
282
+ await rm(accountsPath, { force: true });
283
+ await rm(legacyAccountsPath, { force: true });
279
284
  await rm(pluginLogDir, { recursive: true, force: true });
280
285
  }
281
286