oc-codex-multi-auth 6.1.3 → 6.1.7

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 (43) hide show
  1. package/README.md +17 -10
  2. package/config/README.md +12 -12
  3. package/config/opencode-legacy.json +125 -0
  4. package/config/opencode-modern.json +43 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +36 -2
  7. package/dist/index.js.map +1 -1
  8. package/dist/lib/auto-update-checker.d.ts +7 -1
  9. package/dist/lib/auto-update-checker.d.ts.map +1 -1
  10. package/dist/lib/auto-update-checker.js +51 -3
  11. package/dist/lib/auto-update-checker.js.map +1 -1
  12. package/dist/lib/codex-usage.d.ts +91 -0
  13. package/dist/lib/codex-usage.d.ts.map +1 -0
  14. package/dist/lib/codex-usage.js +368 -0
  15. package/dist/lib/codex-usage.js.map +1 -0
  16. package/dist/lib/config.d.ts +1 -0
  17. package/dist/lib/config.d.ts.map +1 -1
  18. package/dist/lib/config.js +4 -0
  19. package/dist/lib/config.js.map +1 -1
  20. package/dist/lib/schemas.d.ts +1 -0
  21. package/dist/lib/schemas.d.ts.map +1 -1
  22. package/dist/lib/schemas.js +1 -0
  23. package/dist/lib/schemas.js.map +1 -1
  24. package/dist/lib/tools/codex-limits.d.ts.map +1 -1
  25. package/dist/lib/tools/codex-limits.js +39 -340
  26. package/dist/lib/tools/codex-limits.js.map +1 -1
  27. package/dist/lib/tools/codex-switch.d.ts.map +1 -1
  28. package/dist/lib/tools/codex-switch.js +9 -0
  29. package/dist/lib/tools/codex-switch.js.map +1 -1
  30. package/dist/lib/tui-quota-cache.d.ts +33 -0
  31. package/dist/lib/tui-quota-cache.d.ts.map +1 -0
  32. package/dist/lib/tui-quota-cache.js +247 -0
  33. package/dist/lib/tui-quota-cache.js.map +1 -0
  34. package/dist/lib/tui-status.d.ts +55 -0
  35. package/dist/lib/tui-status.d.ts.map +1 -0
  36. package/dist/lib/tui-status.js +343 -0
  37. package/dist/lib/tui-status.js.map +1 -0
  38. package/dist/tui.d.ts +6 -0
  39. package/dist/tui.d.ts.map +1 -0
  40. package/dist/tui.js +363 -0
  41. package/dist/tui.js.map +1 -0
  42. package/package.json +16 -2
  43. package/scripts/install-oc-codex-multi-auth-core.js +119 -18
