@yagr/agent 0.2.9 → 0.2.11

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 (157) hide show
  1. package/dist/cli.js +251 -9
  2. package/dist/cli.js.map +1 -1
  3. package/dist/config/n8n-config-service.d.ts +2 -1
  4. package/dist/config/n8n-config-service.d.ts.map +1 -1
  5. package/dist/config/n8n-config-service.js +2 -1
  6. package/dist/config/n8n-config-service.js.map +1 -1
  7. package/dist/config/yagr-config-service.d.ts +1 -1
  8. package/dist/config/yagr-config-service.d.ts.map +1 -1
  9. package/dist/config/yagr-home.d.ts +7 -0
  10. package/dist/config/yagr-home.d.ts.map +1 -1
  11. package/dist/config/yagr-home.js +19 -0
  12. package/dist/config/yagr-home.js.map +1 -1
  13. package/dist/gateway/format-message.d.ts +3 -0
  14. package/dist/gateway/format-message.d.ts.map +1 -1
  15. package/dist/gateway/format-message.js +63 -10
  16. package/dist/gateway/format-message.js.map +1 -1
  17. package/dist/gateway/interactive-ui.d.ts.map +1 -1
  18. package/dist/gateway/interactive-ui.js +49 -4
  19. package/dist/gateway/interactive-ui.js.map +1 -1
  20. package/dist/gateway/local-open-bridge.d.ts +3 -0
  21. package/dist/gateway/local-open-bridge.d.ts.map +1 -0
  22. package/dist/gateway/local-open-bridge.js +54 -0
  23. package/dist/gateway/local-open-bridge.js.map +1 -0
  24. package/dist/gateway/webui.d.ts.map +1 -1
  25. package/dist/gateway/webui.js +50 -53
  26. package/dist/gateway/webui.js.map +1 -1
  27. package/dist/gateway/workflow-links.d.ts +12 -0
  28. package/dist/gateway/workflow-links.d.ts.map +1 -0
  29. package/dist/gateway/workflow-links.js +53 -0
  30. package/dist/gateway/workflow-links.js.map +1 -0
  31. package/dist/llm/anthropic-account.d.ts +20 -0
  32. package/dist/llm/anthropic-account.d.ts.map +1 -0
  33. package/dist/llm/anthropic-account.js +111 -0
  34. package/dist/llm/anthropic-account.js.map +1 -0
  35. package/dist/llm/copilot-account.d.ts +36 -0
  36. package/dist/llm/copilot-account.d.ts.map +1 -0
  37. package/dist/llm/copilot-account.js +573 -0
  38. package/dist/llm/copilot-account.js.map +1 -0
  39. package/dist/llm/create-language-model.d.ts +2 -2
  40. package/dist/llm/create-language-model.d.ts.map +1 -1
  41. package/dist/llm/create-language-model.js +187 -38
  42. package/dist/llm/create-language-model.js.map +1 -1
  43. package/dist/llm/google-account.d.ts +31 -0
  44. package/dist/llm/google-account.d.ts.map +1 -0
  45. package/dist/llm/google-account.js +851 -0
  46. package/dist/llm/google-account.js.map +1 -0
  47. package/dist/llm/model-catalog-cache.d.ts +4 -0
  48. package/dist/llm/model-catalog-cache.d.ts.map +1 -0
  49. package/dist/llm/model-catalog-cache.js +46 -0
  50. package/dist/llm/model-catalog-cache.js.map +1 -0
  51. package/dist/llm/openai-account.d.ts +33 -0
  52. package/dist/llm/openai-account.d.ts.map +1 -0
  53. package/dist/llm/openai-account.js +578 -0
  54. package/dist/llm/openai-account.js.map +1 -0
  55. package/dist/llm/provider-discovery.d.ts +3 -0
  56. package/dist/llm/provider-discovery.d.ts.map +1 -0
  57. package/dist/llm/provider-discovery.js +40 -0
  58. package/dist/llm/provider-discovery.js.map +1 -0
  59. package/dist/llm/provider-registry.d.ts +37 -0
  60. package/dist/llm/provider-registry.d.ts.map +1 -0
  61. package/dist/llm/provider-registry.js +186 -0
  62. package/dist/llm/provider-registry.js.map +1 -0
  63. package/dist/llm/proxy-runtime.d.ts +37 -0
  64. package/dist/llm/proxy-runtime.d.ts.map +1 -0
  65. package/dist/llm/proxy-runtime.js +462 -0
  66. package/dist/llm/proxy-runtime.js.map +1 -0
  67. package/dist/llm/test-model-policy.d.ts +3 -0
  68. package/dist/llm/test-model-policy.d.ts.map +1 -0
  69. package/dist/llm/test-model-policy.js +16 -0
  70. package/dist/llm/test-model-policy.js.map +1 -0
  71. package/dist/n8n-local/bootstrap.d.ts +12 -0
  72. package/dist/n8n-local/bootstrap.d.ts.map +1 -0
  73. package/dist/n8n-local/bootstrap.js +281 -0
  74. package/dist/n8n-local/bootstrap.js.map +1 -0
  75. package/dist/n8n-local/browser-auth.d.ts +12 -0
  76. package/dist/n8n-local/browser-auth.d.ts.map +1 -0
  77. package/dist/n8n-local/browser-auth.js +159 -0
  78. package/dist/n8n-local/browser-auth.js.map +1 -0
  79. package/dist/n8n-local/detect.d.ts +50 -0
  80. package/dist/n8n-local/detect.d.ts.map +1 -0
  81. package/dist/n8n-local/detect.js +207 -0
  82. package/dist/n8n-local/detect.js.map +1 -0
  83. package/dist/n8n-local/direct-manager.d.ts +15 -0
  84. package/dist/n8n-local/direct-manager.d.ts.map +1 -0
  85. package/dist/n8n-local/direct-manager.js +232 -0
  86. package/dist/n8n-local/direct-manager.js.map +1 -0
  87. package/dist/n8n-local/docker-manager.d.ts +18 -0
  88. package/dist/n8n-local/docker-manager.d.ts.map +1 -0
  89. package/dist/n8n-local/docker-manager.js +217 -0
  90. package/dist/n8n-local/docker-manager.js.map +1 -0
  91. package/dist/n8n-local/managed-runtime.d.ts +17 -0
  92. package/dist/n8n-local/managed-runtime.d.ts.map +1 -0
  93. package/dist/n8n-local/managed-runtime.js +122 -0
  94. package/dist/n8n-local/managed-runtime.js.map +1 -0
  95. package/dist/n8n-local/owner-credentials.d.ts +15 -0
  96. package/dist/n8n-local/owner-credentials.d.ts.map +1 -0
  97. package/dist/n8n-local/owner-credentials.js +50 -0
  98. package/dist/n8n-local/owner-credentials.js.map +1 -0
  99. package/dist/n8n-local/plan.d.ts +16 -0
  100. package/dist/n8n-local/plan.d.ts.map +1 -0
  101. package/dist/n8n-local/plan.js +48 -0
  102. package/dist/n8n-local/plan.js.map +1 -0
  103. package/dist/n8n-local/state.d.ts +42 -0
  104. package/dist/n8n-local/state.d.ts.map +1 -0
  105. package/dist/n8n-local/state.js +108 -0
  106. package/dist/n8n-local/state.js.map +1 -0
  107. package/dist/n8n-local/workflow-open.d.ts +21 -0
  108. package/dist/n8n-local/workflow-open.d.ts.map +1 -0
  109. package/dist/n8n-local/workflow-open.js +50 -0
  110. package/dist/n8n-local/workflow-open.js.map +1 -0
  111. package/dist/runtime/context-compaction.d.ts.map +1 -1
  112. package/dist/runtime/context-compaction.js +7 -0
  113. package/dist/runtime/context-compaction.js.map +1 -1
  114. package/dist/runtime/run-engine.d.ts.map +1 -1
  115. package/dist/runtime/run-engine.js +52 -1
  116. package/dist/runtime/run-engine.js.map +1 -1
  117. package/dist/setup/setup-wizard.d.ts +36 -3
  118. package/dist/setup/setup-wizard.d.ts.map +1 -1
  119. package/dist/setup/setup-wizard.js +470 -62
  120. package/dist/setup/setup-wizard.js.map +1 -1
  121. package/dist/setup.d.ts +2 -1
  122. package/dist/setup.d.ts.map +1 -1
  123. package/dist/setup.js +204 -89
  124. package/dist/setup.js.map +1 -1
  125. package/dist/system/open-external.d.ts +2 -0
  126. package/dist/system/open-external.d.ts.map +1 -0
  127. package/dist/system/open-external.js +25 -0
  128. package/dist/system/open-external.js.map +1 -0
  129. package/dist/system/package-manager.d.ts +6 -0
  130. package/dist/system/package-manager.d.ts.map +1 -0
  131. package/dist/system/package-manager.js +13 -0
  132. package/dist/system/package-manager.js.map +1 -0
  133. package/dist/tools/build-tools.d.ts +110 -65
  134. package/dist/tools/build-tools.d.ts.map +1 -1
  135. package/dist/tools/deploy.d.ts +14 -14
  136. package/dist/tools/generate-workflow.d.ts +5 -5
  137. package/dist/tools/n8nac.d.ts +96 -53
  138. package/dist/tools/n8nac.d.ts.map +1 -1
  139. package/dist/tools/n8nac.js +52 -20
  140. package/dist/tools/n8nac.js.map +1 -1
  141. package/dist/tools/observer.d.ts +1 -0
  142. package/dist/tools/observer.d.ts.map +1 -1
  143. package/dist/tools/observer.js.map +1 -1
  144. package/dist/tools/present-workflow-result.d.ts +2 -0
  145. package/dist/tools/present-workflow-result.d.ts.map +1 -1
  146. package/dist/tools/present-workflow-result.js +11 -2
  147. package/dist/tools/present-workflow-result.js.map +1 -1
  148. package/dist/tools/request-required-action.d.ts +7 -7
  149. package/dist/tools/request-required-action.js +4 -4
  150. package/dist/tools/request-required-action.js.map +1 -1
  151. package/dist/tools/validate.d.ts +14 -14
  152. package/dist/tools/write-workspace-file.d.ts +5 -5
  153. package/dist/types.d.ts +1 -0
  154. package/dist/types.d.ts.map +1 -1
  155. package/dist/webui/app.js +14 -1
  156. package/dist/webui/app.js.map +2 -2
  157. package/package.json +15 -2
