@dexto/core 1.8.1 → 1.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/agent/DextoAgent.cjs +12 -12
  2. package/dist/agent/DextoAgent.d.ts +2 -2
  3. package/dist/agent/DextoAgent.d.ts.map +1 -1
  4. package/dist/agent/DextoAgent.js +12 -12
  5. package/dist/events/index.cjs +8 -0
  6. package/dist/events/index.d.ts +22 -14
  7. package/dist/events/index.d.ts.map +1 -1
  8. package/dist/events/index.js +8 -0
  9. package/dist/llm/auth/index.cjs +16 -0
  10. package/dist/llm/auth/index.d.ts +2 -0
  11. package/dist/llm/auth/index.d.ts.map +1 -0
  12. package/dist/llm/auth/index.js +0 -0
  13. package/dist/llm/auth/types.cjs +16 -0
  14. package/dist/llm/auth/types.d.ts +25 -0
  15. package/dist/llm/auth/types.d.ts.map +1 -0
  16. package/dist/llm/auth/types.js +0 -0
  17. package/dist/llm/index.d.ts +1 -0
  18. package/dist/llm/index.d.ts.map +1 -1
  19. package/dist/llm/services/factory.cjs +118 -24
  20. package/dist/llm/services/factory.d.ts.map +1 -1
  21. package/dist/llm/services/factory.js +118 -24
  22. package/dist/llm/services/types.d.ts +7 -0
  23. package/dist/llm/services/types.d.ts.map +1 -1
  24. package/dist/session/chat-session.cjs +38 -33
  25. package/dist/session/chat-session.d.ts +2 -0
  26. package/dist/session/chat-session.d.ts.map +1 -1
  27. package/dist/session/chat-session.js +38 -33
  28. package/dist/session/session-manager.cjs +4 -1
  29. package/dist/session/session-manager.d.ts +4 -0
  30. package/dist/session/session-manager.d.ts.map +1 -1
  31. package/dist/session/session-manager.js +4 -1
  32. package/dist/utils/result.cjs +1 -1
  33. package/dist/utils/result.js +1 -1
  34. package/dist/utils/service-initializer.cjs +3 -0
  35. package/dist/utils/service-initializer.d.ts +2 -0
  36. package/dist/utils/service-initializer.d.ts.map +1 -1
  37. package/dist/utils/service-initializer.js +3 -0
  38. package/package.json +2 -2
@@ -75,34 +75,95 @@ function resolveProviderWorkingDirectory(explicitCwd) {
75
75
  }
76
76
  return (0, import_execution_context.findDextoProjectRoot)(process.cwd()) ?? process.cwd();
77
77
  }
