@iam-brain/opencode-codex-auth 0.1.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.
Files changed (165) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +111 -0
  3. package/dist/bin/opencode-codex-auth.d.ts +3 -0
  4. package/dist/bin/opencode-codex-auth.d.ts.map +1 -0
  5. package/dist/bin/opencode-codex-auth.js +13 -0
  6. package/dist/bin/opencode-codex-auth.js.map +1 -0
  7. package/dist/bin/opencode-openai-multi.d.ts +3 -0
  8. package/dist/bin/opencode-openai-multi.d.ts.map +1 -0
  9. package/dist/bin/opencode-openai-multi.js +13 -0
  10. package/dist/bin/opencode-openai-multi.js.map +1 -0
  11. package/dist/index.d.ts +4 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +137 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/lib/accounts-tools.d.ts +14 -0
  16. package/dist/lib/accounts-tools.d.ts.map +1 -0
  17. package/dist/lib/accounts-tools.js +100 -0
  18. package/dist/lib/accounts-tools.js.map +1 -0
  19. package/dist/lib/claims.d.ts +20 -0
  20. package/dist/lib/claims.d.ts.map +1 -0
  21. package/dist/lib/claims.js +37 -0
  22. package/dist/lib/claims.js.map +1 -0
  23. package/dist/lib/codex-native.d.ts +74 -0
  24. package/dist/lib/codex-native.d.ts.map +1 -0
  25. package/dist/lib/codex-native.js +2404 -0
  26. package/dist/lib/codex-native.js.map +1 -0
  27. package/dist/lib/codex-quota-fetch.d.ts +11 -0
  28. package/dist/lib/codex-quota-fetch.d.ts.map +1 -0
  29. package/dist/lib/codex-quota-fetch.js +149 -0
  30. package/dist/lib/codex-quota-fetch.js.map +1 -0
  31. package/dist/lib/codex-status-storage.d.ts +5 -0
  32. package/dist/lib/codex-status-storage.d.ts.map +1 -0
  33. package/dist/lib/codex-status-storage.js +58 -0
  34. package/dist/lib/codex-status-storage.js.map +1 -0
  35. package/dist/lib/codex-status-tool.d.ts +6 -0
  36. package/dist/lib/codex-status-tool.d.ts.map +1 -0
  37. package/dist/lib/codex-status-tool.js +37 -0
  38. package/dist/lib/codex-status-tool.js.map +1 -0
  39. package/dist/lib/codex-status-ui.d.ts +7 -0
  40. package/dist/lib/codex-status-ui.d.ts.map +1 -0
  41. package/dist/lib/codex-status-ui.js +109 -0
  42. package/dist/lib/codex-status-ui.js.map +1 -0
  43. package/dist/lib/codex-status.d.ts +14 -0
  44. package/dist/lib/codex-status.d.ts.map +1 -0
  45. package/dist/lib/codex-status.js +31 -0
  46. package/dist/lib/codex-status.js.map +1 -0
  47. package/dist/lib/compat-sanitizer.d.ts +7 -0
  48. package/dist/lib/compat-sanitizer.d.ts.map +1 -0
  49. package/dist/lib/compat-sanitizer.js +101 -0
  50. package/dist/lib/compat-sanitizer.js.map +1 -0
  51. package/dist/lib/config.d.ts +94 -0
  52. package/dist/lib/config.d.ts.map +1 -0
  53. package/dist/lib/config.js +495 -0
  54. package/dist/lib/config.js.map +1 -0
  55. package/dist/lib/constants.d.ts +2 -0
  56. package/dist/lib/constants.d.ts.map +1 -0
  57. package/dist/lib/constants.js +2 -0
  58. package/dist/lib/constants.js.map +1 -0
  59. package/dist/lib/fatal-errors.d.ts +17 -0
  60. package/dist/lib/fatal-errors.d.ts.map +1 -0
  61. package/dist/lib/fatal-errors.js +42 -0
  62. package/dist/lib/fatal-errors.js.map +1 -0
  63. package/dist/lib/fetch-orchestrator.d.ts +56 -0
  64. package/dist/lib/fetch-orchestrator.d.ts.map +1 -0
  65. package/dist/lib/fetch-orchestrator.js +240 -0
  66. package/dist/lib/fetch-orchestrator.js.map +1 -0
  67. package/dist/lib/identity.d.ts +10 -0
  68. package/dist/lib/identity.d.ts.map +1 -0
  69. package/dist/lib/identity.js +31 -0
  70. package/dist/lib/identity.js.map +1 -0
  71. package/dist/lib/installer-cli.d.ts +7 -0
  72. package/dist/lib/installer-cli.d.ts.map +1 -0
  73. package/dist/lib/installer-cli.js +115 -0
  74. package/dist/lib/installer-cli.js.map +1 -0
  75. package/dist/lib/logger.d.ts +11 -0
  76. package/dist/lib/logger.d.ts.map +1 -0
  77. package/dist/lib/logger.js +25 -0
  78. package/dist/lib/logger.js.map +1 -0
  79. package/dist/lib/model-catalog.d.ts +66 -0
  80. package/dist/lib/model-catalog.d.ts.map +1 -0
  81. package/dist/lib/model-catalog.js +532 -0
  82. package/dist/lib/model-catalog.js.map +1 -0
  83. package/dist/lib/oauth-pages.d.ts +2 -0
  84. package/dist/lib/oauth-pages.d.ts.map +1 -0
  85. package/dist/lib/oauth-pages.js +199 -0
  86. package/dist/lib/oauth-pages.js.map +1 -0
  87. package/dist/lib/opencode-install.d.ts +15 -0
  88. package/dist/lib/opencode-install.d.ts.map +1 -0
  89. package/dist/lib/opencode-install.js +53 -0
  90. package/dist/lib/opencode-install.js.map +1 -0
  91. package/dist/lib/orchestrator-agents.d.ts +29 -0
  92. package/dist/lib/orchestrator-agents.d.ts.map +1 -0
  93. package/dist/lib/orchestrator-agents.js +212 -0
  94. package/dist/lib/orchestrator-agents.js.map +1 -0
  95. package/dist/lib/paths.d.ts +7 -0
  96. package/dist/lib/paths.d.ts.map +1 -0
  97. package/dist/lib/paths.js +18 -0
  98. package/dist/lib/paths.js.map +1 -0
  99. package/dist/lib/personalities.d.ts +5 -0
  100. package/dist/lib/personalities.d.ts.map +1 -0
  101. package/dist/lib/personalities.js +69 -0
  102. package/dist/lib/personalities.js.map +1 -0
  103. package/dist/lib/proactive-refresh.d.ts +11 -0
  104. package/dist/lib/proactive-refresh.d.ts.map +1 -0
  105. package/dist/lib/proactive-refresh.js +110 -0
  106. package/dist/lib/proactive-refresh.js.map +1 -0
  107. package/dist/lib/quarantine.d.ts +9 -0
  108. package/dist/lib/quarantine.d.ts.map +1 -0
  109. package/dist/lib/quarantine.js +39 -0
  110. package/dist/lib/quarantine.js.map +1 -0
  111. package/dist/lib/rate-limit.d.ts +9 -0
  112. package/dist/lib/rate-limit.d.ts.map +1 -0
  113. package/dist/lib/rate-limit.js +32 -0
  114. package/dist/lib/rate-limit.js.map +1 -0
  115. package/dist/lib/refresh-queue.d.ts +30 -0
  116. package/dist/lib/refresh-queue.d.ts.map +1 -0
  117. package/dist/lib/refresh-queue.js +67 -0
  118. package/dist/lib/refresh-queue.js.map +1 -0
  119. package/dist/lib/request-snapshots.d.ts +14 -0
  120. package/dist/lib/request-snapshots.d.ts.map +1 -0
  121. package/dist/lib/request-snapshots.js +148 -0
  122. package/dist/lib/request-snapshots.js.map +1 -0
  123. package/dist/lib/rotation.d.ts +29 -0
  124. package/dist/lib/rotation.d.ts.map +1 -0
  125. package/dist/lib/rotation.js +252 -0
  126. package/dist/lib/rotation.js.map +1 -0
  127. package/dist/lib/storage.d.ts +27 -0
  128. package/dist/lib/storage.d.ts.map +1 -0
  129. package/dist/lib/storage.js +610 -0
  130. package/dist/lib/storage.js.map +1 -0
  131. package/dist/lib/toast.d.ts +2 -0
  132. package/dist/lib/toast.d.ts.map +1 -0
  133. package/dist/lib/toast.js +47 -0
  134. package/dist/lib/toast.js.map +1 -0
  135. package/dist/lib/tools-output.d.ts +6 -0
  136. package/dist/lib/tools-output.d.ts.map +1 -0
  137. package/dist/lib/tools-output.js +6 -0
  138. package/dist/lib/tools-output.js.map +1 -0
  139. package/dist/lib/types.d.ts +62 -0
  140. package/dist/lib/types.d.ts.map +1 -0
  141. package/dist/lib/types.js +2 -0
  142. package/dist/lib/types.js.map +1 -0
  143. package/dist/lib/ui/auth-menu-runner.d.ts +19 -0
  144. package/dist/lib/ui/auth-menu-runner.d.ts.map +1 -0
  145. package/dist/lib/ui/auth-menu-runner.js +79 -0
  146. package/dist/lib/ui/auth-menu-runner.js.map +1 -0
  147. package/dist/lib/ui/auth-menu.d.ts +80 -0
  148. package/dist/lib/ui/auth-menu.d.ts.map +1 -0
  149. package/dist/lib/ui/auth-menu.js +321 -0
  150. package/dist/lib/ui/auth-menu.js.map +1 -0
  151. package/dist/lib/ui/tty/ansi.d.ts +18 -0
  152. package/dist/lib/ui/tty/ansi.d.ts.map +1 -0
  153. package/dist/lib/ui/tty/ansi.js +37 -0
  154. package/dist/lib/ui/tty/ansi.js.map +1 -0
  155. package/dist/lib/ui/tty/confirm.d.ts +7 -0
  156. package/dist/lib/ui/tty/confirm.d.ts.map +1 -0
  157. package/dist/lib/ui/tty/confirm.js +20 -0
  158. package/dist/lib/ui/tty/confirm.js.map +1 -0
  159. package/dist/lib/ui/tty/select.d.ts +17 -0
  160. package/dist/lib/ui/tty/select.d.ts.map +1 -0
  161. package/dist/lib/ui/tty/select.js +223 -0
  162. package/dist/lib/ui/tty/select.js.map +1 -0
  163. package/package.json +68 -0
  164. package/schemas/codex-config.schema.json +146 -0
  165. package/schemas/opencode.schema.json +23 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-orchestrator.d.ts","sourceRoot":"","sources":["../../lib/fetch-orchestrator.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,QAAQ,GAAG;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC,CAAA;AAED,wBAAgB,4BAA4B,IAAI,sBAAsB,CAQrE;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,4BAA4B,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC1E,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1E,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,KAAK,CAAC,EAAE,sBAAsB,CAAA;IAC9B,SAAS,CAAC,EAAE,CACV,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,EACjD,SAAS,EAAE,OAAO,KACf,OAAO,CAAC,IAAI,CAAC,CAAA;IAClB,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE;QACzB,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,MAAM,CAAA;QACnB,OAAO,EAAE,OAAO,CAAA;QAChB,IAAI,EAAE,QAAQ,CAAA;QACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAC1B,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC1B,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC1B,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,MAAM,CAAA;QACnB,QAAQ,EAAE,QAAQ,CAAA;QAClB,IAAI,EAAE,QAAQ,CAAA;QACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAC1B,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAC3B,CAAA;AA8CD,qBAAa,iBAAiB;IAGhB,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwB;gBAE1B,IAAI,EAAE,qBAAqB;IAI/C,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,oBAAoB;YAUd,cAAc;IAuBtB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;CA+HpF"}
