librechat-data-provider 0.8.509 → 0.8.521

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 (42) hide show
  1. package/dist/{data-service-XTxx76uB.js → data-service-DOIF4BkW.js} +1195 -91
  2. package/dist/data-service-DOIF4BkW.js.map +1 -0
  3. package/dist/{data-service-BsdHkdKS.mjs → data-service-pwrlWjJs.mjs} +1046 -92
  4. package/dist/data-service-pwrlWjJs.mjs.map +1 -0
  5. package/dist/index.js +457 -57
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +425 -58
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/react-query/index.js +1 -1
  10. package/dist/react-query/index.js.map +1 -1
  11. package/dist/react-query/index.mjs +1 -1
  12. package/dist/react-query/index.mjs.map +1 -1
  13. package/dist/types/actions.d.ts +1 -1
  14. package/dist/types/api-endpoints.d.ts +10 -2
  15. package/dist/types/bedrock.d.ts +52 -0
  16. package/dist/types/config.d.ts +4142 -183
  17. package/dist/types/data-service.d.ts +27 -14
  18. package/dist/types/feedback.d.ts +9 -1
  19. package/dist/types/file-config.d.ts +41 -5
  20. package/dist/types/generate.d.ts +6 -0
  21. package/dist/types/keys.d.ts +6 -2
  22. package/dist/types/mcp.d.ts +45 -24
  23. package/dist/types/messages.d.ts +8 -0
  24. package/dist/types/models.d.ts +108 -0
  25. package/dist/types/parameterSettings.d.ts +2 -2
  26. package/dist/types/parsers.d.ts +3 -1
  27. package/dist/types/react-query/react-query-service.d.ts +2 -7
  28. package/dist/types/request.d.ts +3 -1
  29. package/dist/types/schemas.d.ts +167 -8
  30. package/dist/types/types/agents.d.ts +211 -1
  31. package/dist/types/types/assistants.d.ts +77 -5
  32. package/dist/types/types/files.d.ts +18 -7
  33. package/dist/types/types/mcpServers.d.ts +25 -0
  34. package/dist/types/types/mutations.d.ts +1 -0
  35. package/dist/types/types/queries.d.ts +17 -3
  36. package/dist/types/types/runs.d.ts +114 -25
  37. package/dist/types/types/skills.d.ts +25 -6
  38. package/dist/types/types.d.ts +115 -2
  39. package/dist/types/upload.d.ts +2 -0
  40. package/package.json +4 -4
  41. package/dist/data-service-BsdHkdKS.mjs.map +0 -1
  42. package/dist/data-service-XTxx76uB.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_data_service = require("./data-service-XTxx76uB.js");
2
+ const require_data_service = require("./data-service-DOIF4BkW.js");
3
3
  let zod = require("zod");
4
4
  let dayjs = require("dayjs");
5
5
  dayjs = require_data_service.__toESM(dayjs);
@@ -14,10 +14,13 @@ let crypto = require("crypto");
14
14
  crypto = require_data_service.__toESM(crypto);
15
15
  let js_yaml = require("js-yaml");
16
16
  //#region src/bedrock.ts
17
- const DEFAULT_ENABLED_MAX_TOKENS = 8192;
18
17
  const DEFAULT_THINKING_BUDGET = 2e3;
18
+ const BEDROCK_CLAUDE_SONNET_4_6_MAX_OUTPUT = 64e3;
19
19
  const BEDROCK_OUTPUT_128K_BETA = "output-128k-2025-02-19";
20
20
  const BEDROCK_FINE_GRAINED_TOOL_STREAMING_BETA = "fine-grained-tool-streaming-2025-05-14";
21
+ /** Betas LibreChat injects itself, safe to strip from persisted AMRF when a
22
+ * model no longer supports them; anything else in `anthropic_beta` is a user opt-in. */
23
+ const GENERATED_BEDROCK_BETAS = new Set([BEDROCK_OUTPUT_128K_BETA, BEDROCK_FINE_GRAINED_TOOL_STREAMING_BETA]);
21
24
  const bedrockReasoningConfigValues = new Set(Object.values(require_data_service.BedrockReasoningConfig));