78
+ function mergeHeaders(base, override) {
79
+ const merged = {
80
+ ...base ?? {},
81
+ ...override ?? {}
82
+ };
83
+ return Object.keys(merged).length > 0 ? merged : void 0;
84
+ }
85
+ function logRuntimeAuthResolution(input) {
86
+ const {
87
+ context,
88
+ provider,
89
+ model,
90
+ configApiKey,
91
+ resolvedApiKey,
92
+ runtimeAuth,
93
+ effectiveBaseURL
94
+ } = input;
95
+ if (!context?.logger) {
96
+ return;
97
+ }
98
+ const auth = runtimeAuth?.auth ?? (configApiKey?.trim() ? { source: "config_api_key" } : resolvedApiKey?.trim() ? { source: "environment", envVar: (0, import_api_key_resolver.getPrimaryApiKeyEnvVar)(provider) } : { source: "none" });
99
+ context.logger.info("LLM runtime auth resolved", {
100
+ provider,
101
+ model,
102
+ auth,
103
+ runtime: {
104
+ hasRuntimeFetch: Boolean(runtimeAuth?.fetch),
105
+ hasRuntimeHeaders: Boolean(runtimeAuth?.headers),
106
+ hasRuntimeBaseURL: Boolean(runtimeAuth?.baseURL),
107
+ hasEffectiveBaseURL: Boolean(effectiveBaseURL)
108
+ }
109
+ });
110
+ }
78
111
  function createVercelModel(llmConfig, context) {
79
112
  const { provider, model, baseURL } = llmConfig;
80
- const apiKey = llmConfig.apiKey || (0, import_api_key_resolver.resolveApiKeyForProvider)(provider);
81
- if ((0, import_llm.requiresApiKey)(provider) && !apiKey?.trim()) {
113
+ const runtimeAuth = context?.authResolver?.resolveRuntimeAuth({
114
+ provider,
115
+ model,
116
+ apiKey: llmConfig.apiKey,
117
+ baseURL
118
+ }) ?? null;
119
+ const resolvedProviderApiKey = (0, import_api_key_resolver.resolveApiKeyForProvider)(provider);
120
+ const apiKey = runtimeAuth?.apiKey || llmConfig.apiKey || resolvedProviderApiKey;
121
+ const runtimeBaseURL = runtimeAuth?.baseURL;
122
+ const runtimeHeaders = runtimeAuth?.headers;
123
+ const runtimeFetch = runtimeAuth?.fetch;
124
+ const effectiveBaseURL = runtimeBaseURL?.replace(/\/$/, "") || baseURL?.replace(/\/$/, "");
125
+ const usesCodexRuntimeAuth = runtimeBaseURL ? (0, import_codex_base_url.isCodexBaseURL)(runtimeBaseURL) : false;
126
+ logRuntimeAuthResolution({
127
+ context,
128
+ provider,
129
+ model,
130
+ configApiKey: llmConfig.apiKey,
131
+ resolvedApiKey: resolvedProviderApiKey,
132
+ runtimeAuth,
133
+ effectiveBaseURL
134
+ });
135
+ if ((0, import_llm.requiresApiKey)(provider) && !usesCodexRuntimeAuth && !apiKey?.trim()) {
82
136
  const envVar = (0, import_api_key_resolver.getPrimaryApiKeyEnvVar)(provider);
83
137
  throw import_errors.LLMError.apiKeyMissing(provider, envVar);
84
138
  }
85
139
  switch (provider.toLowerCase()) {
86
140
  case "openai": {
87
- return (0, import_openai.createOpenAI)({ apiKey: apiKey ?? "" }).responses(model);
88
- }
89
- case "openai-compatible": {
90
- const compatibleBaseURL = baseURL?.replace(/\/$/, "") || process.env.OPENAI_BASE_URL?.replace(/\/$/, "");
91
- if (!compatibleBaseURL) {
92
- throw import_errors.LLMError.baseUrlMissing("openai-compatible");
93
- }
94
- if ((0, import_codex_base_url.isCodexBaseURL)(compatibleBaseURL)) {
141
+ if (usesCodexRuntimeAuth && runtimeBaseURL) {
95
142
  return (0, import_codex_app_server.createCodexLanguageModel)({
96
143
  modelId: model,
97
- baseURL: compatibleBaseURL,
144
+ baseURL: runtimeBaseURL,
98
145
  cwd: resolveProviderWorkingDirectory(context?.cwd),
99
146
  ...context?.onCodexRateLimitStatus ? { onRateLimitStatus: context.onCodexRateLimitStatus } : {}
100
147
  });
101
148
  }
149
+ return (0, import_openai.createOpenAI)({
150
+ apiKey: apiKey ?? "",
151
+ ...effectiveBaseURL ? { baseURL: effectiveBaseURL } : {},
152
+ ...runtimeHeaders ? { headers: runtimeHeaders } : {},
153
+ ...runtimeFetch ? { fetch: runtimeFetch } : {}
154
+ }).responses(model);
155
+ }
156
+ case "openai-compatible": {
157
+ const compatibleBaseURL = effectiveBaseURL || process.env.OPENAI_BASE_URL?.replace(/\/$/, "");
158
+ if (!compatibleBaseURL) {
159
+ throw import_errors.LLMError.baseUrlMissing("openai-compatible");
160
+ }
102
161
  const provider2 = (0, import_openai_compatible.createOpenAICompatible)({
103
162
  name: "openaiCompatible",
104
163
  baseURL: compatibleBaseURL,
105
- ...apiKey?.trim() ? { apiKey } : {}
164
+ ...apiKey?.trim() ? { apiKey } : {},
165
+ ...runtimeHeaders ? { headers: runtimeHeaders } : {},
166
+ ...runtimeFetch ? { fetch: runtimeFetch } : {}
106
167
  });
107
168
  return provider2.chatModel(model);
108
169
  }
@@ -124,26 +185,47 @@ function createVercelModel(llmConfig, context) {
124
185
  return chatModel;
125
186
  }
126
187
  case "minimax": {
127
- const minimaxBaseURL = baseURL || "https://api.minimax.chat/v1";
128
- return (0, import_openai.createOpenAI)({ apiKey: apiKey ?? "", baseURL: minimaxBaseURL }).chat(model);
188
+ const minimaxBaseURL = effectiveBaseURL || "https://api.minimax.chat/v1";
189
+ return (0, import_openai.createOpenAI)({
190
+ apiKey: apiKey ?? "",
191
+ baseURL: minimaxBaseURL,
192
+ ...runtimeHeaders ? { headers: runtimeHeaders } : {},
193
+ ...runtimeFetch ? { fetch: runtimeFetch } : {}
194
+ }).chat(model);
129
195
  }
130
196
  case "glm": {
131
- const glmBaseURL = baseURL || "https://open.bigmodel.cn/api/paas/v4";
132
- return (0, import_openai.createOpenAI)({ apiKey: apiKey ?? "", baseURL: glmBaseURL }).chat(model);
197
+ const glmBaseURL = effectiveBaseURL || "https://open.bigmodel.cn/api/paas/v4";
198
+ return (0, import_openai.createOpenAI)({
199
+ apiKey: apiKey ?? "",
200
+ baseURL: glmBaseURL,
201
+ ...runtimeHeaders ? { headers: runtimeHeaders } : {},
202
+ ...runtimeFetch ? { fetch: runtimeFetch } : {}
203
+ }).chat(model);
133
204
  }
134
205
  case "litellm": {
135
- if (!baseURL) {
206
+ if (!effectiveBaseURL) {
136
207
  throw import_errors.LLMError.baseUrlMissing("litellm");
137
208
  }
138
- return (0, import_openai.createOpenAI)({ apiKey: apiKey ?? "", baseURL }).chat(model);
209
+ return (0, import_openai.createOpenAI)({
210
+ apiKey: apiKey ?? "",
211
+ baseURL: effectiveBaseURL,
212
+ ...runtimeHeaders ? { headers: runtimeHeaders } : {},
213
+ ...runtimeFetch ? { fetch: runtimeFetch } : {}
214
+ }).chat(model);
139
215
  }
140
216
  case "glama": {
141
- const glamaBaseURL = "https://glama.ai/api/gateway/openai/v1";
142
- return (0, import_openai.createOpenAI)({ apiKey: apiKey ?? "", baseURL: glamaBaseURL }).chat(model);
217
+ const glamaBaseURL = effectiveBaseURL || "https://glama.ai/api/gateway/openai/v1";
218
+ return (0, import_openai.createOpenAI)({
219
+ apiKey: apiKey ?? "",
220
+ baseURL: glamaBaseURL,
221
+ ...runtimeHeaders ? { headers: runtimeHeaders } : {},
222
+ ...runtimeFetch ? { fetch: runtimeFetch } : {}
223
+ }).chat(model);
143
224
  }
144
225
  case "dexto-nova": {
145
226
  const dextoBaseURL = resolveDextoGatewayBaseURL(baseURL);
146
227
  const headers = {
228
+ ...runtimeHeaders ?? {},
147
229
  [DEXTO_GATEWAY_HEADERS.CLIENT_SOURCE]: context?.clientSource ?? "cli"
148
230
  };
149
231
  if (context?.sessionId) {
@@ -207,10 +289,15 @@ function createVercelModel(llmConfig, context) {
207
289
  return (0, import_amazon_bedrock.createAmazonBedrock)({ region })(modelId);
208
290
  }
209
291
  case "anthropic": {
210
- const headers = (0, import_llm.supportsAnthropicInterleavedThinking)(model) ? { [import_llm.ANTHROPIC_BETA_HEADER]: import_llm.ANTHROPIC_INTERLEAVED_THINKING_BETA } : void 0;
292
+ const headers = mergeHeaders(
293
+ (0, import_llm.supportsAnthropicInterleavedThinking)(model) ? { [import_llm.ANTHROPIC_BETA_HEADER]: import_llm.ANTHROPIC_INTERLEAVED_THINKING_BETA } : void 0,
294
+ runtimeHeaders
295
+ );
211
296
  return (0, import_anthropic.createAnthropic)({
212
297
  apiKey: apiKey ?? "",
213
- ...headers ? { headers } : {}
298
+ ...effectiveBaseURL ? { baseURL: effectiveBaseURL } : {},
299
+ ...headers ? { headers } : {},
300
+ ...runtimeFetch ? { fetch: runtimeFetch } : {}
214
301
  })(model);
215
302
  }
216
303
  case "google":
@@ -222,8 +309,13 @@ function createVercelModel(llmConfig, context) {
222
309
  case "cohere":
223
310
  return (0, import_cohere.createCohere)({ apiKey: apiKey ?? "" })(model);
224
311
  case "ollama": {
225
- const ollamaBaseURL = baseURL || "http://localhost:11434/v1";
226
- return (0, import_openai.createOpenAI)({ apiKey: "ollama", baseURL: ollamaBaseURL }).chat(model);
312
+ const ollamaBaseURL = effectiveBaseURL || "http://localhost:11434/v1";
313
+ return (0, import_openai.createOpenAI)({
314
+ apiKey: apiKey ?? "ollama",
315
+ baseURL: ollamaBaseURL,
316
+ ...runtimeHeaders ? { headers: runtimeHeaders } : {},
317
+ ...runtimeFetch ? { fetch: runtimeFetch } : {}
318
+ }).chat(model);
227
319
  }
228
320
  case "local": {
229
321
  return (0, import_ai_sdk_adapter.createLocalLanguageModel)({
@@ -239,6 +331,8 @@ function createLLMService(config, toolManager, systemPromptManager, conversation
239
331
  const providerContext = {
240
332
  sessionId,
241
333
  ...options.cwd !== void 0 ? { cwd: options.cwd } : {},
334
+ authResolver: options.authResolver ?? null,
335
+ logger,
242
336
  onCodexRateLimitStatus: (snapshot) => {
243
337
  sessionEventBus.emit("llm:rate-limit-status", {
244
338
  provider: config.provider,
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/llm/services/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAYnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EACR,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACvB,MAAM,YAAY,CAAC;AA6DpB;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC7B,SAAS,EAAE,kBAAkB,EAC7B,OAAO,CAAC,EAAE,oBAAoB,GAC/B,aAAa,CAyOf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,mBAAmB,EACxC,iBAAiB,EAAE,iBAAiB,EACpC,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,OAAO,0BAA0B,EAAE,eAAe,EACnE,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,uBAAuB,EAChC,oBAAoB,CAAC,EAAE,oBAAoB,GAC5C,gBAAgB,CAqClB"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/llm/services/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAYnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EACR,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACvB,MAAM,YAAY,CAAC;AAqHpB;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC7B,SAAS,EAAE,kBAAkB,EAC7B,OAAO,CAAC,EAAE,oBAAoB,GAC/B,aAAa,CAsSf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,mBAAmB,EACxC,iBAAiB,EAAE,iBAAiB,EACpC,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,OAAO,0BAA0B,EAAE,eAAe,EACnE,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,uBAAuB,EAChC,oBAAoB,CAAC,EAAE,oBAAoB,GAC5C,gBAAgB,CAuClB"}
@@ -57,34 +57,95 @@ function resolveProviderWorkingDirectory(explicitCwd) {
57
57
  }
58
58
  return findDextoProjectRoot(process.cwd()) ?? process.cwd();
59
59
  }
60
+ function mergeHeaders(base, override) {
61
+ const merged = {
62
+ ...base ?? {},
63
+ ...override ?? {}
64
+ };
65
+ return Object.keys(merged).length > 0 ? merged : void 0;
66
+ }
67
+ function logRuntimeAuthResolution(input) {
68
+ const {
69
+ context,
70
+ provider,
71
+ model,
72
+ configApiKey,
73
+ resolvedApiKey,
74
+ runtimeAuth,
75
+ effectiveBaseURL
76
+ } = input;
77
+ if (!context?.logger) {
78
+ return;
79
+ }
80
+ const auth = runtimeAuth?.auth ?? (configApiKey?.trim() ? { source: "config_api_key" } : resolvedApiKey?.trim() ? { source: "environment", envVar: getPrimaryApiKeyEnvVar(provider) } : { source: "none" });
81
+ context.logger.info("LLM runtime auth resolved", {
82
+ provider,
83
+ model,
84
+ auth,
85
+ runtime: {
86
+ hasRuntimeFetch: Boolean(runtimeAuth?.fetch),
87
+ hasRuntimeHeaders: Boolean(runtimeAuth?.headers),
88
+ hasRuntimeBaseURL: Boolean(runtimeAuth?.baseURL),
89
+ hasEffectiveBaseURL: Boolean(effectiveBaseURL)
90
+ }
91
+ });
92
+ }
60
93
  function createVercelModel(llmConfig, context) {
61
94
  const { provider, model, baseURL } = llmConfig;
62
- const apiKey = llmConfig.apiKey || resolveApiKeyForProvider(provider);
63
- if (requiresApiKey(provider) && !apiKey?.trim()) {
95
+ const runtimeAuth = context?.authResolver?.resolveRuntimeAuth({
96
+ provider,
97
+ model,
98
+ apiKey: llmConfig.apiKey,
99
+ baseURL
100
+ }) ?? null;
101
+ const resolvedProviderApiKey = resolveApiKeyForProvider(provider);
102
+ const apiKey = runtimeAuth?.apiKey || llmConfig.apiKey || resolvedProviderApiKey;
103
+ const runtimeBaseURL = runtimeAuth?.baseURL;
104
+ const runtimeHeaders = runtimeAuth?.headers;
105
+ const runtimeFetch = runtimeAuth?.fetch;
106
+ const effectiveBaseURL = runtimeBaseURL?.replace(/\/$/, "") || baseURL?.replace(/\/$/, "");
107
+ const usesCodexRuntimeAuth = runtimeBaseURL ? isCodexBaseURL(runtimeBaseURL) : false;
108
+ logRuntimeAuthResolution({
109
+ context,
110
+ provider,
111
+ model,
112
+ configApiKey: llmConfig.apiKey,
113
+ resolvedApiKey: resolvedProviderApiKey,
114
+ runtimeAuth,
115
+ effectiveBaseURL
116
+ });
117
+ if (requiresApiKey(provider) && !usesCodexRuntimeAuth && !apiKey?.trim()) {
64
118
  const envVar = getPrimaryApiKeyEnvVar(provider);
65
119
  throw LLMError.apiKeyMissing(provider, envVar);
66
120
  }
67
121
  switch (provider.toLowerCase()) {
68
122
  case "openai": {
69
- return createOpenAI({ apiKey: apiKey ?? "" }).responses(model);
70
- }
71
- case "openai-compatible": {
72
- const compatibleBaseURL = baseURL?.replace(/\/$/, "") || process.env.OPENAI_BASE_URL?.replace(/\/$/, "");
73
- if (!compatibleBaseURL) {
74
- throw LLMError.baseUrlMissing("openai-compatible");
75
- }
76
- if (isCodexBaseURL(compatibleBaseURL)) {
123
+ if (usesCodexRuntimeAuth && runtimeBaseURL) {
77
124
  return createCodexLanguageModel({
78
125
  modelId: model,
79
- baseURL: compatibleBaseURL,
126
+ baseURL: runtimeBaseURL,
80
127
  cwd: resolveProviderWorkingDirectory(context?.cwd),
81
128
  ...context?.onCodexRateLimitStatus ? { onRateLimitStatus: context.onCodexRateLimitStatus } : {}
82
129
  });
83
130
  }
131
+ return createOpenAI({
132
+ apiKey: apiKey ?? "",
133
+ ...effectiveBaseURL ? { baseURL: effectiveBaseURL } : {},
134
+ ...runtimeHeaders ? { headers: runtimeHeaders } : {},
135
+ ...runtimeFetch ? { fetch: runtimeFetch } : {}
136
+ }).responses(model);
137
+ }
138
+ case "openai-compatible": {
139
+ const compatibleBaseURL = effectiveBaseURL || process.env.OPENAI_BASE_URL?.replace(/\/$/, "");
140
+ if (!compatibleBaseURL) {
141
+ throw LLMError.baseUrlMissing("openai-compatible");
142
+ }
84
143
  const provider2 = createOpenAICompatible({
85
144
  name: "openaiCompatible",
86
145
  baseURL: compatibleBaseURL,
87
- ...apiKey?.trim() ? { apiKey } : {}
146
+ ...apiKey?.trim() ? { apiKey } : {},
147
+ ...runtimeHeaders ? { headers: runtimeHeaders } : {},
148
+ ...runtimeFetch ? { fetch: runtimeFetch } : {}
88
149
  });
89
150
  return provider2.chatModel(model);
90
151
  }
@@ -106,26 +167,47 @@ function createVercelModel(llmConfig, context) {
106
167
  return chatModel;
107
168
  }
108
169
  case "minimax": {
109
- const minimaxBaseURL = baseURL || "https://api.minimax.chat/v1";
110
- return createOpenAI({ apiKey: apiKey ?? "", baseURL: minimaxBaseURL }).chat(model);
170
+ const minimaxBaseURL = effectiveBaseURL || "https://api.minimax.chat/v1";
171
+ return createOpenAI({
172
+ apiKey: apiKey ?? "",
173
+ baseURL: minimaxBaseURL,
174
+ ...runtimeHeaders ? { headers: runtimeHeaders } : {},
175
+ ...runtimeFetch ? { fetch: runtimeFetch } : {}
176
+ }).chat(model);
111
177
  }
112
178
  case "glm": {
113
- const glmBaseURL = baseURL || "https://open.bigmodel.cn/api/paas/v4";
114
- return createOpenAI({ apiKey: apiKey ?? "", baseURL: glmBaseURL }).chat(model);
179
+ const glmBaseURL = effectiveBaseURL || "https://open.bigmodel.cn/api/paas/v4";
180
+ return createOpenAI({
181
+ apiKey: apiKey ?? "",
182
+ baseURL: glmBaseURL,
183
+ ...runtimeHeaders ? { headers: runtimeHeaders } : {},
184
+ ...runtimeFetch ? { fetch: runtimeFetch } : {}
185
+ }).chat(model);
115
186
  }
116
187
  case "litellm": {
117
- if (!baseURL) {
188
+ if (!effectiveBaseURL) {
118
189
  throw LLMError.baseUrlMissing("litellm");
119
190
  }
120
- return createOpenAI({ apiKey: apiKey ?? "", baseURL }).chat(model);
191
+ return createOpenAI({
192
+ apiKey: apiKey ?? "",
193
+ baseURL: effectiveBaseURL,
194
+ ...runtimeHeaders ? { headers: runtimeHeaders } : {},
195
+ ...runtimeFetch ? { fetch: runtimeFetch } : {}
196
+ }).chat(model);
121
197
  }
122
198
  case "glama": {
123
- const glamaBaseURL = "https://glama.ai/api/gateway/openai/v1";
124
- return createOpenAI({ apiKey: apiKey ?? "", baseURL: glamaBaseURL }).chat(model);
199
+ const glamaBaseURL = effectiveBaseURL || "https://glama.ai/api/gateway/openai/v1";
200
+ return createOpenAI({
201
+ apiKey: apiKey ?? "",
202
+ baseURL: glamaBaseURL,
203
+ ...runtimeHeaders ? { headers: runtimeHeaders } : {},
204
+ ...runtimeFetch ? { fetch: runtimeFetch } : {}
205
+ }).chat(model);
125
206
  }
126
207
  case "dexto-nova": {
127
208
  const dextoBaseURL = resolveDextoGatewayBaseURL(baseURL);
128
209
  const headers = {
210
+ ...runtimeHeaders ?? {},
129
211
  [DEXTO_GATEWAY_HEADERS.CLIENT_SOURCE]: context?.clientSource ?? "cli"
130
212
  };
131
213
  if (context?.sessionId) {
@@ -189,10 +271,15 @@ function createVercelModel(llmConfig, context) {
189
271
  return createAmazonBedrock({ region })(modelId);
190
272
  }
191
273
  case "anthropic": {
192
- const headers = supportsAnthropicInterleavedThinking(model) ? { [ANTHROPIC_BETA_HEADER]: ANTHROPIC_INTERLEAVED_THINKING_BETA } : void 0;
274
+ const headers = mergeHeaders(
275
+ supportsAnthropicInterleavedThinking(model) ? { [ANTHROPIC_BETA_HEADER]: ANTHROPIC_INTERLEAVED_THINKING_BETA } : void 0,
276
+ runtimeHeaders
277
+ );
193
278
  return createAnthropic({
194
279
  apiKey: apiKey ?? "",
195
- ...headers ? { headers } : {}
280
+ ...effectiveBaseURL ? { baseURL: effectiveBaseURL } : {},
281
+ ...headers ? { headers } : {},
282
+ ...runtimeFetch ? { fetch: runtimeFetch } : {}
196
283
  })(model);
197
284
  }
198
285
  case "google":
@@ -204,8 +291,13 @@ function createVercelModel(llmConfig, context) {
204
291
  case "cohere":
205
292
  return createCohere({ apiKey: apiKey ?? "" })(model);
206
293
  case "ollama": {
207
- const ollamaBaseURL = baseURL || "http://localhost:11434/v1";
208
- return createOpenAI({ apiKey: "ollama", baseURL: ollamaBaseURL }).chat(model);
294
+ const ollamaBaseURL = effectiveBaseURL || "http://localhost:11434/v1";
295
+ return createOpenAI({
296
+ apiKey: apiKey ?? "ollama",
297
+ baseURL: ollamaBaseURL,
298
+ ...runtimeHeaders ? { headers: runtimeHeaders } : {},
299
+ ...runtimeFetch ? { fetch: runtimeFetch } : {}
300
+ }).chat(model);
209
301
  }
210
302
  case "local": {
211
303
  return createLocalLanguageModel({
@@ -221,6 +313,8 @@ function createLLMService(config, toolManager, systemPromptManager, conversation
221
313
  const providerContext = {
222
314
  sessionId,
223
315
  ...options.cwd !== void 0 ? { cwd: options.cwd } : {},
316
+ authResolver: options.authResolver ?? null,
317
+ logger,
224
318
  onCodexRateLimitStatus: (snapshot) => {
225
319
  sessionEventBus.emit("llm:rate-limit-status", {
226
320
  provider: config.provider,
@@ -2,6 +2,8 @@ import type { CompactionStrategy } from '../../context/compaction/types.js';
2
2
  import type { LanguageModel } from 'ai';
3
3
  import type { CodexRateLimitSnapshot } from '../providers/codex-app-server.js';
4
4
  import type { ValidatedLLMConfig } from '../schemas.js';
5
+ import type { LlmAuthResolver } from '../auth/types.js';
6
+ import type { Logger } from '../../logger/v2/types.js';
5
7
  import type { LLMProvider } from '@dexto/llm';
6
8
  import type { MessageQueueService } from '../../session/message-queue.js';
7
9
  import type { AgentRunContext } from '../../runtime/run-context.js';
@@ -19,6 +21,7 @@ export interface CreateLLMServiceOptions {
19
21
  usageScopeId?: string | undefined;
20
22
  compactionStrategy?: CompactionStrategy | null | undefined;
21
23
  cwd?: string | undefined;
24
+ authResolver?: LlmAuthResolver | null | undefined;
22
25
  steerQueue: MessageQueueService;
23
26
  followUpQueue: MessageQueueService;
24
27
  }
@@ -38,6 +41,10 @@ export interface DextoProviderContext {
38
41
  clientSource?: 'cli' | 'web' | 'sdk';
39
42
  /** Working directory for providers that need an explicit workspace root. */
40
43
  cwd?: string;
44
+ /** Runtime auth resolver for profile-backed API keys, OAuth, and external accounts. */
45
+ authResolver?: LlmAuthResolver | null;
46
+ /** Logger for non-secret runtime provider/auth observability. */
47
+ logger?: Logger | undefined;
41
48
  /** Optional callback for ChatGPT Login rate-limit status updates from Codex. */
42
49
  onCodexRateLimitStatus?: (snapshot: CodexRateLimitSnapshot) => void;
43
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/llm/services/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACpC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3D,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,UAAU,EAAE,mBAAmB,CAAC;IAChC,aAAa,EAAE,mBAAmB,CAAC;CACtC;AAED,MAAM,MAAM,uBAAuB,GAAG;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,KAAK,CAAC,EAAE,eAAe,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACrC,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,sBAAsB,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,CAAC;CACvE;AAED,MAAM,WAAW,yBAAyB;IACtC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,EAAE,oBAAoB,CAAC;CACjC;AAED,MAAM,WAAW,2BAA4B,SAAQ,yBAAyB;IAC1E,0BAA0B,EAAE,MAAM,aAAa,CAAC;CACnD;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,2BAA2B,KAAK,aAAa,CAAC;AAE3F;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/llm/services/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACpC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3D,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,YAAY,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,CAAC;IAClD,UAAU,EAAE,mBAAmB,CAAC;IAChC,aAAa,EAAE,mBAAmB,CAAC;CACtC;AAED,MAAM,MAAM,uBAAuB,GAAG;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,KAAK,CAAC,EAAE,eAAe,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACrC,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uFAAuF;IACvF,YAAY,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACtC,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,gFAAgF;IAChF,sBAAsB,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,CAAC;CACvE;AAED,MAAM,WAAW,yBAAyB;IACtC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,EAAE,oBAAoB,CAAC;CACjC;AAED,MAAM,WAAW,2BAA4B,SAAQ,yBAAyB;IAC1E,0BAA0B,EAAE,MAAM,aAAa,CAAC;CACnD;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,2BAA2B,KAAK,aAAa,CAAC;AAE3F;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B"}
@@ -135,39 +135,37 @@ class ChatSession {
135
135
  */
136
136
  setupTokenAccumulation() {
137
137
  this.tokenAccumulatorListener = (payload) => {
138
- if (payload.tokenUsage) {
139
- const tokenUsage = (0, import_usage_metadata.normalizeTokenUsageForAccounting)(payload.tokenUsage);
140
- const llmConfig = this.services.stateManager.getLLMConfig(this.id);
141
- const isChatGPTLogin = llmConfig.provider === "openai-compatible" && (0, import_codex_base_url.parseCodexBaseURL)(llmConfig.baseURL)?.authMode === "chatgpt";
142
- const hasMeaningfulUsage = (0, import_usage_metadata.hasMeaningfulTokenUsage)(tokenUsage);
143
- if (isChatGPTLogin && !hasMeaningfulUsage) {
144
- this.services.sessionManager.markUntrackedChatGPTLoginUsage(this.id).catch((err) => {
145
- this.logger.warn(
146
- `Failed to mark ChatGPT Login usage as untracked: ${err instanceof Error ? err.message : String(err)}`
147
- );
148
- });
149
- return;
150
- }
151
- const modelInfo = {
152
- provider: payload.provider ?? llmConfig.provider,
153
- model: payload.model ?? llmConfig.model
154
- };
155
- const pricingMetadata = (0, import_usage_metadata.getUsagePricingMetadata)({
156
- provider: modelInfo.provider,
157
- model: modelInfo.model,
158
- tokenUsage
159
- });
160
- this.services.sessionManager.accumulateTokenUsage(
161
- this.id,
162
- tokenUsage,
163
- payload.estimatedCost ?? pricingMetadata.estimatedCost,
164
- modelInfo
165
- ).catch((err) => {
138
+ const tokenUsage = (0, import_usage_metadata.normalizeTokenUsageForAccounting)(payload.tokenUsage);
139
+ const llmConfig = this.services.stateManager.getLLMConfig(this.id);
140
+ const isChatGPTLogin = llmConfig.provider === "openai-compatible" && (0, import_codex_base_url.parseCodexBaseURL)(llmConfig.baseURL)?.authMode === "chatgpt";
141
+ const hasMeaningfulUsage = (0, import_usage_metadata.hasMeaningfulTokenUsage)(tokenUsage);
142
+ if (isChatGPTLogin && !hasMeaningfulUsage) {
143
+ this.services.sessionManager.markUntrackedChatGPTLoginUsage(this.id).catch((err) => {
166
144
  this.logger.warn(
167
- `Failed to accumulate token usage: ${err instanceof Error ? err.message : String(err)}`
145
+ `Failed to mark ChatGPT Login usage as untracked: ${err instanceof Error ? err.message : String(err)}`
168
146
  );
169
147
  });
148
+ return;
170
149
  }
150
+ const modelInfo = {
151
+ provider: payload.provider,
152
+ model: payload.model
153
+ };
154
+ const pricingMetadata = (0, import_usage_metadata.getUsagePricingMetadata)({
155
+ provider: modelInfo.provider,
156
+ model: modelInfo.model,
157
+ tokenUsage
158
+ });
159
+ this.services.sessionManager.accumulateTokenUsage(
160
+ this.id,
161
+ tokenUsage,
162
+ payload.estimatedCost ?? pricingMetadata.estimatedCost,
163
+ modelInfo
164
+ ).catch((err) => {
165
+ this.logger.warn(
166
+ `Failed to accumulate token usage: ${err instanceof Error ? err.message : String(err)}`
167
+ );
168
+ });
171
169
  };
172
170
  this.eventBus.on("llm:response", this.tokenAccumulatorListener);
173
171
  }
@@ -190,7 +188,8 @@ class ChatSession {
190
188
  compactionStrategy: this.services.compactionStrategy,
191
189
  ...workspace?.path !== void 0 && { cwd: workspace.path },
192
190
  steerQueue: this.steerQueue,
193
- followUpQueue: this.followUpQueue
191
+ followUpQueue: this.followUpQueue,
192
+ authResolver: this.services.authResolver ?? null
194
193
  };
195
194
  return (0, import_factory.createLLMService)(
196
195
  llmConfig,
@@ -225,8 +224,9 @@ class ChatSession {
225
224
  content: [{ type: "text", text: "[Blocked by content policy: input redacted]" }]
226
225
  };
227
226
  const errorContent = `Error: ${errorMessage}`;
227
+ const assistantMessageId = (0, import_crypto.randomUUID)();
228
228
  const assistantMessage = {
229
- id: (0, import_crypto.randomUUID)(),
229
+ id: assistantMessageId,
230
230
  role: "assistant",
231
231
  timestamp: timestamp + 1,
232
232
  content: [{ type: "text", text: errorContent }]
@@ -234,11 +234,16 @@ class ChatSession {
234
234
  await this.conversationStore.saveMessage({ sessionId: this.id, message: userMessage });
235
235
  await this.conversationStore.saveMessage({ sessionId: this.id, message: assistantMessage });
236
236
  const llmConfig = this.services.stateManager.getLLMConfig(this.id);
237
- this.eventBus.emit("llm:response", {
237
+ this.eventBus.emit("interaction:blocked", {
238
238
  content: errorContent,
239
239
  provider: llmConfig.provider,
240
240
  model: llmConfig.model,
241
- ...assistantMessage.id && { messageId: assistantMessage.id }
241
+ messageId: assistantMessageId
242
+ });
243
+ this.eventBus.emit("run:complete", {
244
+ finishReason: "stop",
245
+ stepCount: 0,
246
+ durationMs: 0
242
247
  });
243
248
  }
244
249
  normalizeContent(content) {
@@ -1,5 +1,6 @@
1
1
  import type { ContextManager } from '../context/index.js';
2
2
  import type { LanguageModelFactory } from '../llm/services/types.js';
3
+ import type { LlmAuthResolver } from '../llm/auth/index.js';
3
4
  import type { SystemPromptManager } from '../systemPrompt/manager.js';
4
5
  import type { ToolManager } from '../tools/tool-manager.js';
5
6
  import type { ValidatedLLMConfig } from '../llm/schemas.js';
@@ -144,6 +145,7 @@ export declare class ChatSession {
144
145
  steerQueueStore: SessionMessageQueueStore;
145
146
  followUpQueueStore: SessionMessageQueueStore;
146
147
  languageModelFactory?: LanguageModelFactory;
148
+ authResolver?: LlmAuthResolver | null;
147
149
  workspaceManager?: import('../workspace/manager.js').WorkspaceManager;
148
150
  compactionStrategy: CompactionStrategy | null;
149
151
  }, id: string, logger: Logger);
@@ -1 +1 @@
1
- {"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../src/session/chat-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../src/session/chat-session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAA2B,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC9F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EACH,eAAe,EACf,aAAa,EAGhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAIpD,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAuB,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEpF,MAAM,MAAM,0BAA0B,GAChC;IACI,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,eAAe,CAAC;CAChC,GACD;IACI,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,eAAe,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,eAAe,CAAC;CAChC,CAAC;AAER;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,qBAAa,WAAW;IAgEhB,OAAO,CAAC,QAAQ;aAiBA,EAAE,EAAE,MAAM;IAhF9B;;;;;;;;;;OAUG;IACH,SAAgB,QAAQ,EAAE,eAAe,CAAC;IAE1C;;;OAGG;IACH,OAAO,CAAC,iBAAiB,CAAqB;IAE9C;;;;;OAKG;IACH,OAAO,CAAC,UAAU,CAAoB;IAEtC;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,sBAAsB,CAA6B;IAE3D;;OAEG;IACH,OAAO,CAAC,wBAAwB,CACvB;IAET;;;OAGG;IACH,OAAO,CAAC,oBAAoB,CAAgC;IAE5D,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B;;;;;;;;;;;OAWG;gBAES,QAAQ,EAAE;QACd,YAAY,EAAE,iBAAiB,CAAC;QAChC,mBAAmB,EAAE,mBAAmB,CAAC;QACzC,WAAW,EAAE,WAAW,CAAC;QACzB,aAAa,EAAE,aAAa,CAAC;QAC7B,iBAAiB,EAAE,iBAAiB,CAAC;QACrC,eAAe,EAAE,OAAO,uBAAuB,EAAE,eAAe,CAAC;QACjE,WAAW,EAAE,WAAW,CAAC;QACzB,UAAU,EAAE,UAAU,CAAC;QACvB,cAAc,EAAE,OAAO,sBAAsB,EAAE,cAAc,CAAC;QAC9D,eAAe,EAAE,wBAAwB,CAAC;QAC1C,kBAAkB,EAAE,wBAAwB,CAAC;QAC7C,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;QAC5C,YAAY,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;QACtC,gBAAgB,CAAC,EAAE,OAAO,yBAAyB,EAAE,gBAAgB,CAAC;QACtE,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAC;KACjD,EACe,EAAE,EAAE,MAAM,EAC1B,MAAM,EAAE,MAAM;IA0BlB;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC,OAAO,CAAC,wBAAwB;IAmBhC;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAiD9B;;OAEG;YACW,kBAAkB;YAelB,uBAAuB;IA4BrC;;;;;;;;;;OAUG;YACW,sBAAsB;IAiDpC,OAAO,CAAC,gBAAgB;YAIV,gBAAgB;YAmEhB,wBAAwB;IA8BtC;;;;;;;;;;;;;;;;;;;;OAoBG;IACU,MAAM,CACf,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,UAAU,CAAC,EAAE,eAAe,CAAC;KAChC,GACF,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAyGf,gBAAgB,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,UAAU,CAAC;IAiDrF,OAAO,CAAC,cAAc;IA8DtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;;;;;;;;;;;;;;;;;;;OAoBG;IACU,UAAU;IAIvB;;;;;;;;;;;;;;;;;;;;OAoBG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IASnC;;;;OAIG;IACI,iBAAiB,IAAI,cAAc,CAAC,OAAO,CAAC;IAInD;;;;OAIG;IACI,aAAa,IAAI,gBAAgB;IAIxC;;;;;;;;;;;;;;;;;;OAkBG;IACU,SAAS,CAAC,YAAY,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBvE;;;;OAIG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBrC;;;;;;OAMG;IACI,OAAO,IAAI,IAAI;IAetB;;;OAGG;IACI,MAAM,IAAI,OAAO;IAIxB;;;;;;OAMG;IACU,KAAK,CACd,OAAO,EAAE,gBAAgB,GAC1B,OAAO,CAAC;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAI1D;;;;;OAKG;IACU,QAAQ,CACjB,OAAO,EAAE,gBAAgB,GAC1B,OAAO,CAAC;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAI1D;;;OAGG;IACI,gBAAgB,IAAI,aAAa,EAAE;IAI1C;;;OAGG;IACI,mBAAmB,IAAI,aAAa,EAAE;IAI7C;;;;OAIG;IACU,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI7D;;;;OAIG;IACU,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhE;;;OAGG;IACU,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAO/C;;;OAGG;IACU,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAOlD;;;OAGG;IACU,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAQjD;;;OAGG;IACI,MAAM,IAAI,OAAO;CAa3B"}