package/dist/tui.js ADDED
@@ -0,0 +1,363 @@
1
+ import { createUsageAccountFingerprint, ensureCodexUsageAccessToken, fetchCodexUsage, formatUsageWindowLabel, getUsageLeftPercent, hasUsageWindow, parseCodexUsagePayload, resolveCodexUsageAccountId, resolveCodexUsageActiveAccount, } from "./lib/codex-usage.js";
2
+ import { formatPromptStatusText, formatQuotaDetailsText, resolveQuotaPromptTone, } from "./lib/tui-status.js";
3
+ import { createTuiQuotaSnapshot, getTuiQuotaCachePath, isTuiQuotaSnapshot, readTuiQuotaSnapshot, writeTuiQuotaSnapshot, } from "./lib/tui-quota-cache.js";
4
+ import { loadAccounts } from "./lib/storage.js";
5
+ const CACHE_KEY = "oc-codex-multi-auth:tui-status:v2";
6
+ const REFRESH_INTERVAL_MS = 5 * 60 * 1000;
7
+ const EVENT_REFRESH_DEBOUNCE_MS = 750;
8
+ const ACCOUNT_POLL_INTERVAL_MS = 1_000;
9
+ let inFlightRefresh;
10
+ function isStoredQuotaStatus(value) {
11
+ return isTuiQuotaSnapshot(value);
12
+ }
13
+ function readStoredQuotaStatus(api, fingerprint) {
14
+ if (!api.kv.ready)
15
+ return undefined;
16
+ try {
17
+ const cached = api.kv.get(CACHE_KEY);
18
+ return isStoredQuotaStatus(cached) && cached.fingerprint === fingerprint
19
+ ? cached
20
+ : undefined;
21
+ }
22
+ catch {
23
+ return undefined;
24
+ }
25
+ }
26
+ function writeStoredQuotaStatus(api, status) {
27
+ if (!api.kv.ready)
28
+ return;
29
+ try {
30
+ api.kv.set(CACHE_KEY, status);
31
+ }
32
+ catch {
33
+ // The prompt status is best-effort; cache write failures should not
34
+ // affect the OpenCode TUI.
35
+ }
36
+ }
37
+ function toCompactQuotaStatus(stored, stale) {
38
+ return {
39
+ type: "ready",
40
+ limits: stored.limits,
41
+ stale,
42
+ source: stored.source,
43
+ fetchedAt: stored.fetchedAt,
44
+ fingerprint: stored.fingerprint,
45
+ accountIndex: stored.accountIndex,
46
+ accountCount: stored.accountCount,
47
+ accountEmail: stored.accountEmail,
48
+ accountLabel: stored.accountLabel,
49
+ planType: stored.planType,
50
+ activeLimit: stored.activeLimit,
51
+ };
52
+ }
53
+ function getQuotaSnapshotRevision(snapshot) {
54
+ if (!snapshot.source ||
55
+ typeof snapshot.fetchedAt !== "number" ||
56
+ !Number.isFinite(snapshot.fetchedAt)) {
57
+ return undefined;
58
+ }
59
+ return `${snapshot.source}:${snapshot.fetchedAt}`;
60
+ }
61
+ function toCompactQuotaLimit(window) {
62
+ if (!hasUsageWindow(window))
63
+ return undefined;
64
+ return {
65
+ label: formatUsageWindowLabel(window.windowMinutes),
66
+ leftPercent: getUsageLeftPercent(window.usedPercent) ?? null,
67
+ usedPercent: window.usedPercent,
68
+ windowMinutes: window.windowMinutes,
69
+ resetAtMs: window.resetAtMs,
70
+ };
71
+ }
72
+ function formatTuiAccountLabel(account, index) {
73
+ return (account.email?.trim() ||
74
+ account.accountId?.trim() ||
75
+ account.organizationId?.trim() ||
76
+ `Account ${index + 1}`);
77
+ }
78
+ function getSharedQuotaCachePath(api) {
79
+ return getTuiQuotaCachePath(api.state.path.state);
80
+ }
81
+ async function readSharedQuotaStatus(api, fingerprint) {
82
+ const cachePath = getSharedQuotaCachePath(api);
83
+ const snapshot = await readTuiQuotaSnapshot(cachePath);
84
+ if (snapshot?.fingerprint === fingerprint)
85
+ return snapshot;
86
+ const fallbackSnapshot = await readTuiQuotaSnapshot();
87
+ return fallbackSnapshot?.fingerprint === fingerprint
88
+ ? fallbackSnapshot
89
+ : undefined;
90
+ }
91
+ async function writeSharedQuotaStatus(api, status) {
92
+ try {
93
+ await writeTuiQuotaSnapshot(status, getSharedQuotaCachePath(api));
94
+ }
95
+ catch {
96
+ // The prompt status is best-effort; shared cache write failures should
97
+ // not affect the OpenCode TUI.
98
+ }
99
+ }
100
+ async function resolveActiveQuotaFingerprint() {
101
+ const storage = await loadAccounts();
102
+ const selection = storage ? resolveCodexUsageActiveAccount(storage) : null;
103
+ return selection
104
+ ? createUsageAccountFingerprint(selection.account)
105
+ : undefined;
106
+ }
107
+ async function refreshQuotaStatusInner(api) {
108
+ try {
109
+ const storage = await loadAccounts();
110
+ if (!storage || storage.accounts.length === 0) {
111
+ return { type: "missing" };
112
+ }
113
+ const selection = resolveCodexUsageActiveAccount(storage);
114
+ if (!selection)
115
+ return { type: "missing" };
116
+ const fingerprint = createUsageAccountFingerprint(selection.account);
117
+ const shared = await readSharedQuotaStatus(api, fingerprint);
118
+ if (shared) {
119
+ writeStoredQuotaStatus(api, shared);
120
+ return toCompactQuotaStatus(shared, false);
121
+ }
122
+ const cached = readStoredQuotaStatus(api, fingerprint);
123
+ const now = Date.now();
124
+ try {
125
+ const credentials = await ensureCodexUsageAccessToken({
126
+ storage,
127
+ account: selection.account,
128
+ });
129
+ const accountId = resolveCodexUsageAccountId({
130
+ account: selection.account,
131
+ accessToken: credentials.accessToken,
132
+ });
133
+ if (!accountId)
134
+ throw new Error("Missing account id");
135
+ const payload = await fetchCodexUsage({
136
+ accountId,
137
+ accessToken: credentials.accessToken,
138
+ organizationId: selection.account.organizationId,
139
+ });
140
+ const usage = parseCodexUsagePayload(payload);
141
+ const limits = [
142
+ toCompactQuotaLimit(usage.primary),
143
+ toCompactQuotaLimit(usage.secondary),
144
+ ].filter((limit) => Boolean(limit));
145
+ const stored = createTuiQuotaSnapshot({
146
+ fingerprint,
147
+ source: "usage",
148
+ accountIndex: selection.index + 1,
149
+ accountCount: storage.accounts.length,
150
+ accountEmail: selection.account.email?.trim() || undefined,
151
+ accountLabel: formatTuiAccountLabel(selection.account, selection.index),
152
+ planType: usage.planType ?? undefined,
153
+ limits,
154
+ fetchedAt: now,
155
+ });
156
+ writeStoredQuotaStatus(api, stored);
157
+ await writeSharedQuotaStatus(api, stored);
158
+ return toCompactQuotaStatus(stored, false);
159
+ }
160
+ catch {
161
+ return cached ? toCompactQuotaStatus(cached, true) : { type: "unavailable" };
162
+ }
163
+ }
164
+ catch {
165
+ return { type: "unavailable" };
166
+ }
167
+ }
168
+ function refreshQuotaStatus(api) {
169
+ if (inFlightRefresh)
170
+ return inFlightRefresh;
171
+ inFlightRefresh = refreshQuotaStatusInner(api).finally(() => {
172
+ inFlightRefresh = undefined;
173
+ });
174
+ return inFlightRefresh;
175
+ }
176
+ export function shouldRefreshQuotaForEvent(event) {
177
+ switch (event.type) {
178
+ case "message.updated":
179
+ return (event.properties.info.role === "assistant" &&
180
+ typeof event.properties.info.time.completed === "number");
181
+ case "message.part.updated": {
182
+ const { part } = event.properties;
183
+ if (part.type === "step-finish")
184
+ return true;
185
+ if (part.type !== "tool")
186
+ return false;
187
+ return (part.state.status === "completed" || part.state.status === "error");
188
+ }
189
+ case "session.idle":
190
+ case "session.error":
191
+ return true;
192
+ case "session.status":
193
+ return event.properties.status.type === "idle";
194
+ default:
195
+ return false;
196
+ }
197
+ }
198
+ function createPromptStatus(api, solid) {
199
+ const [quota, setQuota] = solid.createSignal({
200
+ type: "loading",
201
+ });
202
+ let currentFingerprint;
203
+ let currentSnapshotRevision;
204
+ const applyQuota = (next) => {
205
+ if (next.type === "ready") {
206
+ currentFingerprint = next.fingerprint;
207
+ currentSnapshotRevision = getQuotaSnapshotRevision(next);
208
+ }
209
+ if (next.type === "missing") {
210
+ currentFingerprint = undefined;
211
+ currentSnapshotRevision = undefined;
212
+ }
213
+ setQuota(next);
214
+ };
215
+ const refresh = () => {
216
+ void refreshQuotaStatus(api).then(applyQuota, () => {
217
+ applyQuota({ type: "unavailable" });
218
+ });
219
+ };
220
+ let refreshTimeout;
221
+ const scheduleRefresh = () => {
222
+ if (refreshTimeout)
223
+ clearTimeout(refreshTimeout);
224
+ refreshTimeout = setTimeout(() => {
225
+ refreshTimeout = undefined;
226
+ refresh();
227
+ }, EVENT_REFRESH_DEBOUNCE_MS);
228
+ };
229
+ refresh();
230
+ const interval = setInterval(refresh, REFRESH_INTERVAL_MS);
231
+ let cachePollInFlight = false;
232
+ const pollSharedQuotaCache = () => {
233
+ if (cachePollInFlight)
234
+ return;
235
+ cachePollInFlight = true;
236
+ void (async () => {
237
+ const fingerprint = await resolveActiveQuotaFingerprint();
238
+ if (!fingerprint) {
239
+ if (currentFingerprint)
240
+ applyQuota({ type: "missing" });
241
+ return;
242
+ }
243
+ if (fingerprint !== currentFingerprint) {
244
+ currentFingerprint = fingerprint;
245
+ currentSnapshotRevision = undefined;
246
+ setQuota({ type: "loading" });
247
+ refresh();
248
+ return;
249
+ }
250
+ const shared = await readSharedQuotaStatus(api, fingerprint);
251
+ if (!shared)
252
+ return;
253
+ const revision = getQuotaSnapshotRevision(shared);
254
+ if (!revision || revision === currentSnapshotRevision)
255
+ return;
256
+ writeStoredQuotaStatus(api, shared);
257
+ applyQuota(toCompactQuotaStatus(shared, false));
258
+ })().finally(() => {
259
+ cachePollInFlight = false;
260
+ });
261
+ };
262
+ const accountInterval = setInterval(pollSharedQuotaCache, ACCOUNT_POLL_INTERVAL_MS);
263
+ const disposeMessageUpdated = api.event.on("message.updated", (event) => {
264
+ if (shouldRefreshQuotaForEvent(event))
265
+ scheduleRefresh();
266
+ });
267
+ const disposeMessagePartUpdated = api.event.on("message.part.updated", (event) => {
268
+ if (shouldRefreshQuotaForEvent(event))
269
+ scheduleRefresh();
270
+ });
271
+ const disposeSessionIdle = api.event.on("session.idle", (event) => {
272
+ if (shouldRefreshQuotaForEvent(event))
273
+ scheduleRefresh();
274
+ });
275
+ const disposeSessionStatus = api.event.on("session.status", (event) => {
276
+ if (shouldRefreshQuotaForEvent(event))
277
+ scheduleRefresh();
278
+ });
279
+ const disposeSessionError = api.event.on("session.error", (event) => {
280
+ if (shouldRefreshQuotaForEvent(event))
281
+ scheduleRefresh();
282
+ });
283
+ solid.onCleanup(() => {
284
+ clearInterval(interval);
285
+ clearInterval(accountInterval);
286
+ if (refreshTimeout)
287
+ clearTimeout(refreshTimeout);
288
+ disposeMessageUpdated();
289
+ disposeMessagePartUpdated();
290
+ disposeSessionIdle();
291
+ disposeSessionStatus();
292
+ disposeSessionError();
293
+ });
294
+ const node = solid.createElement("text");
295
+ solid.spread(node, {
296
+ get content() {
297
+ return formatPromptStatusText({
298
+ quota: quota(),
299
+ width: api.renderer.width,
300
+ });
301
+ },
302
+ get fg() {
303
+ const current = quota();
304
+ const tone = resolveQuotaPromptTone(current);
305
+ if (tone === "danger")
306
+ return api.theme.current.error;
307
+ if (tone === "warning" || tone === "stale") {
308
+ return api.theme.current.warning;
309
+ }
310
+ if (tone === "normal")
311
+ return api.theme.current.success;
312
+ return api.theme.current.textMuted;
313
+ },
314
+ selectable: false,
315
+ truncate: true,
316
+ wrapMode: "none",
317
+ }, false);
318
+ return node;
319
+ }
320
+ function showQuotaDetails(api) {
321
+ void refreshQuotaStatus(api).then((status) => {
322
+ api.ui.dialog.replace(() => api.ui.DialogAlert({
323
+ title: "Codex quota",
324
+ message: formatQuotaDetailsText(status),
325
+ onConfirm: () => api.ui.dialog.clear(),
326
+ }));
327
+ }, () => {
328
+ api.ui.dialog.replace(() => api.ui.DialogAlert({
329
+ title: "Codex quota",
330
+ message: formatQuotaDetailsText({ type: "unavailable" }),
331
+ onConfirm: () => api.ui.dialog.clear(),
332
+ }));
333
+ });
334
+ }
335
+ const module = {
336
+ id: "oc-codex-multi-auth.status",
337
+ async tui(api) {
338
+ const [{ createElement, spread }, { createSignal, onCleanup }] = await Promise.all([import("@opentui/solid"), import("solid-js")]);
339
+ const solid = {
340
+ createElement,
341
+ spread,
342
+ createSignal,
343
+ onCleanup,
344
+ };
345
+ api.slots.register({
346
+ slots: {
347
+ session_prompt_right: () => createPromptStatus(api, solid),
348
+ },
349
+ });
350
+ const disposeCommand = api.command.register(() => [
351
+ {
352
+ title: "Codex quota details",
353
+ value: "codex.quota.details",
354
+ description: "Show active account usage, reset times, source, and last refresh.",
355
+ category: "Codex",
356
+ onSelect: () => showQuotaDetails(api),
357
+ },
358
+ ]);
359
+ api.lifecycle.onDispose(disposeCommand);
360
+ },
361
+ };
362
+ export default module;
363
+ //# sourceMappingURL=tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../tui.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,19 @@
1
1
  {
2
2
  "name": "oc-codex-multi-auth",
3
- "version": "6.1.3",
3
+ "version": "6.1.7",
4
4
  "description": "OpenCode plugin for Codex-first GPT-5 workflows with ChatGPT Plus/Pro OAuth, multi-account rotation, and guided setup",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js"
11
+ },
12
+ "./tui": {
13
+ "types": "./dist/tui.d.ts",
14
+ "import": "./dist/tui.js"
15
+ }
16
+ },
7
17
  "type": "module",
8
18
  "license": "MIT",
9
19
  "author": "ndycode",
@@ -98,8 +108,12 @@
98
108
  "dependencies": {
99
109
  "@napi-rs/keyring": "~1.2.0",
100
110
  "@openauthjs/openauth": "^0.4.3",
101
- "@opencode-ai/plugin": "^1.2.9",
111
+ "@opencode-ai/plugin": "^1.14.22",
112
+ "@opentui/core": "^0.1.99",
113
+ "@opentui/solid": "^0.1.99",
102
114
  "hono": "4.12.14",
115
+ "solid-js": "^1.9.11",
116
+ "web-tree-sitter": "^0.25.10",
103
117
  "zod": "^4.3.6"
104
118
  },
105
119
  "overrides": {