@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,239 @@
1
+ import { CHATGPT_SUBSCRIPTION_DISPLAY_NAME, defaultModels, } from "./provider.js";
2
+ import { readJson, ingestModelCatalogEntries, ProviderError } from "./http.js";
3
+ import { CODEX_API_BASE_URL, CODEX_CLIENT_VERSION, accountIdFromIdToken, codexRequestHeaders, decodeCodexKey, extractResidency, expiresAtFromAccessToken, maybeRefreshCodexCredential, } from "./codex-auth.js";
4
+ import { currentRequestPurpose } from "./request-purpose.js";
5
+ import { getProviderKeys, setProviderKeys } from "../store/keys.js";
6
+ import { cacheAffinityKey, sessionCacheAffinityKey } from "./cache-affinity.js";
7
+ import { currentSessionAffinity } from "./session-affinity.js";
8
+ import { META_STREAM_TERMINAL } from "./stream-terminal.js";
9
+ import { mapResponsesEffort, responsesStream, } from "./responses-dialect.js";
10
+ export const codexFallbackModels = [
11
+ "gpt-5.6-sol",
12
+ "gpt-5.6-terra",
13
+ "gpt-5.6-luna",
14
+ "gpt-5.5",
15
+ "gpt-5.4",
16
+ "gpt-5.4-mini",
17
+ "gpt-5.3-codex-spark",
18
+ ];
19
+ const baseUrl = CODEX_API_BASE_URL;
20
+ let cachedModels = null;
21
+ let lastFetchTime = 0;
22
+ const CACHE_TTL_MS = 30 * 60 * 1000;
23
+ export function resetCodexModelCache() {
24
+ cachedModels = null;
25
+ lastFetchTime = 0;
26
+ }
27
+ function requireKey(auth) {
28
+ if (!auth.apiKey) {
29
+ throw new Error(`${CHATGPT_SUBSCRIPTION_DISPLAY_NAME} authentication required. Run \`clai auth chatgpt\` (browser sign-in) or add a key with \`clai set chatgpt <token>\`.`);
30
+ }
31
+ return auth.apiKey;
32
+ }
33
+ function credentialFor(auth) {
34
+ const key = requireKey(auth);
35
+ const decoded = decodeCodexKey(key);
36
+ if (decoded)
37
+ return decoded;
38
+ const accountId = accountIdFromIdToken(key);
39
+ if (!accountId) {
40
+ throw new Error(`${CHATGPT_SUBSCRIPTION_DISPLAY_NAME} credential is malformed. Run \`clai auth chatgpt\` to sign in again.`);
41
+ }
42
+ return {
43
+ accessToken: key,
44
+ accountId,
45
+ expiresAt: expiresAtFromAccessToken(key),
46
+ residency: extractResidency(key),
47
+ };
48
+ }
49
+ async function withCodexCredential(auth, run) {
50
+ const credential = credentialFor(auth);
51
+ try {
52
+ return await run(credential);
53
+ }
54
+ catch (error) {
55
+ const status = error instanceof ProviderError ? error.status : undefined;
56
+ const renewable = (status === 401 || status === 403) && currentRequestPurpose() === undefined;
57
+ if (!renewable)
58
+ throw error;
59
+ const fresh = await maybeRefreshCodexCredential(auth.apiKey ?? "");
60
+ if (!fresh || fresh === auth.apiKey) {
61
+ if (!credential.refreshToken) {
62
+ throw new ProviderError(`${CHATGPT_SUBSCRIPTION_DISPLAY_NAME} token expired and has no refresh token. Run \`clai auth chatgpt\` to sign in again.`, status ?? 401);
63
+ }
64
+ throw error;
65
+ }
66
+ await replaceCodexKey(auth.apiKey ?? "", fresh).catch(() => undefined);
67
+ const renewed = credentialFor({ ...auth, apiKey: fresh });
68
+ return run(renewed);
69
+ }
70
+ }
71
+ async function replaceCodexKey(oldKey, newKey) {
72
+ const multi = await getProviderKeys("codex");
73
+ if (multi.source === "env")
74
+ return;
75
+ if (multi.keys.some((slot) => slot.value === newKey))
76
+ return;
77
+ const values = multi.keys.map((slot) => slot.value === oldKey ? newKey : slot.value);
78
+ const disabled = multi.keys
79
+ .filter((slot) => slot.disabled === true)
80
+ .map((slot) => (slot.value === oldKey ? newKey : slot.value));
81
+ await setProviderKeys("codex", values, multi.activeIndex, disabled);
82
+ }
83
+ function settingsFor(credential) {
84
+ return codexRequestHeaders(credential.accountId, {}, credential.residency);
85
+ }
86
+ function codexCacheKey(context) {
87
+ const affinity = currentSessionAffinity();
88
+ const key = affinity
89
+ ? sessionCacheAffinityKey(affinity)
90
+ : cacheAffinityKey("codex", context.model, context.messages);
91
+ return `${context.purpose === "auxiliary" ? "aux-" : ""}${key}`;
92
+ }
93
+ function codexConfigFor(credential) {
94
+ return {
95
+ baseUrl,
96
+ providerId: "codex",
97
+ displayName: CHATGPT_SUBSCRIPTION_DISPLAY_NAME,
98
+ artifactDialect: "openai-compatible",
99
+ terminalPolicy: META_STREAM_TERMINAL,
100
+ omitSampling: true,
101
+ maxTokensField: "omit",
102
+ omitParallelToolCalls: true,
103
+ instructionsField: "instructions",
104
+ systemRole: "developer",
105
+ buildHeaders(auth, accept) {
106
+ const sessionId = currentSessionAffinity();
107
+ return {
108
+ "content-type": "application/json",
109
+ accept,
110
+ ...(auth.apiKey ? { authorization: `Bearer ${auth.apiKey}` } : {}),
111
+ ...codexRequestHeaders(credential.accountId, {}, credential.residency),
112
+ ...(sessionId ? { "session-id": sessionId } : {}),
113
+ };
114
+ },
115
+ reasoningPayload(reasoning) {
116
+ if (!reasoning?.enabled)
117
+ return undefined;
118
+ return { effort: mapResponsesEffort(reasoning.effort), summary: "auto" };
119
+ },
120
+ bodyExtras(context) {
121
+ return {
122
+ store: false,
123
+ include: ["reasoning.encrypted_content"],
124
+ prompt_cache_key: codexCacheKey(context),
125
+ };
126
+ },
127
+ };
128
+ }
129
+ function codexCatalogEntries(payload) {
130
+ const container = payload && typeof payload === "object" && !Array.isArray(payload)
131
+ ? payload
132
+ : undefined;
133
+ const list = Array.isArray(container?.models)
134
+ ? container.models
135
+ : Array.isArray(container?.data)
136
+ ? container.data
137
+ : Array.isArray(payload)
138
+ ? payload
139
+ : [];
140
+ return list.map((entry) => {
141
+ if (!entry || typeof entry !== "object" || Array.isArray(entry))
142
+ return entry;
143
+ const record = entry;
144
+ const slug = record.slug ?? record.id ?? record.name;
145
+ if (typeof slug !== "string" || !slug)
146
+ return entry;
147
+ const visibility = record.visibility;
148
+ return {
149
+ ...record,
150
+ id: slug,
151
+ ...(visibility === "list" || visibility === undefined
152
+ ? {}
153
+ : { visibility }),
154
+ };
155
+ });
156
+ }
157
+ export const codexProvider = {
158
+ id: "codex",
159
+ displayName: CHATGPT_SUBSCRIPTION_DISPLAY_NAME,
160
+ reasoningStyle: "openai",
161
+ defaultModel: defaultModels.codex,
162
+ envVar: "CODEX_API_KEY",
163
+ validateKey: (key) => decodeCodexKey(key) !== undefined || accountIdFromIdToken(key) !== undefined,
164
+ async listModels(auth) {
165
+ const now = Date.now();
166
+ if (cachedModels && now - lastFetchTime < CACHE_TTL_MS) {
167
+ return cachedModels;
168
+ }
169
+ const headers = {};
170
+ if (auth.apiKey) {
171
+ const credential = decodeCodexKey(auth.apiKey);
172
+ if (credential) {
173
+ Object.assign(headers, settingsFor(credential));
174
+ headers["authorization"] = `Bearer ${credential.accessToken}`;
175
+ }
176
+ }
177
+ const response = await fetch(`${baseUrl}/models?client_version=${CODEX_CLIENT_VERSION}`, { headers });
178
+ const payload = await readJson(response);
179
+ const models = ingestModelCatalogEntries("codex", codexCatalogEntries(payload));
180
+ const result = models.length > 0 ? models : [...codexFallbackModels];
181
+ if (result.length > 0) {
182
+ cachedModels = result;
183
+ lastFetchTime = now;
184
+ }
185
+ return result;
186
+ },
187
+ async ping(auth) {
188
+ const credential = credentialFor(auth);
189
+ const response = await fetch(`${baseUrl}/models?client_version=${CODEX_CLIENT_VERSION}`, {
190
+ headers: {
191
+ authorization: `Bearer ${credential.accessToken}`,
192
+ ...settingsFor(credential),
193
+ },
194
+ });
195
+ if (!response.ok) {
196
+ throw new ProviderError(`${CHATGPT_SUBSCRIPTION_DISPLAY_NAME} authentication failed (HTTP ${response.status}). Run \`clai auth chatgpt\` to sign in.`, response.status);
197
+ }
198
+ },
199
+ async complete(request, auth) {
200
+ const model = await resolveCodexModel(auth, request.model);
201
+ return withCodexCredential(auth, async (credential) => {
202
+ const config = codexConfigFor(credential);
203
+ const streamRequest = {
204
+ ...request,
205
+ provider: "codex",
206
+ model,
207
+ };
208
+ return responsesStream(config, streamRequest, { apiKey: credential.accessToken }, () => { }, model);
209
+ });
210
+ },
211
+ async stream(request, auth, onToken) {
212
+ const model = await resolveCodexModel(auth, request.model);
213
+ return withCodexCredential(auth, async (credential) => {
214
+ const config = codexConfigFor(credential);
215
+ const streamRequest = {
216
+ ...request,
217
+ provider: "codex",
218
+ model,
219
+ };
220
+ return responsesStream(config, streamRequest, { apiKey: credential.accessToken }, onToken, model);
221
+ });
222
+ },
223
+ };
224
+ async function resolveCodexModel(auth, requestedModel) {
225
+ if (requestedModel)
226
+ return requestedModel;
227
+ let available = [];
228
+ try {
229
+ available = await codexProvider.listModels(auth);
230
+ }
231
+ catch {
232
+ available = cachedModels ?? [...codexFallbackModels];
233
+ }
234
+ if (available.includes(defaultModels.codex)) {
235
+ return defaultModels.codex;
236
+ }
237
+ return available[0] ?? defaultModels.codex;
238
+ }
239
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/llm/codex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export declare const COPILOT_API_BASE_URL = "https://api.githubcopilot.com";
2
+ export declare const COPILOT_GITHUB_API_BASE_URL = "https://api.github.com";
3
+ export declare const COPILOT_DEVICE_CODE_URL = "https://github.com/login/device/code";
4
+ export declare const COPILOT_ACCESS_TOKEN_URL = "https://github.com/login/oauth/access_token";
5
+ export declare const COPILOT_CLIENT_ID = "Ov23li8tweQw6odWQebz";
6
+ export declare const COPILOT_SCOPE = "read:user";
7
+ export declare const COPILOT_VERSION = "0.35.0";
8
+ export declare const COPILOT_EDITOR_VERSION = "vscode/1.107.0";
9
+ export declare const COPILOT_REQUEST_HEADERS: Record<string, string>;
10
+ export interface CopilotDeviceAuthStart {
11
+ deviceCode: string;
12
+ userCode: string;
13
+ verificationUrl: string;
14
+ expiresInSeconds: number;
15
+ pollIntervalSeconds: number;
16
+ }
17
+ export interface CopilotApiToken {
18
+ token: string;
19
+ baseUrl: string;
20
+ expiresAt: number;
21
+ }
22
+ export declare function isCopilotOAuthToken(value: string): boolean;
23
+ export declare function startCopilotDeviceAuth(): Promise<CopilotDeviceAuthStart>;
24
+ export declare function pollCopilotDeviceAuth(start: CopilotDeviceAuthStart, options?: {
25
+ signal?: AbortSignal | undefined;
26
+ onPending?: ((remainingSeconds: number) => void) | undefined;
27
+ }): Promise<string>;
28
+ export declare function fetchCopilotApiToken(githubToken: string): Promise<CopilotApiToken>;
29
+ export declare function resolveCopilotApiToken(githubToken: string): Promise<CopilotApiToken>;
30
+ export declare function invalidateCopilotApiToken(githubToken: string): void;
31
+ export declare function copilotRequestHeaders(extra?: Record<string, string>): Record<string, string>;
32
+ export declare function copilotInitiator(messages: readonly {
33
+ role?: string | undefined;
34
+ }[]): "user" | "agent";
35
+ export declare function verifyCopilotToken(githubToken: string): Promise<boolean>;
36
+ export declare function candidateCopilotCredentialPaths(): string[];
37
+ export declare function parseCopilotCredentialFile(parsed: unknown): string | undefined;
38
+ export declare function importExistingCopilotKey(): Promise<string | undefined>;
@@ -0,0 +1,258 @@
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 { GITHUB_COPILOT_DISPLAY_NAME } from "./provider-identity.js";
6
+ export const COPILOT_API_BASE_URL = "https://api.githubcopilot.com";
7
+ export const COPILOT_GITHUB_API_BASE_URL = "https://api.github.com";
8
+ export const COPILOT_DEVICE_CODE_URL = "https://github.com/login/device/code";
9
+ export const COPILOT_ACCESS_TOKEN_URL = "https://github.com/login/oauth/access_token";
10
+ export const COPILOT_CLIENT_ID = "Ov23li8tweQw6odWQebz";
11
+ export const COPILOT_SCOPE = "read:user";
12
+ export const COPILOT_VERSION = "0.35.0";
13
+ export const COPILOT_EDITOR_VERSION = "vscode/1.107.0";
14
+ export const COPILOT_REQUEST_HEADERS = {
15
+ "Copilot-Integration-Id": "vscode-chat",
16
+ "Editor-Version": COPILOT_EDITOR_VERSION,
17
+ "Editor-Plugin-Version": `copilot-chat/${COPILOT_VERSION}`,
18
+ "User-Agent": `GitHubCopilotChat/${COPILOT_VERSION}`,
19
+ "OpenAI-Intent": "conversation-edits",
20
+ "OpenAI-Organization": "github-copilot",
21
+ "X-GitHub-Api-Version": "2025-10-01",
22
+ "X-VSCode-User-Agent-Library-Version": "electron-fetch",
23
+ };
24
+ export function isCopilotOAuthToken(value) {
25
+ return value.startsWith("ghu_") || value.startsWith("github_pat_") || value.startsWith("gho_");
26
+ }
27
+ function asRecord(value) {
28
+ return value && typeof value === "object" && !Array.isArray(value)
29
+ ? value
30
+ : undefined;
31
+ }
32
+ async function readJsonSafe(response) {
33
+ const body = await response.text().catch(() => "");
34
+ try {
35
+ return asRecord(JSON.parse(body)) ?? {};
36
+ }
37
+ catch {
38
+ const params = new URLSearchParams(body);
39
+ return Object.fromEntries(params.entries());
40
+ }
41
+ }
42
+ export async function startCopilotDeviceAuth() {
43
+ const response = await fetch(COPILOT_DEVICE_CODE_URL, {
44
+ method: "POST",
45
+ headers: {
46
+ "Content-Type": "application/x-www-form-urlencoded",
47
+ Accept: "application/json",
48
+ },
49
+ body: new URLSearchParams({
50
+ client_id: COPILOT_CLIENT_ID,
51
+ scope: COPILOT_SCOPE,
52
+ }),
53
+ signal: AbortSignal.timeout(30_000),
54
+ });
55
+ const json = await readJsonSafe(response);
56
+ const deviceCode = typeof json.device_code === "string" ? json.device_code : "";
57
+ const userCode = typeof json.user_code === "string" ? json.user_code : "";
58
+ const verificationUri = typeof json.verification_uri_complete === "string"
59
+ ? json.verification_uri_complete
60
+ : typeof json.verification_uri === "string"
61
+ ? json.verification_uri
62
+ : "";
63
+ if (!response.ok || !deviceCode || !userCode || !verificationUri) {
64
+ throw new Error("Invalid GitHub device authorization response");
65
+ }
66
+ const expiresIn = typeof json.expires_in === "number" ? json.expires_in : 900;
67
+ const interval = typeof json.interval === "number" ? json.interval : 5;
68
+ return {
69
+ deviceCode,
70
+ userCode,
71
+ verificationUrl: verificationUri,
72
+ expiresInSeconds: expiresIn,
73
+ pollIntervalSeconds: interval,
74
+ };
75
+ }
76
+ function sleep(ms) {
77
+ return new Promise((resolve) => setTimeout(resolve, ms));
78
+ }
79
+ export async function pollCopilotDeviceAuth(start, options = {}) {
80
+ const deadline = Date.now() + start.expiresInSeconds * 1000;
81
+ let interval = Math.max(1, start.pollIntervalSeconds) * 1000;
82
+ for (;;) {
83
+ if (options.signal?.aborted) {
84
+ throw new Error(`${GITHUB_COPILOT_DISPLAY_NAME} authentication cancelled`);
85
+ }
86
+ const remaining = Math.max(0, Math.ceil((deadline - Date.now()) / 1000));
87
+ if (remaining <= 0) {
88
+ throw new Error(`${GITHUB_COPILOT_DISPLAY_NAME} authentication code expired — start again`);
89
+ }
90
+ options.onPending?.(remaining);
91
+ const response = await fetch(COPILOT_ACCESS_TOKEN_URL, {
92
+ method: "POST",
93
+ headers: {
94
+ "Content-Type": "application/x-www-form-urlencoded",
95
+ Accept: "application/json",
96
+ },
97
+ body: new URLSearchParams({
98
+ client_id: COPILOT_CLIENT_ID,
99
+ device_code: start.deviceCode,
100
+ grant_type: "urn:ietf:params:oauth:grant-type:device_code",
101
+ }),
102
+ signal: AbortSignal.timeout(30_000),
103
+ });
104
+ const json = await readJsonSafe(response);
105
+ const accessToken = typeof json.access_token === "string" ? json.access_token : "";
106
+ if (response.ok && accessToken)
107
+ return accessToken;
108
+ const error = typeof json.error === "string" ? json.error : "";
109
+ if (error === "authorization_pending") {
110
+ await sleep(interval);
111
+ continue;
112
+ }
113
+ if (error === "slow_down") {
114
+ interval += 5_000;
115
+ await sleep(interval);
116
+ continue;
117
+ }
118
+ if (error === "expired_token" || error === "access_denied") {
119
+ throw new Error(error === "access_denied"
120
+ ? `${GITHUB_COPILOT_DISPLAY_NAME} authentication was denied`
121
+ : `${GITHUB_COPILOT_DISPLAY_NAME} authentication code expired — start again`);
122
+ }
123
+ const description = typeof json.error_description === "string" ? json.error_description : "";
124
+ throw new Error(`${GITHUB_COPILOT_DISPLAY_NAME} authentication failed (${response.status})${description ? `: ${description}` : ""}`);
125
+ }
126
+ }
127
+ export async function fetchCopilotApiToken(githubToken) {
128
+ const response = await fetch(`${COPILOT_GITHUB_API_BASE_URL}/copilot_internal/v2/token`, {
129
+ headers: {
130
+ authorization: `token ${githubToken}`,
131
+ accept: "application/json",
132
+ "User-Agent": COPILOT_REQUEST_HEADERS["User-Agent"],
133
+ "Editor-Version": COPILOT_REQUEST_HEADERS["Editor-Version"],
134
+ "Editor-Plugin-Version": COPILOT_REQUEST_HEADERS["Editor-Plugin-Version"],
135
+ },
136
+ signal: AbortSignal.timeout(30_000),
137
+ });
138
+ const json = asRecord(await response.json().catch(() => ({})));
139
+ const token = typeof json?.token === "string" ? json.token : "";
140
+ if (!response.ok || !token) {
141
+ const message = typeof json?.message === "string" ? json.message : `HTTP ${response.status}`;
142
+ throw new Error(`${GITHUB_COPILOT_DISPLAY_NAME} token exchange failed: ${message}`);
143
+ }
144
+ const endpoints = asRecord(json?.endpoints);
145
+ const baseUrl = typeof endpoints?.api === "string" && endpoints.api
146
+ ? endpoints.api
147
+ : COPILOT_API_BASE_URL;
148
+ const expiresAt = typeof json?.expires_at === "number" && json.expires_at > 0
149
+ ? json.expires_at * 1000
150
+ : Date.now() + 25 * 60 * 1000;
151
+ return { token, baseUrl, expiresAt };
152
+ }
153
+ const tokenCache = new Map();
154
+ const REFRESH_SKEW_MS = 60_000;
155
+ export async function resolveCopilotApiToken(githubToken) {
156
+ const cached = tokenCache.get(githubToken);
157
+ if (cached && cached.expiresAt - REFRESH_SKEW_MS > Date.now())
158
+ return cached;
159
+ try {
160
+ const fresh = await fetchCopilotApiToken(githubToken);
161
+ tokenCache.set(githubToken, fresh);
162
+ return fresh;
163
+ }
164
+ catch {
165
+ const direct = {
166
+ token: githubToken,
167
+ baseUrl: COPILOT_API_BASE_URL,
168
+ expiresAt: Date.now() + 30 * 86400 * 1000,
169
+ };
170
+ tokenCache.set(githubToken, direct);
171
+ return direct;
172
+ }
173
+ }
174
+ export function invalidateCopilotApiToken(githubToken) {
175
+ tokenCache.delete(githubToken);
176
+ }
177
+ export function copilotRequestHeaders(extra = {}) {
178
+ const session = currentSessionAffinity();
179
+ return {
180
+ ...COPILOT_REQUEST_HEADERS,
181
+ ...(session ? { "X-Interaction-Id": session } : {}),
182
+ "X-Request-Id": crypto.randomUUID(),
183
+ ...extra,
184
+ };
185
+ }
186
+ export function copilotInitiator(messages) {
187
+ return messages.some((message) => message.role === "assistant" || message.role === "tool")
188
+ ? "agent"
189
+ : "user";
190
+ }
191
+ export async function verifyCopilotToken(githubToken) {
192
+ try {
193
+ const api = await resolveCopilotApiToken(githubToken);
194
+ const response = await fetch(`${api.baseUrl}/models`, {
195
+ headers: {
196
+ authorization: `Bearer ${api.token}`,
197
+ accept: "application/json",
198
+ ...COPILOT_REQUEST_HEADERS,
199
+ },
200
+ signal: AbortSignal.timeout(15_000),
201
+ });
202
+ return response.ok;
203
+ }
204
+ catch {
205
+ return false;
206
+ }
207
+ }
208
+ export function candidateCopilotCredentialPaths() {
209
+ const home = homedir();
210
+ const os = platform();
211
+ const configHome = os === "win32"
212
+ ? process.env.APPDATA ?? join(home, "AppData", "Roaming")
213
+ : process.env.XDG_CONFIG_HOME ?? join(home, ".config");
214
+ const dir = join(configHome, "github-copilot");
215
+ return [join(dir, "apps.json"), join(dir, "hosts.json")];
216
+ }
217
+ export function parseCopilotCredentialFile(parsed) {
218
+ const records = asRecord(parsed);
219
+ if (!records)
220
+ return undefined;
221
+ let fallback;
222
+ for (const value of Object.values(records)) {
223
+ const entry = asRecord(value);
224
+ if (!entry)
225
+ continue;
226
+ for (const field of [
227
+ "oauth_token",
228
+ "oauthToken",
229
+ "token",
230
+ "access_token",
231
+ "accessToken",
232
+ ]) {
233
+ const candidate = entry[field];
234
+ if (typeof candidate !== "string" || !candidate)
235
+ continue;
236
+ if (isCopilotOAuthToken(candidate))
237
+ return candidate;
238
+ fallback ??= candidate;
239
+ }
240
+ }
241
+ return fallback;
242
+ }
243
+ export async function importExistingCopilotKey() {
244
+ for (const path of candidateCopilotCredentialPaths()) {
245
+ let parsed;
246
+ try {
247
+ parsed = JSON.parse(await readFile(path, "utf8"));
248
+ }
249
+ catch {
250
+ continue;
251
+ }
252
+ const token = parseCopilotCredentialFile(parsed);
253
+ if (token && (await verifyCopilotToken(token)))
254
+ return token;
255
+ }
256
+ return undefined;
257
+ }
258
+ //# sourceMappingURL=copilot-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-auth.js","sourceRoot":"","sources":["../../src/llm/copilot-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type LlmProvider } from "./provider.js";
2
+ export declare const copilotFallbackModels: readonly string[];
3
+ export declare function resetCopilotModelCache(): void;
4
+ export declare const copilotProvider: LlmProvider;