@pentoshi/clai 4.11.21 → 4.11.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/dist/agent/evidence/task-selection.d.ts +0 -15
  2. package/dist/agent/evidence/task-selection.js +1 -33
  3. package/dist/agent/evidence/task-selection.js.map +1 -1
  4. package/dist/agent/plan/actions/plan-clear.js.map +1 -1
  5. package/dist/agent/plan/actions/plan-create.js.map +1 -1
  6. package/dist/agent/plan/actions/task-add.js.map +1 -1
  7. package/dist/agent/plan/actions/task-move.js.map +1 -1
  8. package/dist/agent/plan/handle-plan-tool.js +5 -154
  9. package/dist/agent/plan/handle-plan-tool.js.map +1 -1
  10. package/dist/agent/runner.js +1 -13
  11. package/dist/agent/runner.js.map +1 -1
  12. package/dist/agent/session-policy.d.ts +0 -6
  13. package/dist/agent/session-policy.js +0 -2
  14. package/dist/agent/session-policy.js.map +1 -1
  15. package/dist/agent/task-evidence.d.ts +2 -2
  16. package/dist/agent/task-evidence.js +1 -1
  17. package/dist/agent/task-evidence.js.map +1 -1
  18. package/dist/agent/turn/compaction-admission.d.ts +5 -0
  19. package/dist/agent/turn/compaction-admission.js +24 -0
  20. package/dist/agent/turn/compaction-admission.js.map +1 -1
  21. package/dist/agent/turn/compaction-coordinator.d.ts +1 -0
  22. package/dist/agent/turn/compaction-coordinator.js +2 -0
  23. package/dist/agent/turn/compaction-coordinator.js.map +1 -1
  24. package/dist/agent/turn/loop/run-rounds.js +17 -24
  25. package/dist/agent/turn/loop/run-rounds.js.map +1 -1
  26. package/dist/agent/turn/loop/state.d.ts +1 -2
  27. package/dist/agent/turn/loop/state.js +1 -2
  28. package/dist/agent/turn/loop/state.js.map +1 -1
  29. package/dist/agent/turn/setup/compaction-services.d.ts +1 -0
  30. package/dist/agent/turn/setup/compaction-services.js +1 -0
  31. package/dist/agent/turn/setup/compaction-services.js.map +1 -1
  32. package/dist/agent/turn/setup/task-gate-setup.d.ts +1 -11
  33. package/dist/agent/turn/setup/task-gate-setup.js +4 -19
  34. package/dist/agent/turn/setup/task-gate-setup.js.map +1 -1
  35. package/dist/agent/turn/tool-execution/deps.d.ts +1 -5
  36. package/dist/agent/turn/tool-execution/guards.d.ts +0 -4
  37. package/dist/agent/turn/tool-execution/guards.js +3 -12
  38. package/dist/agent/turn/tool-execution/guards.js.map +1 -1
  39. package/dist/agent/turn/tool-execution/meta-tools.d.ts +0 -2
  40. package/dist/agent/turn/tool-execution/meta-tools.js +0 -17
  41. package/dist/agent/turn/tool-execution/meta-tools.js.map +1 -1
  42. package/dist/agent/turn/tool-execution/single-tool.js +0 -14
  43. package/dist/agent/turn/tool-execution/single-tool.js.map +1 -1
  44. package/dist/app/commands/catalog.js +32 -1
  45. package/dist/app/commands/catalog.js.map +1 -1
  46. package/dist/classic/panels/keys-panel.js +8 -1
  47. package/dist/classic/panels/keys-panel.js.map +1 -1
  48. package/dist/commands/providers.d.ts +17 -0
  49. package/dist/commands/providers.js +317 -28
  50. package/dist/commands/providers.js.map +1 -1
  51. package/dist/index.js +31 -1
  52. package/dist/index.js.map +1 -1
  53. package/dist/llm/agentrouter.js +1 -1
  54. package/dist/llm/anthropic.d.ts +4 -2
  55. package/dist/llm/anthropic.js +186 -178
  56. package/dist/llm/anthropic.js.map +1 -1
  57. package/dist/llm/bynara.js +1 -1
  58. package/dist/llm/capability/state.d.ts +1 -1
  59. package/dist/llm/capability/tool-dialect.js +3 -0
  60. package/dist/llm/capability/tool-dialect.js.map +1 -1
  61. package/dist/llm/capability/vision-patterns.js +3 -0
  62. package/dist/llm/capability/vision-patterns.js.map +1 -1
  63. package/dist/llm/catalog-facts.js +50 -2
  64. package/dist/llm/catalog-facts.js.map +1 -1
  65. package/dist/llm/catalog-prefetch.js +1 -1
  66. package/dist/llm/cline-auth.d.ts +34 -0
  67. package/dist/llm/cline-auth.js +248 -0
  68. package/dist/llm/cline-auth.js.map +1 -0
  69. package/dist/llm/cline.d.ts +2 -0
  70. package/dist/llm/cline.js +147 -0
  71. package/dist/llm/cline.js.map +1 -0
  72. package/dist/llm/codex-auth.d.ts +53 -0
  73. package/dist/llm/codex-auth.js +512 -0
  74. package/dist/llm/codex-auth.js.map +1 -0
  75. package/dist/llm/codex.d.ts +4 -0
  76. package/dist/llm/codex.js +239 -0
  77. package/dist/llm/codex.js.map +1 -0
  78. package/dist/llm/copilot-auth.d.ts +38 -0
  79. package/dist/llm/copilot-auth.js +258 -0
  80. package/dist/llm/copilot-auth.js.map +1 -0
  81. package/dist/llm/copilot.d.ts +4 -0
  82. package/dist/llm/copilot.js +226 -0
  83. package/dist/llm/copilot.js.map +1 -0
  84. package/dist/llm/custom-providers.js +1 -1
  85. package/dist/llm/deepseek.js +1 -1
  86. package/dist/llm/explabs.js +1 -1
  87. package/dist/llm/fireworks.js +1 -1
  88. package/dist/llm/free-default-model.js +9 -4
  89. package/dist/llm/free-default-model.js.map +1 -1
  90. package/dist/llm/free.js +1 -6
  91. package/dist/llm/free.js.map +1 -1
  92. package/dist/llm/glm.js +1 -1
  93. package/dist/llm/hetzner.js +1 -1
  94. package/dist/llm/kimi.js +1 -1
  95. package/dist/llm/lightning.js +1 -1
  96. package/dist/llm/merge-gateway.js +1 -1
  97. package/dist/llm/meta.js +1 -1
  98. package/dist/llm/minimax.js +1 -1
  99. package/dist/llm/model-families.js +1 -1
  100. package/dist/llm/model-families.js.map +1 -1
  101. package/dist/llm/model-layers/model-rules.js +6 -0
  102. package/dist/llm/model-layers/model-rules.js.map +1 -1
  103. package/dist/llm/nvidia.js +1 -1
  104. package/dist/llm/openrouter.js +1 -1
  105. package/dist/llm/orcarouter.js +1 -1
  106. package/dist/llm/provider-identity.d.ts +2 -0
  107. package/dist/llm/provider-identity.js +35 -0
  108. package/dist/llm/provider-identity.js.map +1 -1
  109. package/dist/llm/provider-info-text.js +110 -8
  110. package/dist/llm/provider-info-text.js.map +1 -1
  111. package/dist/llm/provider-profile-layers.js +101 -0
  112. package/dist/llm/provider-profile-layers.js.map +1 -1
  113. package/dist/llm/provider-profiles.js +2 -1
  114. package/dist/llm/provider-profiles.js.map +1 -1
  115. package/dist/llm/provider.d.ts +6 -4
  116. package/dist/llm/provider.js +2 -2
  117. package/dist/llm/provider.js.map +1 -1
  118. package/dist/llm/qwen-cloud.js +1 -1
  119. package/dist/llm/reasoning-capability.js +14 -0
  120. package/dist/llm/reasoning-capability.js.map +1 -1
  121. package/dist/llm/responses/item-events.js +10 -0
  122. package/dist/llm/responses/item-events.js.map +1 -1
  123. package/dist/llm/responses-config.d.ts +4 -0
  124. package/dist/llm/responses-config.js.map +1 -1
  125. package/dist/llm/responses-parse.js +23 -11
  126. package/dist/llm/responses-parse.js.map +1 -1
  127. package/dist/llm/responses-request.js +31 -8
  128. package/dist/llm/responses-request.js.map +1 -1
  129. package/dist/llm/responses-stream-events.js +21 -5
  130. package/dist/llm/responses-stream-events.js.map +1 -1
  131. package/dist/llm/routing/attempt-complete.js +1 -1
  132. package/dist/llm/routing/attempt-complete.js.map +1 -1
  133. package/dist/llm/routing/attempt-request.js +1 -1
  134. package/dist/llm/routing/attempt-request.js.map +1 -1
  135. package/dist/llm/routing/attempt-stream.js +2 -2
  136. package/dist/llm/routing/attempt-stream.js.map +1 -1
  137. package/dist/llm/routing/key-rotation.js +9 -4
  138. package/dist/llm/routing/key-rotation.js.map +1 -1
  139. package/dist/llm/routing/provider-selection.d.ts +2 -1
  140. package/dist/llm/routing/provider-selection.js +18 -4
  141. package/dist/llm/routing/provider-selection.js.map +1 -1
  142. package/dist/llm/tokenrouter.js +1 -1
  143. package/dist/llm/vercel.js +1 -1
  144. package/dist/llm/wire/chat-body.js +5 -3
  145. package/dist/llm/wire/chat-body.js.map +1 -1
  146. package/dist/llm/wire/openai-complete.d.ts +1 -0
  147. package/dist/llm/wire/openai-complete.js +9 -0
  148. package/dist/llm/wire/openai-complete.js.map +1 -1
  149. package/dist/store/config.js +3 -0
  150. package/dist/store/config.js.map +1 -1
  151. package/dist/store/keys/search-providers.d.ts +2 -0
  152. package/dist/store/keys/search-providers.js +6 -0
  153. package/dist/store/keys/search-providers.js.map +1 -1
  154. package/dist/store/keys.d.ts +6 -1
  155. package/dist/store/keys.js +46 -17
  156. package/dist/store/keys.js.map +1 -1
  157. package/dist/store/plan/mutation.d.ts +0 -1
  158. package/dist/store/plan/mutation.js +1 -22
  159. package/dist/store/plan/mutation.js.map +1 -1
  160. package/dist/store/plan.d.ts +1 -1
  161. package/dist/store/plan.js +1 -4
  162. package/dist/store/plan.js.map +1 -1
  163. package/dist/tui-v2/components/modal/keys-modal-pick.d.ts +5 -0
  164. package/dist/tui-v2/components/modal/keys-modal-pick.js +13 -0
  165. package/dist/tui-v2/components/modal/keys-modal-pick.js.map +1 -1
  166. package/dist/tui-v2/components/modal/keys-modal.js +15 -13
  167. package/dist/tui-v2/components/modal/keys-modal.js.map +1 -1
  168. package/dist/types.d.ts +1 -1
  169. package/dist/types.js +3 -0
  170. package/dist/types.js.map +1 -1
  171. package/dist/ui-core/commands/key-commands.d.ts +6 -3
  172. package/dist/ui-core/commands/key-commands.js +506 -15
  173. package/dist/ui-core/commands/key-commands.js.map +1 -1
  174. package/dist/ui-core/commands/keys/editors.js +10 -4
  175. package/dist/ui-core/commands/keys/editors.js.map +1 -1
  176. package/dist/ui-core/commands/picker-commands.js +86 -32
  177. package/dist/ui-core/commands/picker-commands.js.map +1 -1
  178. package/dist/ui-core/commands/subagent-models-editor.js +12 -4
  179. package/dist/ui-core/commands/subagent-models-editor.js.map +1 -1
  180. package/dist/ui-core/controllers/overlay-controller.d.ts +4 -0
  181. package/dist/ui-core/controllers/overlay-controller.js.map +1 -1
  182. package/dist/ui-core/rendering/format-keys.js +4 -2
  183. package/dist/ui-core/rendering/format-keys.js.map +1 -1
  184. package/dist/ui-core/rendering/format-usage.js +3 -1
  185. package/dist/ui-core/rendering/format-usage.js.map +1 -1
  186. package/dist/ui-core/rendering/intro-header.js +4 -1
  187. package/dist/ui-core/rendering/intro-header.js.map +1 -1
  188. package/dist/version.generated.d.ts +2 -2
  189. package/dist/version.generated.js +2 -2
  190. package/package.json +1 -1
  191. package/dist/agent/task-sync.d.ts +0 -40
  192. package/dist/agent/task-sync.js +0 -105
  193. package/dist/agent/task-sync.js.map +0 -1
  194. package/dist/agent/turn/task-batch-guard.d.ts +0 -18
  195. package/dist/agent/turn/task-batch-guard.js +0 -83
  196. package/dist/agent/turn/task-batch-guard.js.map +0 -1
  197. package/dist/agent/turn/task-gate.d.ts +0 -13
  198. package/dist/agent/turn/task-gate.js +0 -34
  199. package/dist/agent/turn/task-gate.js.map +0 -1
  200. package/dist/agent/turn/task-update-gate.d.ts +0 -13
  201. package/dist/agent/turn/task-update-gate.js +0 -40
  202. package/dist/agent/turn/task-update-gate.js.map +0 -1
  203. package/dist/store/task-transitions.d.ts +0 -12
  204. package/dist/store/task-transitions.js +0 -40
  205. package/dist/store/task-transitions.js.map +0 -1