22
25
  /**
23
26
  * Resolves the final `thinking.display` value for an adaptive-thinking request.
@@ -62,14 +65,14 @@ function parseOpusVersion(model) {
62
65
  return null;
63
66
  }
64
67
  /** Extracts sonnet major/minor version from both naming formats.
65
- * Uses single-digit minor capture to avoid matching date suffixes (e.g., -20250514). */
68
+ * Uses bounded minor capture to avoid matching date suffixes (e.g., -20250514). */
66
69
  function parseSonnetVersion(model) {
67
- const nameFirst = model.match(/claude-sonnet[-.]?(\d+)(?:[-.](\d)(?!\d))?/);
70
+ const nameFirst = model.match(/claude-sonnet[-.]?(\d+)(?:[-.](\d{1,2})(?!\d))?/);
68
71
  if (nameFirst) return {
69
72
  major: parseInt(nameFirst[1], 10),
70
73
  minor: nameFirst[2] != null ? parseInt(nameFirst[2], 10) : 0
71
74
  };
72
- const numFirst = model.match(/claude-(\d+)(?:[-.](\d)(?!\d))?-sonnet/);
75
+ const numFirst = model.match(/claude-(\d+)(?:[-.](\d{1,2})(?!\d))?-sonnet/);
73
76
  if (numFirst) return {
74
77
  major: parseInt(numFirst[1], 10),
75
78
  minor: numFirst[2] != null ? parseInt(numFirst[2], 10) : 0
@@ -103,15 +106,80 @@ function supportsAdaptiveThinking(model) {
103
106
  function omitsThinkingByDefault(model) {
104
107
  const opus = parseOpusVersion(model);
105
108
  if (opus && (opus.major > 4 || opus.major === 4 && opus.minor >= 7)) return true;
109
+ const sonnet = parseSonnetVersion(model);
110
+ if (sonnet != null && sonnet.major >= 5) return true;
106
111
  if (require_data_service.isMythosClassModel(model)) return true;
107
112
  return false;
108
113
  }
109
114
  function omitsSamplingParameters(model) {
110
115
  const opus = parseOpusVersion(model);
111
116
  if (opus && (opus.major > 4 || opus.major === 4 && opus.minor >= 7)) return true;
117
+ const sonnet = parseSonnetVersion(model);
118
+ if (sonnet != null && sonnet.major >= 5) return true;
112
119
  if (require_data_service.isMythosClassModel(model)) return true;
113
120
  return false;
114
121
  }
122
+ /**
123
+ * Whether disabling thinking requires sending an explicit `{ type: 'disabled' }`
124
+ * config rather than simply omitting the `thinking` field.
125
+ *
126
+ * Sonnet 5 and Opus 5 treat an omitted `thinking` field as adaptive thinking ON
127
+ * by default, so honoring a user who turns thinking off means sending the
128
+ * disabled config explicitly. Opus 4.7/4.8 run without thinking when the field
129
+ * is omitted, and Fable/Mythos reject an explicit disabled config (400,
130
+ * thinking always on), so both are excluded.
131
+ *
132
+ * See https://platform.claude.com/docs/en/about-claude/models/migration-guide#migrating-to-claude-sonnet-5
133
+ */
134
+ function requiresExplicitThinkingDisabled(model) {
135
+ const sonnet = parseSonnetVersion(model);
136
+ if (sonnet != null && sonnet.major >= 5) return true;
137
+ const opus = parseOpusVersion(model);
138
+ return opus != null && opus.major >= 5;
139
+ }
140
+ /** Effort levels Opus 5 rejects while thinking is explicitly disabled. */
141
+ const EFFORTS_REJECTED_WHEN_THINKING_DISABLED = new Set(["xhigh", "max"]);
142
+ /**
143
+ * Whether the model caps `output_config.effort` while thinking is disabled.
144
+ *
145
+ * Opus 5 rejects `xhigh`/`max` in that combination with a 400: "output_config
146
+ * .effort 'xhigh' is not supported when thinking is disabled on this model. Use
147
+ * effort 'high' or below, or enable thinking." Opus 4.7/4.8, Sonnet 5, and
148
+ * Sonnet 4.6 accept every effort level they otherwise support with thinking
149
+ * off, so the cap is Opus 5+ only.
150
+ */
151
+ function capsEffortWhenThinkingDisabled(model) {
152
+ const opus = parseOpusVersion(model);
153
+ return opus != null && opus.major >= 5;
154
+ }
155
+ /**
156
+ * Lowers an effort level the model would reject while thinking is disabled to
157
+ * the highest accepted value (`high`, which is also the API default). Returns
158
+ * the effort unchanged when the combination is valid.
159
+ */
160
+ function clampEffortForDisabledThinking(model, effort) {
161
+ if (capsEffortWhenThinkingDisabled(model) && EFFORTS_REJECTED_WHEN_THINKING_DISABLED.has(effort)) return "high";
162
+ return effort;
163
+ }
164
+ /** An `output_config` container carrying a usable effort level. */
165
+ function hasStringEffort(value) {
166
+ if (typeof value !== "object" || value === null || !("effort" in value)) return false;
167
+ return typeof value.effort === "string";
168
+ }
169
+ /**
170
+ * Clamps an `output_config.effort` in place when the model would reject it
171
+ * while thinking is disabled. No-op when the container carries no string
172
+ * effort, so callers can pass a possibly-absent config directly.
173
+ */
174
+ function clampOutputConfigEffort(model, outputConfig) {
175
+ if (!hasStringEffort(outputConfig)) return;
176
+ outputConfig.effort = clampEffortForDisabledThinking(model, outputConfig.effort);
177
+ }
178
+ /** Whether a resolved thinking config is an explicit `{ type: 'disabled' }`. */
179
+ function isThinkingDisabled(thinking) {
180
+ if (typeof thinking !== "object" || thinking === null || !("type" in thinking)) return false;
181
+ return thinking.type === "disabled";
182
+ }
115
183
  /** Checks if a model has a 1M context window (Sonnet 4.6+, Opus 4.6+, Opus 5+, Fable/Mythos) */
116
184
  function supportsContext1m(model) {
117
185
  const sonnet = parseSonnetVersion(model);
@@ -122,6 +190,19 @@ function supportsContext1m(model) {
122
190
  return false;
123
191
  }
124
192
  /**
193
+ * A Bedrock Claude model ID may be prefixed (`anthropic.claude-*`,
194
+ * `us.anthropic.claude-*`, `global.anthropic.claude-*`) or bare (`claude-*`,
195
+ * used when the LibreChat model ID maps to an application inference profile).
196
+ * Match on the `claude` family token so every form is recognized — requiring
197
+ * the literal `anthropic.` prefix silently dropped thinking config, beta
198
+ * headers, and sampling handling for inference-profile deployments.
199
+ */
200
+ const BEDROCK_CLAUDE_4PLUS_THINKING = /claude-(?:[4-9](?:\.\d+)?(?:-\d+)?-(?:sonnet|opus|haiku)|(?:sonnet|opus|haiku)-[4-9])/;
201
+ /** Whether a Bedrock model ID is an Anthropic Claude model (prefixed or bare). */
202
+ function isBedrockClaudeModel(model) {
203
+ return model.includes("claude");
204
+ }
205
+ /**
125
206
  * Gets the appropriate anthropic_beta headers for Bedrock Anthropic models.
126
207
  * Bedrock uses `anthropic_beta` (with underscore) in additionalModelRequestFields.
127
208
  *
@@ -132,19 +213,33 @@ function getBedrockAnthropicBetaHeaders(model) {
132
213
  const betaHeaders = [];
133
214
  /** Mythos-class (Fable/Mythos) is intentionally not matched: these betas are built-in/no-op for the
134
215
  * 4.7+ generation (Fable has native 128K output), so omitting them on Bedrock is lossless. */
135
- const isClaude4PlusModel = /anthropic\.claude-(?:[4-9](?:\.\d+)?(?:-\d+)?-(?:sonnet|opus|haiku)|(?:sonnet|opus|haiku)-[4-9])/.test(model);
136
- if (model.includes("anthropic.claude-3-7-sonnet") || isClaude4PlusModel) betaHeaders.push(BEDROCK_OUTPUT_128K_BETA);
216
+ const isClaude4PlusModel = BEDROCK_CLAUDE_4PLUS_THINKING.test(model);
217
+ if (model.includes("claude-3-7-sonnet") || isClaude4PlusModel) betaHeaders.push(BEDROCK_OUTPUT_128K_BETA);
137
218
  if (isClaude4PlusModel) betaHeaders.push(BEDROCK_FINE_GRAINED_TOOL_STREAMING_BETA);
138
219
  return betaHeaders;
139
220
  }
221
+ /** Flatten an anthropic_beta value (array, single string, or comma-delimited
222
+ * string) into trimmed, non-empty header tokens. */
223
+ function normalizeBetaHeaders(value) {
224
+ let values = [];
225
+ if (Array.isArray(value)) values = value;
226
+ else if (typeof value === "string") values = [value];
227
+ const headers = [];
228
+ values.forEach((entry) => {
229
+ if (typeof entry !== "string") return;
230
+ entry.split(",").map((header) => header.trim()).filter(Boolean).forEach((header) => headers.push(header));
231
+ });
232
+ return headers;
233
+ }
140
234
  function mergeBedrockAnthropicBetaHeaders(existing, generated) {
141
- let existingValues = [];
142
- if (Array.isArray(existing)) existingValues = existing;
143
- else if (typeof existing === "string") existingValues = [existing];
235
+ const generatedSet = new Set(generated);
144
236
  const betaHeaders = /* @__PURE__ */ new Set();
145
- [...existingValues, ...generated].forEach((value) => {
146
- if (typeof value !== "string") return;
147
- value.split(",").map((header) => header.trim()).filter(Boolean).forEach((header) => betaHeaders.add(header));
237
+ [...normalizeBetaHeaders(existing), ...generated].forEach((header) => {
238
+ /** Drop a generated beta carried over from a prior model that the current
239
+ * model does not generate (e.g. fine-grained-tool-streaming on a 3.7
240
+ * profile); user opt-ins are always preserved. */
241
+ if (GENERATED_BEDROCK_BETAS.has(header) && !generatedSet.has(header)) return;
242
+ betaHeaders.add(header);
148
243
  });
149
244
  return Array.from(betaHeaders);
150
245
  }
@@ -178,7 +273,7 @@ const bedrockInputSchema = require_data_service.tConversationSchema.pick({
178
273
  }).transform((obj) => {
179
274
  if (obj.additionalModelRequestFields?.thinking != null) {
180
275
  const thinking = obj.additionalModelRequestFields.thinking;
181
- obj.thinking = !!thinking;
276
+ obj.thinking = typeof thinking === "object" && thinking !== null && thinking.type === "disabled" ? false : !!thinking;
182
277
  obj.thinkingBudget = typeof thinking === "object" && "budget_tokens" in thinking ? thinking.budget_tokens : void 0;
183
278
  if (obj.thinkingDisplay == null) {
184
279
  const persistedDisplay = extractPersistedDisplay({ thinking });
@@ -245,16 +340,49 @@ const bedrockInputParser = require_data_service.tConversationSchema.pick({
245
340
  delete typedData[key];
246
341
  }
247
342
  });
248
- /** Configure thinking for Bedrock Anthropic models: 3.7 Sonnet, Claude 4+ (opus/sonnet/haiku), and Mythos-class (Fable/Mythos). */
249
- if (typeof typedData.model === "string" && (typedData.model.includes("anthropic.claude-3-7-sonnet") || /anthropic\.claude-(?:[4-9](?:\.\d+)?(?:-\d+)?-(?:sonnet|opus|haiku)|(?:sonnet|opus|haiku)-[4-9])/.test(typedData.model) || require_data_service.isMythosClassModel(typedData.model))) {
343
+ /**
344
+ * Persisted `model_parameters` can carry a prior "thinking off" only inside
345
+ * `additionalModelRequestFields.thinking = { type: 'disabled' }` (a known
346
+ * key that isn't spread into `additionalFields`). `initializeBedrock` feeds
347
+ * those params straight through this parser, so surface that as
348
+ * `thinking: false` — otherwise the disabled branch is skipped and the
349
+ * config rebuilds adaptive, flipping a user's Sonnet 5 setting back on.
350
+ */
351
+ const persistedThinking = typedData.additionalModelRequestFields?.thinking;
352
+ if (additionalFields.thinking === void 0 && typeof persistedThinking === "object" && persistedThinking !== null && persistedThinking.type === "disabled") additionalFields.thinking = false;
353
+ /** Bedrock thinking-capable Claude models: 3.7 Sonnet, Claude 4+ (opus/sonnet/haiku), and Mythos-class (Fable/Mythos). */
354
+ const isThinkingModel = typeof typedData.model === "string" && (typedData.model.includes("claude-3-7-sonnet") || BEDROCK_CLAUDE_4PLUS_THINKING.test(typedData.model) || require_data_service.isMythosClassModel(typedData.model));
355
+ if (isThinkingModel) {
250
356
  if (supportsAdaptiveThinking(typedData.model)) {
357
+ /** Persisted AMRF is spread into the final request, so clearing only
358
+ * `additionalFields` leaves a stale value from a prior selection. */
359
+ const persistedAmrf = typedData.additionalModelRequestFields;
360
+ const thinkingDisabled = additionalFields.thinking === false;
251
361
  const effort = additionalFields.effort;
252
- if (effort && typeof effort === "string" && effort !== "") additionalFields.output_config = { effort };
362
+ if (typeof effort === "string" && effort !== "") additionalFields.output_config = { effort };
363
+ else if (effort !== void 0 && persistedAmrf)
364
+ /** Explicit unset ('' or null) clears the persisted effort. An absent
365
+ * effort (agent resume, where the prior llmConfig persisted
366
+ * `output_config` but no top-level `effort`) preserves it. */
367
+ delete persistedAmrf.output_config;
253
368
  delete additionalFields.effort;
369
+ /**
370
+ * Opus 5 rejects `xhigh`/`max` effort while thinking is disabled, so
371
+ * clamp both the effort derived above and any effort still carried in
372
+ * persisted AMRF (agent resume sends `output_config` with no top-level
373
+ * `effort`, so the branch above leaves it untouched).
374
+ */
375
+ if (thinkingDisabled) [additionalFields, persistedAmrf].forEach((target) => clampOutputConfigEffort(typedData.model, target?.output_config));
254
376
  if (additionalFields.thinking === false) {
255
- delete additionalFields.thinking;
256
377
  delete additionalFields.thinkingBudget;
257
378
  delete additionalFields.thinkingDisplay;
379
+ if (requiresExplicitThinkingDisabled(typedData.model)) additionalFields.thinking = { type: "disabled" };
380
+ else {
381
+ delete additionalFields.thinking;
382
+ /** Disable-by-omission models (Opus 4.7+): drop the persisted
383
+ * adaptive config so turning thinking off actually disables it. */
384
+ if (persistedAmrf) delete persistedAmrf.thinking;
385
+ }
258
386
  } else {
259
387
  /**
260
388
  * Persisted agent `model_parameters` round-trip back through this
@@ -282,10 +410,18 @@ const bedrockInputParser = require_data_service.tConversationSchema.pick({
282
410
  if (additionalFields.thinking === true && additionalFields.thinkingBudget === void 0) additionalFields.thinkingBudget = DEFAULT_THINKING_BUDGET;
283
411
  delete additionalFields.effort;
284
412
  delete additionalFields.thinkingDisplay;
413
+ /** A bare non-adaptive thinking profile (e.g. `claude-3-7-sonnet`) must
414
+ * not inherit an adaptive/disabled thinking object or `output_config`
415
+ * persisted from another model; this branch's own fields are authoritative. */
416
+ const persistedAmrf = typedData.additionalModelRequestFields;
417
+ if (persistedAmrf) {
418
+ delete persistedAmrf.thinking;
419
+ delete persistedAmrf.output_config;
420
+ }
285
421
  }
286
422
  /** Anthropic uses 'effort' via output_config, not reasoning_config */
287
423
  delete additionalFields.reasoning_effort;
288
- if (typedData.model.includes("anthropic.")) {
424
+ if (isBedrockClaudeModel(typedData.model)) {
289
425
  const betaHeaders = getBedrockAnthropicBetaHeaders(typedData.model);
290
426
  if (betaHeaders.length > 0) {
291
427
  const existingBetaHeaders = typedData.additionalModelRequestFields?.anthropic_beta;
@@ -303,7 +439,7 @@ const bedrockInputParser = require_data_service.tConversationSchema.pick({
303
439
  delete additionalFields.reasoning_effort;
304
440
  if (typeof reasoningEffort === "string" && bedrockReasoningConfigValues.has(reasoningEffort)) additionalFields.reasoning_config = reasoningEffort;
305
441
  }
306
- const isAnthropicModel = typeof typedData.model === "string" && typedData.model.includes("anthropic.");
442
+ const isAnthropicModel = typeof typedData.model === "string" && isBedrockClaudeModel(typedData.model);
307
443
  /** Strip stale fields from previously-persisted additionalModelRequestFields */
308
444
  if (typeof typedData.additionalModelRequestFields === "object" && typedData.additionalModelRequestFields != null) {
309
445
  const amrf = typedData.additionalModelRequestFields;
@@ -317,6 +453,22 @@ const bedrockInputParser = require_data_service.tConversationSchema.pick({
317
453
  } else {
318
454
  delete amrf.reasoning_config;
319
455
  delete amrf.reasoning_effort;
456
+ /** A Claude model that does not support Bedrock thinking (e.g. a bare
457
+ * `claude-3-5-sonnet` inference profile) must not carry stale thinking
458
+ * fields from a previously-selected thinking model. Drop only the
459
+ * LibreChat-generated betas (output-128k, fine-grained tool streaming);
460
+ * user opt-ins in `anthropic_beta` are preserved. */
461
+ if (!isThinkingModel) {
462
+ delete amrf.thinking;
463
+ delete amrf.thinkingBudget;
464
+ delete amrf.effort;
465
+ delete amrf.output_config;
466
+ if (amrf.anthropic_beta !== void 0) {
467
+ const kept = normalizeBetaHeaders(amrf.anthropic_beta).filter((header) => !GENERATED_BEDROCK_BETAS.has(header));
468
+ if (kept.length > 0) amrf.anthropic_beta = kept;
469
+ else delete amrf.anthropic_beta;
470
+ }
471
+ }
320
472
  }
321
473
  if (shouldOmitSamplingParameters) {
322
474
  delete amrf.temperature;
@@ -359,11 +511,37 @@ const bedrockInputParser = require_data_service.tConversationSchema.pick({
359
511
  * @param data - The parsed Bedrock request options object
360
512
  * @returns The object with thinking configured appropriately
361
513
  */
514
+ /**
515
+ * `anthropicSettings.maxOutputTokens.reset` only matches the canonical
516
+ * family-first id (`claude-sonnet-5`); Bedrock also accepts number-first
517
+ * aliases (`claude-5-sonnet`, `claude-4-7-sonnet`) that this file gates as
518
+ * thinking models. Canonicalize to family-first so those aliases resolve to the
519
+ * real ceiling instead of the 8192 fallback.
520
+ */
521
+ function toFamilyFirstClaudeId(model) {
522
+ return model.replace(/claude-(\d+(?:[-.]\d+)?)-(sonnet|opus|haiku)/, "claude-$2-$1");
523
+ }
524
+ function isBedrockClaudeSonnet46(model) {
525
+ return /claude-sonnet[-.]?4[-.]?6(?=$|[^0-9])/.test(toFamilyFirstClaudeId(model));
526
+ }
527
+ /**
528
+ * Thinking tokens share the `maxTokens` output budget with tool-call arguments
529
+ * (e.g. a `create_file` `content`), so a low default truncates large authored
530
+ * files mid-argument. Mirror the direct-Anthropic path and default to the
531
+ * model's full max output when the request does not set one explicitly.
532
+ */
533
+ function resolveThinkingMaxTokens(data) {
534
+ const explicit = data.maxTokens ?? data.maxOutputTokens;
535
+ if (typeof explicit === "number" && explicit > 0) return explicit;
536
+ const model = typeof data.model === "string" ? data.model : "";
537
+ if (isBedrockClaudeSonnet46(model)) return BEDROCK_CLAUDE_SONNET_4_6_MAX_OUTPUT;
538
+ return require_data_service.anthropicSettings.maxOutputTokens.reset(toFamilyFirstClaudeId(model));
539
+ }
362
540
  function configureThinking(data) {
363
541
  const updatedData = { ...data };
364
542
  const thinking = updatedData.additionalModelRequestFields?.thinking;
365
543
  if (thinking === true) {
366
- updatedData.maxTokens = updatedData.maxTokens ?? updatedData.maxOutputTokens ?? DEFAULT_ENABLED_MAX_TOKENS;
544
+ updatedData.maxTokens = resolveThinkingMaxTokens(updatedData);
367
545
  delete updatedData.maxOutputTokens;
368
546
  const thinkingConfig = {
369
547
  type: "enabled",
@@ -373,12 +551,30 @@ function configureThinking(data) {
373
551
  updatedData.additionalModelRequestFields.thinking = thinkingConfig;
374
552
  delete updatedData.additionalModelRequestFields.thinkingBudget;
375
553
  } else if (typeof thinking === "object" && thinking != null && thinking.type === "adaptive") {
376
- if (updatedData.maxTokens == null && updatedData.maxOutputTokens != null) updatedData.maxTokens = updatedData.maxOutputTokens;
554
+ updatedData.maxTokens = resolveThinkingMaxTokens(updatedData);
377
555
  delete updatedData.maxOutputTokens;
378
556
  delete updatedData.additionalModelRequestFields.thinkingBudget;
379
557
  }
380
558
  return updatedData;
381
559
  }
560
+ /** Top-level Converse request fields (issue #14029: `system` from a preset).
561
+ * The input parser's catch-all routes unknown keys into
562
+ * additionalModelRequestFields, and Bedrock rejects any that collide with a
563
+ * field the request already sends (`messages`/`modelId` always,
564
+ * `inferenceConfig` whenever maxTokens is set, `toolConfig` for agents). */
565
+ const RESERVED_CONVERSE_FIELDS = [
566
+ "system",
567
+ "messages",
568
+ "modelId",
569
+ "toolConfig",
570
+ "inferenceConfig",
571
+ "guardrailConfig",
572
+ "promptVariables",
573
+ "requestMetadata",
574
+ "performanceConfig",
575
+ "additionalModelRequestFields",
576
+ "additionalModelResponseFieldPaths"
577
+ ];
382
578
  const bedrockOutputParser = (data) => {
383
579
  const knownKeys = [
384
580
  ...Object.keys(require_data_service.tConversationSchema.shape),
@@ -397,7 +593,15 @@ const bedrockOutputParser = (data) => {
397
593
  if (result.maxTokens !== void 0 && result.maxOutputTokens === void 0) result.maxOutputTokens = result.maxTokens;
398
594
  else if (result.maxOutputTokens !== void 0 && result.maxTokens === void 0) result.maxTokens = result.maxOutputTokens;
399
595
  result = configureThinking(result);
400
- const amrf = result.additionalModelRequestFields;
596
+ let amrf = result.additionalModelRequestFields;
597
+ if (amrf && typeof amrf === "object") {
598
+ const reserved = RESERVED_CONVERSE_FIELDS.filter((key) => key in (amrf ?? {}));
599
+ if (reserved.length > 0) {
600
+ amrf = { ...amrf };
601
+ for (const key of reserved) delete amrf[key];
602
+ result.additionalModelRequestFields = amrf;
603
+ }
604
+ }
401
605
  if (!amrf || Object.keys(amrf).length === 0) delete result.additionalModelRequestFields;
402
606
  return result;
403
607
  };
@@ -414,6 +618,8 @@ let ContentTypes = /* @__PURE__ */ function(ContentTypes) {
414
618
  ContentTypes["INPUT_AUDIO"] = "input_audio";
415
619
  ContentTypes["AGENT_UPDATE"] = "agent_update";
416
620
  ContentTypes["SUMMARY"] = "summary";
621
+ ContentTypes["ACTIVITY_LABEL"] = "activity_label";
622
+ ContentTypes["STEER"] = "steer";
417
623
  ContentTypes["ERROR"] = "error";
418
624
  return ContentTypes;
419
625
  }({});
@@ -442,6 +648,7 @@ let StepEvents = /* @__PURE__ */ function(StepEvents) {
442
648
  StepEvents["ON_SUMMARIZE_DELTA"] = "on_summarize_delta";
443
649
  StepEvents["ON_SUMMARIZE_COMPLETE"] = "on_summarize_complete";
444
650
  StepEvents["ON_SUBAGENT_UPDATE"] = "on_subagent_update";
651
+ StepEvents["ON_SANDBOX_STARTING"] = "on_sandbox_starting";
445
652
  return StepEvents;
446
653
  }({});
447
654
  /** Token-tracking event names streamed to the client (separate from StepEvents dispatch). */
@@ -451,6 +658,38 @@ let UsageEvents = /* @__PURE__ */ function(UsageEvents) {
451
658
  return UsageEvents;
452
659
  }({});
453
660
  /**
661
+ * Human-in-the-loop event names. Streamed to live clients when a run pauses for
662
+ * tool approval (or an ask-user question). Reconnecting clients instead read the
663
+ * same record from `resumeState.pendingAction` on the sync event / status route.
664
+ */
665
+ let ApprovalEvents = /* @__PURE__ */ function(ApprovalEvents) {
666
+ ApprovalEvents["ON_PENDING_ACTION"] = "on_pending_action";
667
+ return ApprovalEvents;
668
+ }({});
669
+ /**
670
+ * Steering event names. `on_steer_applied` streams to live clients when a
671
+ * queued steer message is injected at a tool-batch boundary; reconnecting
672
+ * clients recover injected steers from `aggregatedContent` and still-queued
673
+ * ones from `resumeState.pendingSteers`. Steers that never reach a boundary
674
+ * ride the final/abort events as `pendingSteers`.
675
+ */
676
+ let SteerEvents = /* @__PURE__ */ function(SteerEvents) {
677
+ SteerEvents["ON_STEER_APPLIED"] = "on_steer_applied";
678
+ /** Durable capability correction for queued steers after HITL handover. */
679
+ SteerEvents["ON_STEER_UPDATED"] = "on_steer_updated";
680
+ return SteerEvents;
681
+ }({});
682
+ /**
683
+ * Activity-label event names. `on_activity_label` streams to live clients
684
+ * when a tool-batch or parent-phase label part is claimed and again when the
685
+ * fast-model label resolves; reconnecting clients recover applied labels
686
+ * from `aggregatedContent` like any other content part.
687
+ */
688
+ let ActivityLabelEvents = /* @__PURE__ */ function(ActivityLabelEvents) {
689
+ ActivityLabelEvents["ON_ACTIVITY_LABEL"] = "on_activity_label";
690
+ return ActivityLabelEvents;
691
+ }({});
692
+ /**
454
693
  * Full prompt token count for one completed model call — the EXACT context the
455
694
  * model saw, provider-aware: additive providers (Bedrock) report `input_tokens`
456
695
  * excluding cache, so cache reads/writes are added back; subset providers
@@ -657,19 +896,21 @@ const parseCompactConvo = ({ endpoint, endpointType, conversation, possibleValue
657
896
  if (models && convo) convo.model = getFirstDefinedValue(models) ?? convo.model;
658
897
  return convo;
659
898
  };
660
- function parseTextParts(contentParts, skipReasoning = false) {
899
+ function parseTextParts(contentParts, skipReasoning = false, options) {
661
900
  let result = "";
901
+ const append = (textValue) => {
902
+ if (result.length > 0 && textValue.length > 0 && result[result.length - 1] !== " " && textValue[0] !== " ") result += " ";
903
+ result += textValue;
904
+ };
662
905
  for (const part of contentParts) {
663
906
  if (!part?.type) continue;
664
- if (part.type === "text") {
665
- const textValue = (typeof part.text === "string" ? part.text : part.text?.value) || "";
666
- if (result.length > 0 && textValue.length > 0 && result[result.length - 1] !== " " && textValue[0] !== " ") result += " ";
667
- result += textValue;
668
- } else if (part.type === "think" && !skipReasoning) {
669
- const textValue = typeof part.think === "string" ? part.think : "";
670
- if (result.length > 0 && textValue.length > 0 && result[result.length - 1] !== " " && textValue[0] !== " ") result += " ";
671
- result += textValue;
672
- }
907
+ if (part.type === "text") append((typeof part.text === "string" ? part.text : part.text?.value) || "");
908
+ else if (part.type === "steer" && options?.includeSteer === true)
909
+ /** Mid-run user speech: excluded by default so generic extraction (TTS
910
+ * reading assistant output) never speaks the user's own words — the
911
+ * full-record surfaces (search indexing, persisted abort text) opt in. */
912
+ append(typeof part.steer === "string" ? part.steer : "");
913
+ else if (part.type === "think" && !skipReasoning) append(typeof part.think === "string" ? part.think : "");
673
914
  }
674
915
  return result;
675
916
  }
@@ -1015,14 +1256,27 @@ function mapGroupToAzureConfig({ groupName, groupMap }) {
1015
1256
  }
1016
1257
  //#endregion
1017
1258
  //#region src/messages.ts
1259
+ /**
1260
+ * Builds the render tree from the flat messages array. Order-robust: live
1261
+ * stream/steer/preempt cache writes can momentarily place a child before its
1262
+ * parent, and a single-pass link would hoist such rows into phantom root
1263
+ * branches — folding the visible thread to one dangling branch until a
1264
+ * refetch restores creation order. Linking happens only after every message
1265
+ * is indexed, so array order never changes the tree shape.
1266
+ */
1018
1267
  function buildTree({ messages, fileMap }) {
1019
1268
  if (messages === null) return null;
1020
1269
  const messageMap = {};
1270
+ const orderedMessages = [];
1021
1271
  const rootMessages = [];
1022
1272
  const childrenCount = {};
1023
- messages.forEach((message) => {
1024
- if (!message) return;
1025
- const parentId = message.parentMessageId ?? "";
1273
+ for (const message of messages) {
1274
+ if (!message) continue;
1275
+ /** A self-parented row can never link under itself (it becomes a root),
1276
+ * so count it with the parentless group — charging its own id would
1277
+ * inflate the sibling indices of its real children past
1278
+ * `children.length`. */
1279
+ const parentId = message.parentMessageId === message.messageId ? "" : message.parentMessageId ?? "";
1026
1280
  childrenCount[parentId] = (childrenCount[parentId] || 0) + 1;
1027
1281
  const extendedMessage = {
1028
1282
  ...message,
@@ -1032,12 +1286,39 @@ function buildTree({ messages, fileMap }) {
1032
1286
  };
1033
1287
  if (message.files && fileMap) extendedMessage.files = message.files.map((file) => fileMap[file.file_id ?? ""] ?? file);
1034
1288
  messageMap[message.messageId] = extendedMessage;
1035
- const parentMessage = messageMap[parentId];
1036
- if (parentMessage) {
1037
- parentMessage.children.push(extendedMessage);
1038
- extendedMessage.depth = parentMessage.depth + 1;
1039
- } else rootMessages.push(extendedMessage);
1040
- });
1289
+ orderedMessages.push(extendedMessage);
1290
+ }
1291
+ for (const extendedMessage of orderedMessages) {
1292
+ const parentMessage = messageMap[extendedMessage.parentMessageId ?? ""];
1293
+ if (parentMessage && parentMessage !== extendedMessage) parentMessage.children.push(extendedMessage);
1294
+ else rootMessages.push(extendedMessage);
1295
+ }
1296
+ /** Depth comes from a roots-down walk (a child linked before its parent
1297
+ * can't inherit depth at link time). The `visited` set doubles as the
1298
+ * cycle guard: nodes on a corrupt parent cycle are unreachable from any
1299
+ * root, so they resurface as roots instead of disappearing. */
1300
+ const visited = /* @__PURE__ */ new Set();
1301
+ const assignDepths = (root) => {
1302
+ visited.add(root);
1303
+ const stack = [root];
1304
+ while (stack.length > 0) {
1305
+ const node = stack.pop();
1306
+ /** Every node has one parent, so this walk reaches each node once — an
1307
+ * already-visited child is a cycle back-edge. Sever it (not just skip
1308
+ * it) so consumers that recurse `children` terminate. */
1309
+ if (node.children.some((child) => visited.has(child))) node.children = node.children.filter((child) => !visited.has(child));
1310
+ for (const child of node.children) {
1311
+ child.depth = node.depth + 1;
1312
+ visited.add(child);
1313
+ stack.push(child);
1314
+ }
1315
+ }
1316
+ };
1317
+ for (const root of rootMessages) assignDepths(root);
1318
+ for (const extendedMessage of orderedMessages) if (!visited.has(extendedMessage)) {
1319
+ rootMessages.push(extendedMessage);
1320
+ assignDepths(extendedMessage);
1321
+ }
1041
1322
  return rootMessages;
1042
1323
  }
1043
1324
  //#endregion
@@ -4946,6 +5227,27 @@ function extractDomainFromUrl(url$2) {
4946
5227
  throw new Error(`Invalid URL format: ${url$2}`);
4947
5228
  }
4948
5229
  }
5230
+ function getExplicitPort(value) {
5231
+ const normalizedValue = value.trim();
5232
+ const protocolSeparatorIndex = normalizedValue.indexOf("://");
5233
+ const hasProtocol = protocolSeparatorIndex !== -1;
5234
+ const authorityAndPath = hasProtocol ? normalizedValue.slice(protocolSeparatorIndex + 3) : normalizedValue;
5235
+ let port;
5236
+ try {
5237
+ const parsedUrl = new url.URL(hasProtocol ? normalizedValue : `https://${normalizedValue}`);
5238
+ port = parsedUrl.port;
5239
+ if (!port && (parsedUrl.protocol === "http:" || parsedUrl.protocol === "https:")) port = new url.URL(`${parsedUrl.protocol === "http:" ? "https:" : "http:"}//${authorityAndPath}`).port;
5240
+ } catch {
5241
+ return null;
5242
+ }
5243
+ if (!port) return null;
5244
+ const parsedPort = Number(port);
5245
+ if (!Number.isInteger(parsedPort) || parsedPort < 1 || parsedPort > 65535) throw new Error(`Invalid port in domain: ${value}`);
5246
+ return String(parsedPort);
5247
+ }
5248
+ function getDefaultActionPort(protocol) {
5249
+ return protocol === "https:" ? "443" : "80";
5250
+ }
4949
5251
  /**
4950
5252
  * Validates client domain matches OpenAPI spec server URL domain (SSRF prevention).
4951
5253
  * @param clientProvidedDomain - Domain from client (with/without protocol)
@@ -4966,6 +5268,7 @@ function validateActionDomain(clientProvidedDomain, specServerUrl) {
4966
5268
  /** Extract hostname from client domain if it's a full URL */
4967
5269
  let clientHostname = clientProvidedDomain;
4968
5270
  let clientHasProtocol = false;
5271
+ const clientExplicitPort = getExplicitPort(clientProvidedDomain);
4969
5272
  if (clientProvidedDomain.includes("://")) {
4970
5273
  if (!clientProvidedDomain.startsWith("http://") && !clientProvidedDomain.startsWith("https://")) return {
4971
5274
  isValid: false,
@@ -4977,7 +5280,7 @@ function validateActionDomain(clientProvidedDomain, specServerUrl) {
4977
5280
  } catch {
4978
5281
  clientHasProtocol = false;
4979
5282
  }
4980
- }
5283
+ } else if (clientExplicitPort !== null) clientHostname = new url.URL(`https://${clientProvidedDomain}`).hostname;
4981
5284
  /** Normalize IPv6 addresses by removing brackets for comparison */
4982
5285
  const normalizedClientHostname = clientHostname.replace(/^\[(.+)\]$/, "$1");
4983
5286
  const normalizedSpecHostname = specHostname.replace(/^\[(.+)\]$/, "$1");
@@ -4990,14 +5293,23 @@ function validateActionDomain(clientProvidedDomain, specServerUrl) {
4990
5293
  const hostname = isIP(normalizedClientHostname) === 6 && !clientHostname.startsWith("[") ? `[${normalizedClientHostname}]` : clientHostname;
4991
5294
  normalizedClientDomain = `${specUrl.protocol}//${hostname}`;
4992
5295
  } else normalizedClientDomain = `https://${clientHostname}`;
4993
- if (normalizedSpecDomain === normalizedClientDomain || !clientHasProtocol && isIPAddress && normalizedClientHostname === normalizedSpecHostname) return {
4994
- isValid: true,
5296
+ if (!(normalizedSpecDomain === normalizedClientDomain || !clientHasProtocol && isIPAddress && normalizedClientHostname === normalizedSpecHostname)) return {
5297
+ isValid: false,
5298
+ message: `Domain mismatch: Client provided '${clientProvidedDomain}', but spec uses '${specHostname}'`,
4995
5299
  normalizedSpecDomain,
4996
5300
  normalizedClientDomain
4997
5301
  };
5302
+ if (clientExplicitPort !== null) {
5303
+ const specEffectivePort = specUrl.port || getDefaultActionPort(specUrl.protocol);
5304
+ if (clientExplicitPort !== specEffectivePort) return {
5305
+ isValid: false,
5306
+ message: `Port mismatch: Client provided '${clientProvidedDomain}', but spec uses effective port '${specEffectivePort}'`,
5307
+ normalizedSpecDomain,
5308
+ normalizedClientDomain
5309
+ };
5310
+ }
4998
5311
  return {
4999
- isValid: false,
5000
- message: `Domain mismatch: Client provided '${clientProvidedDomain}', but spec uses '${specHostname}'`,
5312
+ isValid: true,
5001
5313
  normalizedSpecDomain,
5002
5314
  normalizedClientDomain
5003
5315
  };
@@ -5072,7 +5384,7 @@ function getUserTimezone() {
5072
5384
  }
5073
5385
  }
5074
5386
  function createPayload(submission) {
5075
- const { isEdited, addedConvo, userMessage, isContinued, isTemporary, isRegenerate, conversation, editedContent, ephemeralAgent, endpointOption, manualSkills } = submission;
5387
+ const { isEdited, addedConvo, userMessage, isContinued, isTemporary, isRegenerate, conversation, editedContent, ephemeralAgent, endpointOption, manualSkills, clientRequestId, recoverySteerId, expectedPredecessorCreatedAt } = submission;
5076
5388
  const { conversationId } = require_data_service.tConvoUpdateSchema.parse(conversation);
5077
5389
  const { endpoint: _e, endpointType } = endpointOption;
5078
5390
  const endpoint = _e;
@@ -5090,7 +5402,10 @@ function createPayload(submission) {
5090
5402
  isContinued: !!(isEdited && isContinued),
5091
5403
  ephemeralAgent: require_data_service.isAssistantsEndpoint(endpoint) ? void 0 : ephemeralAgent,
5092
5404
  manualSkills: require_data_service.isAssistantsEndpoint(endpoint) ? void 0 : manualSkills,
5093
- timezone: getUserTimezone()
5405
+ timezone: getUserTimezone(),
5406
+ clientRequestId,
5407
+ recoverySteerId,
5408
+ expectedPredecessorCreatedAt
5094
5409
  };
5095
5410
  return {
5096
5411
  server,
@@ -5197,7 +5512,7 @@ const librechat = {
5197
5512
  labelCode: true,
5198
5513
  type: "number",
5199
5514
  component: "input",
5200
- placeholder: "com_nav_theme_system",
5515
+ placeholder: "com_endpoint_default",
5201
5516
  placeholderCode: true,
5202
5517
  description: "com_endpoint_context_info",
5203
5518
  descriptionCode: true,
@@ -5234,7 +5549,7 @@ const librechat = {
5234
5549
  labelCode: true,
5235
5550
  description: "com_ui_file_token_limit_desc",
5236
5551
  descriptionCode: true,
5237
- placeholder: "com_nav_theme_system",
5552
+ placeholder: "com_endpoint_default",
5238
5553
  placeholderCode: true,
5239
5554
  type: "number",
5240
5555
  component: "input",
@@ -5306,7 +5621,7 @@ const openAIParams = {
5306
5621
  component: "input",
5307
5622
  description: "com_endpoint_openai_max_tokens",
5308
5623
  descriptionCode: true,
5309
- placeholder: "com_nav_theme_system",
5624
+ placeholder: "com_endpoint_default",
5310
5625
  placeholderCode: true,
5311
5626
  optionType: "model",
5312
5627
  columnSpan: 2
@@ -5327,7 +5642,8 @@ const openAIParams = {
5327
5642
  "low",
5328
5643
  "medium",
5329
5644
  "high",
5330
- "xhigh"
5645
+ "xhigh",
5646
+ "max"
5331
5647
  ],
5332
5648
  enumMappings: {
5333
5649
  [""]: "com_ui_auto",
@@ -5336,7 +5652,8 @@ const openAIParams = {
5336
5652
  ["low"]: "com_ui_low",
5337
5653
  ["medium"]: "com_ui_medium",
5338
5654
  ["high"]: "com_ui_high",
5339
- ["xhigh"]: "com_ui_xhigh"
5655
+ ["xhigh"]: "com_ui_xhigh",
5656
+ ["max"]: "com_ui_max"
5340
5657
  },
5341
5658
  optionType: "model",
5342
5659
  columnSpan: 4
@@ -5391,6 +5708,52 @@ const openAIParams = {
5391
5708
  optionType: "model",
5392
5709
  columnSpan: 4
5393
5710
  },
5711
+ reasoning_mode: {
5712
+ key: "reasoning_mode",
5713
+ label: "com_endpoint_reasoning_mode",
5714
+ labelCode: true,
5715
+ description: "com_endpoint_openai_reasoning_mode",
5716
+ descriptionCode: true,
5717
+ type: "enum",
5718
+ default: "",
5719
+ component: "slider",
5720
+ options: [
5721
+ "",
5722
+ "standard",
5723
+ "pro"
5724
+ ],
5725
+ enumMappings: {
5726
+ [""]: "com_ui_unset",
5727
+ ["standard"]: "com_ui_standard",
5728
+ ["pro"]: "com_ui_pro"
5729
+ },
5730
+ optionType: "model",
5731
+ columnSpan: 4
5732
+ },
5733
+ reasoning_context: {
5734
+ key: "reasoning_context",
5735
+ label: "com_endpoint_reasoning_context",
5736
+ labelCode: true,
5737
+ description: "com_endpoint_openai_reasoning_context",
5738
+ descriptionCode: true,
5739
+ type: "enum",
5740
+ default: "",
5741
+ component: "slider",
5742
+ options: [
5743
+ "",
5744
+ "auto",
5745
+ "current_turn",
5746
+ "all_turns"
5747
+ ],
5748
+ enumMappings: {
5749
+ [""]: "com_ui_unset",
5750
+ ["auto"]: "com_ui_auto",
5751
+ ["current_turn"]: "com_ui_current_turn",
5752
+ ["all_turns"]: "com_ui_all_turns"
5753
+ },
5754
+ optionType: "model",
5755
+ columnSpan: 4
5756
+ },
5394
5757
  verbosity: {
5395
5758
  key: "verbosity",
5396
5759
  label: "com_endpoint_verbosity",
@@ -5438,7 +5801,7 @@ const anthropic = {
5438
5801
  component: "input",
5439
5802
  description: "com_endpoint_anthropic_maxoutputtokens",
5440
5803
  descriptionCode: true,
5441
- placeholder: "com_nav_theme_system",
5804
+ placeholder: "com_endpoint_default",
5442
5805
  placeholderCode: true,
5443
5806
  range: {
5444
5807
  min: require_data_service.anthropicSettings.maxOutputTokens.min,
@@ -5626,7 +5989,7 @@ const bedrock = {
5626
5989
  component: "input",
5627
5990
  description: "com_endpoint_anthropic_maxoutputtokens",
5628
5991
  descriptionCode: true,
5629
- placeholder: "com_nav_theme_system",
5992
+ placeholder: "com_endpoint_default",
5630
5993
  placeholderCode: true,
5631
5994
  optionType: "model",
5632
5995
  columnSpan: 2
@@ -5799,7 +6162,7 @@ const google = {
5799
6162
  component: "input",
5800
6163
  description: "com_endpoint_google_maxoutputtokens",
5801
6164
  descriptionCode: true,
5802
- placeholder: "com_nav_theme_system",
6165
+ placeholder: "com_endpoint_default",
5803
6166
  placeholderCode: true,
5804
6167
  default: require_data_service.googleSettings.maxOutputTokens.default,
5805
6168
  range: {
@@ -5945,6 +6308,8 @@ const openAI = [
5945
6308
  openAIParams.reasoning_effort,
5946
6309
  openAIParams.useResponsesApi,
5947
6310
  openAIParams.reasoning_summary,
6311
+ openAIParams.reasoning_mode,
6312
+ openAIParams.reasoning_context,
5948
6313
  openAIParams.verbosity,
5949
6314
  openAIParams.disableStreaming,
5950
6315
  librechat.fileTokenLimit
@@ -5971,6 +6336,8 @@ const openAICol2 = [
5971
6336
  baseDefinitions.imageDetail,
5972
6337
  openAIParams.reasoning_effort,
5973
6338
  openAIParams.reasoning_summary,
6339
+ openAIParams.reasoning_mode,
6340
+ openAIParams.reasoning_context,
5974
6341
  openAIParams.verbosity,
5975
6342
  openAIParams.useResponsesApi,
5976
6343
  openAIParams.web_search,
@@ -6307,11 +6674,14 @@ const CODE_ENV_KINDS = [
6307
6674
  "user"
6308
6675
  ];
6309
6676
  //#endregion
6677
+ exports.AUTH_USER_DOC_BY_ID_PREFIX = require_data_service.AUTH_USER_DOC_BY_ID_PREFIX;
6310
6678
  exports.AccessRoleIds = require_data_service.AccessRoleIds;
6311
6679
  exports.ActionRequest = ActionRequest;
6680
+ exports.ActivityLabelEvents = ActivityLabelEvents;
6312
6681
  exports.AgentCapabilities = require_data_service.AgentCapabilities;
6313
6682
  exports.AnnotationTypes = require_data_service.AnnotationTypes;
6314
6683
  exports.AnthropicEffort = require_data_service.AnthropicEffort;
6684
+ exports.ApprovalEvents = ApprovalEvents;
6315
6685
  exports.ArtifactModes = ArtifactModes;
6316
6686
  exports.AssistantStreamEvents = require_data_service.AssistantStreamEvents;
6317
6687
  exports.AuthKeys = require_data_service.AuthKeys;
@@ -6319,6 +6689,7 @@ exports.AuthType = require_data_service.AuthType;
6319
6689
  exports.AuthTypeEnum = require_data_service.AuthTypeEnum;
6320
6690
  exports.AuthorizationTypeEnum = require_data_service.AuthorizationTypeEnum;
6321
6691
  exports.BASE_ONLY_CONFIG_SECTIONS = require_data_service.BASE_ONLY_CONFIG_SECTIONS;
6692
+ exports.BASE_PRINCIPAL_CONFIG_SECTIONS = require_data_service.BASE_PRINCIPAL_CONFIG_SECTIONS;
6322
6693
  exports.BEDROCK_FINE_GRAINED_TOOL_STREAMING_BETA = BEDROCK_FINE_GRAINED_TOOL_STREAMING_BETA;
6323
6694
  exports.BEDROCK_OUTPUT_128K_BETA = BEDROCK_OUTPUT_128K_BETA;
6324
6695
  exports.BedrockProviders = require_data_service.BedrockProviders;
@@ -6364,6 +6735,7 @@ exports.MCPServerUserInputSchema = require_data_service.MCPServerUserInputSchema
6364
6735
  exports.MCPServersSchema = require_data_service.MCPServersSchema;
6365
6736
  exports.MCP_USER_INPUT_FIELDS = require_data_service.MCP_USER_INPUT_FIELDS;
6366
6737
  exports.MYTHOS_CLASS_FAMILIES = require_data_service.MYTHOS_CLASS_FAMILIES;
6738
+ exports.MemoryScope = require_data_service.MemoryScope;
6367
6739
  exports.MessageContentTypes = require_data_service.MessageContentTypes;
6368
6740
  exports.MutationKeys = require_data_service.MutationKeys;
6369
6741
  exports.OCRStrategy = require_data_service.OCRStrategy;
@@ -6379,7 +6751,9 @@ exports.Providers = require_data_service.Providers;
6379
6751
  exports.QueryKeys = require_data_service.QueryKeys;
6380
6752
  exports.REFILL_INTERVAL_UNITS = require_data_service.REFILL_INTERVAL_UNITS;
6381
6753
  exports.RateLimitPrefix = require_data_service.RateLimitPrefix;
6754
+ exports.ReasoningContext = require_data_service.ReasoningContext;
6382
6755
  exports.ReasoningEffort = require_data_service.ReasoningEffort;
6756
+ exports.ReasoningMode = require_data_service.ReasoningMode;
6383
6757
  exports.ReasoningParameterFormat = require_data_service.ReasoningParameterFormat;
6384
6758
  exports.ReasoningResponseKey = require_data_service.ReasoningResponseKey;
6385
6759
  exports.ReasoningSummary = require_data_service.ReasoningSummary;
@@ -6408,6 +6782,7 @@ exports.SettingTypes = require_data_service.SettingTypes;
6408
6782
  exports.SettingsTabValues = require_data_service.SettingsTabValues;
6409
6783
  exports.SettingsViews = require_data_service.SettingsViews;
6410
6784
  exports.StdioOptionsSchema = require_data_service.StdioOptionsSchema;
6785
+ exports.SteerEvents = SteerEvents;
6411
6786
  exports.StepEvents = StepEvents;
6412
6787
  exports.StepStatus = require_data_service.StepStatus;
6413
6788
  exports.StepTypes = StepTypes;
@@ -6463,6 +6838,7 @@ exports.balanceSchema = require_data_service.balanceSchema;
6463
6838
  exports.baseEndpointSchema = require_data_service.baseEndpointSchema;
6464
6839
  exports.bedrockDocumentExtensions = require_data_service.bedrockDocumentExtensions;
6465
6840
  exports.bedrockDocumentFormats = require_data_service.bedrockDocumentFormats;
6841
+ exports.bedrockDocumentMimeTypes = require_data_service.bedrockDocumentMimeTypes;
6466
6842
  exports.bedrockEndpointSchema = require_data_service.bedrockEndpointSchema;
6467
6843
  exports.bedrockGuardrailConfigSchema = require_data_service.bedrockGuardrailConfigSchema;
6468
6844
  exports.bedrockInputParser = bedrockInputParser;
@@ -6472,14 +6848,20 @@ exports.bedrockOutputParser = bedrockOutputParser;
6472
6848
  exports.bookmarkPermissionsSchema = bookmarkPermissionsSchema;
6473
6849
  exports.breadcrumb = breadcrumb;
6474
6850
  exports.buildLoginRedirectUrl = require_data_service.buildLoginRedirectUrl;
6851
+ exports.buildServerNameAliases = require_data_service.buildServerNameAliases;
6475
6852
  exports.buildTree = buildTree;
6476
6853
  exports.button = button;
6477
6854
  exports.cacheSubsetProviders = require_data_service.cacheSubsetProviders;
6478
6855
  exports.calendar = calendar;
6856
+ exports.capsEffortWhenThinkingDisabled = capsEffortWhenThinkingDisabled;
6479
6857
  exports.card = card;
6480
6858
  exports.carousel = carousel;
6481
6859
  exports.checkOpenAIStorage = require_data_service.checkOpenAIStorage;
6482
6860
  exports.checkbox = checkbox;
6861
+ exports.checkpointerSchema = require_data_service.checkpointerSchema;
6862
+ exports.checkpointerTypeSchema = require_data_service.checkpointerTypeSchema;
6863
+ exports.clampEffortForDisabledThinking = clampEffortForDisabledThinking;
6864
+ exports.clampOutputConfigEffort = clampOutputConfigEffort;
6483
6865
  exports.cloudfrontConfigSchema = require_data_service.cloudfrontConfigSchema;
6484
6866
  exports.codeInterpreterMimeTypes = require_data_service.codeInterpreterMimeTypes;
6485
6867
  exports.codeInterpreterMimeTypesList = require_data_service.codeInterpreterMimeTypesList;
@@ -6521,7 +6903,9 @@ exports.dropdownMenu = dropdownMenu;
6521
6903
  exports.eAnthropicEffortSchema = require_data_service.eAnthropicEffortSchema;
6522
6904
  exports.eImageDetailSchema = require_data_service.eImageDetailSchema;
6523
6905
  exports.eModelEndpointSchema = require_data_service.eModelEndpointSchema;
6906
+ exports.eReasoningContextSchema = require_data_service.eReasoningContextSchema;
6524
6907
  exports.eReasoningEffortSchema = require_data_service.eReasoningEffortSchema;
6908
+ exports.eReasoningModeSchema = require_data_service.eReasoningModeSchema;
6525
6909
  exports.eReasoningParameterFormatSchema = require_data_service.eReasoningParameterFormatSchema;
6526
6910
  exports.eReasoningResponseKeySchema = require_data_service.eReasoningResponseKeySchema;
6527
6911
  exports.eReasoningSummarySchema = require_data_service.eReasoningSummarySchema;
@@ -6559,6 +6943,7 @@ exports.generateDynamicSchema = require_data_service.generateDynamicSchema;
6559
6943
  exports.generateGoogleSchema = require_data_service.generateGoogleSchema;
6560
6944
  exports.generateOpenAISchema = require_data_service.generateOpenAISchema;
6561
6945
  exports.getConfigDefaults = require_data_service.getConfigDefaults;
6946
+ exports.getConfiguredMimeAccept = require_data_service.getConfiguredMimeAccept;
6562
6947
  exports.getDefaultParamsEndpoint = require_data_service.getDefaultParamsEndpoint;
6563
6948
  exports.getEnabledEndpoints = getEnabledEndpoints;
6564
6949
  exports.getEndpointField = require_data_service.getEndpointField;
@@ -6595,6 +6980,8 @@ exports.inputTokensIncludesCache = require_data_service.inputTokensIncludesCache
6595
6980
  exports.interfaceSchema = require_data_service.interfaceSchema;
6596
6981
  exports.isActionTool = require_data_service.isActionTool;
6597
6982
  exports.isAgentsEndpoint = require_data_service.isAgentsEndpoint;
6983
+ exports.isAnthropicDocumentType = require_data_service.isAnthropicDocumentType;
6984
+ exports.isAnthropicTextDocumentType = require_data_service.isAnthropicTextDocumentType;
6598
6985
  exports.isAssistantsEndpoint = require_data_service.isAssistantsEndpoint;
6599
6986
  exports.isBedrockDocumentType = require_data_service.isBedrockDocumentType;
6600
6987
  exports.isDocumentSupportedProvider = require_data_service.isDocumentSupportedProvider;
@@ -6607,8 +6994,10 @@ exports.isPermissiveMimeConfig = require_data_service.isPermissiveMimeConfig;
6607
6994
  exports.isRemoteOidcUrlAllowed = require_data_service.isRemoteOidcUrlAllowed;
6608
6995
  exports.isSensitiveEnvVar = require_data_service.isSensitiveEnvVar;
6609
6996
  exports.isSystemRoleName = isSystemRoleName;
6997
+ exports.isThinkingDisabled = isThinkingDisabled;
6610
6998
  exports.isUUID = require_data_service.isUUID;
6611
6999
  exports.label = label;
7000
+ exports.langfuseConfigSchema = require_data_service.langfuseConfigSchema;
6612
7001
  exports.librechat = librechat;
6613
7002
  exports.loginPage = require_data_service.loginPage;
6614
7003
  exports.mapGroupToAzureConfig = mapGroupToAzureConfig;
@@ -6630,6 +7019,8 @@ exports.modularEndpoints = require_data_service.modularEndpoints;
6630
7019
  exports.multiConvoPermissionsSchema = multiConvoPermissionsSchema;
6631
7020
  exports.navigationMenu = navigationMenu;
6632
7021
  exports.normalizeEndpointName = require_data_service.normalizeEndpointName;
7022
+ exports.normalizeMCPToolKey = require_data_service.normalizeMCPToolKey;
7023
+ exports.normalizeServerName = require_data_service.normalizeServerName;
6633
7024
  exports.ocrSchema = require_data_service.ocrSchema;
6634
7025
  exports.omitsSamplingParameters = omitsSamplingParameters;
6635
7026
  exports.omitsThinkingByDefault = omitsThinkingByDefault;
@@ -6666,10 +7057,12 @@ exports.remoteAgentsPermissionsSchema = remoteAgentsPermissionsSchema;
6666
7057
  exports.removeNullishValues = require_data_service.removeNullishValues;
6667
7058
  exports.replaceSpecialVars = replaceSpecialVars;
6668
7059
  exports.request = require_data_service.request_default;
7060
+ exports.requiresExplicitThinkingDisabled = requiresExplicitThinkingDisabled;
6669
7061
  exports.resolveEndpointType = require_data_service.resolveEndpointType;
6670
7062
  exports.resolveRef = resolveRef;
6671
7063
  exports.resolveThinkingDisplay = resolveThinkingDisplay;
6672
7064
  exports.resourcePermissionsResponseSchema = require_data_service.resourcePermissionsResponseSchema;
7065
+ exports.retainRecentConfigSchema = require_data_service.retainRecentConfigSchema;
6673
7066
  exports.retrievalMimeTypes = require_data_service.retrievalMimeTypes;
6674
7067
  exports.retrievalMimeTypesList = require_data_service.retrievalMimeTypesList;
6675
7068
  exports.roleDefaults = roleDefaults;
@@ -6678,6 +7071,8 @@ exports.runCodePermissionsSchema = runCodePermissionsSchema;
6678
7071
  exports.select = select;
6679
7072
  exports.separator = separator;
6680
7073
  exports.setAcceptLanguageHeader = require_data_service.setAcceptLanguageHeader;
7074
+ exports.setFileConfigRegexCompiler = require_data_service.setFileConfigRegexCompiler;
7075
+ exports.setMessageFilterRegexValidator = require_data_service.setMessageFilterRegexValidator;
6681
7076
  exports.setTokenHeader = require_data_service.setTokenHeader;
6682
7077
  exports.sha1 = sha1;
6683
7078
  exports.shadcnComponents = shadcnComponents;
@@ -6690,6 +7085,8 @@ exports.skillSyncGitHubSourceSchema = require_data_service.skillSyncGitHubSource
6690
7085
  exports.slider = slider;
6691
7086
  exports.specialVariables = require_data_service.specialVariables;
6692
7087
  exports.specsConfigSchema = require_data_service.specsConfigSchema;
7088
+ exports.splitMCPToolKey = require_data_service.splitMCPToolKey;
7089
+ exports.splitToolCallName = require_data_service.splitToolCallName;
6693
7090
  exports.stripAgentIdSuffix = stripAgentIdSuffix;
6694
7091
  exports.summarizationConfigSchema = require_data_service.summarizationConfigSchema;
6695
7092
  exports.summarizationTriggerSchema = require_data_service.summarizationTriggerSchema;
@@ -6722,6 +7119,9 @@ exports.toast = toast;
6722
7119
  exports.toaster = toaster;
6723
7120
  exports.toggle = toggle;
6724
7121
  exports.toggleGroup = toggleGroup;
7122
+ exports.toolApprovalHookConfigSchema = require_data_service.toolApprovalHookConfigSchema;
7123
+ exports.toolApprovalModeSchema = require_data_service.toolApprovalModeSchema;
7124
+ exports.toolApprovalPolicySchema = require_data_service.toolApprovalPolicySchema;
6725
7125
  exports.tooltip = tooltip;
6726
7126
  exports.transactionsSchema = require_data_service.transactionsSchema;
6727
7127
  exports.turnstileOptionsSchema = require_data_service.turnstileOptionsSchema;