@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.
- package/LICENSE +21 -0
- package/README.md +111 -0
- package/dist/bin/opencode-codex-auth.d.ts +3 -0
- package/dist/bin/opencode-codex-auth.d.ts.map +1 -0
- package/dist/bin/opencode-codex-auth.js +13 -0
- package/dist/bin/opencode-codex-auth.js.map +1 -0
- package/dist/bin/opencode-openai-multi.d.ts +3 -0
- package/dist/bin/opencode-openai-multi.d.ts.map +1 -0
- package/dist/bin/opencode-openai-multi.js +13 -0
- package/dist/bin/opencode-openai-multi.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +137 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/accounts-tools.d.ts +14 -0
- package/dist/lib/accounts-tools.d.ts.map +1 -0
- package/dist/lib/accounts-tools.js +100 -0
- package/dist/lib/accounts-tools.js.map +1 -0
- package/dist/lib/claims.d.ts +20 -0
- package/dist/lib/claims.d.ts.map +1 -0
- package/dist/lib/claims.js +37 -0
- package/dist/lib/claims.js.map +1 -0
- package/dist/lib/codex-native.d.ts +74 -0
- package/dist/lib/codex-native.d.ts.map +1 -0
- package/dist/lib/codex-native.js +2404 -0
- package/dist/lib/codex-native.js.map +1 -0
- package/dist/lib/codex-quota-fetch.d.ts +11 -0
- package/dist/lib/codex-quota-fetch.d.ts.map +1 -0
- package/dist/lib/codex-quota-fetch.js +149 -0
- package/dist/lib/codex-quota-fetch.js.map +1 -0
- package/dist/lib/codex-status-storage.d.ts +5 -0
- package/dist/lib/codex-status-storage.d.ts.map +1 -0
- package/dist/lib/codex-status-storage.js +58 -0
- package/dist/lib/codex-status-storage.js.map +1 -0
- package/dist/lib/codex-status-tool.d.ts +6 -0
- package/dist/lib/codex-status-tool.d.ts.map +1 -0
- package/dist/lib/codex-status-tool.js +37 -0
- package/dist/lib/codex-status-tool.js.map +1 -0
- package/dist/lib/codex-status-ui.d.ts +7 -0
- package/dist/lib/codex-status-ui.d.ts.map +1 -0
- package/dist/lib/codex-status-ui.js +109 -0
- package/dist/lib/codex-status-ui.js.map +1 -0
- package/dist/lib/codex-status.d.ts +14 -0
- package/dist/lib/codex-status.d.ts.map +1 -0
- package/dist/lib/codex-status.js +31 -0
- package/dist/lib/codex-status.js.map +1 -0
- package/dist/lib/compat-sanitizer.d.ts +7 -0
- package/dist/lib/compat-sanitizer.d.ts.map +1 -0
- package/dist/lib/compat-sanitizer.js +101 -0
- package/dist/lib/compat-sanitizer.js.map +1 -0
- package/dist/lib/config.d.ts +94 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +495 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/constants.d.ts +2 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +2 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/fatal-errors.d.ts +17 -0
- package/dist/lib/fatal-errors.d.ts.map +1 -0
- package/dist/lib/fatal-errors.js +42 -0
- package/dist/lib/fatal-errors.js.map +1 -0
- package/dist/lib/fetch-orchestrator.d.ts +56 -0
- package/dist/lib/fetch-orchestrator.d.ts.map +1 -0
- package/dist/lib/fetch-orchestrator.js +240 -0
- package/dist/lib/fetch-orchestrator.js.map +1 -0
- package/dist/lib/identity.d.ts +10 -0
- package/dist/lib/identity.d.ts.map +1 -0
- package/dist/lib/identity.js +31 -0
- package/dist/lib/identity.js.map +1 -0
- package/dist/lib/installer-cli.d.ts +7 -0
- package/dist/lib/installer-cli.d.ts.map +1 -0
- package/dist/lib/installer-cli.js +115 -0
- package/dist/lib/installer-cli.js.map +1 -0
- package/dist/lib/logger.d.ts +11 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +25 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/model-catalog.d.ts +66 -0
- package/dist/lib/model-catalog.d.ts.map +1 -0
- package/dist/lib/model-catalog.js +532 -0
- package/dist/lib/model-catalog.js.map +1 -0
- package/dist/lib/oauth-pages.d.ts +2 -0
- package/dist/lib/oauth-pages.d.ts.map +1 -0
- package/dist/lib/oauth-pages.js +199 -0
- package/dist/lib/oauth-pages.js.map +1 -0
- package/dist/lib/opencode-install.d.ts +15 -0
- package/dist/lib/opencode-install.d.ts.map +1 -0
- package/dist/lib/opencode-install.js +53 -0
- package/dist/lib/opencode-install.js.map +1 -0
- package/dist/lib/orchestrator-agents.d.ts +29 -0
- package/dist/lib/orchestrator-agents.d.ts.map +1 -0
- package/dist/lib/orchestrator-agents.js +212 -0
- package/dist/lib/orchestrator-agents.js.map +1 -0
- package/dist/lib/paths.d.ts +7 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +18 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/personalities.d.ts +5 -0
- package/dist/lib/personalities.d.ts.map +1 -0
- package/dist/lib/personalities.js +69 -0
- package/dist/lib/personalities.js.map +1 -0
- package/dist/lib/proactive-refresh.d.ts +11 -0
- package/dist/lib/proactive-refresh.d.ts.map +1 -0
- package/dist/lib/proactive-refresh.js +110 -0
- package/dist/lib/proactive-refresh.js.map +1 -0
- package/dist/lib/quarantine.d.ts +9 -0
- package/dist/lib/quarantine.d.ts.map +1 -0
- package/dist/lib/quarantine.js +39 -0
- package/dist/lib/quarantine.js.map +1 -0
- package/dist/lib/rate-limit.d.ts +9 -0
- package/dist/lib/rate-limit.d.ts.map +1 -0
- package/dist/lib/rate-limit.js +32 -0
- package/dist/lib/rate-limit.js.map +1 -0
- package/dist/lib/refresh-queue.d.ts +30 -0
- package/dist/lib/refresh-queue.d.ts.map +1 -0
- package/dist/lib/refresh-queue.js +67 -0
- package/dist/lib/refresh-queue.js.map +1 -0
- package/dist/lib/request-snapshots.d.ts +14 -0
- package/dist/lib/request-snapshots.d.ts.map +1 -0
- package/dist/lib/request-snapshots.js +148 -0
- package/dist/lib/request-snapshots.js.map +1 -0
- package/dist/lib/rotation.d.ts +29 -0
- package/dist/lib/rotation.d.ts.map +1 -0
- package/dist/lib/rotation.js +252 -0
- package/dist/lib/rotation.js.map +1 -0
- package/dist/lib/storage.d.ts +27 -0
- package/dist/lib/storage.d.ts.map +1 -0
- package/dist/lib/storage.js +610 -0
- package/dist/lib/storage.js.map +1 -0
- package/dist/lib/toast.d.ts +2 -0
- package/dist/lib/toast.d.ts.map +1 -0
- package/dist/lib/toast.js +47 -0
- package/dist/lib/toast.js.map +1 -0
- package/dist/lib/tools-output.d.ts +6 -0
- package/dist/lib/tools-output.d.ts.map +1 -0
- package/dist/lib/tools-output.js +6 -0
- package/dist/lib/tools-output.js.map +1 -0
- package/dist/lib/types.d.ts +62 -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/auth-menu-runner.d.ts +19 -0
- package/dist/lib/ui/auth-menu-runner.d.ts.map +1 -0
- package/dist/lib/ui/auth-menu-runner.js +79 -0
- package/dist/lib/ui/auth-menu-runner.js.map +1 -0
- package/dist/lib/ui/auth-menu.d.ts +80 -0
- package/dist/lib/ui/auth-menu.d.ts.map +1 -0
- package/dist/lib/ui/auth-menu.js +321 -0
- package/dist/lib/ui/auth-menu.js.map +1 -0
- package/dist/lib/ui/tty/ansi.d.ts +18 -0
- package/dist/lib/ui/tty/ansi.d.ts.map +1 -0
- package/dist/lib/ui/tty/ansi.js +37 -0
- package/dist/lib/ui/tty/ansi.js.map +1 -0
- package/dist/lib/ui/tty/confirm.d.ts +7 -0
- package/dist/lib/ui/tty/confirm.d.ts.map +1 -0
- package/dist/lib/ui/tty/confirm.js +20 -0
- package/dist/lib/ui/tty/confirm.js.map +1 -0
- package/dist/lib/ui/tty/select.d.ts +17 -0
- package/dist/lib/ui/tty/select.d.ts.map +1 -0
- package/dist/lib/ui/tty/select.js +223 -0
- package/dist/lib/ui/tty/select.js.map +1 -0
- package/package.json +68 -0
- package/schemas/codex-config.schema.json +146 -0
- 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 @@
|
|
|
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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"}
|