@@ -0,0 +1,578 @@
1
+ import fs from 'node:fs';
2
+ import http from 'node:http';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { createHash, randomBytes } from 'node:crypto';
6
+ export const OPENAI_ACCOUNT_BASE_URL = 'https://chatgpt.com/backend-api';
7
+ export const OPENAI_ACCOUNT_DEFAULT_MODEL = 'gpt-5.1-codex-mini';
8
+ /** Endpoint path for Codex responses on the ChatGPT backend. */
9
+ const CODEX_RESPONSES_PATH = '/codex/responses';
10
+ /** JWT claim namespace used by OpenAI to embed ChatGPT account metadata. */
11
+ const JWT_ACCOUNT_CLAIM = 'https://api.openai.com/auth';
12
+ /** Known models served by the ChatGPT Codex backend (chatgpt.com/backend-api). */
13
+ export const KNOWN_CODEX_MODELS = [
14
+ 'gpt-5.1',
15
+ 'gpt-5.1-codex-max',
16
+ 'gpt-5.1-codex-mini',
17
+ 'gpt-5.2',
18
+ 'gpt-5.2-codex',
19
+ 'gpt-5.3-codex',
20
+ 'gpt-5.3-codex-spark',
21
+ 'gpt-5.4',
22
+ ];
23
+ // ─── OAuth / PKCE constants ────────────────────────────────────────────────────
24
+ const CODEX_ISSUER = 'https://auth.openai.com';
25
+ const CODEX_CLIENT_ID = 'app_EMoamEEZ73f0CkXaXp7hrann';
26
+ const CODEX_CALLBACK_PORT = 1455;
27
+ const CODEX_CALLBACK_PATH = '/auth/callback';
28
+ const CODEX_REDIRECT_URI = `http://localhost:${CODEX_CALLBACK_PORT}${CODEX_CALLBACK_PATH}`;
29
+ const CODEX_SCOPES = 'openid profile email offline_access';
30
+ let pendingCodexCallbackServer;
31
+ // Survives stopCodexCallbackServer() so completeCodexAuth() can still await it.
32
+ let pendingCodexResult;
33
+ function generateCodexPkce() {
34
+ const verifier = randomBytes(32).toString('hex');
35
+ const challenge = createHash('sha256').update(verifier).digest('base64url');
36
+ return { verifier, challenge };
37
+ }
38
+ function stopCodexCallbackServer() {
39
+ if (pendingCodexCallbackServer) {
40
+ clearTimeout(pendingCodexCallbackServer.timeout);
41
+ pendingCodexCallbackServer.server.close();
42
+ pendingCodexCallbackServer = undefined;
43
+ // Note: pendingCodexResult is intentionally NOT cleared here.
44
+ }
45
+ }
46
+ async function startCodexCallbackServer(state, verifier) {
47
+ stopCodexCallbackServer();
48
+ let resolveCode;
49
+ let rejectCode;
50
+ const waitForCode = new Promise((resolve, reject) => {
51
+ resolveCode = resolve;
52
+ rejectCode = reject;
53
+ });
54
+ const server = http.createServer((req, res) => {
55
+ const url = new URL(req.url ?? '/', CODEX_REDIRECT_URI);
56
+ if (url.pathname !== CODEX_CALLBACK_PATH) {
57
+ res.writeHead(404, { 'Content-Type': 'text/plain' });
58
+ res.end('Not Found');
59
+ return;
60
+ }
61
+ const returnedState = url.searchParams.get('state');
62
+ const code = url.searchParams.get('code');
63
+ const error = url.searchParams.get('error');
64
+ if (error || returnedState !== state || !code) {
65
+ res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
66
+ res.end('<html><body><h3>Sign-in failed.</h3><p>Return to the terminal and try again.</p></body></html>');
67
+ rejectCode?.(new Error(error ?? 'OAuth callback: invalid state or missing code.'));
68
+ stopCodexCallbackServer();
69
+ return;
70
+ }
71
+ res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
72
+ res.end('<html><body><h3>OpenAI account connected.</h3><p>You can return to the Yagr setup wizard.</p></body></html>');
73
+ resolveCode?.({ code, verifier });
74
+ stopCodexCallbackServer();
75
+ });
76
+ const timeout = setTimeout(() => {
77
+ rejectCode?.(new Error('OpenAI OAuth callback timed out. Please retry.'));
78
+ stopCodexCallbackServer();
79
+ }, 3 * 60_000);
80
+ pendingCodexCallbackServer = { expectedState: state, server, waitForCode, timeout };
81
+ pendingCodexResult = waitForCode;
82
+ const started = await new Promise((resolve) => {
83
+ server.once('error', (err) => {
84
+ rejectCode?.(err instanceof Error ? err : new Error(String(err)));
85
+ stopCodexCallbackServer();
86
+ resolve(false);
87
+ });
88
+ server.listen(CODEX_CALLBACK_PORT, '127.0.0.1', () => resolve(true));
89
+ });
90
+ return started;
91
+ }
92
+ export async function beginCodexAuth() {
93
+ const state = randomBytes(16).toString('hex');
94
+ const { verifier, challenge } = generateCodexPkce();
95
+ const serverStarted = await startCodexCallbackServer(state, verifier);
96
+ const url = new URL(`${CODEX_ISSUER}/oauth/authorize`);
97
+ url.searchParams.set('response_type', 'code');
98
+ url.searchParams.set('client_id', CODEX_CLIENT_ID);
99
+ url.searchParams.set('redirect_uri', CODEX_REDIRECT_URI);
100
+ url.searchParams.set('scope', CODEX_SCOPES);
101
+ url.searchParams.set('code_challenge', challenge);
102
+ url.searchParams.set('code_challenge_method', 'S256');
103
+ url.searchParams.set('id_token_add_organizations', 'true');
104
+ url.searchParams.set('state', state);
105
+ return { authUrl: url.toString(), callbackServerStarted: serverStarted };
106
+ }
107
+ export async function completeCodexAuth() {
108
+ // The callback server may have already fired and cleared pendingCodexCallbackServer,
109
+ // but the promise is preserved in pendingCodexResult.
110
+ const resultPromise = pendingCodexCallbackServer?.waitForCode ?? pendingCodexResult;
111
+ if (!resultPromise) {
112
+ const existing = readCodexSession();
113
+ if (existing)
114
+ return existing;
115
+ throw new Error('No pending OpenAI OAuth session. Restart the sign-in flow.');
116
+ }
117
+ pendingCodexResult = undefined;
118
+ const { code, verifier } = await resultPromise;
119
+ // Exchange code for tokens.
120
+ const body = new URLSearchParams();
121
+ body.set('grant_type', 'authorization_code');
122
+ body.set('code', code);
123
+ body.set('redirect_uri', CODEX_REDIRECT_URI);
124
+ body.set('client_id', CODEX_CLIENT_ID);
125
+ body.set('code_verifier', verifier);
126
+ const tokenRes = await fetch(`${CODEX_ISSUER}/oauth/token`, {
127
+ method: 'POST',
128
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
129
+ body: body.toString(),
130
+ });
131
+ if (!tokenRes.ok) {
132
+ throw new Error(`OpenAI token exchange failed: HTTP ${tokenRes.status}`);
133
+ }
134
+ const tokens = await tokenRes.json();
135
+ if (!tokens.access_token) {
136
+ throw new Error('OpenAI token exchange returned no access_token.');
137
+ }
138
+ // Write ~/.codex/auth.json so the session is shared with the Codex CLI.
139
+ const authPath = getCodexAuthPath();
140
+ fs.mkdirSync(path.dirname(authPath), { recursive: true });
141
+ fs.writeFileSync(authPath, JSON.stringify({
142
+ auth_mode: 'chatgpt',
143
+ tokens,
144
+ last_refresh: new Date().toISOString(),
145
+ }, null, 2), { mode: 0o600 });
146
+ return {
147
+ accessToken: tokens.access_token,
148
+ refreshToken: tokens.refresh_token,
149
+ source: 'codex',
150
+ };
151
+ }
152
+ // ─── Path helpers ──────────────────────────────────────────────────────────────
153
+ /** Path to the Codex CLI auth file. Override with YAGR_CODEX_AUTH_PATH for tests. */
154
+ export function getCodexAuthPath() {
155
+ return process.env.YAGR_CODEX_AUTH_PATH || path.join(os.homedir(), '.codex', 'auth.json');
156
+ }
157
+ // ─── Session readers ───────────────────────────────────────────────────────────
158
+ function readCodexSession() {
159
+ const authPath = getCodexAuthPath();
160
+ if (!fs.existsSync(authPath)) {
161
+ return undefined;
162
+ }
163
+ try {
164
+ const parsed = JSON.parse(fs.readFileSync(authPath, 'utf8'));
165
+ const accessToken = parsed.tokens?.access_token?.trim();
166
+ if (!accessToken) {
167
+ return undefined;
168
+ }
169
+ return {
170
+ accessToken,
171
+ refreshToken: parsed.tokens?.refresh_token?.trim() || undefined,
172
+ source: 'codex',
173
+ };
174
+ }
175
+ catch {
176
+ return undefined;
177
+ }
178
+ }
179
+ // ─── Public session API ────────────────────────────────────────────────────────
180
+ export function getOpenAiAccountSession() {
181
+ return readCodexSession();
182
+ }
183
+ export async function ensureOpenAiAccountSession() {
184
+ return readCodexSession();
185
+ }
186
+ // ─── Model discovery ───────────────────────────────────────────────────────────
187
+ /** Returns the static list of models available on the ChatGPT Codex backend.
188
+ * The backend-api has no public `/models` endpoint, so the list is hardcoded
189
+ * from the known model registry. */
190
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
191
+ export async function fetchOpenAiAccountModels(_accessToken) {
192
+ return [...KNOWN_CODEX_MODELS];
193
+ }
194
+ // ─── Runtime validation ─────────────────────────────────────────────────────────
195
+ export async function validateOpenAiAccountRuntime(modelId = OPENAI_ACCOUNT_DEFAULT_MODEL) {
196
+ if (process.env.YAGR_SKIP_CODEX_RUNTIME_VALIDATION === '1') {
197
+ return { ok: true, text: 'OK' };
198
+ }
199
+ const session = await ensureOpenAiAccountSession();
200
+ if (!session) {
201
+ return { ok: false, error: 'No OpenAI account session found.' };
202
+ }
203
+ try {
204
+ const result = await runOpenAiAccountCompletion(modelId, {
205
+ inputFormat: 'prompt',
206
+ mode: { type: 'regular' },
207
+ prompt: [{ role: 'user', content: [{ type: 'text', text: 'Reply with exactly OK.' }] }],
208
+ });
209
+ return {
210
+ ok: result.text.trim().toUpperCase().includes('OK'),
211
+ text: result.text,
212
+ };
213
+ }
214
+ catch (error) {
215
+ const message = error instanceof Error ? error.message : String(error);
216
+ if (message.includes('429') || message.includes('RESOURCE_EXHAUSTED')) {
217
+ return { ok: true, text: 'Quota exhausted for current model; runtime endpoint is reachable.' };
218
+ }
219
+ return { ok: false, error: message };
220
+ }
221
+ }
222
+ // ─── Language model ────────────────────────────────────────────────────────────
223
+ export function createOpenAiAccountLanguageModel(modelId) {
224
+ return {
225
+ specificationVersion: 'v1',
226
+ provider: 'openai-proxy.account',
227
+ modelId,
228
+ defaultObjectGenerationMode: undefined,
229
+ supportsImageUrls: false,
230
+ supportsStructuredOutputs: false,
231
+ async doGenerate(options) {
232
+ const execution = await runOpenAiAccountCompletion(modelId, options);
233
+ return {
234
+ text: execution.text,
235
+ finishReason: execution.finishReason,
236
+ usage: execution.usage,
237
+ ...(execution.toolCalls ? { toolCalls: execution.toolCalls } : {}),
238
+ rawCall: {
239
+ rawPrompt: options.prompt,
240
+ rawSettings: { modelId },
241
+ },
242
+ warnings: execution.warnings,
243
+ response: {
244
+ timestamp: new Date(),
245
+ modelId,
246
+ },
247
+ };
248
+ },
249
+ async doStream(options) {
250
+ const execution = await runOpenAiAccountCompletion(modelId, options);
251
+ const stream = new ReadableStream({
252
+ start(controller) {
253
+ if (execution.text) {
254
+ controller.enqueue({ type: 'text-delta', textDelta: execution.text });
255
+ }
256
+ controller.enqueue({
257
+ type: 'finish',
258
+ finishReason: execution.finishReason,
259
+ usage: execution.usage,
260
+ });
261
+ controller.close();
262
+ },
263
+ });
264
+ return {
265
+ stream,
266
+ rawCall: {
267
+ rawPrompt: options.prompt,
268
+ rawSettings: { modelId },
269
+ },
270
+ warnings: execution.warnings,
271
+ };
272
+ },
273
+ };
274
+ }
275
+ // ─── Inference (Codex Responses API via chatgpt.com/backend-api) ──────────────
276
+ async function runOpenAiAccountCompletion(modelId, options) {
277
+ const session = await ensureOpenAiAccountSession();
278
+ if (!session) {
279
+ throw new Error('OpenAI account session not found. Run `codex --login` to sign in.');
280
+ }
281
+ const regularMode = options.mode.type === 'regular' ? options.mode : undefined;
282
+ const tools = getFunctionTools(options.mode);
283
+ const warnings = buildCodexWarnings(options, tools);
284
+ const accountId = extractChatGptAccountId(session.accessToken);
285
+ const { instructions, input } = convertPromptToCodexInput(options.prompt);
286
+ const body = {
287
+ model: modelId,
288
+ store: false,
289
+ stream: true,
290
+ // The Codex backend requires a non-empty instructions field.
291
+ instructions: instructions || 'You are a helpful assistant.',
292
+ input,
293
+ text: { verbosity: 'medium' },
294
+ ...(tools.length > 0 ? { tools: toCodexTools(tools), tool_choice: toCodexToolChoice(regularMode?.toolChoice) } : { tool_choice: 'auto' }),
295
+ parallel_tool_calls: true,
296
+ };
297
+ const response = await fetch(`${OPENAI_ACCOUNT_BASE_URL}${CODEX_RESPONSES_PATH}`, {
298
+ method: 'POST',
299
+ headers: {
300
+ 'Authorization': `Bearer ${session.accessToken}`,
301
+ 'chatgpt-account-id': accountId,
302
+ 'OpenAI-Beta': 'responses=experimental',
303
+ 'originator': 'pi',
304
+ 'User-Agent': `pi (${os.platform()} ${os.release()}; ${os.arch()})`,
305
+ 'accept': 'text/event-stream',
306
+ 'content-type': 'application/json',
307
+ },
308
+ body: JSON.stringify(body),
309
+ });
310
+ if (!response.ok) {
311
+ const errText = await response.text();
312
+ throw new Error(errText.trim() || `Codex completion failed: HTTP ${response.status}`);
313
+ }
314
+ if (!response.body) {
315
+ throw new Error('Codex completion returned empty response body.');
316
+ }
317
+ let text = '';
318
+ let inputTokens = 0;
319
+ let outputTokens = 0;
320
+ const toolCalls = new Map();
321
+ for await (const event of parseCodexSSE(response.body)) {
322
+ const type = typeof event.type === 'string' ? event.type : undefined;
323
+ if (!type)
324
+ continue;
325
+ if (type === 'response.output_text.delta') {
326
+ if (typeof event.delta === 'string') {
327
+ text += event.delta;
328
+ }
329
+ }
330
+ else if (type === 'response.output_item.added' || type === 'response.output_item.done') {
331
+ const item = readResponseOutputItem(event);
332
+ const toolCall = extractCodexToolCallFromItem(item, toolCalls.size);
333
+ if (toolCall) {
334
+ toolCalls.set(toolCall.toolCallId, toolCall);
335
+ }
336
+ }
337
+ else if (type === 'response.function_call_arguments.delta') {
338
+ const itemId = readOptionalString(event.item_id) || readOptionalString(event.call_id);
339
+ if (!itemId) {
340
+ continue;
341
+ }
342
+ const existing = toolCalls.get(itemId);
343
+ if (!existing || typeof event.delta !== 'string') {
344
+ continue;
345
+ }
346
+ toolCalls.set(itemId, {
347
+ ...existing,
348
+ args: `${existing.args}${event.delta}`,
349
+ });
350
+ }
351
+ else if (type === 'response.function_call_arguments.done') {
352
+ const itemId = readOptionalString(event.item_id) || readOptionalString(event.call_id);
353
+ if (!itemId) {
354
+ continue;
355
+ }
356
+ const existing = toolCalls.get(itemId);
357
+ if (!existing) {
358
+ continue;
359
+ }
360
+ const finalArgs = readOptionalString(event.arguments);
361
+ if (finalArgs) {
362
+ toolCalls.set(itemId, {
363
+ ...existing,
364
+ args: finalArgs,
365
+ });
366
+ }
367
+ }
368
+ else if (type === 'response.completed') {
369
+ const resp = event.response;
370
+ inputTokens = resp?.usage?.input_tokens ?? 0;
371
+ outputTokens = resp?.usage?.output_tokens ?? 0;
372
+ for (const item of Array.isArray(resp?.output) ? resp.output : []) {
373
+ const toolCall = extractCodexToolCallFromItem(item, toolCalls.size);
374
+ if (toolCall) {
375
+ toolCalls.set(toolCall.toolCallId, toolCall);
376
+ }
377
+ }
378
+ }
379
+ else if (type === 'response.failed') {
380
+ const resp = event.response;
381
+ throw new Error(resp?.error?.message || 'Codex response failed.');
382
+ }
383
+ else if (type === 'error') {
384
+ const msg = typeof event.message === 'string' ? event.message : '';
385
+ throw new Error(msg || 'Codex stream error.');
386
+ }
387
+ }
388
+ return {
389
+ text,
390
+ finishReason: toolCalls.size > 0 ? 'tool-calls' : 'stop',
391
+ usage: { promptTokens: inputTokens, completionTokens: outputTokens },
392
+ ...(toolCalls.size > 0 ? { toolCalls: [...toolCalls.values()] } : {}),
393
+ warnings,
394
+ };
395
+ }
396
+ // ─── Shared helpers ────────────────────────────────────────────────────────────
397
+ function extractChatGptAccountId(token) {
398
+ try {
399
+ const parts = token.split('.');
400
+ if (parts.length !== 3)
401
+ throw new Error('Invalid token');
402
+ const payload = JSON.parse(Buffer.from(parts[1], 'base64').toString('utf8'));
403
+ const claim = payload[JWT_ACCOUNT_CLAIM];
404
+ const accountId = claim?.chatgpt_account_id;
405
+ if (typeof accountId !== 'string' || !accountId) {
406
+ throw new Error('No chatgpt_account_id in token');
407
+ }
408
+ return accountId;
409
+ }
410
+ catch {
411
+ throw new Error('Failed to extract chatgpt_account_id from Codex token. Ensure the token was obtained via `codex --login`.');
412
+ }
413
+ }
414
+ function convertPromptToCodexInput(prompt) {
415
+ let instructions;
416
+ const input = [];
417
+ for (const message of prompt) {
418
+ if (message.role === 'system') {
419
+ instructions = message.content;
420
+ continue;
421
+ }
422
+ if (message.role === 'user') {
423
+ const text = message.content.map((p) => p.type === 'text' ? p.text : `[${p.type}]`).join('\n');
424
+ input.push({ role: 'user', content: [{ type: 'input_text', text }] });
425
+ }
426
+ else if (message.role === 'assistant') {
427
+ const text = message.content
428
+ .filter((p) => p.type === 'text' || p.type === 'reasoning')
429
+ .map((p) => p.text)
430
+ .join('\n')
431
+ .trim();
432
+ if (text) {
433
+ input.push({ role: 'assistant', content: [{ type: 'output_text', text }] });
434
+ }
435
+ for (const part of message.content) {
436
+ if (part.type !== 'tool-call') {
437
+ continue;
438
+ }
439
+ input.push({
440
+ type: 'function_call',
441
+ call_id: part.toolCallId,
442
+ name: part.toolName,
443
+ arguments: JSON.stringify(part.args ?? {}),
444
+ });
445
+ }
446
+ }
447
+ else {
448
+ for (const part of message.content) {
449
+ input.push({
450
+ type: 'function_call_output',
451
+ call_id: part.toolCallId,
452
+ output: stringifyToolResult(part.result),
453
+ });
454
+ }
455
+ }
456
+ }
457
+ return { instructions, input };
458
+ }
459
+ async function* parseCodexSSE(body) {
460
+ const reader = body.getReader();
461
+ const decoder = new TextDecoder();
462
+ let buffer = '';
463
+ while (true) {
464
+ const { done, value } = await reader.read();
465
+ if (done)
466
+ break;
467
+ buffer += decoder.decode(value, { stream: true });
468
+ let idx = buffer.indexOf('\n\n');
469
+ while (idx !== -1) {
470
+ const chunk = buffer.slice(0, idx);
471
+ buffer = buffer.slice(idx + 2);
472
+ const dataLines = chunk
473
+ .split('\n')
474
+ .filter((l) => l.startsWith('data:'))
475
+ .map((l) => l.slice(5).trim());
476
+ if (dataLines.length > 0) {
477
+ const data = dataLines.join('\n').trim();
478
+ if (data && data !== '[DONE]') {
479
+ try {
480
+ yield JSON.parse(data);
481
+ }
482
+ catch { /* skip malformed */ }
483
+ }
484
+ }
485
+ idx = buffer.indexOf('\n\n');
486
+ }
487
+ }
488
+ }
489
+ function buildCodexWarnings(options, functionTools) {
490
+ if (options.mode.type !== 'regular' || !options.mode.tools || options.mode.tools.length === 0) {
491
+ return [];
492
+ }
493
+ return options.mode.tools
494
+ .filter((tool) => tool.type !== 'function' || !functionTools.includes(tool))
495
+ .map((tool) => ({
496
+ type: 'unsupported-tool',
497
+ tool,
498
+ details: 'openai-proxy currently supports only function tools on the Codex backend.',
499
+ }));
500
+ }
501
+ function getFunctionTools(mode) {
502
+ if (mode.type !== 'regular' || !Array.isArray(mode.tools) || mode.tools.length === 0) {
503
+ return [];
504
+ }
505
+ return mode.tools.filter((tool) => tool.type === 'function');
506
+ }
507
+ function toCodexTools(tools) {
508
+ return tools.map((tool) => ({
509
+ type: 'function',
510
+ name: tool.name,
511
+ ...(tool.description ? { description: tool.description } : {}),
512
+ parameters: tool.parameters,
513
+ }));
514
+ }
515
+ function toCodexToolChoice(toolChoice) {
516
+ if (!toolChoice || toolChoice.type === 'auto') {
517
+ return 'auto';
518
+ }
519
+ if (toolChoice.type === 'none' || toolChoice.type === 'required') {
520
+ return toolChoice.type;
521
+ }
522
+ if (toolChoice.type === 'tool') {
523
+ return {
524
+ type: 'function',
525
+ name: toolChoice.toolName,
526
+ };
527
+ }
528
+ return 'auto';
529
+ }
530
+ function readResponseOutputItem(event) {
531
+ if (event.item && typeof event.item === 'object') {
532
+ return event.item;
533
+ }
534
+ if (event.output_item && typeof event.output_item === 'object') {
535
+ return event.output_item;
536
+ }
537
+ return undefined;
538
+ }
539
+ function extractCodexToolCallFromItem(item, index) {
540
+ if (!item || typeof item !== 'object') {
541
+ return undefined;
542
+ }
543
+ const record = item;
544
+ if (record.type !== 'function_call') {
545
+ return undefined;
546
+ }
547
+ const toolName = readOptionalString(record.name);
548
+ if (!toolName) {
549
+ return undefined;
550
+ }
551
+ const toolCallId = readOptionalString(record.call_id)
552
+ || readOptionalString(record.id)
553
+ || `openai-account-tool-call-${index + 1}`;
554
+ const args = typeof record.arguments === 'string'
555
+ ? record.arguments
556
+ : JSON.stringify(record.arguments ?? {});
557
+ return {
558
+ toolCallType: 'function',
559
+ toolCallId,
560
+ toolName,
561
+ args,
562
+ };
563
+ }
564
+ function stringifyToolResult(value) {
565
+ if (typeof value === 'string') {
566
+ return value;
567
+ }
568
+ try {
569
+ return JSON.stringify(value ?? null);
570
+ }
571
+ catch {
572
+ return String(value);
573
+ }
574
+ }
575
+ function readOptionalString(value) {
576
+ return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;
577
+ }
578
+ //# sourceMappingURL=openai-account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-account.js","sourceRoot":"","sources":["../../src/llm/openai-account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAYtD,MAAM,CAAC,MAAM,uBAAuB,GAAG,iCAAiC,CAAC;AACzE,MAAM,CAAC,MAAM,4BAA4B,GAAG,oBAAoB,CAAC;AAEjE,gEAAgE;AAChE,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAEhD,4EAA4E;AAC5E,MAAM,iBAAiB,GAAG,6BAA6B,CAAC;AAExD,kFAAkF;AAClF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,SAAS;IACT,mBAAmB;IACnB,oBAAoB;IACpB,SAAS;IACT,eAAe;IACf,eAAe;IACf,qBAAqB;IACrB,SAAS;CACV,CAAC;AAEF,kFAAkF;AAElF,MAAM,YAAY,GAAG,yBAAyB,CAAC;AAC/C,MAAM,eAAe,GAAG,8BAA8B,CAAC;AACvD,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACjC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAC7C,MAAM,kBAAkB,GAAG,oBAAoB,mBAAmB,GAAG,mBAAmB,EAAE,CAAC;AAC3F,MAAM,YAAY,GAAG,qCAAqC,CAAC;AAc3D,IAAI,0BAAkE,CAAC;AACvE,gFAAgF;AAChF,IAAI,kBAA2E,CAAC;AAEhF,SAAS,iBAAiB;IACxB,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC5E,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,uBAAuB;IAC9B,IAAI,0BAA0B,EAAE,CAAC;QAC/B,YAAY,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;QACjD,0BAA0B,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1C,0BAA0B,GAAG,SAAS,CAAC;QACvC,8DAA8D;IAChE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,KAAa,EAAE,QAAgB;IACrE,uBAAuB,EAAE,CAAC;IAE1B,IAAI,WAA8E,CAAC;IACnF,IAAI,UAAgD,CAAC;IACrD,MAAM,WAAW,GAAG,IAAI,OAAO,CAAqC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtF,WAAW,GAAG,OAAO,CAAC;QACtB,UAAU,GAAG,MAAM,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACxD,IAAI,GAAG,CAAC,QAAQ,KAAK,mBAAmB,EAAE,CAAC;YACzC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;YACrD,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,KAAK,IAAI,aAAa,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAC;YACnE,GAAG,CAAC,GAAG,CAAC,gGAAgG,CAAC,CAAC;YAC1G,UAAU,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,gDAAgD,CAAC,CAAC,CAAC;YACnF,uBAAuB,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAC;QACnE,GAAG,CAAC,GAAG,CAAC,6GAA6G,CAAC,CAAC;QACvH,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClC,uBAAuB,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;QAC9B,UAAU,EAAE,CAAC,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAC1E,uBAAuB,EAAE,CAAC;IAC5B,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;IAEf,0BAA0B,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;IACpF,kBAAkB,GAAG,WAAW,CAAC;IAEjC,MAAM,OAAO,GAAG,MAAM,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;QACrD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC3B,UAAU,EAAE,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClE,uBAAuB,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAEpD,MAAM,aAAa,GAAG,MAAM,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAEtE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,YAAY,kBAAkB,CAAC,CAAC;IACvD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC9C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IACnD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IACzD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC5C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IAClD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;IACtD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;IAC3D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAErC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,qBAAqB,EAAE,aAAa,EAAE,CAAC;AAC3E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,qFAAqF;IACrF,sDAAsD;IACtD,MAAM,aAAa,GAAG,0BAA0B,EAAE,WAAW,IAAI,kBAAkB,CAAC;IACpF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;QACpC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,kBAAkB,GAAG,SAAS,CAAC;IAE/B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,aAAa,CAAC;IAE/C,4BAA4B;IAC5B,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;IACnC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;IAC7C,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvB,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IAC7C,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IAEpC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,YAAY,cAAc,EAAE;QAC1D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;QAChE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;KACtB,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,sCAAsC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAKjC,CAAC;IAEF,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,wEAAwE;IACxE,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;QACxC,SAAS,EAAE,SAAS;QACpB,MAAM;QACN,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACvC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAE9B,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,YAAY;QAChC,YAAY,EAAE,MAAM,CAAC,aAAa;QAClC,MAAM,EAAE,OAAO;KAChB,CAAC;AACJ,CAAC;AAsBD,kFAAkF;AAElF,qFAAqF;AACrF,MAAM,UAAU,gBAAgB;IAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AAC5F,CAAC;AAED,kFAAkF;AAElF,SAAS,gBAAgB;IACvB,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAkB,CAAC;QAC9E,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QACxD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO;YACL,WAAW;YACX,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,SAAS;YAC/D,MAAM,EAAE,OAAO;SAChB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,kFAAkF;AAElF,MAAM,UAAU,uBAAuB;IACrC,OAAO,gBAAgB,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,OAAO,gBAAgB,EAAE,CAAC;AAC5B,CAAC;AAED,kFAAkF;AAElF;;qCAEqC;AACrC,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,YAAoB;IACjE,OAAO,CAAC,GAAG,kBAAkB,CAAC,CAAC;AACjC,CAAC;AAED,mFAAmF;AAEnF,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,OAAO,GAAG,4BAA4B;IAKvF,IAAI,OAAO,CAAC,GAAG,CAAC,kCAAkC,KAAK,GAAG,EAAE,CAAC;QAC3D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,0BAA0B,EAAE,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;IAClE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,OAAO,EAAE;YACvD,WAAW,EAAE,QAAQ;YACrB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YACzB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,EAAE,CAAC;SACxF,CAAC,CAAC;QACH,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;YACnD,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACtE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,mEAAmE,EAAE,CAAC;QACjG,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACvC,CAAC;AACH,CAAC;AAED,kFAAkF;AAElF,MAAM,UAAU,gCAAgC,CAAC,OAAe;IAC9D,OAAO;QACL,oBAAoB,EAAE,IAAI;QAC1B,QAAQ,EAAE,sBAAsB;QAChC,OAAO;QACP,2BAA2B,EAAE,SAAS;QACtC,iBAAiB,EAAE,KAAK;QACxB,yBAAyB,EAAE,KAAK;QAChC,KAAK,CAAC,UAAU,CAAC,OAAO;YACtB,MAAM,SAAS,GAAG,MAAM,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACrE,OAAO;gBACL,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,YAAY,EAAE,SAAS,CAAC,YAAY;gBACpC,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClE,OAAO,EAAE;oBACP,SAAS,EAAE,OAAO,CAAC,MAAM;oBACzB,WAAW,EAAE,EAAE,OAAO,EAAE;iBACzB;gBACD,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,QAAQ,EAAE;oBACR,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,OAAO;iBACR;aACF,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,OAAO;YACpB,MAAM,SAAS,GAAG,MAAM,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,IAAI,cAAc,CAA4B;gBAC3D,KAAK,CAAC,UAAU;oBACd,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;wBACnB,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;oBACxE,CAAC;oBACD,UAAU,CAAC,OAAO,CAAC;wBACjB,IAAI,EAAE,QAAQ;wBACd,YAAY,EAAE,SAAS,CAAC,YAAY;wBACpC,KAAK,EAAE,SAAS,CAAC,KAAK;qBACvB,CAAC,CAAC;oBACH,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrB,CAAC;aACF,CAAC,CAAC;YACH,OAAO;gBACL,MAAM;gBACN,OAAO,EAAE;oBACP,SAAS,EAAE,OAAO,CAAC,MAAM;oBACzB,WAAW,EAAE,EAAE,OAAO,EAAE;iBACzB;gBACD,QAAQ,EAAE,SAAS,CAAC,QAAQ;aAC7B,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF,KAAK,UAAU,0BAA0B,CACvC,OAAe,EACf,OAA4E;IAQ5E,MAAM,OAAO,GAAG,MAAM,0BAA0B,EAAE,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,uBAAuB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/D,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,yBAAyB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE1E,MAAM,IAAI,GAAG;QACX,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,IAAI;QACZ,6DAA6D;QAC7D,YAAY,EAAE,YAAY,IAAI,8BAA8B;QAC5D,KAAK;QACL,IAAI,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;QAC7B,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,iBAAiB,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QACzI,mBAAmB,EAAE,IAAI;KAC1B,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,uBAAuB,GAAG,oBAAoB,EAAE,EAAE;QAChF,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,OAAO,CAAC,WAAW,EAAE;YAChD,oBAAoB,EAAE,SAAS;YAC/B,aAAa,EAAE,wBAAwB;YACvC,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG;YACnE,QAAQ,EAAE,mBAAmB;YAC7B,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,iCAAiC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,SAAS,GAAG,IAAI,GAAG,EAA2C,CAAC;IAErE,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,IAAI,IAAI,KAAK,4BAA4B,EAAE,CAAC;YAC1C,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACpC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,KAAK,4BAA4B,IAAI,IAAI,KAAK,2BAA2B,EAAE,CAAC;YACzF,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,4BAA4B,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YACpE,IAAI,QAAQ,EAAE,CAAC;gBACb,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,KAAK,wCAAwC,EAAE,CAAC;YAC7D,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,QAAQ,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACjD,SAAS;YACX,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE;gBACpB,GAAG,QAAQ;gBACX,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE;aACvC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,IAAI,KAAK,uCAAuC,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,SAAS;YACX,CAAC;YACD,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACtD,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE;oBACpB,GAAG,QAAQ;oBACX,IAAI,EAAE,SAAS;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,KAAK,CAAC,QAGN,CAAC;YACd,WAAW,GAAG,IAAI,EAAE,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC;YAC7C,YAAY,GAAG,IAAI,EAAE,KAAK,EAAE,aAAa,IAAI,CAAC,CAAC;YAC/C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAClE,MAAM,QAAQ,GAAG,4BAA4B,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;gBACpE,IAAI,QAAQ,EAAE,CAAC;oBACb,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAwD,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,wBAAwB,CAAC,CAAC;QACpE,CAAC;aAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,qBAAqB,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI;QACJ,YAAY,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM;QACxD,KAAK,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE;QACpE,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,kFAAkF;AAElF,SAAS,uBAAuB,CAAC,KAAa;IAC5C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAA4B,CAAC;QACxG,MAAM,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAwC,CAAC;QAChF,MAAM,SAAS,GAAG,KAAK,EAAE,kBAAkB,CAAC;QAC5C,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,2GAA2G,CAAC,CAAC;IAC/H,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,MAA6B;IAI9D,IAAI,YAAgC,CAAC;IACrC,MAAM,KAAK,GAAmC,EAAE,CAAC;IAEjD,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/F,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO;iBACzB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;iBAC1D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAClB,IAAI,CAAC,IAAI,CAAC;iBACV,IAAI,EAAE,CAAC;YACV,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9E,CAAC;YAED,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACnC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAC9B,SAAS;gBACX,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,IAAI,CAAC,UAAU;oBACxB,IAAI,EAAE,IAAI,CAAC,QAAQ;oBACnB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;iBAC3C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,sBAAsB;oBAC5B,OAAO,EAAE,IAAI,CAAC,UAAU;oBACxB,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC;iBACzC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AACjC,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,aAAa,CAAC,IAAgC;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,IAAI;YAAE,MAAM;QAChB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,OAAO,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACnC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAC/B,MAAM,SAAS,GAAG,KAAK;iBACpB,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;iBACpC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACjC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBACzC,IAAI,IAAI,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC9B,IAAI,CAAC;wBAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;gBAC3F,CAAC;YACH,CAAC;YACD,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,OAAiD,EACjD,aAA4C;IAE5C,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9F,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK;SACtB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SAC3E,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACd,IAAI,EAAE,kBAA2B;QACjC,IAAI;QACJ,OAAO,EAAE,2EAA2E;KACrF,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAwC;IAChE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrF,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAuC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;AACpG,CAAC;AAED,SAAS,YAAY,CAAC,KAAoC;IACxD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAiD;IAC1E,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC9C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACjE,OAAO,UAAU,CAAC,IAAI,CAAC;IACzB,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC/B,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,UAAU,CAAC,QAAQ;SAC1B,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,sBAAsB,CAAC,KAA8B;IAC5D,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC,IAAI,CAAC;IACpB,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC/D,OAAO,KAAK,CAAC,WAAW,CAAC;IAC3B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,4BAA4B,CAAC,IAAa,EAAE,KAAa;IAChE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,IAA+B,CAAC;IAC/C,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC;WAChD,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;WAC7B,4BAA4B,KAAK,GAAG,CAAC,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;QAC/C,CAAC,CAAC,MAAM,CAAC,SAAS;QAClB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAE3C,OAAO;QACL,YAAY,EAAE,UAAU;QACxB,UAAU;QACV,QAAQ;QACR,IAAI;KACL,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACzF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type YagrModelProvider } from './provider-registry.js';
2
+ export declare function fetchAvailableModels(provider: YagrModelProvider, apiKey?: string, baseUrl?: string): Promise<string[]>;
3
+ //# sourceMappingURL=provider-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-discovery.d.ts","sourceRoot":"","sources":["../../src/llm/provider-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAErH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,EAAE,CAAC,CA0CnB"}
@@ -0,0 +1,40 @@
1
+ import { getDefaultBaseUrlForProvider, getProviderDefinition } from './provider-registry.js';
2
+ export async function fetchAvailableModels(provider, apiKey, baseUrl) {
3
+ const definition = getProviderDefinition(provider);
4
+ const discovery = definition.modelDiscovery;
5
+ if (!discovery) {
6
+ return [];
7
+ }
8
+ const discoveryUrl = discovery.buildUrl(baseUrl || getDefaultBaseUrlForProvider(provider));
9
+ if (!discoveryUrl) {
10
+ return [];
11
+ }
12
+ const headers = {
13
+ 'Content-Type': 'application/json',
14
+ };
15
+ if ((discovery.authMode === 'bearer-optional' || discovery.authMode === 'bearer-required') && apiKey) {
16
+ headers.Authorization = `Bearer ${apiKey}`;
17
+ }
18
+ if (discovery.authMode === 'x-api-key-required' && apiKey) {
19
+ headers['x-api-key'] = apiKey;
20
+ headers['anthropic-version'] = '2023-06-01';
21
+ }
22
+ if (discovery.authMode === 'bearer-required' && !apiKey) {
23
+ return [];
24
+ }
25
+ if (discovery.authMode === 'x-api-key-required' && !apiKey) {
26
+ return [];
27
+ }
28
+ try {
29
+ const response = await fetch(discoveryUrl, { headers });
30
+ if (!response.ok) {
31
+ throw new Error(`${response.status} ${response.statusText}`);
32
+ }
33
+ const payload = await response.json();
34
+ return discovery.mapResponse(payload).sort((left, right) => left.localeCompare(right));
35
+ }
36
+ catch {
37
+ return [];
38
+ }
39
+ }
40
+ //# sourceMappingURL=provider-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-discovery.js","sourceRoot":"","sources":["../../src/llm/provider-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAA0B,MAAM,wBAAwB,CAAC;AAErH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAA2B,EAC3B,MAAe,EACf,OAAgB;IAEhB,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,UAAU,CAAC,cAAc,CAAC;IAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,IAAI,4BAA4B,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3F,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IAEF,IAAI,CAAC,SAAS,CAAC,QAAQ,KAAK,iBAAiB,IAAI,SAAS,CAAC,QAAQ,KAAK,iBAAiB,CAAC,IAAI,MAAM,EAAE,CAAC;QACrG,OAAO,CAAC,aAAa,GAAG,UAAU,MAAM,EAAE,CAAC;IAC7C,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,KAAK,oBAAoB,IAAI,MAAM,EAAE,CAAC;QAC1D,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;QAC9B,OAAO,CAAC,mBAAmB,CAAC,GAAG,YAAY,CAAC;IAC9C,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,KAAK,iBAAiB,IAAI,CAAC,MAAM,EAAE,CAAC;QACxD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,KAAK,oBAAoB,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA6B,CAAC;QACjE,OAAO,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACzF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}