@@ -0,0 +1,53 @@
1
+ export declare const CODEX_API_BASE_URL = "https://chatgpt.com/backend-api/codex";
2
+ export declare const CODEX_AUTH_BASE_URL = "https://auth.openai.com";
3
+ export declare const CODEX_CLIENT_ID = "app_EMoamEEZ73f0CkXaXp7hrann";
4
+ export declare const CODEX_ORIGINATOR = "codex_cli_rs";
5
+ export declare const CODEX_CLIENT_VERSION = "0.0.0";
6
+ export declare const CODEX_SCOPE = "openid profile email offline_access";
7
+ export interface CodexCredential {
8
+ accessToken: string;
9
+ refreshToken?: string | undefined;
10
+ accountId: string;
11
+ expiresAt?: number | undefined;
12
+ residency?: string | undefined;
13
+ }
14
+ export declare function defaultCodexSessionId(): string;
15
+ export interface CodexDeviceAuthStart {
16
+ deviceAuthId: string;
17
+ userCode: string;
18
+ verificationUrl: string;
19
+ expiresInSeconds: number;
20
+ pollIntervalSeconds: number;
21
+ }
22
+ export declare function isCodexOAuthToken(value: string): boolean;
23
+ export declare function encodeCodexKey(credential: CodexCredential): string;
24
+ export declare function decodeCodexKey(value: string): CodexCredential | undefined;
25
+ export declare function codexRequestHeaders(accountId: string, extra?: Record<string, string>, residency?: string): Record<string, string>;
26
+ export declare function extractAccountIdFromClaims(claims: Record<string, unknown> | undefined): string | undefined;
27
+ export declare function accountIdFromIdToken(idToken: string | undefined): string | undefined;
28
+ export declare function extractResidency(token: string): string | undefined;
29
+ export declare function expiresAtFromAccessToken(accessToken: string): number | undefined;
30
+ export declare function codexKeyFromAccessToken(accessToken: string): string | undefined;
31
+ export declare function startCodexDeviceAuth(): Promise<CodexDeviceAuthStart>;
32
+ export declare function pollCodexDeviceAuth(start: CodexDeviceAuthStart, options?: {
33
+ signal?: AbortSignal | undefined;
34
+ onPending?: ((remainingSeconds: number) => void) | undefined;
35
+ }): Promise<CodexCredential>;
36
+ export declare function refreshCodexToken(refreshToken: string, fallback?: CodexCredential | undefined): Promise<CodexCredential>;
37
+ export declare function verifyCodexCredential(credential: CodexCredential): Promise<boolean>;
38
+ export declare function candidateCodexCredentialPaths(): string[];
39
+ export declare function readCodexStoredAuth(): Promise<CodexCredential | undefined>;
40
+ export declare function maybeRefreshCodexCredential(currentKey: string): Promise<string | undefined>;
41
+ export declare function importExistingCodexKey(): Promise<string | undefined>;
42
+ export declare const CODEX_OAUTH_PORT = 1455;
43
+ export declare const CODEX_OAUTH_FALLBACK_PORT = 1457;
44
+ export declare function buildCodexAuthorizeUrl(redirectUri: string, pkce: {
45
+ challenge: string;
46
+ }, state: string): string;
47
+ export declare function exchangeCodexAuthCode(code: string, redirectUri: string, codeVerifier: string): Promise<CodexCredential>;
48
+ export interface CodexBrowserAuthHandle {
49
+ readonly url: string;
50
+ waitForCredential(): Promise<CodexCredential>;
51
+ close(): void;
52
+ }
53
+ export declare function startCodexBrowserAuth(): Promise<CodexBrowserAuthHandle>;
@@ -0,0 +1,512 @@
1
+ import { homedir, platform } from "node:os";
2
+ import { join } from "node:path";
3
+ import { readFile } from "node:fs/promises";
4
+ import { currentSessionAffinity } from "./session-affinity.js";
5
+ import { CHATGPT_SUBSCRIPTION_DISPLAY_NAME } from "./provider-identity.js";
6
+ export const CODEX_API_BASE_URL = "https://chatgpt.com/backend-api/codex";
7
+ export const CODEX_AUTH_BASE_URL = "https://auth.openai.com";
8
+ export const CODEX_CLIENT_ID = "app_EMoamEEZ73f0CkXaXp7hrann";
9
+ export const CODEX_ORIGINATOR = "codex_cli_rs";
10
+ export const CODEX_CLIENT_VERSION = "0.0.0";
11
+ export const CODEX_SCOPE = "openid profile email offline_access";
12
+ const CODEX_KEY_PREFIX = "codex:";
13
+ let generatedCodexSessionId;
14
+ export function defaultCodexSessionId() {
15
+ generatedCodexSessionId ??= crypto.randomUUID();
16
+ return generatedCodexSessionId;
17
+ }
18
+ export function isCodexOAuthToken(value) {
19
+ return value.startsWith(CODEX_KEY_PREFIX);
20
+ }
21
+ export function encodeCodexKey(credential) {
22
+ const payload = {
23
+ a: credential.accessToken,
24
+ r: credential.refreshToken ?? "",
25
+ i: credential.accountId,
26
+ e: credential.expiresAt ?? 0,
27
+ y: credential.residency ?? "",
28
+ };
29
+ return CODEX_KEY_PREFIX + Buffer.from(JSON.stringify(payload)).toString("base64url");
30
+ }
31
+ export function decodeCodexKey(value) {
32
+ if (!isCodexOAuthToken(value))
33
+ return undefined;
34
+ try {
35
+ const parsed = JSON.parse(Buffer.from(value.slice(CODEX_KEY_PREFIX.length), "base64url").toString("utf8"));
36
+ if (typeof parsed.a !== "string" || !parsed.a)
37
+ return undefined;
38
+ if (typeof parsed.i !== "string" || !parsed.i)
39
+ return undefined;
40
+ const residency = typeof parsed.y === "string" && parsed.y
41
+ ? parsed.y
42
+ : extractResidency(parsed.a);
43
+ return {
44
+ accessToken: parsed.a,
45
+ accountId: parsed.i,
46
+ ...(typeof parsed.r === "string" && parsed.r ? { refreshToken: parsed.r } : {}),
47
+ ...(typeof parsed.e === "number" && parsed.e > 0 ? { expiresAt: parsed.e } : {}),
48
+ ...(residency ? { residency } : {}),
49
+ };
50
+ }
51
+ catch {
52
+ return undefined;
53
+ }
54
+ }
55
+ export function codexRequestHeaders(accountId, extra = {}, residency) {
56
+ const session = currentSessionAffinity();
57
+ return {
58
+ "chatgpt-account-id": accountId,
59
+ originator: CODEX_ORIGINATOR,
60
+ "openai-beta": "responses=experimental",
61
+ "User-Agent": `${CODEX_ORIGINATOR}/${CODEX_CLIENT_VERSION}`,
62
+ "session-id": session ?? defaultCodexSessionId(),
63
+ "x-client-request-id": crypto.randomUUID(),
64
+ ...(residency ? { "x-openai-internal-codex-residency": residency } : {}),
65
+ ...extra,
66
+ };
67
+ }
68
+ function asRecord(value) {
69
+ return value && typeof value === "object" && !Array.isArray(value)
70
+ ? value
71
+ : undefined;
72
+ }
73
+ function jwtClaims(token) {
74
+ const part = token.split(".")[1];
75
+ if (!part)
76
+ return undefined;
77
+ try {
78
+ return asRecord(JSON.parse(Buffer.from(part, "base64url").toString("utf8")));
79
+ }
80
+ catch {
81
+ return undefined;
82
+ }
83
+ }
84
+ export function extractAccountIdFromClaims(claims) {
85
+ if (!claims)
86
+ return undefined;
87
+ if (typeof claims.chatgpt_account_id === "string" && claims.chatgpt_account_id) {
88
+ return claims.chatgpt_account_id;
89
+ }
90
+ const auth = asRecord(claims["https://api.openai.com/auth"]);
91
+ if (typeof auth?.chatgpt_account_id === "string" && auth.chatgpt_account_id) {
92
+ return auth.chatgpt_account_id;
93
+ }
94
+ const orgs = claims.organizations;
95
+ if (Array.isArray(orgs) && orgs.length > 0) {
96
+ const first = asRecord(orgs[0]);
97
+ if (typeof first?.id === "string" && first.id)
98
+ return first.id;
99
+ }
100
+ return undefined;
101
+ }
102
+ export function accountIdFromIdToken(idToken) {
103
+ if (!idToken)
104
+ return undefined;
105
+ return extractAccountIdFromClaims(jwtClaims(idToken));
106
+ }
107
+ export function extractResidency(token) {
108
+ const claims = jwtClaims(token);
109
+ if (!claims)
110
+ return undefined;
111
+ const auth = asRecord(claims["https://api.openai.com/auth"]);
112
+ const residency = (typeof auth?.chatgpt_compute_residency === "string" ? auth.chatgpt_compute_residency : undefined) ??
113
+ (typeof claims.chatgpt_compute_residency === "string" ? claims.chatgpt_compute_residency : undefined);
114
+ if (!residency || residency === "no_constraint")
115
+ return undefined;
116
+ return residency;
117
+ }
118
+ export function expiresAtFromAccessToken(accessToken) {
119
+ const exp = jwtClaims(accessToken)?.exp;
120
+ return typeof exp === "number" && exp > 0 ? exp * 1000 : undefined;
121
+ }
122
+ export function codexKeyFromAccessToken(accessToken) {
123
+ const token = accessToken.trim();
124
+ if (!token || token.includes("\n"))
125
+ return undefined;
126
+ const accountId = accountIdFromIdToken(token);
127
+ if (!accountId)
128
+ return undefined;
129
+ return encodeCodexKey({
130
+ accessToken: token,
131
+ accountId,
132
+ expiresAt: expiresAtFromAccessToken(token),
133
+ residency: extractResidency(token),
134
+ });
135
+ }
136
+ async function postToken(body, contentType) {
137
+ const response = await fetch(`${CODEX_AUTH_BASE_URL}/oauth/token`, {
138
+ method: "POST",
139
+ headers: { "Content-Type": contentType },
140
+ body: contentType === "application/json"
141
+ ? JSON.stringify(body)
142
+ : new URLSearchParams(body).toString(),
143
+ signal: AbortSignal.timeout(30_000),
144
+ });
145
+ const json = asRecord(await response.json().catch(() => ({}))) ?? {};
146
+ return { ok: response.ok, status: response.status, json };
147
+ }
148
+ function tokenError(json, status) {
149
+ const description = typeof json.error_description === "string"
150
+ ? json.error_description
151
+ : typeof json.error === "string"
152
+ ? json.error
153
+ : "";
154
+ return `${status}${description ? `: ${description}` : ""}`;
155
+ }
156
+ function credentialFromTokens(json, fallback) {
157
+ const accessToken = typeof json.access_token === "string" ? json.access_token : "";
158
+ if (!accessToken)
159
+ throw new Error(`${CHATGPT_SUBSCRIPTION_DISPLAY_NAME} token response missing access_token`);
160
+ const refreshToken = typeof json.refresh_token === "string" && json.refresh_token
161
+ ? json.refresh_token
162
+ : fallback?.refreshToken;
163
+ const idToken = typeof json.id_token === "string" ? json.id_token : undefined;
164
+ const accountId = accountIdFromIdToken(idToken) ??
165
+ extractAccountIdFromClaims(jwtClaims(accessToken)) ??
166
+ fallback?.accountId;
167
+ if (!accountId)
168
+ throw new Error(`${CHATGPT_SUBSCRIPTION_DISPLAY_NAME} token response missing ChatGPT account id`);
169
+ const expiresAt = expiresAtFromAccessToken(accessToken) ?? fallback?.expiresAt;
170
+ const residency = extractResidency(accessToken) ?? (idToken ? extractResidency(idToken) : undefined) ?? fallback?.residency;
171
+ return {
172
+ accessToken,
173
+ accountId,
174
+ ...(refreshToken ? { refreshToken } : {}),
175
+ ...(expiresAt !== undefined ? { expiresAt } : {}),
176
+ ...(residency ? { residency } : {}),
177
+ };
178
+ }
179
+ export async function startCodexDeviceAuth() {
180
+ const response = await fetch(`${CODEX_AUTH_BASE_URL}/api/accounts/deviceauth/usercode`, {
181
+ method: "POST",
182
+ headers: { "Content-Type": "application/json" },
183
+ body: JSON.stringify({ client_id: CODEX_CLIENT_ID }),
184
+ signal: AbortSignal.timeout(30_000),
185
+ });
186
+ const json = asRecord(await response.json().catch(() => ({})));
187
+ const deviceAuthId = typeof json?.device_auth_id === "string" ? json.device_auth_id : "";
188
+ const userCode = typeof json?.user_code === "string" ? json.user_code : "";
189
+ if (!response.ok || !deviceAuthId || !userCode) {
190
+ throw new Error(`Invalid ${CHATGPT_SUBSCRIPTION_DISPLAY_NAME} device authorization response`);
191
+ }
192
+ const intervalRaw = json?.interval;
193
+ const interval = typeof intervalRaw === "number"
194
+ ? intervalRaw
195
+ : typeof intervalRaw === "string"
196
+ ? Number.parseInt(intervalRaw, 10)
197
+ : 5;
198
+ return {
199
+ deviceAuthId,
200
+ userCode,
201
+ verificationUrl: `${CODEX_AUTH_BASE_URL}/codex/device`,
202
+ expiresInSeconds: 900,
203
+ pollIntervalSeconds: Number.isFinite(interval) && interval > 0 ? interval : 5,
204
+ };
205
+ }
206
+ function sleep(ms) {
207
+ return new Promise((resolve) => setTimeout(resolve, ms));
208
+ }
209
+ async function exchangeDeviceCode(authorizationCode, codeVerifier) {
210
+ const body = {
211
+ grant_type: "authorization_code",
212
+ client_id: CODEX_CLIENT_ID,
213
+ code: authorizationCode,
214
+ redirect_uri: `${CODEX_AUTH_BASE_URL}/deviceauth/callback`,
215
+ code_verifier: codeVerifier,
216
+ };
217
+ let result = await postToken(body, "application/json");
218
+ if (!result.ok && result.status === 400) {
219
+ result = await postToken(body, "application/x-www-form-urlencoded");
220
+ }
221
+ if (!result.ok) {
222
+ throw new Error(`${CHATGPT_SUBSCRIPTION_DISPLAY_NAME} token exchange failed (${tokenError(result.json, result.status)})`);
223
+ }
224
+ return credentialFromTokens(result.json, undefined);
225
+ }
226
+ export async function pollCodexDeviceAuth(start, options = {}) {
227
+ const deadline = Date.now() + start.expiresInSeconds * 1000;
228
+ const interval = Math.max(1, start.pollIntervalSeconds) * 1000;
229
+ for (;;) {
230
+ if (options.signal?.aborted) {
231
+ throw new Error("Codex authentication cancelled");
232
+ }
233
+ const remaining = Math.max(0, Math.ceil((deadline - Date.now()) / 1000));
234
+ if (remaining <= 0) {
235
+ throw new Error("Codex authentication code expired — start again");
236
+ }
237
+ options.onPending?.(remaining);
238
+ const response = await fetch(`${CODEX_AUTH_BASE_URL}/api/accounts/deviceauth/token`, {
239
+ method: "POST",
240
+ headers: { "Content-Type": "application/json" },
241
+ body: JSON.stringify({
242
+ device_auth_id: start.deviceAuthId,
243
+ user_code: start.userCode,
244
+ }),
245
+ signal: AbortSignal.timeout(30_000),
246
+ });
247
+ if (response.ok) {
248
+ const json = asRecord(await response.json().catch(() => ({})));
249
+ const code = typeof json?.authorization_code === "string" ? json.authorization_code : "";
250
+ const verifier = typeof json?.code_verifier === "string" ? json.code_verifier : "";
251
+ if (!code || !verifier) {
252
+ throw new Error(`${CHATGPT_SUBSCRIPTION_DISPLAY_NAME} device authorization returned no code`);
253
+ }
254
+ return exchangeDeviceCode(code, verifier);
255
+ }
256
+ if (response.status === 403 || response.status === 404) {
257
+ await sleep(interval);
258
+ continue;
259
+ }
260
+ throw new Error(`${CHATGPT_SUBSCRIPTION_DISPLAY_NAME} device authorization failed (HTTP ${response.status})`);
261
+ }
262
+ }
263
+ export async function refreshCodexToken(refreshToken, fallback) {
264
+ const result = await postToken({
265
+ grant_type: "refresh_token",
266
+ client_id: CODEX_CLIENT_ID,
267
+ refresh_token: refreshToken,
268
+ }, "application/json");
269
+ if (!result.ok) {
270
+ throw new Error(`${CHATGPT_SUBSCRIPTION_DISPLAY_NAME} token refresh failed (${tokenError(result.json, result.status)})`);
271
+ }
272
+ return credentialFromTokens(result.json, fallback);
273
+ }
274
+ export async function verifyCodexCredential(credential) {
275
+ try {
276
+ const response = await fetch(`${CODEX_API_BASE_URL}/models?client_version=${CODEX_CLIENT_VERSION}`, {
277
+ headers: {
278
+ authorization: `Bearer ${credential.accessToken}`,
279
+ ...codexRequestHeaders(credential.accountId),
280
+ },
281
+ signal: AbortSignal.timeout(15_000),
282
+ });
283
+ return response.ok;
284
+ }
285
+ catch {
286
+ return false;
287
+ }
288
+ }
289
+ export function candidateCodexCredentialPaths() {
290
+ const home = homedir();
291
+ const os = platform();
292
+ const paths = [];
293
+ if (os === "win32") {
294
+ const profile = process.env.USERPROFILE ?? home;
295
+ paths.push(join(profile, ".codex", "auth.json"));
296
+ }
297
+ else {
298
+ paths.push(join(home, ".codex", "auth.json"));
299
+ if (os === "darwin") {
300
+ paths.push(join(home, "Library", "Application Support", "Codex", "auth.json"));
301
+ }
302
+ else if (os === "linux") {
303
+ paths.push(join(home, ".config", "codex", "auth.json"));
304
+ }
305
+ }
306
+ return paths;
307
+ }
308
+ export async function readCodexStoredAuth() {
309
+ for (const path of candidateCodexCredentialPaths()) {
310
+ let parsed;
311
+ try {
312
+ parsed = JSON.parse(await readFile(path, "utf8"));
313
+ }
314
+ catch {
315
+ continue;
316
+ }
317
+ const tokens = asRecord(asRecord(parsed)?.tokens);
318
+ if (!tokens)
319
+ continue;
320
+ const accessToken = typeof tokens.access_token === "string" ? tokens.access_token : "";
321
+ if (!accessToken)
322
+ continue;
323
+ const accountId = typeof tokens.account_id === "string" && tokens.account_id
324
+ ? tokens.account_id
325
+ : accountIdFromIdToken(typeof tokens.id_token === "string" ? tokens.id_token : undefined);
326
+ if (!accountId)
327
+ continue;
328
+ const refreshToken = typeof tokens.refresh_token === "string" ? tokens.refresh_token : undefined;
329
+ const expiresAt = expiresAtFromAccessToken(accessToken);
330
+ return {
331
+ accessToken,
332
+ accountId,
333
+ ...(refreshToken ? { refreshToken } : {}),
334
+ ...(expiresAt !== undefined ? { expiresAt } : {}),
335
+ };
336
+ }
337
+ return undefined;
338
+ }
339
+ export async function maybeRefreshCodexCredential(currentKey) {
340
+ const credential = decodeCodexKey(currentKey);
341
+ if (!credential?.refreshToken)
342
+ return undefined;
343
+ try {
344
+ const refreshed = await refreshCodexToken(credential.refreshToken, credential);
345
+ return encodeCodexKey(refreshed);
346
+ }
347
+ catch {
348
+ return undefined;
349
+ }
350
+ }
351
+ export async function importExistingCodexKey() {
352
+ const stored = await readCodexStoredAuth();
353
+ if (!stored)
354
+ return undefined;
355
+ let credential = stored;
356
+ if (credential.expiresAt !== undefined && credential.expiresAt < Date.now() && credential.refreshToken) {
357
+ try {
358
+ credential = await refreshCodexToken(credential.refreshToken, credential);
359
+ }
360
+ catch {
361
+ }
362
+ }
363
+ if (await verifyCodexCredential(credential))
364
+ return encodeCodexKey(credential);
365
+ return undefined;
366
+ }
367
+ export const CODEX_OAUTH_PORT = 1455;
368
+ export const CODEX_OAUTH_FALLBACK_PORT = 1457;
369
+ export function buildCodexAuthorizeUrl(redirectUri, pkce, state) {
370
+ const params = new URLSearchParams({
371
+ response_type: "code",
372
+ client_id: CODEX_CLIENT_ID,
373
+ redirect_uri: redirectUri,
374
+ scope: CODEX_SCOPE,
375
+ code_challenge: pkce.challenge,
376
+ code_challenge_method: "S256",
377
+ id_token_add_organizations: "true",
378
+ codex_cli_simplified_flow: "true",
379
+ state,
380
+ originator: CODEX_ORIGINATOR,
381
+ });
382
+ return `${CODEX_AUTH_BASE_URL}/oauth/authorize?${params.toString()}`;
383
+ }
384
+ export async function exchangeCodexAuthCode(code, redirectUri, codeVerifier) {
385
+ const response = await fetch(`${CODEX_AUTH_BASE_URL}/oauth/token`, {
386
+ method: "POST",
387
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
388
+ body: new URLSearchParams({
389
+ grant_type: "authorization_code",
390
+ code,
391
+ redirect_uri: redirectUri,
392
+ client_id: CODEX_CLIENT_ID,
393
+ code_verifier: codeVerifier,
394
+ }).toString(),
395
+ signal: AbortSignal.timeout(30_000),
396
+ });
397
+ const json = asRecord(await response.json().catch(() => ({}))) ?? {};
398
+ if (!response.ok) {
399
+ throw new Error(`${CHATGPT_SUBSCRIPTION_DISPLAY_NAME} token exchange failed (${tokenError(json, response.status)})`);
400
+ }
401
+ return credentialFromTokens(json, undefined);
402
+ }
403
+ export async function startCodexBrowserAuth() {
404
+ const { createPkcePair, randomState } = await import("../mcp/auth/pkce.js");
405
+ const { createServer } = await import("node:http");
406
+ const pkce = createPkcePair();
407
+ const state = randomState();
408
+ let settlePromise = {
409
+ resolve: () => undefined,
410
+ reject: () => undefined,
411
+ };
412
+ const promise = new Promise((resolve, reject) => {
413
+ settlePromise = { resolve, reject };
414
+ });
415
+ let settled = false;
416
+ const succeed = (cred) => {
417
+ if (settled)
418
+ return;
419
+ settled = true;
420
+ settlePromise.resolve(cred);
421
+ };
422
+ const fail = (err) => {
423
+ if (settled)
424
+ return;
425
+ settled = true;
426
+ settlePromise.reject(err);
427
+ };
428
+ let exchange = () => Promise.reject(new Error("Codex callback server not ready"));
429
+ const server = createServer((req, res) => {
430
+ const parsed = new URL(req.url || "/", "http://localhost");
431
+ if (parsed.pathname === "/auth/callback") {
432
+ const error = parsed.searchParams.get("error");
433
+ const errorDescription = parsed.searchParams.get("error_description");
434
+ if (error) {
435
+ const msg = errorDescription || error;
436
+ fail(new Error(msg));
437
+ res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
438
+ res.end(`<!doctype html><html><body style="font-family:sans-serif;text-align:center;padding:40px;background:#111;color:#eee"><h1 style="color:#ff453a">Authorization Failed</h1><p>${msg}</p></body></html>`);
439
+ return;
440
+ }
441
+ const code = parsed.searchParams.get("code");
442
+ const returnedState = parsed.searchParams.get("state");
443
+ if (!code || returnedState !== state) {
444
+ fail(new Error("Invalid authorization callback state or missing code"));
445
+ res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
446
+ res.end(`<!doctype html><html><body style="font-family:sans-serif;text-align:center;padding:40px;background:#111;color:#eee"><h1 style="color:#ff453a">Invalid State</h1><p>CSRF verification failed.</p></body></html>`);
447
+ return;
448
+ }
449
+ exchange(code)
450
+ .then((cred) => {
451
+ succeed(cred);
452
+ res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
453
+ res.end(`<!doctype html><html><body style="font-family:sans-serif;text-align:center;padding:40px;background:#111;color:#eee"><h1 style="color:#30d158">✓ Authorization Successful</h1><p>You can close this tab and return to CLAI.</p><script>setTimeout(()=>window.close(),2500)</script></body></html>`);
454
+ })
455
+ .catch((err) => {
456
+ fail(err instanceof Error ? err : new Error(String(err)));
457
+ res.writeHead(500, { "Content-Type": "text/html; charset=utf-8" });
458
+ res.end(`<!doctype html><html><body style="font-family:sans-serif;text-align:center;padding:40px;background:#111;color:#eee"><h1 style="color:#ff453a">Token Exchange Failed</h1><p>${err instanceof Error ? err.message : String(err)}</p></body></html>`);
459
+ });
460
+ return;
461
+ }
462
+ res.writeHead(404);
463
+ res.end();
464
+ });
465
+ const listen = (port) => new Promise((resolve, reject) => {
466
+ server.once("error", reject);
467
+ server.listen(port, () => {
468
+ server.removeListener("error", reject);
469
+ resolve();
470
+ });
471
+ });
472
+ let port = CODEX_OAUTH_PORT;
473
+ try {
474
+ await listen(CODEX_OAUTH_PORT);
475
+ }
476
+ catch {
477
+ port = CODEX_OAUTH_FALLBACK_PORT;
478
+ await listen(CODEX_OAUTH_FALLBACK_PORT);
479
+ }
480
+ const redirectUri = `http://localhost:${port}/auth/callback`;
481
+ const authUrl = buildCodexAuthorizeUrl(redirectUri, pkce, state);
482
+ exchange = (code) => exchangeCodexAuthCode(code, redirectUri, pkce.verifier);
483
+ const cleanup = () => {
484
+ try {
485
+ server.close();
486
+ }
487
+ catch { }
488
+ };
489
+ const timer = setTimeout(() => {
490
+ cleanup();
491
+ fail(new Error(`${CHATGPT_SUBSCRIPTION_DISPLAY_NAME} authorization timed out after 5 minutes`));
492
+ }, 5 * 60 * 1000);
493
+ if (typeof timer.unref === "function")
494
+ timer.unref();
495
+ return {
496
+ url: authUrl,
497
+ async waitForCredential() {
498
+ try {
499
+ return await promise;
500
+ }
501
+ finally {
502
+ clearTimeout(timer);
503
+ cleanup();
504
+ }
505
+ },
506
+ close() {
507
+ clearTimeout(timer);
508
+ cleanup();
509
+ },
510
+ };
511
+ }
512
+ //# sourceMappingURL=codex-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-auth.js","sourceRoot":"","sources":["../../src/llm/codex-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type LlmProvider } from "./provider.js";
2
+ export declare const codexFallbackModels: readonly string[];
3
+ export declare function resetCodexModelCache(): void;
4
+ export declare const codexProvider: LlmProvider;