@@ -0,0 +1,240 @@
1
+ import { computeBackoffMs, parseRetryAfterMs } from "./rate-limit";
2
+ import { createSyntheticErrorResponse, formatWaitTime } from "./fatal-errors";
3
+ export function createFetchOrchestratorState() {
4
+ return {
5
+ lastSessionKey: null,
6
+ seenSessionKeys: new Map(),
7
+ lastAccountKey: null,
8
+ rateLimitToastShownAt: new Map(),
9
+ toastShownAt: new Map()
10
+ };
11
+ }
12
+ const SESSION_KEY_TTL_MS = 6 * 60 * 60 * 1000;
13
+ const MAX_SESSION_KEYS = 200;
14
+ const DEFAULT_RATE_LIMIT_TOAST_DEBOUNCE_MS = 60_000;
15
+ const DEFAULT_SESSION_TOAST_DEBOUNCE_MS = 15_000;
16
+ const DEFAULT_ACCOUNT_SWITCH_TOAST_DEBOUNCE_MS = 15_000;
17
+ function resolveSessionKey(body) {
18
+ const key = body?.prompt_cache_key;
19
+ if (typeof key !== "string")
20
+ return null;
21
+ const trimmed = key.trim();
22
+ return trimmed ? trimmed : null;
23
+ }
24
+ async function readRequestBody(baseRequest) {
25
+ try {
26
+ const text = await baseRequest.clone().text();
27
+ if (!text)
28
+ return undefined;
29
+ const parsed = JSON.parse(text);
30
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
31
+ return undefined;
32
+ return parsed;
33
+ }
34
+ catch {
35
+ return undefined;
36
+ }
37
+ }
38
+ function formatAccountLabel(auth) {
39
+ const explicit = auth.accountLabel?.trim();
40
+ if (explicit)
41
+ return explicit;
42
+ const email = auth.email?.trim();
43
+ const plan = auth.plan?.trim();
44
+ const accountId = auth.accountId?.trim();
45
+ const idSuffix = accountId
46
+ ? accountId.length > 6
47
+ ? accountId.slice(-6)
48
+ : accountId
49
+ : undefined;
50
+ if (email && plan)
51
+ return `${email} (${plan})`;
52
+ if (email)
53
+ return email;
54
+ if (idSuffix)
55
+ return `id:${idSuffix}`;
56
+ return "account";
57
+ }
58
+ export class FetchOrchestrator {
59
+ deps;
60
+ state;
61
+ constructor(deps) {
62
+ this.deps = deps;
63
+ this.state = deps.state ?? createFetchOrchestratorState();
64
+ }
65
+ touchSessionKey(sessionKey, now) {
66
+ this.pruneSessionKeys(now);
67
+ const hasSeen = this.state.seenSessionKeys.has(sessionKey);
68
+ if (hasSeen) {
69
+ this.state.seenSessionKeys.delete(sessionKey);
70
+ }
71
+ this.state.seenSessionKeys.set(sessionKey, now);
72
+ this.enforceSessionKeyLimit();
73
+ return hasSeen;
74
+ }
75
+ pruneSessionKeys(now) {
76
+ if (this.state.seenSessionKeys.size === 0)
77
+ return;
78
+ for (const [key, lastSeen] of this.state.seenSessionKeys) {
79
+ if (now - lastSeen > SESSION_KEY_TTL_MS) {
80
+ this.state.seenSessionKeys.delete(key);
81
+ }
82
+ }
83
+ }
84
+ enforceSessionKeyLimit() {
85
+ while (this.state.seenSessionKeys.size > MAX_SESSION_KEYS) {
86
+ const oldest = this.state.seenSessionKeys.keys().next().value;
87
+ if (!oldest)
88
+ break;
89
+ this.state.seenSessionKeys.delete(oldest);
90
+ }
91
+ }
92
+ shouldShowRateLimitToast(identityKey, now) {
93
+ const key = identityKey ?? "__global__";
94
+ const debounceMs = Math.max(0, Math.floor(this.deps.rateLimitToastDebounceMs ?? DEFAULT_RATE_LIMIT_TOAST_DEBOUNCE_MS));
95
+ const lastShownAt = this.state.rateLimitToastShownAt.get(key);
96
+ if (lastShownAt !== undefined && now - lastShownAt < debounceMs) {
97
+ return false;
98
+ }
99
+ this.state.rateLimitToastShownAt.set(key, now);
100
+ return true;
101
+ }
102
+ shouldShowToastByKey(key, now, debounceMs) {
103
+ const normalizedDebounce = Math.max(0, Math.floor(debounceMs));
104
+ const lastShownAt = this.state.toastShownAt.get(key);
105
+ if (lastShownAt !== undefined && now - lastShownAt < normalizedDebounce) {
106
+ return false;
107
+ }
108
+ this.state.toastShownAt.set(key, now);
109
+ return true;
110
+ }
111
+ async maybeShowToast(message, variant, options) {
112
+ if (!this.deps.showToast)
113
+ return;
114
+ if (options?.dedupeKey) {
115
+ const now = options.now ?? (this.deps.now ?? Date.now)();
116
+ if (!this.shouldShowToastByKey(options.dedupeKey, now, options.debounceMs ?? 0)) {
117
+ return;
118
+ }
119
+ }
120
+ try {
121
+ await this.deps.showToast(message, variant, this.deps.quietMode === true);
122
+ }
123
+ catch {
124
+ // Toast failures should never block request execution.
125
+ }
126
+ }
127
+ async execute(input, init) {
128
+ const requestedAttempts = this.deps.maxAttempts ?? 3;
129
+ const finiteAttempts = Number.isFinite(requestedAttempts) ? requestedAttempts : 3;
130
+ const maxAttempts = Math.max(1, Math.floor(finiteAttempts));
131
+ const nowFn = this.deps.now ?? Date.now;
132
+ const baseRequest = new Request(input, init);
133
+ const body = await readRequestBody(baseRequest);
134
+ const sessionKey = resolveSessionKey(body);
135
+ let sessionEvent = null;
136
+ if (sessionKey) {
137
+ const hasSeen = this.touchSessionKey(sessionKey, nowFn());
138
+ if (!hasSeen) {
139
+ sessionEvent = "new";
140
+ }
141
+ else if (this.state.lastSessionKey && this.state.lastSessionKey !== sessionKey) {
142
+ sessionEvent = "switch";
143
+ }
144
+ this.state.lastSessionKey = sessionKey;
145
+ }
146
+ let sessionToastEmitted = false;
147
+ let lastResponse;
148
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
149
+ const now = nowFn();
150
+ const auth = await this.deps.acquireAuth({ sessionKey });
151
+ const accountLabel = formatAccountLabel(auth);
152
+ const accountKey = auth.identityKey?.trim() ||
153
+ auth.accountId?.trim() ||
154
+ auth.email?.trim()?.toLowerCase() ||
155
+ accountLabel;
156
+ if (sessionEvent && !sessionToastEmitted) {
157
+ const message = sessionEvent === "new"
158
+ ? `New chat: ${accountLabel}`
159
+ : `Session switched: ${accountLabel}`;
160
+ await this.maybeShowToast(message, "info", {
161
+ dedupeKey: `session:${sessionEvent}`,
162
+ debounceMs: DEFAULT_SESSION_TOAST_DEBOUNCE_MS,
163
+ now
164
+ });
165
+ sessionToastEmitted = true;
166
+ }
167
+ if (this.state.lastAccountKey !== null && this.state.lastAccountKey !== accountKey) {
168
+ await this.maybeShowToast(`Account switched: ${accountLabel}`, "info", {
169
+ dedupeKey: "account:switch",
170
+ debounceMs: DEFAULT_ACCOUNT_SWITCH_TOAST_DEBOUNCE_MS,
171
+ now
172
+ });
173
+ }
174
+ this.state.lastAccountKey = accountKey;
175
+ const request = baseRequest.clone();
176
+ request.headers.set("Authorization", `Bearer ${auth.access}`);
177
+ if (auth.accountId) {
178
+ request.headers.set("ChatGPT-Account-Id", auth.accountId);
179
+ }
180
+ if (this.deps.onAttemptRequest) {
181
+ try {
182
+ await this.deps.onAttemptRequest({
183
+ attempt,
184
+ maxAttempts,
185
+ request,
186
+ auth,
187
+ sessionKey
188
+ });
189
+ }
190
+ catch {
191
+ // Snapshot/debug hooks should never block request execution.
192
+ }
193
+ }
194
+ const response = await fetch(request);
195
+ if (this.deps.onAttemptResponse) {
196
+ try {
197
+ await this.deps.onAttemptResponse({
198
+ attempt,
199
+ maxAttempts,
200
+ response: response.clone(),
201
+ auth,
202
+ sessionKey
203
+ });
204
+ }
205
+ catch {
206
+ // Snapshot/debug hooks should never block request execution.
207
+ }
208
+ }
209
+ if (response.status !== 429) {
210
+ return response;
211
+ }
212
+ lastResponse = response;
213
+ // Handle 429
214
+ const retryAfterStr = response.headers.get("retry-after");
215
+ if (auth.identityKey) {
216
+ const headerMap = { "retry-after": retryAfterStr ?? undefined };
217
+ const retryAfterMs = parseRetryAfterMs(headerMap, now);
218
+ const fallbackMs = computeBackoffMs({
219
+ attempt,
220
+ baseMs: 5000,
221
+ maxMs: 5000,
222
+ jitterMaxMs: 0
223
+ });
224
+ const cooldownUntil = now + (retryAfterMs ?? fallbackMs);
225
+ await this.deps.setCooldown(auth.identityKey, cooldownUntil);
226
+ }
227
+ if (attempt < maxAttempts - 1 && this.shouldShowRateLimitToast(auth.identityKey, now)) {
228
+ await this.maybeShowToast("Rate limited - switching account", "warning");
229
+ }
230
+ }
231
+ if (lastResponse?.status === 429) {
232
+ const retryAfterRaw = lastResponse.headers.get("retry-after");
233
+ const retryAfterMs = parseRetryAfterMs({ "retry-after": retryAfterRaw ?? undefined }, nowFn());
234
+ const waitLabel = typeof retryAfterMs === "number" ? formatWaitTime(retryAfterMs) : "a short while";
235
+ return createSyntheticErrorResponse(`All attempted OpenAI accounts are rate limited. Try again in ${waitLabel} or run \`opencode auth login\` to add another account.`, 429, "all_accounts_rate_limited", "accounts");
236
+ }
237
+ return lastResponse;
238
+ }
239
+ }
240
+ //# sourceMappingURL=fetch-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-orchestrator.js","sourceRoot":"","sources":["../../lib/fetch-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { AccountRecord } from "./types";
2
+ export declare function normalizeEmail(email?: string): string | undefined;
3
+ export declare function normalizePlan(plan?: string): string | undefined;
4
+ export declare function buildIdentityKey(input: {
5
+ accountId?: string;
6
+ email?: string;
7
+ plan?: string;
8
+ }): string | undefined;
9
+ export declare function ensureIdentityKey(account: AccountRecord): AccountRecord;
10
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../lib/identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKjE;AAED,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK/D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,GAAG,MAAM,GAAG,SAAS,CAMrB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAKvE"}
@@ -0,0 +1,31 @@
1
+ export function normalizeEmail(email) {
2
+ if (!email)
3
+ return undefined;
4
+ const trimmed = email.trim();
5
+ if (!trimmed)
6
+ return undefined;
7
+ return trimmed.toLowerCase();
8
+ }
9
+ export function normalizePlan(plan) {
10
+ if (!plan)
11
+ return undefined;
12
+ const trimmed = plan.trim();
13
+ if (!trimmed)
14
+ return undefined;
15
+ return trimmed.toLowerCase();
16
+ }
17
+ export function buildIdentityKey(input) {
18
+ const accountId = input.accountId?.trim();
19
+ const email = normalizeEmail(input.email);
20
+ const plan = normalizePlan(input.plan);
21
+ if (!accountId || !email || !plan)
22
+ return undefined;
23
+ return `${accountId}|${email}|${plan}`;
24
+ }
25
+ export function ensureIdentityKey(account) {
26
+ if (!account.identityKey) {
27
+ account.identityKey = buildIdentityKey(account);
28
+ }
29
+ return account;
30
+ }
31
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../lib/identity.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAA;IAC9B,OAAO,OAAO,CAAC,WAAW,EAAE,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAA;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAC3B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAA;IAC9B,OAAO,OAAO,CAAC,WAAW,EAAE,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAIhC;IACC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,CAAA;IACzC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACzC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAA;IACnD,OAAO,GAAG,SAAS,IAAI,KAAK,IAAI,IAAI,EAAE,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAsB;IACtD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,OAAO,CAAC,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACjD,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,7 @@
1
+ type InstallerIo = {
2
+ out: (message: string) => void;
3
+ err: (message: string) => void;
4
+ };
5
+ export declare function runInstallerCli(args: string[], io?: InstallerIo): Promise<number>;
6
+ export {};
7
+ //# sourceMappingURL=installer-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer-cli.d.ts","sourceRoot":"","sources":["../../lib/installer-cli.ts"],"names":[],"mappings":"AAUA,KAAK,WAAW,GAAG;IACjB,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/B,CAAA;AA6ED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAE,WAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkDnG"}
@@ -0,0 +1,115 @@
1
+ import path from "node:path";
2
+ import { defaultOpencodeAgentsDir, installOrchestratorAgents } from "./orchestrator-agents.js";
3
+ import { ensureDefaultConfigFile } from "./config.js";
4
+ import { DEFAULT_PLUGIN_SPECIFIER, defaultOpencodeConfigPath, ensurePluginInstalled } from "./opencode-install.js";
5
+ const DEFAULT_IO = {
6
+ out: (message) => process.stdout.write(`${message}\n`),
7
+ err: (message) => process.stderr.write(`${message}\n`)
8
+ };
9
+ function parseArgs(args) {
10
+ const command = args[0] && !args[0].startsWith("-") ? args[0] : "install";
11
+ const tail = command === "install" || command === "install-agents" ? args.slice(1) : args;
12
+ let force = false;
13
+ let dir;
14
+ let configPath;
15
+ let pluginSpecifier;
16
+ for (let i = 0; i < tail.length; i += 1) {
17
+ const token = tail[i];
18
+ if (token === "--force") {
19
+ force = true;
20
+ continue;
21
+ }
22
+ if (token === "--dir") {
23
+ dir = tail[i + 1];
24
+ i += 1;
25
+ continue;
26
+ }
27
+ if (token.startsWith("--dir=")) {
28
+ dir = token.slice("--dir=".length);
29
+ continue;
30
+ }
31
+ if (token === "--config") {
32
+ configPath = tail[i + 1];
33
+ i += 1;
34
+ continue;
35
+ }
36
+ if (token.startsWith("--config=")) {
37
+ configPath = token.slice("--config=".length);
38
+ continue;
39
+ }
40
+ if (token === "--plugin") {
41
+ pluginSpecifier = tail[i + 1];
42
+ i += 1;
43
+ continue;
44
+ }
45
+ if (token.startsWith("--plugin=")) {
46
+ pluginSpecifier = token.slice("--plugin=".length);
47
+ continue;
48
+ }
49
+ }
50
+ return { command, force, dir, configPath, pluginSpecifier };
51
+ }
52
+ function helpText() {
53
+ return [
54
+ "opencode-codex-auth installer",
55
+ "",
56
+ "Usage:",
57
+ " opencode-codex-auth install [--force] [--dir <path>] [--config <path>] [--plugin <specifier>]",
58
+ " opencode-codex-auth install-agents [--force] [--dir <path>]",
59
+ "",
60
+ "Commands:",
61
+ " install Install plugin entry in opencode.json and install Codex collaboration agents.",
62
+ " install-agents Install local Codex collaboration agent templates.",
63
+ "",
64
+ "Options:",
65
+ " --force Overwrite existing Codex*.md / Codex*.md.disabled collaboration agent files.",
66
+ " --dir <path> Custom agents directory (defaults to ~/.config/opencode/agents).",
67
+ " --config <path> Custom opencode.json path (defaults to ~/.config/opencode/opencode.json).",
68
+ ` --plugin <spec> Plugin specifier for opencode.json (default: ${DEFAULT_PLUGIN_SPECIFIER}).`
69
+ ].join("\n");
70
+ }
71
+ export async function runInstallerCli(args, io = DEFAULT_IO) {
72
+ if (args.includes("--help") || args.includes("-h")) {
73
+ io.out(helpText());
74
+ return 0;
75
+ }
76
+ const parsed = parseArgs(args);
77
+ if (parsed.command !== "install" && parsed.command !== "install-agents") {
78
+ io.err(`Unknown command: ${parsed.command}`);
79
+ io.err("");
80
+ io.err(helpText());
81
+ return 1;
82
+ }
83
+ if (parsed.command === "install") {
84
+ const configPath = parsed.configPath
85
+ ? path.resolve(parsed.configPath)
86
+ : defaultOpencodeConfigPath();
87
+ const pluginResult = await ensurePluginInstalled({
88
+ configPath,
89
+ pluginSpecifier: parsed.pluginSpecifier ?? DEFAULT_PLUGIN_SPECIFIER
90
+ });
91
+ io.out(`OpenCode config: ${pluginResult.configPath}`);
92
+ io.out(`Plugin specifier: ${pluginResult.pluginSpecifier}`);
93
+ io.out(`Config created: ${pluginResult.created ? "yes" : "no"}`);
94
+ io.out(`Plugin updated: ${pluginResult.changed ? "yes" : "no"}`);
95
+ const defaultConfig = await ensureDefaultConfigFile({ env: process.env });
96
+ io.out(`Codex config: ${defaultConfig.filePath}`);
97
+ io.out(`Codex config created: ${defaultConfig.created ? "yes" : "no"}`);
98
+ }
99
+ const agentsDir = parsed.dir ? path.resolve(parsed.dir) : defaultOpencodeAgentsDir();
100
+ const result = await installOrchestratorAgents({
101
+ agentsDir,
102
+ force: parsed.force
103
+ });
104
+ io.out(`Agents directory: ${result.agentsDir}`);
105
+ io.out(`Written: ${result.written.length}`);
106
+ io.out(`Skipped: ${result.skipped.length}`);
107
+ for (const filePath of result.written) {
108
+ io.out(` + ${filePath}`);
109
+ }
110
+ for (const filePath of result.skipped) {
111
+ io.out(` = ${filePath}`);
112
+ }
113
+ return 0;
114
+ }
115
+ //# sourceMappingURL=installer-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer-cli.js","sourceRoot":"","sources":["../../lib/installer-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export type Logger = {
2
+ debug: (msg: string, meta?: Record<string, unknown>) => void;
3
+ info: (msg: string, meta?: Record<string, unknown>) => void;
4
+ warn: (msg: string, meta?: Record<string, unknown>) => void;
5
+ error: (msg: string, meta?: Record<string, unknown>) => void;
6
+ };
7
+ export declare function createLogger(input: {
8
+ debug: boolean;
9
+ sink?: (line: string) => void;
10
+ }): Logger;
11
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../lib/logger.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACnB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAC5D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAC3D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAC3D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;CAC7D,CAAA;AAYD,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GAAG,MAAM,CAa7F"}
@@ -0,0 +1,25 @@
1
+ function safeJson(meta) {
2
+ if (!meta)
3
+ return "";
4
+ try {
5
+ // Avoid accidentally stringifying tokens: keep meta shallow & caller-controlled.
6
+ return " " + JSON.stringify(meta);
7
+ }
8
+ catch {
9
+ return "";
10
+ }
11
+ }
12
+ export function createLogger(input) {
13
+ const sink = input.sink ?? ((line) => console.error(line));
14
+ function emit(level, msg, meta) {
15
+ sink(`[${level}] ${msg}${safeJson(meta)}`);
16
+ }
17
+ return {
18
+ debug(msg, meta) { if (input.debug)
19
+ emit("debug", msg, meta); },
20
+ info(msg, meta) { emit("info", msg, meta); },
21
+ warn(msg, meta) { emit("warn", msg, meta); },
22
+ error(msg, meta) { emit("error", msg, meta); }
23
+ };
24
+ }
25
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../lib/logger.ts"],"names":[],"mappings":"AAOA,SAAS,QAAQ,CAAC,IAA8B;IAC9C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAA;IACpB,IAAI,CAAC;QACH,iFAAiF;QACjF,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAwD;IACnF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IAE1D,SAAS,IAAI,CAAC,KAAa,EAAE,GAAW,EAAE,IAA8B;QACtE,IAAI,CAAC,IAAI,KAAK,KAAK,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC5C,CAAC;IAED,OAAO;QACL,KAAK,CAAC,GAAG,EAAE,IAAI,IAAI,IAAI,KAAK,CAAC,KAAK;YAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA,CAAC,CAAC;QAC9D,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA,CAAC,CAAC;QAC3C,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA,CAAC,CAAC;QAC3C,KAAK,CAAC,GAAG,EAAE,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA,CAAC,CAAC;KAC9C,CAAA;AACH,CAAC"}
@@ -0,0 +1,66 @@
1
+ export type PersonalityOption = string;
2
+ type ModelInstructionsVariables = {
3
+ personality?: string | null;
4
+ personality_default?: string | null;
5
+ personality_friendly?: string | null;
6
+ personality_pragmatic?: string | null;
7
+ personalities?: Record<string, string | null> | null;
8
+ };
9
+ type ModelMessages = {
10
+ instructions_template?: string | null;
11
+ instructions_variables?: ModelInstructionsVariables | null;
12
+ };
13
+ type ModelReasoningLevel = {
14
+ effort?: string | null;
15
+ };
16
+ export type CodexModelInfo = {
17
+ slug: string;
18
+ model_messages?: ModelMessages | null;
19
+ base_instructions?: string | null;
20
+ apply_patch_tool_type?: string | null;
21
+ supported_reasoning_levels?: ModelReasoningLevel[] | null;
22
+ default_reasoning_level?: string | null;
23
+ supports_reasoning_summaries?: boolean | null;
24
+ reasoning_summary_format?: string | null;
25
+ support_verbosity?: boolean | null;
26
+ default_verbosity?: string | null;
27
+ };
28
+ export type CodexModelRuntimeDefaults = {
29
+ applyPatchToolType?: string;
30
+ defaultReasoningEffort?: "none" | "minimal" | "low" | "medium" | "high" | "xhigh";
31
+ supportedReasoningEfforts?: Array<"none" | "minimal" | "low" | "medium" | "high" | "xhigh">;
32
+ supportsReasoningSummaries?: boolean;
33
+ reasoningSummaryFormat?: string;
34
+ supportsVerbosity?: boolean;
35
+ defaultVerbosity?: "low" | "medium" | "high";
36
+ };
37
+ export type CodexModelCatalogEvent = {
38
+ type: "memory_cache_hit" | "disk_cache_hit" | "network_fetch_success" | "network_fetch_failed" | "stale_cache_used" | "catalog_unavailable";
39
+ scope: "shared" | "account";
40
+ reason?: string;
41
+ };
42
+ export type GetCodexModelCatalogInput = {
43
+ accessToken?: string;
44
+ accountId?: string;
45
+ originator?: string;
46
+ userAgent?: string;
47
+ openaiBeta?: string;
48
+ now?: () => number;
49
+ fetchImpl?: typeof fetch;
50
+ forceRefresh?: boolean;
51
+ cacheDir?: string;
52
+ onEvent?: (event: CodexModelCatalogEvent) => void;
53
+ };
54
+ export type ApplyCodexCatalogInput = {
55
+ providerModels: Record<string, Record<string, unknown>>;
56
+ catalogModels?: CodexModelInfo[];
57
+ fallbackModels: string[];
58
+ personality?: PersonalityOption;
59
+ };
60
+ export declare function getCodexModelCatalog(input: GetCodexModelCatalogInput): Promise<CodexModelInfo[] | undefined>;
61
+ export declare function resolveInstructionsForModel(model: CodexModelInfo, personality?: PersonalityOption): string | undefined;
62
+ export declare function getRuntimeDefaultsForModel(model: CodexModelInfo | undefined): CodexModelRuntimeDefaults | undefined;
63
+ export declare function getRuntimeDefaultsForSlug(slug: string, catalogModels: CodexModelInfo[] | undefined): CodexModelRuntimeDefaults | undefined;
64
+ export declare function applyCodexCatalogToProviderModels(input: ApplyCodexCatalogInput): void;
65
+ export {};
66
+ //# sourceMappingURL=model-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../../lib/model-catalog.ts"],"names":[],"mappings":"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"}