@iam-brain/opencode-codex-auth 1.2.5 → 1.4.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/README.md +42 -98
- package/dist/lib/accounts-tools.d.ts.map +1 -1
- package/dist/lib/accounts-tools.js +1 -3
- package/dist/lib/accounts-tools.js.map +1 -1
- package/dist/lib/codex-native/acquire-auth.d.ts.map +1 -1
- package/dist/lib/codex-native/acquire-auth.js +2 -1
- package/dist/lib/codex-native/acquire-auth.js.map +1 -1
- package/dist/lib/codex-native/catalog-sync.d.ts +1 -1
- package/dist/lib/codex-native/catalog-sync.d.ts.map +1 -1
- package/dist/lib/codex-native/chat-hooks.d.ts.map +1 -1
- package/dist/lib/codex-native/chat-hooks.js.map +1 -1
- package/dist/lib/codex-native/client-identity.js +1 -1
- package/dist/lib/codex-native/client-identity.js.map +1 -1
- package/dist/lib/codex-native/oauth-auth-methods.d.ts.map +1 -1
- package/dist/lib/codex-native/oauth-auth-methods.js +5 -2
- package/dist/lib/codex-native/oauth-auth-methods.js.map +1 -1
- package/dist/lib/codex-native/oauth-server-debug.d.ts +10 -0
- package/dist/lib/codex-native/oauth-server-debug.d.ts.map +1 -0
- package/dist/lib/codex-native/oauth-server-debug.js +92 -0
- package/dist/lib/codex-native/oauth-server-debug.js.map +1 -0
- package/dist/lib/codex-native/oauth-server-network.d.ts +5 -0
- package/dist/lib/codex-native/oauth-server-network.d.ts.map +1 -0
- package/dist/lib/codex-native/oauth-server-network.js +39 -0
- package/dist/lib/codex-native/oauth-server-network.js.map +1 -0
- package/dist/lib/codex-native/oauth-server-types.d.ts +24 -0
- package/dist/lib/codex-native/oauth-server-types.d.ts.map +1 -0
- package/dist/lib/codex-native/oauth-server-types.js +2 -0
- package/dist/lib/codex-native/oauth-server-types.js.map +1 -0
- package/dist/lib/codex-native/oauth-server.d.ts +2 -17
- package/dist/lib/codex-native/oauth-server.d.ts.map +1 -1
- package/dist/lib/codex-native/oauth-server.js +11 -130
- package/dist/lib/codex-native/oauth-server.js.map +1 -1
- package/dist/lib/codex-native/openai-loader-fetch-quota.d.ts +18 -0
- package/dist/lib/codex-native/openai-loader-fetch-quota.d.ts.map +1 -0
- package/dist/lib/codex-native/openai-loader-fetch-quota.js +71 -0
- package/dist/lib/codex-native/openai-loader-fetch-quota.js.map +1 -0
- package/dist/lib/codex-native/openai-loader-fetch-state.d.ts +27 -0
- package/dist/lib/codex-native/openai-loader-fetch-state.d.ts.map +1 -0
- package/dist/lib/codex-native/openai-loader-fetch-state.js +91 -0
- package/dist/lib/codex-native/openai-loader-fetch-state.js.map +1 -0
- package/dist/lib/codex-native/openai-loader-fetch.d.ts.map +1 -1
- package/dist/lib/codex-native/openai-loader-fetch.js +28 -163
- package/dist/lib/codex-native/openai-loader-fetch.js.map +1 -1
- package/dist/lib/codex-native/request-transform-instructions.d.ts +16 -0
- package/dist/lib/codex-native/request-transform-instructions.d.ts.map +1 -0
- package/dist/lib/codex-native/request-transform-instructions.js +96 -0
- package/dist/lib/codex-native/request-transform-instructions.js.map +1 -0
- package/dist/lib/codex-native/request-transform-model-service-tier.d.ts +12 -0
- package/dist/lib/codex-native/request-transform-model-service-tier.d.ts.map +1 -0
- package/dist/lib/codex-native/request-transform-model-service-tier.js +88 -0
- package/dist/lib/codex-native/request-transform-model-service-tier.js.map +1 -0
- package/dist/lib/codex-native/request-transform-model.d.ts +39 -0
- package/dist/lib/codex-native/request-transform-model.d.ts.map +1 -0
- package/dist/lib/codex-native/request-transform-model.js +276 -0
- package/dist/lib/codex-native/request-transform-model.js.map +1 -0
- package/dist/lib/codex-native/request-transform-payload-helpers.d.ts +26 -0
- package/dist/lib/codex-native/request-transform-payload-helpers.d.ts.map +1 -0
- package/dist/lib/codex-native/request-transform-payload-helpers.js +232 -0
- package/dist/lib/codex-native/request-transform-payload-helpers.js.map +1 -0
- package/dist/lib/codex-native/request-transform-payload.d.ts +66 -0
- package/dist/lib/codex-native/request-transform-payload.d.ts.map +1 -0
- package/dist/lib/codex-native/request-transform-payload.js +296 -0
- package/dist/lib/codex-native/request-transform-payload.js.map +1 -0
- package/dist/lib/codex-native/request-transform-pipeline.d.ts +2 -1
- package/dist/lib/codex-native/request-transform-pipeline.d.ts.map +1 -1
- package/dist/lib/codex-native/request-transform-pipeline.js +6 -0
- package/dist/lib/codex-native/request-transform-pipeline.js.map +1 -1
- package/dist/lib/codex-native/request-transform-shared.d.ts +8 -0
- package/dist/lib/codex-native/request-transform-shared.d.ts.map +1 -0
- package/dist/lib/codex-native/request-transform-shared.js +49 -0
- package/dist/lib/codex-native/request-transform-shared.js.map +1 -0
- package/dist/lib/codex-native/request-transform.d.ts +4 -122
- package/dist/lib/codex-native/request-transform.d.ts.map +1 -1
- package/dist/lib/codex-native/request-transform.js +4 -862
- package/dist/lib/codex-native/request-transform.js.map +1 -1
- package/dist/lib/codex-native/session-affinity-state.d.ts +13 -0
- package/dist/lib/codex-native/session-affinity-state.d.ts.map +1 -1
- package/dist/lib/codex-native/session-affinity-state.js +20 -8
- package/dist/lib/codex-native/session-affinity-state.js.map +1 -1
- package/dist/lib/codex-native/static-fallback-models.d.ts +2 -0
- package/dist/lib/codex-native/static-fallback-models.d.ts.map +1 -0
- package/dist/lib/codex-native/static-fallback-models.js +15 -0
- package/dist/lib/codex-native/static-fallback-models.js.map +1 -0
- package/dist/lib/codex-native.d.ts.map +1 -1
- package/dist/lib/codex-native.js +1 -8
- package/dist/lib/codex-native.js.map +1 -1
- package/dist/lib/codex-prompts-cache.d.ts.map +1 -1
- package/dist/lib/codex-prompts-cache.js.map +1 -1
- package/dist/lib/codex-quota-fetch.js +1 -1
- package/dist/lib/codex-quota-fetch.js.map +1 -1
- package/dist/lib/config/behavior-settings.d.ts +3 -0
- package/dist/lib/config/behavior-settings.d.ts.map +1 -0
- package/dist/lib/config/behavior-settings.js +33 -0
- package/dist/lib/config/behavior-settings.js.map +1 -0
- package/dist/lib/config/io.d.ts +16 -0
- package/dist/lib/config/io.d.ts.map +1 -0
- package/dist/lib/config/io.js +64 -0
- package/dist/lib/config/io.js.map +1 -0
- package/dist/lib/config/parse.d.ts +22 -0
- package/dist/lib/config/parse.d.ts.map +1 -0
- package/dist/lib/config/parse.js +327 -0
- package/dist/lib/config/parse.js.map +1 -0
- package/dist/lib/config/resolve.d.ts +27 -0
- package/dist/lib/config/resolve.d.ts.map +1 -0
- package/dist/lib/config/resolve.js +154 -0
- package/dist/lib/config/resolve.js.map +1 -0
- package/dist/lib/config/types.d.ts +74 -0
- package/dist/lib/config/types.d.ts.map +1 -0
- package/dist/lib/config/types.js +160 -0
- package/dist/lib/config/types.js.map +1 -0
- package/dist/lib/config/validation.d.ts +6 -0
- package/dist/lib/config/validation.d.ts.map +1 -0
- package/dist/lib/config/validation.js +171 -0
- package/dist/lib/config/validation.js.map +1 -0
- package/dist/lib/config.d.ts +6 -114
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +6 -855
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/fetch-orchestrator-helpers.d.ts +13 -0
- package/dist/lib/fetch-orchestrator-helpers.d.ts.map +1 -0
- package/dist/lib/fetch-orchestrator-helpers.js +63 -0
- package/dist/lib/fetch-orchestrator-helpers.js.map +1 -0
- package/dist/lib/fetch-orchestrator-types.d.ts +71 -0
- package/dist/lib/fetch-orchestrator-types.d.ts.map +1 -0
- package/dist/lib/fetch-orchestrator-types.js +11 -0
- package/dist/lib/fetch-orchestrator-types.js.map +1 -0
- package/dist/lib/fetch-orchestrator.d.ts +2 -69
- package/dist/lib/fetch-orchestrator.d.ts.map +1 -1
- package/dist/lib/fetch-orchestrator.js +30 -79
- package/dist/lib/fetch-orchestrator.js.map +1 -1
- package/dist/lib/model-catalog/cache-helpers.d.ts +23 -0
- package/dist/lib/model-catalog/cache-helpers.d.ts.map +1 -0
- package/dist/lib/model-catalog/cache-helpers.js +210 -0
- package/dist/lib/model-catalog/cache-helpers.js.map +1 -0
- package/dist/lib/model-catalog/catalog-fetch.d.ts +3 -0
- package/dist/lib/model-catalog/catalog-fetch.d.ts.map +1 -0
- package/dist/lib/model-catalog/catalog-fetch.js +159 -0
- package/dist/lib/model-catalog/catalog-fetch.js.map +1 -0
- package/dist/lib/model-catalog/provider.d.ts +6 -0
- package/dist/lib/model-catalog/provider.d.ts.map +1 -0
- package/dist/lib/model-catalog/provider.js +280 -0
- package/dist/lib/model-catalog/provider.js.map +1 -0
- package/dist/lib/model-catalog/shared.d.ts +99 -0
- package/dist/lib/model-catalog/shared.d.ts.map +1 -0
- package/dist/lib/model-catalog/shared.js +157 -0
- package/dist/lib/model-catalog/shared.js.map +1 -0
- package/dist/lib/model-catalog.d.ts +3 -68
- package/dist/lib/model-catalog.d.ts.map +1 -1
- package/dist/lib/model-catalog.js +3 -767
- package/dist/lib/model-catalog.js.map +1 -1
- package/dist/lib/proactive-refresh.d.ts.map +1 -1
- package/dist/lib/proactive-refresh.js +2 -4
- package/dist/lib/proactive-refresh.js.map +1 -1
- package/dist/lib/quarantine.js.map +1 -1
- package/dist/lib/quota-threshold-alerts.d.ts.map +1 -1
- package/dist/lib/quota-threshold-alerts.js +3 -1
- package/dist/lib/quota-threshold-alerts.js.map +1 -1
- package/dist/lib/rotation.js.map +1 -1
- package/dist/lib/storage/domain-state.d.ts +23 -0
- package/dist/lib/storage/domain-state.d.ts.map +1 -0
- package/dist/lib/storage/domain-state.js +275 -0
- package/dist/lib/storage/domain-state.js.map +1 -0
- package/dist/lib/storage/migration.d.ts +13 -0
- package/dist/lib/storage/migration.d.ts.map +1 -0
- package/dist/lib/storage/migration.js +225 -0
- package/dist/lib/storage/migration.js.map +1 -0
- package/dist/lib/storage.d.ts +2 -9
- package/dist/lib/storage.d.ts.map +1 -1
- package/dist/lib/storage.js +12 -503
- package/dist/lib/storage.js.map +1 -1
- package/package.json +14 -13
- package/schemas/codex-config.schema.json +8 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { fetchRemoteText } from "../remote-cache-fetch.js";
|
|
5
|
+
import { isFsErrorCode, readJsonFileBestEffort, writeJsonFileBestEffort } from "../cache-io.js";
|
|
6
|
+
import { withLockedDirectory } from "../cache-lock.js";
|
|
7
|
+
import { buildCodexModelsMemoryCacheKey, codexAuthModelsCachePath, codexModelsCompatShardPath, codexModelsMetaPath, codexModelsSharedCachePath, isCodexModelsCacheFileName } from "../codex-cache-layout.js";
|
|
8
|
+
import { CACHE_TTL_MS, compareSemver, FETCH_TIMEOUT_MS, githubModelsTag, githubModelsUrl, isRecord, normalizeSemver, parseCatalogResponse, parseSemver, parseFetchedAtFromUnknown, semverFromTag } from "./shared.js";
|
|
9
|
+
export function cacheKey(cacheDir, accountId) {
|
|
10
|
+
return buildCodexModelsMemoryCacheKey(cacheDir, accountId);
|
|
11
|
+
}
|
|
12
|
+
export function cachePath(cacheDir, accountId) {
|
|
13
|
+
return codexAuthModelsCachePath(cacheDir, accountId);
|
|
14
|
+
}
|
|
15
|
+
export function opencodeShardCachePath(cacheDir, accountId) {
|
|
16
|
+
return codexModelsCompatShardPath(cacheDir, accountId);
|
|
17
|
+
}
|
|
18
|
+
function opencodeSharedCachePath(cacheDir) {
|
|
19
|
+
return codexModelsSharedCachePath(cacheDir);
|
|
20
|
+
}
|
|
21
|
+
async function readGitHubModelsCacheMeta(cacheDir) {
|
|
22
|
+
const file = codexModelsMetaPath(cacheDir);
|
|
23
|
+
const parsed = await readJsonFileBestEffort(file);
|
|
24
|
+
if (!isRecord(parsed))
|
|
25
|
+
return undefined;
|
|
26
|
+
const parsedVersion = normalizeSemver(typeof parsed.version === "string" ? parsed.version : undefined);
|
|
27
|
+
const parsedTag = typeof parsed.tag === "string" ? parsed.tag.trim() : "";
|
|
28
|
+
const tag = parsedTag || (parsedVersion ? githubModelsTag(parsedVersion) : "");
|
|
29
|
+
const url = typeof parsed.url === "string" ? parsed.url.trim() : "";
|
|
30
|
+
const lastChecked = typeof parsed.lastChecked === "number" && Number.isFinite(parsed.lastChecked) ? parsed.lastChecked : 0;
|
|
31
|
+
const etag = typeof parsed.etag === "string" ? parsed.etag.trim() : undefined;
|
|
32
|
+
if (!tag || !url)
|
|
33
|
+
return undefined;
|
|
34
|
+
return { etag, tag, url, lastChecked };
|
|
35
|
+
}
|
|
36
|
+
async function writeGitHubModelsCacheMeta(cacheDir, meta) {
|
|
37
|
+
const file = codexModelsMetaPath(cacheDir);
|
|
38
|
+
await writeJsonFileBestEffort(file, meta);
|
|
39
|
+
}
|
|
40
|
+
export async function refreshSharedGitHubModelsCache(input) {
|
|
41
|
+
const targetVersion = normalizeSemver(input.targetClientVersion);
|
|
42
|
+
if (!targetVersion)
|
|
43
|
+
return;
|
|
44
|
+
const existingMeta = await readGitHubModelsCacheMeta(input.cacheDir);
|
|
45
|
+
const existingVersion = parseSemver(semverFromTag(existingMeta?.tag));
|
|
46
|
+
const target = parseSemver(targetVersion);
|
|
47
|
+
if (!target)
|
|
48
|
+
return;
|
|
49
|
+
if (existingVersion && compareSemver(existingVersion, target) >= 0)
|
|
50
|
+
return;
|
|
51
|
+
const tag = githubModelsTag(targetVersion);
|
|
52
|
+
const url = githubModelsUrl(targetVersion);
|
|
53
|
+
const result = await fetchRemoteText({
|
|
54
|
+
key: "models",
|
|
55
|
+
url,
|
|
56
|
+
etag: existingMeta?.url === url ? existingMeta.etag : undefined
|
|
57
|
+
}, {
|
|
58
|
+
fetchImpl: input.fetchImpl,
|
|
59
|
+
timeoutMs: FETCH_TIMEOUT_MS,
|
|
60
|
+
allowedHosts: ["raw.githubusercontent.com"]
|
|
61
|
+
});
|
|
62
|
+
if (result.status === "not_modified" && existingMeta) {
|
|
63
|
+
await writeGitHubModelsCacheMeta(input.cacheDir, {
|
|
64
|
+
etag: existingMeta.etag,
|
|
65
|
+
tag,
|
|
66
|
+
lastChecked: input.now,
|
|
67
|
+
url
|
|
68
|
+
});
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (result.status !== "ok") {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
const payload = JSON.parse(result.text);
|
|
76
|
+
const models = parseCatalogResponse(payload);
|
|
77
|
+
if (models.length === 0)
|
|
78
|
+
return;
|
|
79
|
+
const etag = result.etag || (existingMeta?.url === url ? existingMeta.etag : undefined);
|
|
80
|
+
const file = opencodeSharedCachePath(input.cacheDir);
|
|
81
|
+
await writeJsonFileBestEffort(file, { fetchedAt: input.now, source: "github", models });
|
|
82
|
+
await writeGitHubModelsCacheMeta(input.cacheDir, {
|
|
83
|
+
etag,
|
|
84
|
+
tag,
|
|
85
|
+
lastChecked: input.now,
|
|
86
|
+
url
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
catch (_error) {
|
|
90
|
+
// Best effort refresh; continue without blocking catalog load.
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export function isFresh(cache, now) {
|
|
94
|
+
return now - cache.fetchedAt < CACHE_TTL_MS;
|
|
95
|
+
}
|
|
96
|
+
async function withCacheLock(cacheDir, fn) {
|
|
97
|
+
return withLockedDirectory(cacheDir, fn, { staleMs: 10_000 });
|
|
98
|
+
}
|
|
99
|
+
export async function readCatalogFromDisk(cacheDir, accountId) {
|
|
100
|
+
return withCacheLock(cacheDir, async () => {
|
|
101
|
+
const file = cachePath(cacheDir, accountId);
|
|
102
|
+
const parsed = await readJsonFileBestEffort(file);
|
|
103
|
+
if (!isRecord(parsed))
|
|
104
|
+
return undefined;
|
|
105
|
+
if (typeof parsed.fetchedAt !== "number")
|
|
106
|
+
return undefined;
|
|
107
|
+
const models = parseCatalogResponse({ models: parsed.models });
|
|
108
|
+
return {
|
|
109
|
+
fetchedAt: parsed.fetchedAt,
|
|
110
|
+
models
|
|
111
|
+
};
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
export async function readCatalogFromOpencodeCache(cacheDir) {
|
|
115
|
+
try {
|
|
116
|
+
const entries = await fs.readdir(cacheDir);
|
|
117
|
+
const candidates = entries.filter((name) => {
|
|
118
|
+
return isCodexModelsCacheFileName(name);
|
|
119
|
+
});
|
|
120
|
+
if (candidates.length === 0)
|
|
121
|
+
return undefined;
|
|
122
|
+
let best;
|
|
123
|
+
for (const fileName of candidates) {
|
|
124
|
+
const parsed = await readJsonFileBestEffort(path.join(cacheDir, fileName));
|
|
125
|
+
if (!isRecord(parsed))
|
|
126
|
+
continue;
|
|
127
|
+
const models = parseCatalogResponse({ models: parsed.models });
|
|
128
|
+
if (models.length === 0)
|
|
129
|
+
continue;
|
|
130
|
+
const fetchedAt = typeof parsed.fetchedAt === "number" ? parsed.fetchedAt : 0;
|
|
131
|
+
if (!best || fetchedAt > best.fetchedAt) {
|
|
132
|
+
best = {
|
|
133
|
+
fetchedAt,
|
|
134
|
+
models
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return best;
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
if (!isFsErrorCode(error, "ENOENT")) {
|
|
142
|
+
// Best effort fallback discovery.
|
|
143
|
+
}
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
export async function readCatalogFromCodexCliCache() {
|
|
148
|
+
const file = path.join(os.homedir(), ".codex", "models_cache.json");
|
|
149
|
+
const parsed = await readJsonFileBestEffort(file);
|
|
150
|
+
if (!isRecord(parsed))
|
|
151
|
+
return undefined;
|
|
152
|
+
const models = parseCatalogResponse({ models: parsed.models });
|
|
153
|
+
if (models.length === 0)
|
|
154
|
+
return undefined;
|
|
155
|
+
return {
|
|
156
|
+
fetchedAt: parseFetchedAtFromUnknown(parsed.fetched_at ?? parsed.fetchedAt),
|
|
157
|
+
models
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
export async function writeCatalogToDisk(cacheDir, accountId, cache) {
|
|
161
|
+
await withCacheLock(cacheDir, async () => {
|
|
162
|
+
const primaryFile = cachePath(cacheDir, accountId);
|
|
163
|
+
const compatFile = opencodeShardCachePath(cacheDir, accountId);
|
|
164
|
+
const files = compatFile ? [primaryFile, compatFile] : [primaryFile];
|
|
165
|
+
for (const file of files) {
|
|
166
|
+
await writeJsonFileBestEffort(file, cache);
|
|
167
|
+
}
|
|
168
|
+
}).catch((error) => {
|
|
169
|
+
if (error instanceof Error) {
|
|
170
|
+
// Best effort cache persistence.
|
|
171
|
+
}
|
|
172
|
+
// Best effort cache persistence.
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
export function emitEvent(input, event) {
|
|
176
|
+
try {
|
|
177
|
+
input.onEvent?.({
|
|
178
|
+
...event,
|
|
179
|
+
scope: input.accountId?.trim() ? "account" : "shared"
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
if (error instanceof Error) {
|
|
184
|
+
// Keep catalog path side-effect free even if observer callback throws.
|
|
185
|
+
}
|
|
186
|
+
// Keep catalog path side-effect free.
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
export function deriveReason(value) {
|
|
190
|
+
if (value instanceof Error) {
|
|
191
|
+
return value.name || "error";
|
|
192
|
+
}
|
|
193
|
+
return "error";
|
|
194
|
+
}
|
|
195
|
+
export function emitStaleCacheFallback(input, fallback) {
|
|
196
|
+
if (fallback.disk) {
|
|
197
|
+
emitEvent(input, { type: "stale_cache_used", reason: "network_fetch_failed" });
|
|
198
|
+
return fallback.disk.models;
|
|
199
|
+
}
|
|
200
|
+
if (fallback.opencode) {
|
|
201
|
+
emitEvent(input, { type: "stale_cache_used", reason: "opencode_cache_fallback" });
|
|
202
|
+
return fallback.opencode.models;
|
|
203
|
+
}
|
|
204
|
+
if (fallback.codexCli) {
|
|
205
|
+
emitEvent(input, { type: "stale_cache_used", reason: "codex_cli_cache_fallback" });
|
|
206
|
+
return fallback.codexCli.models;
|
|
207
|
+
}
|
|
208
|
+
return undefined;
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=cache-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-helpers.js","sourceRoot":"","sources":["../../../lib/model-catalog/cache-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-fetch.d.ts","sourceRoot":"","sources":["../../../lib/model-catalog/catalog-fetch.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,cAAc,EAInB,KAAK,yBAAyB,EAG/B,MAAM,aAAa,CAAA;AAkBpB,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC,CAqJlH"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { cacheKey, deriveReason, emitEvent, emitStaleCacheFallback, isFresh, readCatalogFromCodexCliCache, readCatalogFromDisk, readCatalogFromOpencodeCache, refreshSharedGitHubModelsCache, writeCatalogToDisk } from "./cache-helpers.js";
|
|
2
|
+
import { CODEX_MODELS_ENDPOINT, DEFAULT_CLIENT_VERSION, FETCH_TIMEOUT_MS, parseCatalogResponse, normalizeSemver } from "./shared.js";
|
|
3
|
+
import { resolveCodexCacheDir } from "../codex-cache-layout.js";
|
|
4
|
+
const inMemoryCatalog = new Map();
|
|
5
|
+
const inFlightCatalogFetches = new Map();
|
|
6
|
+
function normalizeClientVersion(value, fallback) {
|
|
7
|
+
const trimmed = value?.trim();
|
|
8
|
+
if (trimmed)
|
|
9
|
+
return trimmed;
|
|
10
|
+
const fallbackTrimmed = fallback?.trim();
|
|
11
|
+
return fallbackTrimmed || DEFAULT_CLIENT_VERSION;
|
|
12
|
+
}
|
|
13
|
+
function buildModelsEndpoint(clientVersion) {
|
|
14
|
+
const separator = CODEX_MODELS_ENDPOINT.includes("?") ? "&" : "?";
|
|
15
|
+
return `${CODEX_MODELS_ENDPOINT}${separator}client_version=${encodeURIComponent(clientVersion)}`;
|
|
16
|
+
}
|
|
17
|
+
export async function getCodexModelCatalog(input) {
|
|
18
|
+
const now = (input.now ?? Date.now)();
|
|
19
|
+
const cacheDir = resolveCodexCacheDir(input.cacheDir);
|
|
20
|
+
const key = cacheKey(cacheDir, input.accountId);
|
|
21
|
+
const fetchImpl = input.fetchImpl ?? fetch;
|
|
22
|
+
const accessToken = input.accessToken?.trim();
|
|
23
|
+
const targetClientVersion = normalizeSemver(input.clientVersion) ?? normalizeSemver(input.versionHeader);
|
|
24
|
+
const defaultGithubModelsRefresh = Boolean(accessToken) && input.fetchImpl === undefined && targetClientVersion !== undefined;
|
|
25
|
+
const shouldRefreshGithubModelsCache = input.refreshGithubModelsCache ?? defaultGithubModelsRefresh;
|
|
26
|
+
if (shouldRefreshGithubModelsCache) {
|
|
27
|
+
await refreshSharedGitHubModelsCache({
|
|
28
|
+
cacheDir,
|
|
29
|
+
targetClientVersion,
|
|
30
|
+
now,
|
|
31
|
+
fetchImpl
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
const memory = inMemoryCatalog.get(key);
|
|
35
|
+
const allowMemoryHit = !memory?.staleFallback || !accessToken;
|
|
36
|
+
if (memory && !input.forceRefresh && isFresh(memory, now) && allowMemoryHit) {
|
|
37
|
+
emitEvent(input, { type: "memory_cache_hit" });
|
|
38
|
+
return memory.models;
|
|
39
|
+
}
|
|
40
|
+
const disk = await readCatalogFromDisk(cacheDir, input.accountId);
|
|
41
|
+
const hasFreshDisk = !!disk && isFresh(disk, now);
|
|
42
|
+
if (hasFreshDisk && !input.forceRefresh) {
|
|
43
|
+
inMemoryCatalog.set(key, disk);
|
|
44
|
+
emitEvent(input, { type: "disk_cache_hit" });
|
|
45
|
+
return disk.models;
|
|
46
|
+
}
|
|
47
|
+
let opencodeCacheFallback;
|
|
48
|
+
let codexCliCacheFallback;
|
|
49
|
+
const ensureFallbackCaches = async () => {
|
|
50
|
+
if (opencodeCacheFallback !== undefined || codexCliCacheFallback !== undefined)
|
|
51
|
+
return;
|
|
52
|
+
opencodeCacheFallback = await readCatalogFromOpencodeCache(cacheDir);
|
|
53
|
+
codexCliCacheFallback = await readCatalogFromCodexCliCache();
|
|
54
|
+
};
|
|
55
|
+
if (!accessToken) {
|
|
56
|
+
await ensureFallbackCaches();
|
|
57
|
+
if (disk) {
|
|
58
|
+
emitEvent(input, { type: "stale_cache_used", reason: "missing_access_token" });
|
|
59
|
+
inMemoryCatalog.set(key, disk);
|
|
60
|
+
return disk.models;
|
|
61
|
+
}
|
|
62
|
+
const stale = emitStaleCacheFallback(input, {
|
|
63
|
+
opencode: opencodeCacheFallback,
|
|
64
|
+
codexCli: codexCliCacheFallback
|
|
65
|
+
});
|
|
66
|
+
if (stale) {
|
|
67
|
+
inMemoryCatalog.set(key, {
|
|
68
|
+
fetchedAt: now,
|
|
69
|
+
models: stale,
|
|
70
|
+
staleFallback: true
|
|
71
|
+
});
|
|
72
|
+
return stale;
|
|
73
|
+
}
|
|
74
|
+
emitEvent(input, { type: "catalog_unavailable", reason: "missing_access_token" });
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
const headers = {
|
|
78
|
+
authorization: `Bearer ${accessToken}`,
|
|
79
|
+
originator: input.originator?.trim() || "opencode"
|
|
80
|
+
};
|
|
81
|
+
const clientVersion = normalizeClientVersion(input.clientVersion, input.versionHeader);
|
|
82
|
+
const versionHeader = normalizeClientVersion(input.versionHeader, input.clientVersion);
|
|
83
|
+
if (versionHeader)
|
|
84
|
+
headers.version = versionHeader;
|
|
85
|
+
const userAgent = input.userAgent?.trim();
|
|
86
|
+
if (userAgent)
|
|
87
|
+
headers["user-agent"] = userAgent;
|
|
88
|
+
const betaValue = input.openaiBeta?.trim();
|
|
89
|
+
if (betaValue)
|
|
90
|
+
headers["openai-beta"] = betaValue;
|
|
91
|
+
const accountId = input.accountId?.trim() || undefined;
|
|
92
|
+
if (accountId) {
|
|
93
|
+
headers["chatgpt-account-id"] = accountId;
|
|
94
|
+
}
|
|
95
|
+
const existingInFlight = inFlightCatalogFetches.get(key);
|
|
96
|
+
if (existingInFlight) {
|
|
97
|
+
return existingInFlight;
|
|
98
|
+
}
|
|
99
|
+
const inFlight = (async () => {
|
|
100
|
+
try {
|
|
101
|
+
const controller = new AbortController();
|
|
102
|
+
const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
|
|
103
|
+
let response;
|
|
104
|
+
try {
|
|
105
|
+
const endpoint = buildModelsEndpoint(clientVersion);
|
|
106
|
+
response = await fetchImpl(endpoint, {
|
|
107
|
+
method: "GET",
|
|
108
|
+
headers,
|
|
109
|
+
signal: controller.signal
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
clearTimeout(timeout);
|
|
114
|
+
}
|
|
115
|
+
if (!response.ok) {
|
|
116
|
+
throw new Error(`codex models request failed with status ${response.status}`);
|
|
117
|
+
}
|
|
118
|
+
const payload = await response.json();
|
|
119
|
+
const models = parseCatalogResponse(payload);
|
|
120
|
+
if (models.length === 0) {
|
|
121
|
+
throw new Error("codex models response did not contain usable models");
|
|
122
|
+
}
|
|
123
|
+
const nextCache = {
|
|
124
|
+
fetchedAt: now,
|
|
125
|
+
models
|
|
126
|
+
};
|
|
127
|
+
inMemoryCatalog.set(key, nextCache);
|
|
128
|
+
await writeCatalogToDisk(cacheDir, accountId, nextCache);
|
|
129
|
+
emitEvent(input, { type: "network_fetch_success" });
|
|
130
|
+
return nextCache.models;
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
emitEvent(input, { type: "network_fetch_failed", reason: deriveReason(error) });
|
|
134
|
+
await ensureFallbackCaches();
|
|
135
|
+
const stale = emitStaleCacheFallback(input, {
|
|
136
|
+
disk,
|
|
137
|
+
opencode: opencodeCacheFallback,
|
|
138
|
+
codexCli: codexCliCacheFallback
|
|
139
|
+
});
|
|
140
|
+
if (stale) {
|
|
141
|
+
inMemoryCatalog.set(key, {
|
|
142
|
+
fetchedAt: now,
|
|
143
|
+
models: stale,
|
|
144
|
+
staleFallback: true
|
|
145
|
+
});
|
|
146
|
+
return stale;
|
|
147
|
+
}
|
|
148
|
+
emitEvent(input, { type: "catalog_unavailable", reason: "network_fetch_failed" });
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
})();
|
|
152
|
+
inFlightCatalogFetches.set(key, inFlight);
|
|
153
|
+
return inFlight.finally(() => {
|
|
154
|
+
if (inFlightCatalogFetches.get(key) === inFlight) {
|
|
155
|
+
inFlightCatalogFetches.delete(key);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=catalog-fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-fetch.js","sourceRoot":"","sources":["../../../lib/model-catalog/catalog-fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ApplyCodexCatalogInput, type CodexModelInfo, type CodexModelRuntimeDefaults, type PersonalityOption } from "./shared.js";
|
|
2
|
+
export declare function resolveInstructionsForModel(model: CodexModelInfo, personality?: PersonalityOption): string | undefined;
|
|
3
|
+
export declare function getRuntimeDefaultsForModel(model: CodexModelInfo | undefined): CodexModelRuntimeDefaults | undefined;
|
|
4
|
+
export declare function getRuntimeDefaultsForSlug(slug: string, catalogModels: CodexModelInfo[] | undefined): CodexModelRuntimeDefaults | undefined;
|
|
5
|
+
export declare function applyCodexCatalogToProviderModels(input: ApplyCodexCatalogInput): void;
|
|
6
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../lib/model-catalog/provider.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,yBAAyB,EAK9B,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAA;AA+GpB,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,cAAc,EACrB,WAAW,CAAC,EAAE,iBAAiB,GAC9B,MAAM,GAAG,SAAS,CAiBpB;AAwDD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,GAAG,yBAAyB,GAAG,SAAS,CAiDnH;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,cAAc,EAAE,GAAG,SAAS,GAC1C,yBAAyB,GAAG,SAAS,CAGvC;AAED,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAqFrF"}
|