codex-multi-auth 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -0
- package/README.md +162 -0
- package/assets/opencode-logo-ornate-dark.svg +18 -0
- package/assets/readme-hero.svg +31 -0
- package/config/README.md +87 -0
- package/config/minimal-opencode.json +13 -0
- package/config/opencode-legacy.json +571 -0
- package/config/opencode-modern.json +239 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3160 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/accounts/rate-limits.d.ts +22 -0
- package/dist/lib/accounts/rate-limits.d.ts.map +1 -0
- package/dist/lib/accounts/rate-limits.js +63 -0
- package/dist/lib/accounts/rate-limits.js.map +1 -0
- package/dist/lib/accounts.d.ts +95 -0
- package/dist/lib/accounts.d.ts.map +1 -0
- package/dist/lib/accounts.js +668 -0
- package/dist/lib/accounts.js.map +1 -0
- package/dist/lib/audit.d.ts +45 -0
- package/dist/lib/audit.d.ts.map +1 -0
- package/dist/lib/audit.js +131 -0
- package/dist/lib/audit.js.map +1 -0
- package/dist/lib/auth/auth.d.ts +56 -0
- package/dist/lib/auth/auth.d.ts.map +1 -0
- package/dist/lib/auth/auth.js +214 -0
- package/dist/lib/auth/auth.js.map +1 -0
- package/dist/lib/auth/browser.d.ts +34 -0
- package/dist/lib/auth/browser.d.ts.map +1 -0
- package/dist/lib/auth/browser.js +185 -0
- package/dist/lib/auth/browser.js.map +1 -0
- package/dist/lib/auth/server.d.ts +24 -0
- package/dist/lib/auth/server.d.ts.map +1 -0
- package/dist/lib/auth/server.js +116 -0
- package/dist/lib/auth/server.js.map +1 -0
- package/dist/lib/auth/token-utils.d.ts +59 -0
- package/dist/lib/auth/token-utils.d.ts.map +1 -0
- package/dist/lib/auth/token-utils.js +331 -0
- package/dist/lib/auth/token-utils.js.map +1 -0
- package/dist/lib/auth-rate-limit.d.ts +20 -0
- package/dist/lib/auth-rate-limit.d.ts.map +1 -0
- package/dist/lib/auth-rate-limit.js +91 -0
- package/dist/lib/auth-rate-limit.js.map +1 -0
- package/dist/lib/auto-update-checker.d.ts +10 -0
- package/dist/lib/auto-update-checker.d.ts.map +1 -0
- package/dist/lib/auto-update-checker.js +216 -0
- package/dist/lib/auto-update-checker.js.map +1 -0
- package/dist/lib/capability-policy.d.ts +18 -0
- package/dist/lib/capability-policy.d.ts.map +1 -0
- package/dist/lib/capability-policy.js +150 -0
- package/dist/lib/capability-policy.js.map +1 -0
- package/dist/lib/circuit-breaker.d.ts +34 -0
- package/dist/lib/circuit-breaker.d.ts.map +1 -0
- package/dist/lib/circuit-breaker.js +124 -0
- package/dist/lib/circuit-breaker.js.map +1 -0
- package/dist/lib/cli.d.ts +64 -0
- package/dist/lib/cli.d.ts.map +1 -0
- package/dist/lib/cli.js +274 -0
- package/dist/lib/cli.js.map +1 -0
- package/dist/lib/codex-cli/observability.d.ts +22 -0
- package/dist/lib/codex-cli/observability.d.ts.map +1 -0
- package/dist/lib/codex-cli/observability.js +36 -0
- package/dist/lib/codex-cli/observability.js.map +1 -0
- package/dist/lib/codex-cli/state.d.ts +86 -0
- package/dist/lib/codex-cli/state.d.ts.map +1 -0
- package/dist/lib/codex-cli/state.js +470 -0
- package/dist/lib/codex-cli/state.js.map +1 -0
- package/dist/lib/codex-cli/sync.d.ts +27 -0
- package/dist/lib/codex-cli/sync.d.ts.map +1 -0
- package/dist/lib/codex-cli/sync.js +325 -0
- package/dist/lib/codex-cli/sync.js.map +1 -0
- package/dist/lib/codex-cli/writer.d.ts +12 -0
- package/dist/lib/codex-cli/writer.d.ts.map +1 -0
- package/dist/lib/codex-cli/writer.js +388 -0
- package/dist/lib/codex-cli/writer.js.map +1 -0
- package/dist/lib/codex-manager.d.ts +2 -0
- package/dist/lib/codex-manager.d.ts.map +1 -0
- package/dist/lib/codex-manager.js +4841 -0
- package/dist/lib/codex-manager.js.map +1 -0
- package/dist/lib/config.d.ts +269 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +789 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/constants.d.ts +78 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +78 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/context-overflow.d.ts +27 -0
- package/dist/lib/context-overflow.d.ts.map +1 -0
- package/dist/lib/context-overflow.js +124 -0
- package/dist/lib/context-overflow.js.map +1 -0
- package/dist/lib/dashboard-settings.d.ts +90 -0
- package/dist/lib/dashboard-settings.d.ts.map +1 -0
- package/dist/lib/dashboard-settings.js +327 -0
- package/dist/lib/dashboard-settings.js.map +1 -0
- package/dist/lib/entitlement-cache.d.ts +41 -0
- package/dist/lib/entitlement-cache.d.ts.map +1 -0
- package/dist/lib/entitlement-cache.js +137 -0
- package/dist/lib/entitlement-cache.js.map +1 -0
- package/dist/lib/errors.d.ts +113 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +103 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/forecast.d.ts +42 -0
- package/dist/lib/forecast.d.ts.map +1 -0
- package/dist/lib/forecast.js +256 -0
- package/dist/lib/forecast.js.map +1 -0
- package/dist/lib/health.d.ts +33 -0
- package/dist/lib/health.d.ts.map +1 -0
- package/dist/lib/health.js +70 -0
- package/dist/lib/health.js.map +1 -0
- package/dist/lib/index.d.ts +32 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +32 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/live-account-sync.d.ts +39 -0
- package/dist/lib/live-account-sync.d.ts.map +1 -0
- package/dist/lib/live-account-sync.js +196 -0
- package/dist/lib/live-account-sync.js.map +1 -0
- package/dist/lib/logger.d.ts +40 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +364 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/oauth-success.html +338 -0
- package/dist/lib/parallel-probe.d.ts +28 -0
- package/dist/lib/parallel-probe.d.ts.map +1 -0
- package/dist/lib/parallel-probe.js +97 -0
- package/dist/lib/parallel-probe.js.map +1 -0
- package/dist/lib/preemptive-quota-scheduler.d.ts +53 -0
- package/dist/lib/preemptive-quota-scheduler.d.ts.map +1 -0
- package/dist/lib/preemptive-quota-scheduler.js +220 -0
- package/dist/lib/preemptive-quota-scheduler.js.map +1 -0
- package/dist/lib/proactive-refresh.d.ts +66 -0
- package/dist/lib/proactive-refresh.d.ts.map +1 -0
- package/dist/lib/proactive-refresh.js +143 -0
- package/dist/lib/proactive-refresh.js.map +1 -0
- package/dist/lib/prompts/codex-opencode-bridge.d.ts +19 -0
- package/dist/lib/prompts/codex-opencode-bridge.d.ts.map +1 -0
- package/dist/lib/prompts/codex-opencode-bridge.js +169 -0
- package/dist/lib/prompts/codex-opencode-bridge.js.map +1 -0
- package/dist/lib/prompts/codex.d.ts +41 -0
- package/dist/lib/prompts/codex.d.ts.map +1 -0
- package/dist/lib/prompts/codex.js +383 -0
- package/dist/lib/prompts/codex.js.map +1 -0
- package/dist/lib/prompts/opencode-codex.d.ts +25 -0
- package/dist/lib/prompts/opencode-codex.d.ts.map +1 -0
- package/dist/lib/prompts/opencode-codex.js +270 -0
- package/dist/lib/prompts/opencode-codex.js.map +1 -0
- package/dist/lib/quota-cache.d.ts +68 -0
- package/dist/lib/quota-cache.d.ts.map +1 -0
- package/dist/lib/quota-cache.js +224 -0
- package/dist/lib/quota-cache.js.map +1 -0
- package/dist/lib/quota-probe.d.ts +49 -0
- package/dist/lib/quota-probe.d.ts.map +1 -0
- package/dist/lib/quota-probe.js +368 -0
- package/dist/lib/quota-probe.js.map +1 -0
- package/dist/lib/recovery/constants.d.ts +12 -0
- package/dist/lib/recovery/constants.d.ts.map +1 -0
- package/dist/lib/recovery/constants.js +31 -0
- package/dist/lib/recovery/constants.js.map +1 -0
- package/dist/lib/recovery/index.d.ts +12 -0
- package/dist/lib/recovery/index.d.ts.map +1 -0
- package/dist/lib/recovery/index.js +12 -0
- package/dist/lib/recovery/index.js.map +1 -0
- package/dist/lib/recovery/storage.d.ts +24 -0
- package/dist/lib/recovery/storage.d.ts.map +1 -0
- package/dist/lib/recovery/storage.js +362 -0
- package/dist/lib/recovery/storage.js.map +1 -0
- package/dist/lib/recovery/types.d.ts +116 -0
- package/dist/lib/recovery/types.d.ts.map +1 -0
- package/dist/lib/recovery/types.js +7 -0
- package/dist/lib/recovery/types.js.map +1 -0
- package/dist/lib/recovery.d.ts +31 -0
- package/dist/lib/recovery.d.ts.map +1 -0
- package/dist/lib/recovery.js +313 -0
- package/dist/lib/recovery.js.map +1 -0
- package/dist/lib/refresh-guardian.d.ts +31 -0
- package/dist/lib/refresh-guardian.d.ts.map +1 -0
- package/dist/lib/refresh-guardian.js +151 -0
- package/dist/lib/refresh-guardian.js.map +1 -0
- package/dist/lib/refresh-lease.d.ts +37 -0
- package/dist/lib/refresh-lease.d.ts.map +1 -0
- package/dist/lib/refresh-lease.js +335 -0
- package/dist/lib/refresh-lease.js.map +1 -0
- package/dist/lib/refresh-queue.d.ts +117 -0
- package/dist/lib/refresh-queue.d.ts.map +1 -0
- package/dist/lib/refresh-queue.js +297 -0
- package/dist/lib/refresh-queue.js.map +1 -0
- package/dist/lib/request/failure-policy.d.ts +42 -0
- package/dist/lib/request/failure-policy.d.ts.map +1 -0
- package/dist/lib/request/failure-policy.js +133 -0
- package/dist/lib/request/failure-policy.js.map +1 -0
- package/dist/lib/request/fetch-helpers.d.ts +152 -0
- package/dist/lib/request/fetch-helpers.d.ts.map +1 -0
- package/dist/lib/request/fetch-helpers.js +704 -0
- package/dist/lib/request/fetch-helpers.js.map +1 -0
- package/dist/lib/request/helpers/input-utils.d.ts +7 -0
- package/dist/lib/request/helpers/input-utils.d.ts.map +1 -0
- package/dist/lib/request/helpers/input-utils.js +214 -0
- package/dist/lib/request/helpers/input-utils.js.map +1 -0
- package/dist/lib/request/helpers/model-map.d.ts +28 -0
- package/dist/lib/request/helpers/model-map.d.ts.map +1 -0
- package/dist/lib/request/helpers/model-map.js +133 -0
- package/dist/lib/request/helpers/model-map.js.map +1 -0
- package/dist/lib/request/helpers/tool-utils.d.ts +29 -0
- package/dist/lib/request/helpers/tool-utils.d.ts.map +1 -0
- package/dist/lib/request/helpers/tool-utils.js +117 -0
- package/dist/lib/request/helpers/tool-utils.js.map +1 -0
- package/dist/lib/request/rate-limit-backoff.d.ts +17 -0
- package/dist/lib/request/rate-limit-backoff.d.ts.map +1 -0
- package/dist/lib/request/rate-limit-backoff.js +83 -0
- package/dist/lib/request/rate-limit-backoff.js.map +1 -0
- package/dist/lib/request/request-transformer.d.ts +107 -0
- package/dist/lib/request/request-transformer.d.ts.map +1 -0
- package/dist/lib/request/request-transformer.js +814 -0
- package/dist/lib/request/request-transformer.js.map +1 -0
- package/dist/lib/request/response-handler.d.ts +23 -0
- package/dist/lib/request/response-handler.d.ts.map +1 -0
- package/dist/lib/request/response-handler.js +155 -0
- package/dist/lib/request/response-handler.js.map +1 -0
- package/dist/lib/request/stream-failover.d.ts +21 -0
- package/dist/lib/request/stream-failover.d.ts.map +1 -0
- package/dist/lib/request/stream-failover.js +204 -0
- package/dist/lib/request/stream-failover.js.map +1 -0
- package/dist/lib/rotation.d.ts +146 -0
- package/dist/lib/rotation.d.ts.map +1 -0
- package/dist/lib/rotation.js +321 -0
- package/dist/lib/rotation.js.map +1 -0
- package/dist/lib/runtime-paths.d.ts +58 -0
- package/dist/lib/runtime-paths.d.ts.map +1 -0
- package/dist/lib/runtime-paths.js +164 -0
- package/dist/lib/runtime-paths.js.map +1 -0
- package/dist/lib/schemas.d.ts +435 -0
- package/dist/lib/schemas.d.ts.map +1 -0
- package/dist/lib/schemas.js +268 -0
- package/dist/lib/schemas.js.map +1 -0
- package/dist/lib/session-affinity.d.ts +23 -0
- package/dist/lib/session-affinity.d.ts.map +1 -0
- package/dist/lib/session-affinity.js +127 -0
- package/dist/lib/session-affinity.js.map +1 -0
- package/dist/lib/shutdown.d.ts +7 -0
- package/dist/lib/shutdown.d.ts.map +1 -0
- package/dist/lib/shutdown.js +43 -0
- package/dist/lib/shutdown.js.map +1 -0
- package/dist/lib/storage/migrations.d.ts +59 -0
- package/dist/lib/storage/migrations.d.ts.map +1 -0
- package/dist/lib/storage/migrations.js +41 -0
- package/dist/lib/storage/migrations.js.map +1 -0
- package/dist/lib/storage/paths.d.ts +51 -0
- package/dist/lib/storage/paths.d.ts.map +1 -0
- package/dist/lib/storage/paths.js +152 -0
- package/dist/lib/storage/paths.js.map +1 -0
- package/dist/lib/storage.d.ts +106 -0
- package/dist/lib/storage.d.ts.map +1 -0
- package/dist/lib/storage.js +896 -0
- package/dist/lib/storage.js.map +1 -0
- package/dist/lib/table-formatter.d.ts +32 -0
- package/dist/lib/table-formatter.d.ts.map +1 -0
- package/dist/lib/table-formatter.js +44 -0
- package/dist/lib/table-formatter.js.map +1 -0
- package/dist/lib/tools/hashline-tools.d.ts +51 -0
- package/dist/lib/tools/hashline-tools.d.ts.map +1 -0
- package/dist/lib/tools/hashline-tools.js +456 -0
- package/dist/lib/tools/hashline-tools.js.map +1 -0
- package/dist/lib/types.d.ts +130 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/ui/ansi.d.ts +40 -0
- package/dist/lib/ui/ansi.d.ts.map +1 -0
- package/dist/lib/ui/ansi.js +68 -0
- package/dist/lib/ui/ansi.js.map +1 -0
- package/dist/lib/ui/auth-menu.d.ts +76 -0
- package/dist/lib/ui/auth-menu.d.ts.map +1 -0
- package/dist/lib/ui/auth-menu.js +590 -0
- package/dist/lib/ui/auth-menu.js.map +1 -0
- package/dist/lib/ui/confirm.d.ts +11 -0
- package/dist/lib/ui/confirm.d.ts.map +1 -0
- package/dist/lib/ui/confirm.js +29 -0
- package/dist/lib/ui/confirm.js.map +1 -0
- package/dist/lib/ui/copy.d.ts +123 -0
- package/dist/lib/ui/copy.d.ts.map +1 -0
- package/dist/lib/ui/copy.js +127 -0
- package/dist/lib/ui/copy.js.map +1 -0
- package/dist/lib/ui/format.d.ts +62 -0
- package/dist/lib/ui/format.d.ts.map +1 -0
- package/dist/lib/ui/format.js +205 -0
- package/dist/lib/ui/format.js.map +1 -0
- package/dist/lib/ui/runtime.d.ts +43 -0
- package/dist/lib/ui/runtime.d.ts.map +1 -0
- package/dist/lib/ui/runtime.js +69 -0
- package/dist/lib/ui/runtime.js.map +1 -0
- package/dist/lib/ui/select.d.ts +60 -0
- package/dist/lib/ui/select.d.ts.map +1 -0
- package/dist/lib/ui/select.js +467 -0
- package/dist/lib/ui/select.js.map +1 -0
- package/dist/lib/ui/theme.d.ts +56 -0
- package/dist/lib/ui/theme.d.ts.map +1 -0
- package/dist/lib/ui/theme.js +186 -0
- package/dist/lib/ui/theme.js.map +1 -0
- package/dist/lib/unified-settings.d.ts +71 -0
- package/dist/lib/unified-settings.d.ts.map +1 -0
- package/dist/lib/unified-settings.js +299 -0
- package/dist/lib/unified-settings.js.map +1 -0
- package/dist/lib/utils.d.ts +29 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +54 -0
- package/dist/lib/utils.js.map +1 -0
- package/package.json +115 -0
- package/scripts/audit-dev-allowlist.js +128 -0
- package/scripts/bench-format/hashline-v2.mjs +642 -0
- package/scripts/bench-format/models.mjs +105 -0
- package/scripts/bench-format/opencode.mjs +205 -0
- package/scripts/bench-format/render.mjs +496 -0
- package/scripts/bench-format/stats.mjs +54 -0
- package/scripts/bench-format/tasks.mjs +151 -0
- package/scripts/benchmark-edit-formats.mjs +1161 -0
- package/scripts/benchmark-render-dashboard.mjs +49 -0
- package/scripts/codex-multi-auth.js +6 -0
- package/scripts/codex-routing.js +34 -0
- package/scripts/codex.js +122 -0
- package/scripts/copy-oauth-success.js +37 -0
- package/scripts/install-opencode-codex-auth.js +193 -0
- package/scripts/test-all-models.sh +7 -0
- package/scripts/test-model-matrix.js +424 -0
- package/scripts/validate-model-map.sh +7 -0
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
import { getLastAccountsSaveTimestamp, } from "../storage.js";
|
|
2
|
+
import { MODEL_FAMILIES } from "../prompts/codex.js";
|
|
3
|
+
import { createLogger } from "../logger.js";
|
|
4
|
+
import { loadCodexCliState } from "./state.js";
|
|
5
|
+
import { incrementCodexCliMetric, makeAccountFingerprint, } from "./observability.js";
|
|
6
|
+
import { getLastCodexCliSelectionWriteTimestamp } from "./writer.js";
|
|
7
|
+
const log = createLogger("codex-cli-sync");
|
|
8
|
+
function normalizeEmail(value) {
|
|
9
|
+
if (!value)
|
|
10
|
+
return undefined;
|
|
11
|
+
const trimmed = value.trim().toLowerCase();
|
|
12
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
13
|
+
}
|
|
14
|
+
function createEmptyStorage() {
|
|
15
|
+
return {
|
|
16
|
+
version: 3,
|
|
17
|
+
accounts: [],
|
|
18
|
+
activeIndex: 0,
|
|
19
|
+
activeIndexByFamily: {},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function cloneStorage(storage) {
|
|
23
|
+
return {
|
|
24
|
+
version: 3,
|
|
25
|
+
accounts: storage.accounts.map((account) => ({ ...account })),
|
|
26
|
+
activeIndex: storage.activeIndex,
|
|
27
|
+
activeIndexByFamily: storage.activeIndexByFamily
|
|
28
|
+
? { ...storage.activeIndexByFamily }
|
|
29
|
+
: {},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function buildIndexByAccountId(accounts) {
|
|
33
|
+
const map = new Map();
|
|
34
|
+
for (let i = 0; i < accounts.length; i += 1) {
|
|
35
|
+
const account = accounts[i];
|
|
36
|
+
if (!account?.accountId)
|
|
37
|
+
continue;
|
|
38
|
+
map.set(account.accountId, i);
|
|
39
|
+
}
|
|
40
|
+
return map;
|
|
41
|
+
}
|
|
42
|
+
function buildIndexByRefresh(accounts) {
|
|
43
|
+
const map = new Map();
|
|
44
|
+
for (let i = 0; i < accounts.length; i += 1) {
|
|
45
|
+
const account = accounts[i];
|
|
46
|
+
if (!account?.refreshToken)
|
|
47
|
+
continue;
|
|
48
|
+
map.set(account.refreshToken, i);
|
|
49
|
+
}
|
|
50
|
+
return map;
|
|
51
|
+
}
|
|
52
|
+
function buildIndexByEmail(accounts) {
|
|
53
|
+
const map = new Map();
|
|
54
|
+
for (let i = 0; i < accounts.length; i += 1) {
|
|
55
|
+
const email = normalizeEmail(accounts[i]?.email);
|
|
56
|
+
if (!email)
|
|
57
|
+
continue;
|
|
58
|
+
map.set(email, i);
|
|
59
|
+
}
|
|
60
|
+
return map;
|
|
61
|
+
}
|
|
62
|
+
function toStorageAccount(snapshot) {
|
|
63
|
+
if (!snapshot.refreshToken)
|
|
64
|
+
return null;
|
|
65
|
+
const now = Date.now();
|
|
66
|
+
return {
|
|
67
|
+
accountId: snapshot.accountId,
|
|
68
|
+
accountIdSource: snapshot.accountId ? "token" : undefined,
|
|
69
|
+
email: snapshot.email,
|
|
70
|
+
refreshToken: snapshot.refreshToken,
|
|
71
|
+
accessToken: snapshot.accessToken,
|
|
72
|
+
expiresAt: snapshot.expiresAt,
|
|
73
|
+
enabled: true,
|
|
74
|
+
addedAt: now,
|
|
75
|
+
lastUsed: 0,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function upsertFromSnapshot(accounts, snapshot) {
|
|
79
|
+
const nextAccount = toStorageAccount(snapshot);
|
|
80
|
+
if (!nextAccount)
|
|
81
|
+
return false;
|
|
82
|
+
const byAccountId = buildIndexByAccountId(accounts);
|
|
83
|
+
const byRefresh = buildIndexByRefresh(accounts);
|
|
84
|
+
const byEmail = buildIndexByEmail(accounts);
|
|
85
|
+
const normalizedEmail = normalizeEmail(snapshot.email);
|
|
86
|
+
let targetIndex;
|
|
87
|
+
if (snapshot.accountId && byAccountId.has(snapshot.accountId)) {
|
|
88
|
+
targetIndex = byAccountId.get(snapshot.accountId);
|
|
89
|
+
}
|
|
90
|
+
else if (snapshot.refreshToken && byRefresh.has(snapshot.refreshToken)) {
|
|
91
|
+
targetIndex = byRefresh.get(snapshot.refreshToken);
|
|
92
|
+
}
|
|
93
|
+
else if (normalizedEmail && byEmail.has(normalizedEmail)) {
|
|
94
|
+
targetIndex = byEmail.get(normalizedEmail);
|
|
95
|
+
}
|
|
96
|
+
if (targetIndex === undefined) {
|
|
97
|
+
accounts.push(nextAccount);
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
const current = accounts[targetIndex];
|
|
101
|
+
if (!current)
|
|
102
|
+
return false;
|
|
103
|
+
const merged = {
|
|
104
|
+
...current,
|
|
105
|
+
accountId: snapshot.accountId ?? current.accountId,
|
|
106
|
+
accountIdSource: snapshot.accountId
|
|
107
|
+
? current.accountIdSource ?? "token"
|
|
108
|
+
: current.accountIdSource,
|
|
109
|
+
email: snapshot.email ?? current.email,
|
|
110
|
+
refreshToken: snapshot.refreshToken ?? current.refreshToken,
|
|
111
|
+
accessToken: snapshot.accessToken ?? current.accessToken,
|
|
112
|
+
expiresAt: snapshot.expiresAt ?? current.expiresAt,
|
|
113
|
+
};
|
|
114
|
+
const changed = JSON.stringify(current) !== JSON.stringify(merged);
|
|
115
|
+
if (changed) {
|
|
116
|
+
accounts[targetIndex] = merged;
|
|
117
|
+
}
|
|
118
|
+
return changed;
|
|
119
|
+
}
|
|
120
|
+
function resolveActiveIndex(accounts, activeAccountId, activeEmail) {
|
|
121
|
+
if (accounts.length === 0)
|
|
122
|
+
return 0;
|
|
123
|
+
if (activeAccountId) {
|
|
124
|
+
const byId = accounts.findIndex((account) => account.accountId === activeAccountId);
|
|
125
|
+
if (byId >= 0)
|
|
126
|
+
return byId;
|
|
127
|
+
}
|
|
128
|
+
const normalizedEmail = normalizeEmail(activeEmail);
|
|
129
|
+
if (normalizedEmail) {
|
|
130
|
+
const byEmail = accounts.findIndex((account) => normalizeEmail(account.email) === normalizedEmail);
|
|
131
|
+
if (byEmail >= 0)
|
|
132
|
+
return byEmail;
|
|
133
|
+
}
|
|
134
|
+
return 0;
|
|
135
|
+
}
|
|
136
|
+
function writeFamilyIndexes(storage, index) {
|
|
137
|
+
storage.activeIndex = index;
|
|
138
|
+
storage.activeIndexByFamily = storage.activeIndexByFamily ?? {};
|
|
139
|
+
for (const family of MODEL_FAMILIES) {
|
|
140
|
+
storage.activeIndexByFamily[family] = index;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Normalize and clamp the global and per-family active account indexes to valid ranges.
|
|
145
|
+
*
|
|
146
|
+
* Mutates `storage` in-place: ensures `activeIndexByFamily` exists, clamps `activeIndex` to
|
|
147
|
+
* 0..(accounts.length - 1) (or 0 when there are no accounts), and resolves each family entry
|
|
148
|
+
* to a valid index within the same bounds.
|
|
149
|
+
*
|
|
150
|
+
* Concurrency: callers must synchronize externally when multiple threads/processes may write
|
|
151
|
+
* the same storage object. Filesystem notes: no platform-specific IO is performed here; when
|
|
152
|
+
* persisted to disk on Windows consumers should still ensure atomic writes. Token handling:
|
|
153
|
+
* this function does not read or modify authentication tokens and makes no attempt to redact
|
|
154
|
+
* sensitive fields.
|
|
155
|
+
*
|
|
156
|
+
* @param storage - The account storage object whose indexes will be normalized and clamped
|
|
157
|
+
*/
|
|
158
|
+
function normalizeStoredFamilyIndexes(storage) {
|
|
159
|
+
const count = storage.accounts.length;
|
|
160
|
+
const clamped = count === 0 ? 0 : Math.max(0, Math.min(storage.activeIndex, count - 1));
|
|
161
|
+
if (storage.activeIndex !== clamped) {
|
|
162
|
+
storage.activeIndex = clamped;
|
|
163
|
+
}
|
|
164
|
+
storage.activeIndexByFamily = storage.activeIndexByFamily ?? {};
|
|
165
|
+
for (const family of MODEL_FAMILIES) {
|
|
166
|
+
const raw = storage.activeIndexByFamily[family];
|
|
167
|
+
const resolved = typeof raw === "number" && Number.isFinite(raw) ? raw : storage.activeIndex;
|
|
168
|
+
storage.activeIndexByFamily[family] =
|
|
169
|
+
count === 0 ? 0 : Math.max(0, Math.min(resolved, count - 1));
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Return the `accountId` and `email` from the first snapshot marked active.
|
|
174
|
+
*
|
|
175
|
+
* @param snapshots - Array of Codex CLI account snapshots to search
|
|
176
|
+
* @returns The `accountId` and `email` from the first snapshot whose `isActive` is true; properties are omitted if no active snapshot is found
|
|
177
|
+
*
|
|
178
|
+
* Concurrency: pure and side-effect free; safe to call concurrently.
|
|
179
|
+
* Filesystem: behavior is independent of OS/filesystem semantics (including Windows).
|
|
180
|
+
* Security: only `accountId` and `email` are returned; other sensitive snapshot fields (for example tokens) are not exposed or returned by this function.
|
|
181
|
+
*/
|
|
182
|
+
function readActiveFromSnapshots(snapshots) {
|
|
183
|
+
const active = snapshots.find((snapshot) => snapshot.isActive);
|
|
184
|
+
return {
|
|
185
|
+
accountId: active?.accountId,
|
|
186
|
+
email: active?.email,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Determines whether the Codex CLI's active-account selection should override the local selection.
|
|
191
|
+
*
|
|
192
|
+
* Considers the state's numeric `syncVersion` or `sourceUpdatedAtMs` and compares the derived Codex timestamp
|
|
193
|
+
* against local timestamps from recent account saves and last Codex selection writes. Concurrent writes or
|
|
194
|
+
* clock skew can affect this decision; filesystem timestamp granularity on Windows may reduce timestamp precision.
|
|
195
|
+
* This function only examines timestamps and identifiers in `state` and does not read or expose token values.
|
|
196
|
+
*
|
|
197
|
+
* @param state - Persisted Codex CLI state (may be undefined); the function reads `syncVersion` and `sourceUpdatedAtMs` when present
|
|
198
|
+
* @returns `true` if the Codex CLI selection should be applied (i.e., Codex state is newer or timestamps are unknown), `false` otherwise
|
|
199
|
+
*/
|
|
200
|
+
function shouldApplyCodexCliSelection(state) {
|
|
201
|
+
if (!state)
|
|
202
|
+
return false;
|
|
203
|
+
const hasSyncVersion = typeof state.syncVersion === "number" && Number.isFinite(state.syncVersion);
|
|
204
|
+
const codexVersion = hasSyncVersion
|
|
205
|
+
? state.syncVersion
|
|
206
|
+
: typeof state.sourceUpdatedAtMs === "number" && Number.isFinite(state.sourceUpdatedAtMs)
|
|
207
|
+
? state.sourceUpdatedAtMs
|
|
208
|
+
: 0;
|
|
209
|
+
const localVersion = Math.max(getLastAccountsSaveTimestamp(), getLastCodexCliSelectionWriteTimestamp());
|
|
210
|
+
if (codexVersion <= 0 || localVersion <= 0)
|
|
211
|
+
return true;
|
|
212
|
+
// Keep local selection when plugin wrote more recently than Codex state.
|
|
213
|
+
const toleranceMs = hasSyncVersion ? 0 : 1_000;
|
|
214
|
+
return codexVersion >= localVersion - toleranceMs;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Reconciles the provided local account storage with the Codex CLI state and returns the resulting storage and whether it changed.
|
|
218
|
+
*
|
|
219
|
+
* This operation:
|
|
220
|
+
* - Merges accounts from the Codex CLI state into a clone of `current` (or into a new empty storage when `current` is null).
|
|
221
|
+
* - May update the active account selection and per-family active indexes when the Codex CLI selection is considered applicable.
|
|
222
|
+
* - Preserves secrets and sensitive fields; any tokens written to storage are subject to the project's token-redaction rules and are not exposed in logs or metrics.
|
|
223
|
+
*
|
|
224
|
+
* Concurrency assumptions:
|
|
225
|
+
* - Caller is responsible for serializing concurrent writes to persistent storage; this function only returns an in-memory storage object and does not perform atomic file-level coordination.
|
|
226
|
+
*
|
|
227
|
+
* Windows filesystem notes:
|
|
228
|
+
* - When the caller persists the returned storage to disk on Windows, standard Windows file-locking and path-length semantics apply; this function does not perform Windows-specific path normalization.
|
|
229
|
+
*
|
|
230
|
+
* @param current - The current local AccountStorageV3, or `null` to indicate none exists.
|
|
231
|
+
* @returns An object containing:
|
|
232
|
+
* - `storage`: the reconciled AccountStorageV3 to persist (may be the original `current` when no changes were applied).
|
|
233
|
+
* - `changed`: `true` if the reconciled storage differs from `current`, `false` otherwise.
|
|
234
|
+
*/
|
|
235
|
+
export async function syncAccountStorageFromCodexCli(current) {
|
|
236
|
+
incrementCodexCliMetric("reconcileAttempts");
|
|
237
|
+
try {
|
|
238
|
+
const state = await loadCodexCliState();
|
|
239
|
+
if (!state) {
|
|
240
|
+
incrementCodexCliMetric("reconcileNoops");
|
|
241
|
+
return { storage: current, changed: false };
|
|
242
|
+
}
|
|
243
|
+
const next = current ? cloneStorage(current) : createEmptyStorage();
|
|
244
|
+
let changed = false;
|
|
245
|
+
for (const snapshot of state.accounts) {
|
|
246
|
+
const updated = upsertFromSnapshot(next.accounts, snapshot);
|
|
247
|
+
if (updated)
|
|
248
|
+
changed = true;
|
|
249
|
+
}
|
|
250
|
+
if (next.accounts.length === 0) {
|
|
251
|
+
incrementCodexCliMetric(changed ? "reconcileChanges" : "reconcileNoops");
|
|
252
|
+
log.debug("Codex CLI reconcile completed", {
|
|
253
|
+
operation: "reconcile-storage",
|
|
254
|
+
outcome: changed ? "changed" : "noop",
|
|
255
|
+
accountCount: next.accounts.length,
|
|
256
|
+
});
|
|
257
|
+
return {
|
|
258
|
+
storage: current ?? next,
|
|
259
|
+
changed,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
const activeFromSnapshots = readActiveFromSnapshots(state.accounts);
|
|
263
|
+
const applyActiveFromCodex = shouldApplyCodexCliSelection(state);
|
|
264
|
+
if (applyActiveFromCodex) {
|
|
265
|
+
const desiredIndex = resolveActiveIndex(next.accounts, state.activeAccountId ?? activeFromSnapshots.accountId, state.activeEmail ?? activeFromSnapshots.email);
|
|
266
|
+
const previousActive = next.activeIndex;
|
|
267
|
+
const previousFamilies = JSON.stringify(next.activeIndexByFamily ?? {});
|
|
268
|
+
writeFamilyIndexes(next, desiredIndex);
|
|
269
|
+
normalizeStoredFamilyIndexes(next);
|
|
270
|
+
if (previousActive !== next.activeIndex) {
|
|
271
|
+
changed = true;
|
|
272
|
+
}
|
|
273
|
+
if (previousFamilies !== JSON.stringify(next.activeIndexByFamily ?? {})) {
|
|
274
|
+
changed = true;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
const previousActive = next.activeIndex;
|
|
279
|
+
const previousFamilies = JSON.stringify(next.activeIndexByFamily ?? {});
|
|
280
|
+
normalizeStoredFamilyIndexes(next);
|
|
281
|
+
if (previousActive !== next.activeIndex) {
|
|
282
|
+
changed = true;
|
|
283
|
+
}
|
|
284
|
+
if (previousFamilies !== JSON.stringify(next.activeIndexByFamily ?? {})) {
|
|
285
|
+
changed = true;
|
|
286
|
+
}
|
|
287
|
+
log.debug("Skipped Codex CLI active selection overwrite due to newer local state", {
|
|
288
|
+
operation: "reconcile-storage",
|
|
289
|
+
outcome: "local-newer",
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
incrementCodexCliMetric(changed ? "reconcileChanges" : "reconcileNoops");
|
|
293
|
+
log.debug("Codex CLI reconcile completed", {
|
|
294
|
+
operation: "reconcile-storage",
|
|
295
|
+
outcome: changed ? "changed" : "noop",
|
|
296
|
+
accountCount: next.accounts.length,
|
|
297
|
+
activeAccountRef: makeAccountFingerprint({
|
|
298
|
+
accountId: state.activeAccountId ?? activeFromSnapshots.accountId,
|
|
299
|
+
email: state.activeEmail ?? activeFromSnapshots.email,
|
|
300
|
+
}),
|
|
301
|
+
});
|
|
302
|
+
return {
|
|
303
|
+
storage: next,
|
|
304
|
+
changed,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
incrementCodexCliMetric("reconcileFailures");
|
|
309
|
+
log.warn("Codex CLI reconcile failed", {
|
|
310
|
+
operation: "reconcile-storage",
|
|
311
|
+
outcome: "error",
|
|
312
|
+
error: String(error),
|
|
313
|
+
});
|
|
314
|
+
return { storage: current, changed: false };
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
export function getActiveSelectionForFamily(storage, family) {
|
|
318
|
+
const count = storage.accounts.length;
|
|
319
|
+
if (count === 0)
|
|
320
|
+
return 0;
|
|
321
|
+
const raw = storage.activeIndexByFamily?.[family];
|
|
322
|
+
const candidate = typeof raw === "number" && Number.isFinite(raw) ? raw : storage.activeIndex;
|
|
323
|
+
return Math.max(0, Math.min(candidate, count - 1));
|
|
324
|
+
}
|
|
325
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../lib/codex-cli/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface ActiveSelection {
|
|
2
|
+
accountId?: string;
|
|
3
|
+
email?: string;
|
|
4
|
+
accessToken?: string;
|
|
5
|
+
refreshToken?: string;
|
|
6
|
+
expiresAt?: number;
|
|
7
|
+
idToken?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function setCodexCliActiveSelection(selection: ActiveSelection): Promise<boolean>;
|
|
10
|
+
export declare function getLastCodexCliSelectionWriteTimestamp(): number;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../lib/codex-cli/writer.ts"],"names":[],"mappings":"AAkBA,UAAU,eAAe;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAgPD,wBAAsB,0BAA0B,CAC/C,SAAS,EAAE,eAAe,GACxB,OAAO,CAAC,OAAO,CAAC,CAuKlB;AAED,wBAAgB,sCAAsC,IAAI,MAAM,CAE/D"}
|