librechat-data-provider 0.8.521 → 0.8.523

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 (64) hide show
  1. package/dist/{data-service-pwrlWjJs.mjs → data-service-Bx6IFaSa.mjs} +1770 -51
  2. package/dist/data-service-Bx6IFaSa.mjs.map +1 -0
  3. package/dist/{data-service-DOIF4BkW.js → data-service-CTX0tVO5.js} +2509 -112
  4. package/dist/data-service-CTX0tVO5.js.map +1 -0
  5. package/dist/index.js +1503 -54
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +1314 -55
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/react-query/index.js +2 -1
  10. package/dist/react-query/index.js.map +1 -1
  11. package/dist/react-query/index.mjs +2 -1
  12. package/dist/react-query/index.mjs.map +1 -1
  13. package/dist/types/accessPermissions.d.ts +58 -1
  14. package/dist/types/actions.d.ts +2 -2
  15. package/dist/types/agentToolOptions.d.ts +11 -0
  16. package/dist/types/api-endpoints.d.ts +24 -0
  17. package/dist/types/bedrock.d.ts +238 -10
  18. package/dist/types/cadence.d.ts +33 -0
  19. package/dist/types/code/approval.d.ts +26 -0
  20. package/dist/types/code/worker.d.ts +10 -0
  21. package/dist/types/code/workspace.d.ts +28 -0
  22. package/dist/types/codeEnvRef.d.ts +26 -0
  23. package/dist/types/config.d.ts +13180 -3021
  24. package/dist/types/data-service.d.ts +48 -2
  25. package/dist/types/errors.d.ts +2 -0
  26. package/dist/types/file-config.d.ts +138 -9
  27. package/dist/types/filters.d.ts +1422 -0
  28. package/dist/types/generate.d.ts +103 -1
  29. package/dist/types/index.d.ts +17 -0
  30. package/dist/types/keys.d.ts +33 -2
  31. package/dist/types/langchain.d.ts +4 -0
  32. package/dist/types/limits.d.ts +13 -0
  33. package/dist/types/mcp.d.ts +555 -460
  34. package/dist/types/messages.d.ts +24 -0
  35. package/dist/types/models.d.ts +1112 -319
  36. package/dist/types/parameterSettings.d.ts +13 -1
  37. package/dist/types/parsers.d.ts +10 -0
  38. package/dist/types/permissions.d.ts +42 -1
  39. package/dist/types/providers.d.ts +37 -0
  40. package/dist/types/request.d.ts +2 -2
  41. package/dist/types/resolve-llm-delivery-path.d.ts +68 -0
  42. package/dist/types/roles.d.ts +34 -0
  43. package/dist/types/runSteps.d.ts +59 -0
  44. package/dist/types/schemas.d.ts +1724 -248
  45. package/dist/types/stateful-code.d.ts +7 -0
  46. package/dist/types/svg.d.ts +34 -0
  47. package/dist/types/types/agents.d.ts +116 -7
  48. package/dist/types/types/assistants.d.ts +121 -6
  49. package/dist/types/types/files.d.ts +46 -2
  50. package/dist/types/types/index.d.ts +2 -0
  51. package/dist/types/types/insights.d.ts +71 -0
  52. package/dist/types/types/mutations.d.ts +1 -0
  53. package/dist/types/types/queries.d.ts +37 -2
  54. package/dist/types/types/queuedTurns.d.ts +870 -0
  55. package/dist/types/types/runs.d.ts +119 -9
  56. package/dist/types/types/schedules.d.ts +339 -0
  57. package/dist/types/types/skills.d.ts +9 -0
  58. package/dist/types/types/subagents.d.ts +159 -0
  59. package/dist/types/types/traces.d.ts +85 -0
  60. package/dist/types/types/web.d.ts +12 -2
  61. package/dist/types/types.d.ts +101 -1
  62. package/package.json +5 -3
  63. package/dist/data-service-DOIF4BkW.js.map +0 -1
  64. package/dist/data-service-pwrlWjJs.mjs.map +0 -1
@@ -30,6 +30,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
30
30
  }) : target, mod));
31
31
  //#endregion
32
32
  let zod = require("zod");
33
+ let re2js = require("re2js");
33
34
  let axios = require("axios");
34
35
  axios = __toESM(axios);
35
36
  //#region src/utils.ts
@@ -97,6 +98,304 @@ function normalizeEndpointName(name = "") {
97
98
  return name.toLowerCase() === "ollama" ? "ollama" : name;
98
99
  }
99
100
  //#endregion
101
+ //#region src/filters.ts
102
+ const FILTER_PII_STARTER_PATTERNS = [
103
+ "sk_prefix",
104
+ "bearer_header",
105
+ "api_key_header"
106
+ ];
107
+ const MAX_PII_PATTERNS_PER_SOURCE = 256;
108
+ const MAX_PII_PATTERN_LENGTH = 512;
109
+ const MAX_PII_PATTERN_ID_LENGTH = 256;
110
+ const MAX_PII_PATTERN_LABEL_LENGTH = 512;
111
+ const MAX_PII_CUSTOM_REGEX_CHARACTERS = 8192;
112
+ const MAX_PII_CUSTOM_REGEX_INSTRUCTIONS = 8192;
113
+ const MAX_PII_CUSTOM_PATTERNS_TOTAL = 256;
114
+ const MAX_PII_REGEX_SIZE_CACHE_ENTRIES = 512;
115
+ const PII_REGEX_PROGRAM_SIZE_CACHE = /* @__PURE__ */ new Map();
116
+ function getPiiRegexProgramSize(pattern) {
117
+ if (PII_REGEX_PROGRAM_SIZE_CACHE.has(pattern)) return PII_REGEX_PROGRAM_SIZE_CACHE.get(pattern) ?? null;
118
+ let programSize = null;
119
+ let compiled;
120
+ try {
121
+ compiled = re2js.RE2JS.compile(pattern);
122
+ const candidate = compiled.programSize();
123
+ if (Number.isSafeInteger(candidate) && candidate > 0) programSize = candidate;
124
+ } catch {
125
+ programSize = null;
126
+ } finally {
127
+ compiled?.reset();
128
+ }
129
+ if (PII_REGEX_PROGRAM_SIZE_CACHE.size >= MAX_PII_REGEX_SIZE_CACHE_ENTRIES) PII_REGEX_PROGRAM_SIZE_CACHE.clear();
130
+ PII_REGEX_PROGRAM_SIZE_CACHE.set(pattern, programSize);
131
+ return programSize;
132
+ }
133
+ const MESSAGE_FILTER_FIELDS = [
134
+ "name",
135
+ "text",
136
+ "summary",
137
+ "quote",
138
+ "answer",
139
+ "decision_response",
140
+ "decision_reason",
141
+ "content_part",
142
+ "attachment_reference",
143
+ "assembled_context"
144
+ ];
145
+ const HITL_MESSAGE_FILTER_FIELDS = [
146
+ "answer",
147
+ "decision_response",
148
+ "decision_reason"
149
+ ];
150
+ const REQUEST_ONLY_MESSAGE_FILTER_FIELDS = new Set(HITL_MESSAGE_FILTER_FIELDS);
151
+ /** Message fields structurally recoverable without exact semantic provenance. */
152
+ const STORED_MESSAGE_FILTER_FIELDS = MESSAGE_FILTER_FIELDS.filter((field) => !REQUEST_ONLY_MESSAGE_FILTER_FIELDS.has(field));
153
+ const PROMPT_FILTER_FIELDS = [
154
+ "name",
155
+ "description",
156
+ "oneliner",
157
+ "category",
158
+ "command",
159
+ "text",
160
+ "preset_text",
161
+ "system",
162
+ "context",
163
+ "instructions",
164
+ "additional_instructions",
165
+ "greeting",
166
+ "example_input",
167
+ "example_output"
168
+ ];
169
+ const AGENT_INSTRUCTION_FILTER_FIELDS = [
170
+ "name",
171
+ "category",
172
+ "description",
173
+ "instructions",
174
+ "additional_instructions",
175
+ "edge_description",
176
+ "edge_prompt",
177
+ "edge_prompt_key",
178
+ "artifacts",
179
+ "support_contact_name",
180
+ "support_contact_email"
181
+ ];
182
+ const CONVERSATION_STARTER_FILTER_FIELDS = ["text"];
183
+ const CONVERSATION_TITLE_FILTER_FIELDS = ["title"];
184
+ const FEEDBACK_FILTER_FIELDS = ["text"];
185
+ const SKILL_FILTER_FIELDS = [
186
+ "name",
187
+ "display_title",
188
+ "description",
189
+ "category",
190
+ "frontmatter",
191
+ "instructions",
192
+ "imported_text",
193
+ "file_name",
194
+ "file_text"
195
+ ];
196
+ const MEMORY_FILTER_FIELDS = [
197
+ "key",
198
+ "value",
199
+ "summary"
200
+ ];
201
+ const FILE_FILTER_FIELDS = [
202
+ "name",
203
+ "content",
204
+ "extracted_text",
205
+ "transcript",
206
+ "uri"
207
+ ];
208
+ const TOOL_ARGUMENT_FILTER_FIELDS = [
209
+ "name",
210
+ "arguments",
211
+ "output"
212
+ ];
213
+ const MODEL_PARAMETER_FILTER_FIELDS = [
214
+ "stop",
215
+ "request_fields",
216
+ "response_format",
217
+ "metadata"
218
+ ];
219
+ const ACTION_METADATA_FILTER_FIELDS = [
220
+ "raw_spec",
221
+ "domain",
222
+ "privacy_policy_url",
223
+ "authorization_type",
224
+ "custom_auth_header",
225
+ "authorization_content_type",
226
+ "authorization_url",
227
+ "client_url",
228
+ "scope",
229
+ "token_exchange_method",
230
+ "api_key",
231
+ "oauth_client_id",
232
+ "oauth_client_secret"
233
+ ];
234
+ const messageFilterFieldSchema = zod.z.enum(MESSAGE_FILTER_FIELDS);
235
+ const promptFilterFieldSchema = zod.z.enum(PROMPT_FILTER_FIELDS);
236
+ const agentInstructionFilterFieldSchema = zod.z.enum(AGENT_INSTRUCTION_FILTER_FIELDS);
237
+ const conversationStarterFilterFieldSchema = zod.z.enum(CONVERSATION_STARTER_FILTER_FIELDS);
238
+ const conversationTitleFilterFieldSchema = zod.z.enum(CONVERSATION_TITLE_FILTER_FIELDS);
239
+ const feedbackFilterFieldSchema = zod.z.enum(FEEDBACK_FILTER_FIELDS);
240
+ const skillFilterFieldSchema = zod.z.enum(SKILL_FILTER_FIELDS);
241
+ const memoryFilterFieldSchema = zod.z.enum(MEMORY_FILTER_FIELDS);
242
+ const fileFilterFieldSchema = zod.z.enum(FILE_FILTER_FIELDS);
243
+ const toolArgumentFilterFieldSchema = zod.z.enum(TOOL_ARGUMENT_FILTER_FIELDS);
244
+ const modelParameterFilterFieldSchema = zod.z.enum(MODEL_PARAMETER_FILTER_FIELDS);
245
+ const filterPiiStarterPatternSchema = zod.z.enum(FILTER_PII_STARTER_PATTERNS);
246
+ const filterPiiActionSchema = zod.z.enum(["block", "audit"]);
247
+ const actionMetadataFilterFieldSchema = zod.z.enum(ACTION_METADATA_FILTER_FIELDS);
248
+ const unattributedAssistantContentSchema = zod.z.enum(["model_output", "inspect"]);
249
+ const userSubmittedMessageFieldPathSchema = zod.z.object({
250
+ path: zod.z.string().startsWith("/").max(2048),
251
+ field: zod.z.enum(HITL_MESSAGE_FILTER_FIELDS)
252
+ }).strict();
253
+ const UNINSPECTABLE_FILE_FIELDS = new Set([
254
+ "content",
255
+ "extracted_text",
256
+ "transcript"
257
+ ]);
258
+ /**
259
+ * An omitted starter selection enables the built-in catalog. An explicit
260
+ * empty selection disables it, so a source is active only when custom rules
261
+ * remain. This mirrors the documented filter semantics without compiling
262
+ * regular expressions.
263
+ */
264
+ function hasActivePiiPatterns(config) {
265
+ return config != null && (config.starterPatterns == null || config.starterPatterns.length > 0 || (config.customPatterns?.length ?? 0) > 0);
266
+ }
267
+ /** Returns whether an active PII rule can inspect at least one candidate field. */
268
+ function hasActivePiiFields(config, candidates) {
269
+ return hasActivePiiPatterns(config) && (config?.fields == null || candidates.some((field) => config.fields?.includes(field)));
270
+ }
271
+ /**
272
+ * Returns whether a parsed source-aware config can enforce any rule. An
273
+ * explicit fail-close file policy remains active even without text patterns.
274
+ */
275
+ function hasActiveFiltersConfig(filters) {
276
+ if (filters == null) return false;
277
+ if (filters.messages?.unattributedAssistantContent === "inspect") return true;
278
+ if ([
279
+ filters.messages?.pii,
280
+ filters.prompts?.pii,
281
+ filters.agentInstructions?.pii,
282
+ filters.conversationStarters?.pii,
283
+ filters.conversationTitles?.pii,
284
+ filters.feedback?.pii,
285
+ filters.skills?.pii,
286
+ filters.memories?.pii,
287
+ filters.files?.pii,
288
+ filters.toolArguments?.pii,
289
+ filters.modelParameters?.pii,
290
+ filters.actionMetadata?.pii
291
+ ].some(hasActivePiiPatterns)) return true;
292
+ const filePii = filters.files?.pii;
293
+ return filePii?.uninspectable === "block" && (filePii.fields == null || filePii.fields.some((field) => UNINSPECTABLE_FILE_FIELDS.has(field)));
294
+ }
295
+ const filterPiiRegexSchema = zod.z.string().min(1).max(512).refine((value) => getPiiRegexProgramSize(value) != null, { message: "Regex must use supported linear-time syntax" });
296
+ const filterPiiCustomPatternSchema = zod.z.object({
297
+ id: zod.z.string().min(1).max(256),
298
+ label: zod.z.string().min(1).max(512),
299
+ regex: filterPiiRegexSchema
300
+ }).strict();
301
+ function createPiiFilterSchema(fieldSchema) {
302
+ return zod.z.object({
303
+ action: filterPiiActionSchema.optional(),
304
+ fields: zod.z.array(fieldSchema).min(1).max(256).optional(),
305
+ starterPatterns: zod.z.array(filterPiiStarterPatternSchema).max(256).optional(),
306
+ customPatterns: zod.z.array(filterPiiCustomPatternSchema).max(256).optional()
307
+ }).strict();
308
+ }
309
+ function createSourceFilterSchema(fieldSchema) {
310
+ return zod.z.object({ pii: createPiiFilterSchema(fieldSchema).optional() }).strict();
311
+ }
312
+ const messageSourceFilterSchema = zod.z.object({
313
+ pii: createPiiFilterSchema(messageFilterFieldSchema).optional(),
314
+ unattributedAssistantContent: unattributedAssistantContentSchema.optional()
315
+ }).strict();
316
+ const fileSourceFilterSchema = zod.z.object({ pii: createPiiFilterSchema(fileFilterFieldSchema).extend({ uninspectable: zod.z.enum(["allow", "block"]).optional() }).optional() }).strict();
317
+ const filtersConfigSchema = zod.z.object({
318
+ messages: messageSourceFilterSchema.optional(),
319
+ prompts: createSourceFilterSchema(promptFilterFieldSchema).optional(),
320
+ agentInstructions: createSourceFilterSchema(agentInstructionFilterFieldSchema).optional(),
321
+ conversationStarters: createSourceFilterSchema(conversationStarterFilterFieldSchema).optional(),
322
+ conversationTitles: createSourceFilterSchema(conversationTitleFilterFieldSchema).optional(),
323
+ feedback: createSourceFilterSchema(feedbackFilterFieldSchema).optional(),
324
+ skills: createSourceFilterSchema(skillFilterFieldSchema).optional(),
325
+ memories: createSourceFilterSchema(memoryFilterFieldSchema).optional(),
326
+ files: fileSourceFilterSchema.optional(),
327
+ toolArguments: createSourceFilterSchema(toolArgumentFilterFieldSchema).optional(),
328
+ modelParameters: createSourceFilterSchema(modelParameterFilterFieldSchema).optional(),
329
+ actionMetadata: createSourceFilterSchema(actionMetadataFilterFieldSchema).optional()
330
+ }).strict().superRefine((filters, context) => {
331
+ let customPatterns = 0;
332
+ let regexCharacters = 0;
333
+ let regexInstructions = 0;
334
+ for (const source of Object.values(filters)) for (const pattern of source?.pii?.customPatterns ?? []) {
335
+ customPatterns++;
336
+ regexCharacters += pattern.regex.length;
337
+ regexInstructions += getPiiRegexProgramSize(pattern.regex) ?? 0;
338
+ }
339
+ if (customPatterns > 256) context.addIssue({
340
+ code: zod.z.ZodIssueCode.custom,
341
+ message: `At most 256 custom PII patterns may be configured in total`
342
+ });
343
+ if (regexCharacters > 8192) context.addIssue({
344
+ code: zod.z.ZodIssueCode.custom,
345
+ message: `Custom PII regexes may contain at most ${MAX_PII_CUSTOM_REGEX_CHARACTERS} characters in total`
346
+ });
347
+ if (regexInstructions > 8192) context.addIssue({
348
+ code: zod.z.ZodIssueCode.custom,
349
+ message: `Custom PII regexes may compile to at most ${MAX_PII_CUSTOM_REGEX_INSTRUCTIONS} instructions in total`
350
+ });
351
+ });
352
+ //#endregion
353
+ //#region src/code/workspace.ts
354
+ const CODE_WORKSPACE_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/;
355
+ /** Protocol-v1 ceiling enforced by the worker and Code API. */
356
+ const CODE_WORKSPACE_MAX_COUNT = 32;
357
+ /** API/client protocol for immutable conversation-owned environment decisions. */
358
+ const CODE_ENVIRONMENT_DECISION_VERSION = 1;
359
+ const CODE_WORKSPACE_OPERATIONS = [
360
+ "read_file",
361
+ "search_text",
362
+ "list_files",
363
+ "write_file",
364
+ "preview_edit",
365
+ "edit_file",
366
+ "execute_command"
367
+ ];
368
+ const CODE_WORKSPACE_SELECTION_ERROR_REASONS = [
369
+ "required",
370
+ "invalid",
371
+ "worker_unavailable",
372
+ "unsupported",
373
+ "missing",
374
+ "locked"
375
+ ];
376
+ const CODE_ENVIRONMENT_MODES = ["attached", "without_attached"];
377
+ function isCodeEnvironmentMode(value) {
378
+ return CODE_ENVIRONMENT_MODES.some((mode) => mode === value);
379
+ }
380
+ function isCodeWorkspaceSelectionErrorReason(value) {
381
+ return CODE_WORKSPACE_SELECTION_ERROR_REASONS.some((reason) => reason === value);
382
+ }
383
+ function isCodeWorkspaceSelection(value) {
384
+ if (value == null || typeof value !== "object" || Array.isArray(value)) return false;
385
+ const selection = value;
386
+ return Object.keys(selection).every((key) => key === "environmentId" || key === "workspaceId") && typeof selection.environmentId === "string" && CODE_WORKSPACE_ID_PATTERN.test(selection.environmentId) && typeof selection.workspaceId === "string" && CODE_WORKSPACE_ID_PATTERN.test(selection.workspaceId);
387
+ }
388
+ /** One exact workspace per attached environment used by a conversation. */
389
+ function isCodeWorkspaceSelections(value) {
390
+ if (!Array.isArray(value)) return false;
391
+ const environmentIds = /* @__PURE__ */ new Set();
392
+ return value.every((selection) => {
393
+ if (!isCodeWorkspaceSelection(selection) || environmentIds.has(selection.environmentId)) return false;
394
+ environmentIds.add(selection.environmentId);
395
+ return true;
396
+ });
397
+ }
398
+ //#endregion
100
399
  //#region src/feedback.ts
101
400
  const FEEDBACK_RATINGS = ["thumbsUp", "thumbsDown"];
102
401
  const FEEDBACK_REASON_KEYS = [
@@ -206,6 +505,82 @@ function getTagByKey(key) {
206
505
  return FEEDBACK_TAGS.find((tag) => tag.key === key);
207
506
  }
208
507
  //#endregion
508
+ //#region src/code/approval.ts
509
+ const CODE_APPROVAL_MODES = [
510
+ "ask",
511
+ "acceptEdits",
512
+ "fullAccess"
513
+ ];
514
+ const MODE_PERMISSIONS = {
515
+ ask: {
516
+ fileWrite: "ask",
517
+ commandExecution: "ask"
518
+ },
519
+ acceptEdits: {
520
+ fileWrite: "allow",
521
+ commandExecution: "ask"
522
+ },
523
+ fullAccess: {
524
+ fileWrite: "allow",
525
+ commandExecution: "allow"
526
+ }
527
+ };
528
+ /** Omitted deployment configuration never grants unattended execution. */
529
+ function getAllowedCodeApprovalModes({ enabled, allowedModes, configSchema, settings, environment }) {
530
+ if (enabled === false) return [];
531
+ const permitted = new Set(allowedModes ?? ["ask"]);
532
+ return CODE_APPROVAL_MODES.filter((mode) => {
533
+ if (!permitted.has(mode)) return false;
534
+ if (environment === "managed") return true;
535
+ for (const category of ["fileWrite", "commandExecution"]) {
536
+ if (MODE_PERMISSIONS[mode][category] !== "allow") continue;
537
+ const field = configSchema?.permissions?.[category];
538
+ const configured = settings?.permissions?.[category];
539
+ if ((configured != null && field?.allowed.includes(configured) === true ? configured : field?.default ?? "ask") === "deny" || field?.allowed.includes("allow") !== true) return false;
540
+ }
541
+ return true;
542
+ });
543
+ }
544
+ var CodeApprovalModeError = class extends Error {
545
+ constructor() {
546
+ super("The selected code approval mode is not permitted by the current policy.");
547
+ this.code = "CODE_APPROVAL_MODE_NOT_ALLOWED";
548
+ this.name = "CodeApprovalModeError";
549
+ }
550
+ };
551
+ /** Validate untrusted request state again at admission, including after policy changes. */
552
+ function resolveCodeApprovalMode(requested, constraints) {
553
+ if (requested == null) return void 0;
554
+ const selected = getAllowedCodeApprovalModes(constraints).find((mode) => mode === requested);
555
+ if (selected == null) throw new CodeApprovalModeError();
556
+ return selected;
557
+ }
558
+ /** Apply a turn preference without modifying machine settings or overriding an existing deny. */
559
+ function resolveCodePermissionDecision({ mode, category, decision }) {
560
+ if (mode == null || decision === "deny") return decision;
561
+ if (MODE_PERMISSIONS[mode] == null) throw new CodeApprovalModeError();
562
+ return MODE_PERMISSIONS[mode][category];
563
+ }
564
+ //#endregion
565
+ //#region src/stateful-code.ts
566
+ const STATEFUL_CODE_ENVIRONMENTS = [
567
+ "user",
568
+ "agent-user",
569
+ "conversation"
570
+ ];
571
+ /** Resolve a deployment allowlist in stable UI order. An omitted value preserves
572
+ * the backward-compatible behavior where every environment is available. */
573
+ function resolveAllowedStatefulCodeEnvironments(configured) {
574
+ if (configured == null) return [...STATEFUL_CODE_ENVIRONMENTS];
575
+ const configuredSet = new Set(configured);
576
+ return STATEFUL_CODE_ENVIRONMENTS.filter((environment) => configuredSet.has(environment));
577
+ }
578
+ /** Keep an allowed preference, otherwise select the first deployment-allowed scope. */
579
+ function resolveStatefulCodeEnvironment(preferred, configured) {
580
+ const allowed = resolveAllowedStatefulCodeEnvironments(configured);
581
+ return preferred != null && allowed.includes(preferred) ? preferred : allowed[0];
582
+ }
583
+ //#endregion
209
584
  //#region src/types/assistants.ts
210
585
  let Tools = /* @__PURE__ */ function(Tools) {
211
586
  Tools["execute_code"] = "execute_code";
@@ -230,6 +605,10 @@ let EToolResources = /* @__PURE__ */ function(EToolResources) {
230
605
  EToolResources["ocr"] = "ocr";
231
606
  return EToolResources;
232
607
  }({});
608
+ const agentGitIdentitySchema = zod.z.object({
609
+ name: zod.z.string().trim().min(1).max(128).refine((value) => !/[\0\r\n]/.test(value)),
610
+ email: zod.z.string().trim().email().max(254).refine((value) => !/[\0\r\n]/.test(value))
611
+ }).optional();
233
612
  let AnnotationTypes = /* @__PURE__ */ function(AnnotationTypes) {
234
613
  AnnotationTypes["FILE_CITATION"] = "file_citation";
235
614
  AnnotationTypes["FILE_PATH"] = "file_path";
@@ -421,7 +800,35 @@ const inputTokensIncludesCache = (provider) => {
421
800
  return cacheSubsetProviders.has(provider ?? "");
422
801
  };
423
802
  const isDocumentSupportedProvider = (provider) => {
424
- return documentSupportedProviders.has(provider ?? "");
803
+ const normalized = provider?.toLowerCase() ?? "";
804
+ return Array.from(documentSupportedProviders).some((candidate) => candidate.toLowerCase() === normalized);
805
+ };
806
+ /**
807
+ * Endpoints whose encoders actually build native audio/video payloads. Narrower than
808
+ * `documentSupportedProviders`: a provider can accept PDFs and still emit nothing for
809
+ * media, in which case the upload has to fall back to text/STT.
810
+ */
811
+ const mediaSupportedProviders = new Set([
812
+ "google",
813
+ "vertexai",
814
+ "openrouter"
815
+ ]);
816
+ const isMediaSupportedProvider = (provider) => {
817
+ return mediaSupportedProviders.has(provider?.toLowerCase() ?? "");
818
+ };
819
+ /**
820
+ * Built-in endpoint and provider identifiers. A name outside this set is a custom
821
+ * endpoint whose real provider is resolved at request time, so its capabilities
822
+ * cannot be judged from the name alone.
823
+ */
824
+ const knownProviderIdentifiers = new Set([
825
+ ...Object.values(EModelEndpoint),
826
+ ...Object.values(Providers),
827
+ ...Object.values(EModelEndpoint).map((provider) => provider.toLowerCase()),
828
+ ...Object.values(Providers).map((provider) => provider.toLowerCase())
829
+ ]);
830
+ const isKnownProviderIdentifier = (provider) => {
831
+ return knownProviderIdentifiers.has(provider?.toLowerCase() ?? "");
425
832
  };
426
833
  const paramEndpoints = new Set([
427
834
  "agents",
@@ -622,6 +1029,9 @@ const defaultAgentFormValues = {
622
1029
  ["file_search"]: false,
623
1030
  ["web_search"]: false,
624
1031
  ["memory"]: false,
1032
+ stateful_code_environment: "user",
1033
+ code_environment_id: void 0,
1034
+ code_workspace_id: void 0,
625
1035
  category: "general",
626
1036
  support_contact: {
627
1037
  name: "",
@@ -633,6 +1043,10 @@ const defaultAgentFormValues = {
633
1043
  /** Master toggle for skill use on this agent. `true` activates skills
634
1044
  * (full catalog unless `skills` narrows it). Anything else = inactive. */
635
1045
  skills_enabled: void 0,
1046
+ /** Enables runtime skill creation without exposing an existing skill catalog. */
1047
+ skill_authoring_enabled: void 0,
1048
+ /** Explicit catalog scope. Missing preserves the legacy enabled + empty = all behavior. */
1049
+ skills_scope: void 0,
636
1050
  /** `undefined` = feature disabled by default (no subagent tool injected). */
637
1051
  subagents: void 0,
638
1052
  /** Memory partition: 'agent' isolates memories per (user, agent); default shared pool */
@@ -650,6 +1064,8 @@ const ImageVisionTool = {
650
1064
  }
651
1065
  }
652
1066
  };
1067
+ /** Structural on purpose: accepts assistants tools/tool calls and agents function tool
1068
+ * calls alike — the check only ever reads `type` and `function.name`. */
653
1069
  const isImageVisionTool = (tool) => tool.type === "function" && tool.function?.name === ImageVisionTool.function?.name;
654
1070
  const openAISettings = {
655
1071
  model: { default: "gpt-4o-mini" },
@@ -708,8 +1124,45 @@ const getGoogleMaxOutputTokens = (modelName) => {
708
1124
  }
709
1125
  return GOOGLE_LEGACY_MAX_OUTPUT;
710
1126
  };
1127
+ /**
1128
+ * Per-model thinking budget bounds, documented in
1129
+ * `com_endpoint_google_thinking_budget`: Gemini 2.5 Pro accepts 128-32,768,
1130
+ * Flash accepts 0-24,576, and Flash Lite accepts 512-24,576. The generic
1131
+ * 32,000 in the shared definition both under-limits Pro and lets invalid
1132
+ * Flash values through.
1133
+ *
1134
+ * `-1` remains the "decide automatically" sentinel and is not part of these
1135
+ * floors. Callers must keep `range.min` at -1 and apply `min` only to
1136
+ * non-negative values.
1137
+ */
1138
+ const GOOGLE_THINKING_BUDGET_PRO_MAX = 32768;
1139
+ const GOOGLE_THINKING_BUDGET_FLASH_MAX = 24576;
1140
+ const GOOGLE_THINKING_BUDGET_PRO_MIN = 128;
1141
+ const GOOGLE_THINKING_BUDGET_FLASH_MIN = 0;
1142
+ const GOOGLE_THINKING_BUDGET_FLASH_LITE_MIN = 512;
1143
+ const getGoogleThinkingBudgetBounds = (modelName) => {
1144
+ if (!/gemini-2\.5/i.test(modelName)) return;
1145
+ if (/flash[-_.]?lite/i.test(modelName)) return {
1146
+ min: GOOGLE_THINKING_BUDGET_FLASH_LITE_MIN,
1147
+ max: GOOGLE_THINKING_BUDGET_FLASH_MAX
1148
+ };
1149
+ if (/flash/i.test(modelName)) return {
1150
+ min: GOOGLE_THINKING_BUDGET_FLASH_MIN,
1151
+ max: GOOGLE_THINKING_BUDGET_FLASH_MAX
1152
+ };
1153
+ if (/pro/i.test(modelName)) return {
1154
+ min: GOOGLE_THINKING_BUDGET_PRO_MIN,
1155
+ max: GOOGLE_THINKING_BUDGET_PRO_MAX
1156
+ };
1157
+ };
1158
+ const getGoogleThinkingBudgetMax = (modelName) => getGoogleThinkingBudgetBounds(modelName)?.max;
711
1159
  const googleSettings = {
712
1160
  model: { default: "gemini-1.5-flash-latest" },
1161
+ maxContextTokens: {
1162
+ min: 10,
1163
+ max: 2e6,
1164
+ step: 1e3
1165
+ },
713
1166
  maxOutputTokens: {
714
1167
  min: 1,
715
1168
  max: GOOGLE_MAX_OUTPUT,
@@ -928,12 +1381,21 @@ const tPluginSchema = zod.z.object({
928
1381
  authenticated: zod.z.boolean().optional(),
929
1382
  chatMenu: zod.z.boolean().optional(),
930
1383
  isButton: zod.z.boolean().optional(),
931
- toolkit: zod.z.boolean().optional()
1384
+ toolkit: zod.z.boolean().optional(),
1385
+ /** Raw upstream tool name when the model-facing key stripped a redundant
1386
+ * server-name prefix — proves upstream identity for legacy id migration. */
1387
+ serverToolName: zod.z.string().optional()
932
1388
  });
933
1389
  const tExampleSchema = zod.z.object({
934
1390
  input: zod.z.object({ content: zod.z.string() }),
935
1391
  output: zod.z.object({ content: zod.z.string() })
936
1392
  });
1393
+ /** Compact context-fading tier persisted beside a message's calibration ratio. */
1394
+ const agentFadingTierSchema = zod.z.object({
1395
+ v: zod.z.literal(1),
1396
+ budgetTokens: zod.z.number().positive(),
1397
+ masked: zod.z.boolean()
1398
+ });
937
1399
  const tMessageSchema = zod.z.object({
938
1400
  messageId: zod.z.string(),
939
1401
  endpoint: zod.z.string().optional(),
@@ -950,6 +1412,12 @@ const tMessageSchema = zod.z.object({
950
1412
  /** @deprecated */
951
1413
  generation: zod.z.string().nullable().optional(),
952
1414
  isCreatedByUser: zod.z.boolean(),
1415
+ /** True when the complete stored row came from outside the model. */
1416
+ isUserSubmitted: zod.z.boolean().optional(),
1417
+ /** JSON pointers to caller-authored fields in an otherwise mixed model response. */
1418
+ userSubmittedPaths: zod.z.array(zod.z.string().startsWith("/")).optional(),
1419
+ /** Exact HITL message-field identity for caller-authored values stored in mixed responses. */
1420
+ userSubmittedMessageFieldPaths: zod.z.array(userSubmittedMessageFieldPathSchema).optional(),
953
1421
  isTemporary: zod.z.boolean().optional(),
954
1422
  expiredAt: zod.z.string().nullable().optional(),
955
1423
  error: zod.z.boolean().optional(),
@@ -969,7 +1437,9 @@ const tMessageSchema = zod.z.object({
969
1437
  tokenCount: zod.z.number().optional(),
970
1438
  contextMeta: zod.z.object({
971
1439
  calibrationRatio: zod.z.number().optional().describe("EMA ratio of provider-reported vs local token estimates; seeds the pruner on subsequent runs"),
972
- encoding: zod.z.string().optional().describe("Tokenizer encoding used when this ratio was computed (e.g. \"claude\", \"o200k_base\")")
1440
+ encoding: zod.z.string().optional().describe("Tokenizer encoding used when this ratio was computed (e.g. \"claude\", \"o200k_base\")"),
1441
+ fading: agentFadingTierSchema.optional().describe("Latched context-fading tier of the default agent; seeds the next run so the provider projection of history keeps the same bytes"),
1442
+ fadingTiers: zod.z.array(agentFadingTierSchema.extend({ agentId: zod.z.string().min(1) })).optional().describe("Latched context-fading tiers keyed by agent ID, stored as entries")
973
1443
  }).optional(),
974
1444
  /**
975
1445
  * Skill names the user invoked manually via the `$` popover on this turn.
@@ -1007,6 +1477,19 @@ let MemoryScope = /* @__PURE__ */ function(MemoryScope) {
1007
1477
  MemoryScope["agent"] = "agent";
1008
1478
  return MemoryScope;
1009
1479
  }({});
1480
+ /** Catalog exposure for a persisted agent with skills enabled. */
1481
+ let SkillsScope = /* @__PURE__ */ function(SkillsScope) {
1482
+ SkillsScope["all"] = "all";
1483
+ SkillsScope["selected"] = "selected";
1484
+ SkillsScope["none"] = "none";
1485
+ return SkillsScope;
1486
+ }({});
1487
+ /** Resolves explicit and legacy persisted-agent skill catalog states. */
1488
+ function resolveAgentSkillsScope(skills, enabled, scope) {
1489
+ if (enabled !== true) return "none";
1490
+ if (scope !== void 0) return scope;
1491
+ return (skills ?? []).length > 0 ? "selected" : "all";
1492
+ }
1010
1493
  const coerceNumber = zod.z.union([zod.z.number(), zod.z.string()]).transform((val) => {
1011
1494
  if (typeof val === "string") return val.trim() === "" ? void 0 : parseFloat(val);
1012
1495
  return val;
@@ -1019,14 +1502,32 @@ const DocumentType = zod.z.lazy(() => zod.z.union([
1019
1502
  zod.z.array(zod.z.lazy(() => DocumentType)),
1020
1503
  zod.z.record(zod.z.lazy(() => DocumentType))
1021
1504
  ]));
1505
+ const subagentThreadLineageSchema = zod.z.object({
1506
+ rootConversationId: zod.z.string().min(1),
1507
+ parentConversationId: zod.z.string().min(1),
1508
+ parentMessageId: zod.z.string().min(1),
1509
+ parentToolCallId: zod.z.string().min(1),
1510
+ parentAgentId: zod.z.string().min(1).optional(),
1511
+ subagentType: zod.z.string().min(1),
1512
+ subagentKind: zod.z.enum(["agent", "graph"]),
1513
+ depth: zod.z.number().int().positive()
1514
+ });
1022
1515
  const tConversationSchema = zod.z.object({
1023
1516
  conversationId: zod.z.string().nullable(),
1024
1517
  endpoint: eModelEndpointSchema.nullable(),
1025
1518
  endpointType: eModelEndpointSchema.nullable().optional(),
1026
1519
  isArchived: zod.z.boolean().optional(),
1520
+ /** When the chat was archived; absent on chats archived before this was recorded. */
1521
+ archivedAt: zod.z.string().nullable().optional(),
1027
1522
  pinned: zod.z.boolean().optional(),
1028
1523
  /** Server-derived: an active shared link exists for this conversation. Not persisted. */
1029
1524
  isShared: zod.z.boolean().optional(),
1525
+ codeApprovalMode: zod.z.enum(CODE_APPROVAL_MODES).optional(),
1526
+ codeEnvironmentMode: zod.z.enum(CODE_ENVIRONMENT_MODES).optional(),
1527
+ codeWorkspaces: zod.z.array(zod.z.object({
1528
+ environmentId: zod.z.string().regex(CODE_WORKSPACE_ID_PATTERN),
1529
+ workspaceId: zod.z.string().regex(CODE_WORKSPACE_ID_PATTERN)
1530
+ }).strict()).optional(),
1030
1531
  title: zod.z.string().nullable().or(zod.z.literal("New Chat")).default("New Chat"),
1031
1532
  user: zod.z.string().optional(),
1032
1533
  messages: zod.z.array(zod.z.string()).optional(),
@@ -1075,6 +1576,8 @@ const tConversationSchema = zod.z.object({
1075
1576
  disableStreaming: zod.z.boolean().optional(),
1076
1577
  assistant_id: zod.z.string().optional(),
1077
1578
  agent_id: zod.z.string().optional(),
1579
+ /** Durable parent/child navigation for a subagent thread. */
1580
+ subagentThread: subagentThreadLineageSchema.optional(),
1078
1581
  region: zod.z.string().optional(),
1079
1582
  maxTokens: coerceNumber.optional(),
1080
1583
  additionalModelRequestFields: DocumentType.optional(),
@@ -1230,6 +1733,26 @@ const tModelSpecPresetSchema = tPresetSchema.omit({
1230
1733
  chatGptLabel: true,
1231
1734
  presetOverride: true,
1232
1735
  spec: true
1736
+ }).merge(zod.z.object({
1737
+ /**
1738
+ * Optional here, unlike `tPresetSchema`, where the key is required (though
1739
+ * nullable). A preset naming an `agent_id` has an unambiguous endpoint, so
1740
+ * config may omit it and `resolveModelSpecEndpoint` infers `agents` when
1741
+ * specs are materialized at config load.
1742
+ */
1743
+ endpoint: extendedModelEndpointSchema.nullish() })).superRefine((preset, ctx) => {
1744
+ /**
1745
+ * Omission is only legal when the endpoint is inferable, which requires a
1746
+ * NON-EMPTY `agent_id` — form-backed writers persist untouched fields as
1747
+ * `''`, which names no agent. An explicit `endpoint: null` stays accepted:
1748
+ * it validated before the key became optional, so rejecting it now would
1749
+ * break previously valid configs.
1750
+ */
1751
+ if (preset.endpoint === void 0 && !preset.agent_id) ctx.addIssue({
1752
+ code: zod.z.ZodIssueCode.custom,
1753
+ path: ["endpoint"],
1754
+ message: "endpoint is required unless the preset names a non-empty agent_id (the agents endpoint is then inferred)"
1755
+ });
1233
1756
  });
1234
1757
  const tSharedLinkSchema = zod.z.object({
1235
1758
  conversationId: zod.z.string(),
@@ -1258,6 +1781,7 @@ const googleBaseSchema = tConversationSchema.pick({
1258
1781
  examples: true,
1259
1782
  temperature: true,
1260
1783
  maxOutputTokens: true,
1784
+ resendFiles: true,
1261
1785
  artifacts: true,
1262
1786
  topP: true,
1263
1787
  topK: true,
@@ -1516,15 +2040,39 @@ const requiredSettingFields = [
1516
2040
  "type",
1517
2041
  "component"
1518
2042
  ];
2043
+ function clampSettingRange(value, range) {
2044
+ if (range.positiveMin != null) {
2045
+ /** The minimum carries its own meaning here (Google's -1 for automatic),
2046
+ * and the schema admits it outright, so it survives rather than being
2047
+ * lifted to the floor. It need not be negative to be the sentinel. */
2048
+ if (value === range.min) return range.min;
2049
+ /** Below the sentinel there is nothing admissible to lift to, so the value
2050
+ * resolves to it. Between the sentinel and the floor, the floor is the
2051
+ * nearest value the generated schema accepts. */
2052
+ if (value < Math.max(range.min, 0)) return range.min;
2053
+ return Math.min(Math.max(value, range.positiveMin), range.max);
2054
+ }
2055
+ return Math.min(Math.max(value, range.min), range.max);
2056
+ }
1519
2057
  function generateDynamicSchema(settings) {
1520
2058
  const schemaFields = {};
1521
2059
  for (const setting of settings) {
1522
2060
  const { key, type, default: defaultValue, range, options, minText, maxText, minTags, maxTags } = setting;
1523
2061
  if (type === "number") {
1524
- let schema = zod.z.number();
2062
+ let numberSchema = zod.z.number();
1525
2063
  if (range) {
1526
- schema = schema.min(range.min);
1527
- schema = schema.max(range.max);
2064
+ numberSchema = numberSchema.min(range.min);
2065
+ numberSchema = numberSchema.max(range.max);
2066
+ }
2067
+ /** Widened deliberately: refine returns ZodEffects, not ZodNumber, and
2068
+ * the number-specific chaining is already done above. */
2069
+ let schema = numberSchema;
2070
+ if (range?.positiveMin != null) {
2071
+ /** Mirrors clampSettingRange so the generated schema and the clamp
2072
+ * agree: `min` only admits the sentinel, and any non-negative value
2073
+ * must clear the documented floor. */
2074
+ const { positiveMin, min } = range;
2075
+ schema = numberSchema.refine((value) => value === min || value >= positiveMin, `Expected ${min} or a value of at least ${positiveMin}`);
1528
2076
  }
1529
2077
  if (typeof defaultValue === "number") schemaFields[key] = schema.default(defaultValue);
1530
2078
  else schemaFields[key] = schema;
@@ -1666,7 +2214,14 @@ function validateSettingDefinitions(settings) {
1666
2214
  setting.includeInput = setting.type === "number" ? setting.includeInput ?? true : false;
1667
2215
  }
1668
2216
  if (setting.component === "slider" && setting.type === "number") {
1669
- if (setting.default === void 0 && setting.range) setting.default = Math.round((setting.range.min + setting.range.max) / 2);
2217
+ if (setting.default === void 0 && setting.range) {
2218
+ /** The midpoint of the admissible interval, which a positive floor
2219
+ * narrows: the span between the sentinel and that floor holds no value
2220
+ * the generated schema accepts, so a midpoint taken across it would
2221
+ * fail the validation below. */
2222
+ const floor = Math.max(setting.range.min, setting.range.positiveMin ?? setting.range.min);
2223
+ setting.default = Math.round((floor + setting.range.max) / 2);
2224
+ }
1670
2225
  }
1671
2226
  if (setting.component === "checkbox" || setting.component === "switch") {
1672
2227
  if (setting.options && setting.options.length > 2) errors.push({
@@ -1744,6 +2299,16 @@ function validateSettingDefinitions(settings) {
1744
2299
  message: `Invalid default value for setting ${setting.key}. Must be within the range [${setting.range.min}, ${setting.range.max}].`,
1745
2300
  path: ["default"]
1746
2301
  });
2302
+ if (setting.type === "number" && setting.range?.positiveMin != null && setting.range.positiveMin > setting.range.max) errors.push({
2303
+ code: zod.ZodIssueCode.custom,
2304
+ message: `Invalid range for setting ${setting.key}. positiveMin (${setting.range.positiveMin}) cannot exceed max (${setting.range.max}).`,
2305
+ path: ["range"]
2306
+ });
2307
+ if (setting.type === "number" && setting.range?.positiveMin != null && typeof setting.default === "number" && setting.default !== setting.range.min && setting.default < setting.range.positiveMin) errors.push({
2308
+ code: zod.ZodIssueCode.custom,
2309
+ message: `Invalid default value for setting ${setting.key}. Must be ${setting.range.min} or at least ${setting.range.positiveMin}.`,
2310
+ path: ["default"]
2311
+ });
1747
2312
  if (setting.enumMappings && setting.type === "enum" && setting.options) {
1748
2313
  for (const option of setting.options) if (!(option in setting.enumMappings)) errors.push({
1749
2314
  code: zod.ZodIssueCode.custom,
@@ -1845,13 +2410,84 @@ const generateGoogleSchema = (customGoogle) => {
1845
2410
  //#region src/limits.ts
1846
2411
  /** Maximum number of explicit subagents per parent agent. UI + Zod schema share this. */
1847
2412
  const MAX_SUBAGENTS = 10;
2413
+ /** Hard upper bound for `endpoints.agents.maxSubagents`, keeping the request-validation
2414
+ * cap bounded no matter what the config file says. */
2415
+ const MAX_SUBAGENTS_CEILING = 50;
2416
+ let maxSubagents = 10;
2417
+ /** Effective subagents-per-agent cap; initialized from `endpoints.agents.maxSubagents` at startup. */
2418
+ const getMaxSubagents = () => maxSubagents;
2419
+ /** Applies a configured cap; any missing or out-of-range value resets to the default. */
2420
+ const setMaxSubagents = (value) => {
2421
+ maxSubagents = typeof value === "number" && Number.isInteger(value) && value >= 1 && value <= 50 ? value : 10;
2422
+ };
2423
+ /** Chat project field limits. The dialogs and the persistence layer share these,
2424
+ * so the inputs stop at the same point the server would otherwise truncate. */
2425
+ const MAX_CHAT_PROJECT_NAME_LENGTH = 100;
2426
+ const MAX_CHAT_PROJECT_DESCRIPTION_LENGTH = 1e3;
2427
+ /** Mirrors the bounded graph-child member limit in `@librechat/agents`. */
2428
+ const MAX_GRAPH_SUBAGENT_MEMBERS = 32;
1848
2429
  //#endregion
1849
2430
  //#region src/models.ts
1850
2431
  const modelSpecSubagentsSchema = zod.z.object({
1851
2432
  enabled: zod.z.boolean().optional(),
1852
2433
  allowSelf: zod.z.boolean().optional(),
1853
- agent_ids: zod.z.array(zod.z.string()).max(10).optional()
2434
+ shareFiles: zod.z.boolean().optional(),
2435
+ agent_ids: zod.z.array(zod.z.string()).optional()
2436
+ }).superRefine((subagents, ctx) => {
2437
+ const maxSubagents = getMaxSubagents();
2438
+ if ((subagents.agent_ids?.length ?? 0) > maxSubagents) ctx.addIssue({
2439
+ code: zod.z.ZodIssueCode.custom,
2440
+ path: ["agent_ids"],
2441
+ message: `agent_ids must contain at most ${maxSubagents} item(s)`
2442
+ });
1854
2443
  });
2444
+ function resolveModelSpecEndpoint(modelSpec) {
2445
+ const preset = modelSpec?.preset;
2446
+ if (preset?.endpoint != null) return preset.endpoint;
2447
+ /**
2448
+ * An explicit `endpoint: null` is a statement, not an omission — such specs
2449
+ * validated (and were skipped downstream) before inference existed, so
2450
+ * inferring here would silently activate them. Only an absent key infers,
2451
+ * and only from a non-empty `agent_id`: form-backed writers persist
2452
+ * untouched fields as `''`, which names no agent.
2453
+ */
2454
+ if (preset?.endpoint === null) return;
2455
+ return preset?.agent_id ? "agents" : void 0;
2456
+ }
2457
+ /**
2458
+ * Writes each spec's resolved endpoint back onto its preset so every consumer —
2459
+ * endpoint matching, the selector, access filters, startup presets, provider-key
2460
+ * reachability — reads a complete spec instead of re-deriving it. Apply once
2461
+ * where the effective config is assembled (YAML load and DB-override merge);
2462
+ * downstream code then needs no awareness of inference.
2463
+ *
2464
+ * Returns the original object, and the original spec objects, when nothing
2465
+ * needs filling in, so cached configs and memoized consumers see no new
2466
+ * identities.
2467
+ */
2468
+ function materializeModelSpecEndpoints(modelSpecs) {
2469
+ const list = modelSpecs?.list;
2470
+ if (!list?.length) return modelSpecs;
2471
+ let changed = false;
2472
+ const materialized = list.map((spec) => {
2473
+ if (spec?.preset == null || spec.preset.endpoint != null) return spec;
2474
+ const endpoint = resolveModelSpecEndpoint(spec);
2475
+ if (endpoint == null) return spec;
2476
+ changed = true;
2477
+ return {
2478
+ ...spec,
2479
+ preset: {
2480
+ ...spec.preset,
2481
+ endpoint
2482
+ }
2483
+ };
2484
+ });
2485
+ if (!changed) return modelSpecs;
2486
+ return {
2487
+ ...modelSpecs,
2488
+ list: materialized
2489
+ };
2490
+ }
1855
2491
  const tModelSpecSchema = zod.z.object({
1856
2492
  name: zod.z.string(),
1857
2493
  label: zod.z.string(),
@@ -2077,6 +2713,49 @@ const bedrockDocumentFormats = {
2077
2713
  "text/plain": "txt",
2078
2714
  "text/markdown": "md"
2079
2715
  };
2716
+ /**
2717
+ * Whether an upload belongs to the conversation rather than to the agent. The value
2718
+ * arrives from multipart form data, so it can be the string "false", which is truthy.
2719
+ * Shared so the route, the authorization check and processing cannot disagree about it.
2720
+ */
2721
+ const isMessageFileUpload = (value) => value === true || value === "true";
2722
+ /**
2723
+ * Whether the upload's conversation uses the Responses API, which decides whether Azure
2724
+ * can carry a document natively. Multipart form data has no booleans, so it arrives as
2725
+ * the string "true".
2726
+ */
2727
+ const isResponsesApiUpload = (value) => value === true || value === "true";
2728
+ /**
2729
+ * The name a file carries inside the code sandbox.
2730
+ *
2731
+ * Image uploads are converted to the configured output type while the record keeps the
2732
+ * original filename, so the extension has to follow the stored bytes or the sandbox
2733
+ * decoder is handed a mismatch. Provisioning and priming both resolve the mount path
2734
+ * from here: deriving it twice under different rules leaves a later turn advertising a
2735
+ * path that does not exist in the sandbox.
2736
+ */
2737
+ const resolveSandboxFilename = (filename, mimeType) => {
2738
+ if (!mimeType?.startsWith("image/")) return filename;
2739
+ const subtype = mimeType.slice(6);
2740
+ if (![
2741
+ "webp",
2742
+ "png",
2743
+ "jpeg",
2744
+ "gif"
2745
+ ].includes(subtype)) return filename;
2746
+ const accepted = subtype === "jpeg" ? [".jpg", ".jpeg"] : [`.${subtype}`];
2747
+ const lastDot = filename.lastIndexOf(".");
2748
+ const currentExt = lastDot > 0 ? filename.slice(lastDot).toLowerCase() : "";
2749
+ if (accepted.includes(currentExt)) return filename;
2750
+ return `${lastDot > 0 ? filename.slice(0, lastDot) : filename}${accepted[0]}`;
2751
+ };
2752
+ /**
2753
+ * The Responses setting a turn actually runs on. A saved agent's own record wins, since
2754
+ * execution reads its model parameters; a conversation only answers for itself. Upload
2755
+ * and delivery must agree here, or a document is stored as raw provider content and then
2756
+ * re-resolved to text it has no extraction for.
2757
+ */
2758
+ const resolveUseResponsesApi = (agentValue, conversationValue) => agentValue ?? conversationValue ?? void 0;
2080
2759
  const isBedrockDocumentType = (mimeType) => mimeType != null && mimeType in bedrockDocumentFormats;
2081
2760
  /** MIME types Bedrock's Converse document path can send to the model (mirrors `bedrockDocumentFormats`). */
2082
2761
  const bedrockDocumentMimeTypes = Object.keys(bedrockDocumentFormats);
@@ -2310,6 +2989,8 @@ const mbToBytes = (mb) => mb * megabyte;
2310
2989
  const defaultSizeLimit = mbToBytes(512);
2311
2990
  const defaultSkillImportSizeLimit = mbToBytes(50);
2312
2991
  const defaultTokenLimit = 1e5;
2992
+ const defaultContextSizeLimit = mbToBytes(128);
2993
+ const defaultContextCharLimit = 1e6;
2313
2994
  const assistantsFileConfig = {
2314
2995
  fileLimit: 10,
2315
2996
  fileSizeLimit: defaultSizeLimit,
@@ -2341,11 +3022,14 @@ const fileConfig = {
2341
3022
  serverFileSizeLimit: defaultSizeLimit,
2342
3023
  avatarSizeLimit: mbToBytes(2),
2343
3024
  fileTokenLimit: defaultTokenLimit,
3025
+ fileContextSizeLimit: defaultContextSizeLimit,
3026
+ fileContextCharLimit: defaultContextCharLimit,
2344
3027
  clientImageResize: {
2345
3028
  enabled: false,
2346
3029
  maxWidth: 1900,
2347
3030
  maxHeight: 1900,
2348
- quality: .92
3031
+ quality: .92,
3032
+ enforced: false
2349
3033
  },
2350
3034
  ocr: { supportedMimeTypes: defaultOCRMimeTypes },
2351
3035
  text: { supportedMimeTypes: defaultTextMimeTypes },
@@ -2355,12 +3039,23 @@ const fileConfig = {
2355
3039
  }
2356
3040
  };
2357
3041
  const supportedMimeTypesSchema = zod.z.array(zod.z.string()).optional();
3042
+ const DefaultLLMDeliveryPath = zod.z.enum([
3043
+ "provider",
3044
+ "text",
3045
+ "none"
3046
+ ]);
3047
+ const defaultLLMDeliveryPathSchema = zod.z.object({
3048
+ fallback: DefaultLLMDeliveryPath.optional(),
3049
+ overrides: zod.z.record(DefaultLLMDeliveryPath).optional()
3050
+ });
2358
3051
  const endpointFileConfigSchema = zod.z.object({
2359
3052
  disabled: zod.z.boolean().optional(),
2360
3053
  fileLimit: zod.z.number().min(0).optional(),
2361
3054
  fileSizeLimit: zod.z.number().min(0).optional(),
2362
3055
  totalSizeLimit: zod.z.number().min(0).optional(),
2363
- supportedMimeTypes: supportedMimeTypesSchema.optional()
3056
+ supportedMimeTypes: supportedMimeTypesSchema.optional(),
3057
+ defaultLLMDeliveryPath: defaultLLMDeliveryPathSchema.optional(),
3058
+ legacyFileUploadUX: zod.z.boolean().optional()
2364
3059
  });
2365
3060
  const skillFileConfigSchema = zod.z.object({ fileSizeLimit: zod.z.number().min(0).optional() });
2366
3061
  const fileConfigSchema = zod.z.object({
@@ -2369,18 +3064,23 @@ const fileConfigSchema = zod.z.object({
2369
3064
  serverFileSizeLimit: zod.z.number().min(0).optional(),
2370
3065
  avatarSizeLimit: zod.z.number().min(0).optional(),
2371
3066
  fileTokenLimit: zod.z.number().min(0).optional(),
3067
+ fileContextSizeLimit: zod.z.number().min(0).optional(),
3068
+ fileContextCharLimit: zod.z.number().min(0).optional(),
3069
+ codeEnvLivenessSafeWindowMs: zod.z.number().min(0).optional(),
2372
3070
  imageGeneration: zod.z.object({
2373
3071
  percentage: zod.z.number().min(0).max(100).optional(),
2374
3072
  px: zod.z.number().min(0).optional()
2375
3073
  }).optional(),
2376
3074
  clientImageResize: zod.z.object({
2377
3075
  enabled: zod.z.boolean().optional(),
2378
- maxWidth: zod.z.number().min(0).optional(),
2379
- maxHeight: zod.z.number().min(0).optional(),
3076
+ maxWidth: zod.z.number().min(1).optional(),
3077
+ maxHeight: zod.z.number().min(1).optional(),
2380
3078
  quality: zod.z.number().min(0).max(1).optional()
2381
3079
  }).optional(),
2382
3080
  ocr: zod.z.object({ supportedMimeTypes: supportedMimeTypesSchema.optional() }).optional(),
2383
- text: zod.z.object({ supportedMimeTypes: supportedMimeTypesSchema.optional() }).optional()
3081
+ text: zod.z.object({ supportedMimeTypes: supportedMimeTypesSchema.optional() }).optional(),
3082
+ defaultLLMDeliveryPath: defaultLLMDeliveryPathSchema.optional(),
3083
+ legacyFileUploadUX: zod.z.boolean().optional()
2384
3084
  });
2385
3085
  /**
2386
3086
  * Compiler for admin-supplied MIME patterns. Defaults to native `RegExp`, which browser
@@ -2516,6 +3216,12 @@ const documentMimeExtensions = [
2516
3216
  ["text/calendar", [".ics"]],
2517
3217
  ["message/rfc822", [".eml"]]
2518
3218
  ];
3219
+ /** Preferred extension for a known document MIME type, including its leading dot. */
3220
+ function getDocumentFileExtension(mimeType) {
3221
+ const normalized = mimeType?.split(";", 1)[0].trim().toLowerCase();
3222
+ const canonical = normalized === "text/comma-separated-values" ? "text/csv" : normalized;
3223
+ return documentMimeExtensions.find(([type]) => type === canonical)?.[1][0];
3224
+ }
2519
3225
  const documentMimeSet = new Set(documentMimeExtensions.map(([mimeType]) => mimeType));
2520
3226
  /** Every MIME type LibreChat may accept, used to detect patterns that reach beyond the representable set. */
2521
3227
  const knownMimeUniverse = Array.from(new Set([
@@ -2609,7 +3315,45 @@ function mergeWithDefault(endpointConfig, defaultConfig, endpoint) {
2609
3315
  fileLimit: endpointConfig.fileLimit ?? defaultConfig.fileLimit,
2610
3316
  fileSizeLimit: endpointConfig.fileSizeLimit ?? defaultConfig.fileSizeLimit,
2611
3317
  totalSizeLimit: endpointConfig.totalSizeLimit ?? defaultConfig.totalSizeLimit,
2612
- supportedMimeTypes: endpointConfig.supportedMimeTypes ?? defaultMimeTypes
3318
+ supportedMimeTypes: endpointConfig.supportedMimeTypes ?? defaultMimeTypes,
3319
+ defaultLLMDeliveryPath: mergeDeliveryPathConfig(endpointConfig.defaultLLMDeliveryPath, defaultConfig.defaultLLMDeliveryPath),
3320
+ legacyFileUploadUX: endpointConfig.legacyFileUploadUX ?? defaultConfig.legacyFileUploadUX
3321
+ };
3322
+ }
3323
+ /**
3324
+ * Deep-merges delivery-path config so an endpoint that supplies only one override
3325
+ * still inherits the default's fallback and shared overrides. Whole-object
3326
+ * replacement would silently drop the inherited routing.
3327
+ */
3328
+ function mergeDeliveryPathConfig(endpointValue, defaultValue) {
3329
+ if (!endpointValue) return defaultValue;
3330
+ if (!defaultValue) return endpointValue;
3331
+ if (endpointValue.fallback != null) return endpointValue;
3332
+ const hasOverrides = endpointValue.overrides != null || defaultValue.overrides != null;
3333
+ return {
3334
+ ...defaultValue.fallback != null ? { fallback: defaultValue.fallback } : {},
3335
+ ...hasOverrides ? { overrides: { ...shadowByWildcard(defaultValue.overrides, endpointValue.overrides) } } : {}
3336
+ };
3337
+ }
3338
+ /**
3339
+ * Flattens two override layers into one map that still resolves like the layered chain.
3340
+ * Resolution reads exact keys before wildcards, so a plain spread would let a lower
3341
+ * layer's `image/png` outrank the upper layer's `image/*`. Dropping the entries an
3342
+ * upper wildcard covers restores precedence without changing how lookups work.
3343
+ */
3344
+ function shadowByWildcard(lower, upper) {
3345
+ if (!lower) return { ...upper };
3346
+ const upperWildcards = /* @__PURE__ */ new Set();
3347
+ for (const key in upper) if (key.endsWith("/*")) upperWildcards.add(key.slice(0, -1));
3348
+ if (upperWildcards.size === 0) return {
3349
+ ...lower,
3350
+ ...upper
3351
+ };
3352
+ const retained = {};
3353
+ for (const key in lower) if (!(!key.endsWith("/*") && upperWildcards.has(key.slice(0, key.indexOf("/") + 1)) && upper?.[key] == null)) retained[key] = lower[key];
3354
+ return {
3355
+ ...retained,
3356
+ ...upper
2613
3357
  };
2614
3358
  }
2615
3359
  function getEndpointFileConfig(params) {
@@ -2617,8 +3361,13 @@ function getEndpointFileConfig(params) {
2617
3361
  if (!mergedFileConfig?.endpoints) return fileConfig.endpoints.default;
2618
3362
  /** Compute an effective default by merging user-configured default over the base default */
2619
3363
  const baseDefaultConfig = fileConfig.endpoints.default;
3364
+ const globalDefaultConfig = {
3365
+ ...baseDefaultConfig,
3366
+ defaultLLMDeliveryPath: mergeDeliveryPathConfig(mergedFileConfig.defaultLLMDeliveryPath, baseDefaultConfig.defaultLLMDeliveryPath),
3367
+ legacyFileUploadUX: mergedFileConfig.legacyFileUploadUX ?? baseDefaultConfig.legacyFileUploadUX
3368
+ };
2620
3369
  const userDefaultConfig = mergedFileConfig.endpoints.default;
2621
- const defaultConfig = userDefaultConfig ? mergeWithDefault(userDefaultConfig, baseDefaultConfig, "default") : baseDefaultConfig;
3370
+ const defaultConfig = userDefaultConfig ? mergeWithDefault(userDefaultConfig, globalDefaultConfig, "default") : globalDefaultConfig;
2622
3371
  const normalizedEndpoint = normalizeEndpointName(endpoint ?? "");
2623
3372
  const standardEndpoints = new Set([
2624
3373
  "default",
@@ -2673,16 +3422,21 @@ function mergeFileConfig(dynamic) {
2673
3422
  }
2674
3423
  };
2675
3424
  if (!dynamic) return mergedConfig;
3425
+ if (dynamic.defaultLLMDeliveryPath !== void 0) mergedConfig.defaultLLMDeliveryPath = dynamic.defaultLLMDeliveryPath;
3426
+ if (dynamic.legacyFileUploadUX !== void 0) mergedConfig.legacyFileUploadUX = dynamic.legacyFileUploadUX;
2676
3427
  if (dynamic.serverFileSizeLimit !== void 0) mergedConfig.serverFileSizeLimit = mbToBytes(dynamic.serverFileSizeLimit);
2677
3428
  if (dynamic.avatarSizeLimit !== void 0) mergedConfig.avatarSizeLimit = mbToBytes(dynamic.avatarSizeLimit);
2678
3429
  if (dynamic.fileTokenLimit !== void 0) mergedConfig.fileTokenLimit = dynamic.fileTokenLimit;
3430
+ if (dynamic.fileContextSizeLimit !== void 0) mergedConfig.fileContextSizeLimit = mbToBytes(dynamic.fileContextSizeLimit);
3431
+ if (dynamic.fileContextCharLimit !== void 0) mergedConfig.fileContextCharLimit = dynamic.fileContextCharLimit;
2679
3432
  if (dynamic.skills?.fileSizeLimit !== void 0) mergedConfig.skills = {
2680
3433
  ...mergedConfig.skills,
2681
3434
  fileSizeLimit: mbToBytes(dynamic.skills.fileSizeLimit)
2682
3435
  };
2683
3436
  if (dynamic.clientImageResize !== void 0) mergedConfig.clientImageResize = {
2684
3437
  ...mergedConfig.clientImageResize,
2685
- ...dynamic.clientImageResize
3438
+ ...dynamic.clientImageResize,
3439
+ enforced: dynamic.clientImageResize.enabled !== void 0
2686
3440
  };
2687
3441
  if (dynamic.ocr !== void 0) {
2688
3442
  const { supportedMimeTypes: ocrMimeTypes, ...ocrRest } = dynamic.ocr;
@@ -2722,6 +3476,8 @@ function mergeFileConfig(dynamic) {
2722
3476
  });
2723
3477
  if (dynamicEndpoint.disabled !== void 0) mergedEndpoint.disabled = dynamicEndpoint.disabled;
2724
3478
  if (dynamicEndpoint.supportedMimeTypes) mergedEndpoint.supportedMimeTypes = convertStringsToRegex(dynamicEndpoint.supportedMimeTypes);
3479
+ if (dynamicEndpoint.defaultLLMDeliveryPath !== void 0) mergedEndpoint.defaultLLMDeliveryPath = dynamicEndpoint.defaultLLMDeliveryPath;
3480
+ if (dynamicEndpoint.legacyFileUploadUX !== void 0) mergedEndpoint.legacyFileUploadUX = dynamicEndpoint.legacyFileUploadUX;
2725
3481
  }
2726
3482
  return mergedConfig;
2727
3483
  }
@@ -2743,9 +3499,15 @@ const buildQuery = (params) => {
2743
3499
  };
2744
3500
  const health = () => `${BASE_URL}/health`;
2745
3501
  const user = () => `${BASE_URL}/api/user`;
3502
+ const userPreferences = () => `${user()}/preferences`;
2746
3503
  const balance = () => `${BASE_URL}/api/balance`;
2747
3504
  const userPlugins = () => `${BASE_URL}/api/user/plugins`;
2748
3505
  const deleteUser$1 = () => `${BASE_URL}/api/user/delete`;
3506
+ const codeEnvironments = () => `${BASE_URL}/api/code-environments`;
3507
+ const codeEnvironmentPairings = () => `${codeEnvironments()}/pairings`;
3508
+ const codeEnvironmentById = (id) => `${codeEnvironments()}/${encodeURIComponent(id)}`;
3509
+ const codeEnvironmentSettings = (id) => `${codeEnvironmentById(id)}/settings`;
3510
+ const codeEnvironmentStatus = (id) => `${codeEnvironmentById(id)}/status`;
2749
3511
  const messagesRoot = `${BASE_URL}/api/messages`;
2750
3512
  const messages = (params) => {
2751
3513
  const { conversationId, messageId, ...rest } = params;
@@ -2786,9 +3548,17 @@ const conversations = (params) => {
2786
3548
  return `${conversationsRoot}${buildQuery(params)}`;
2787
3549
  };
2788
3550
  const conversationById = (id) => `${conversationsRoot}/${id}`;
3551
+ const parentSubagents = (parentConversationId) => `${conversationsRoot}/${encodeURIComponent(parentConversationId)}/subagents`;
3552
+ const subagentThread = (parentConversationId, threadId, taskId, cursor) => {
3553
+ const endpoint = `${conversationsRoot}/${encodeURIComponent(parentConversationId)}/subagents/${encodeURIComponent(threadId)}`;
3554
+ if (taskId != null) return `${endpoint}?taskId=${encodeURIComponent(taskId)}`;
3555
+ return cursor == null ? endpoint : `${endpoint}?cursor=${encodeURIComponent(cursor)}`;
3556
+ };
3557
+ const subagentControl = (parentConversationId, threadId) => `${conversationsRoot}/${encodeURIComponent(parentConversationId)}/subagents/${encodeURIComponent(threadId)}/control`;
2789
3558
  const genTitle$1 = (conversationId) => `${conversationsRoot}/gen_title/${encodeURIComponent(conversationId)}`;
2790
3559
  const updateConversation$1 = () => `${conversationsRoot}/update`;
2791
3560
  const archiveConversation$1 = () => `${conversationsRoot}/archive`;
3561
+ const archiveAllConversations$1 = () => `${conversationsRoot}/archive/all`;
2792
3562
  const pinConversation$1 = () => `${conversationsRoot}/pin`;
2793
3563
  const deleteConversation$1 = () => `${conversationsRoot}`;
2794
3564
  const deleteAllConversation = () => `${conversationsRoot}/all`;
@@ -2873,6 +3643,14 @@ const agents = ({ path = "", options }) => {
2873
3643
  return url;
2874
3644
  };
2875
3645
  const activeJobs = () => `${BASE_URL}/api/agents/chat/active`;
3646
+ const agentQueuedTurnsRoot = `${BASE_URL}/api/agents/chat/queued-turns`;
3647
+ const agentQueuedTurns = () => agentQueuedTurnsRoot;
3648
+ const agentQueuedTurnsByConversation = (conversationId, clientRequestIds = []) => {
3649
+ const uniqueIds = Array.from(new Set(clientRequestIds)).slice(0, 100);
3650
+ const knownIds = uniqueIds.length > 0 ? `&${uniqueIds.map((id) => `clientRequestIds=${encodeURIComponent(id)}`).join("&")}` : "";
3651
+ return `${agentQueuedTurnsRoot}?conversationId=${encodeURIComponent(conversationId)}${knownIds}`;
3652
+ };
3653
+ const agentQueuedTurn = (queuedTurnId) => `${agentQueuedTurnsRoot}/${encodeURIComponent(queuedTurnId)}`;
2876
3654
  const mcp = {
2877
3655
  tools: `${BASE_URL}/api/mcp/tools`,
2878
3656
  servers: `${BASE_URL}/api/mcp/servers`
@@ -2926,6 +3704,9 @@ const deletePrompt$1 = ({ _id, groupId }) => {
2926
3704
  };
2927
3705
  const getCategories$1 = () => `${BASE_URL}/api/categories`;
2928
3706
  const getAllPromptGroups$1 = () => `${prompts()}/all`;
3707
+ const schedules = () => `${BASE_URL}/api/schedules`;
3708
+ const schedule = (id) => `${schedules()}/${encodeURIComponent(id)}`;
3709
+ const runSchedule = (id) => `${schedule(id)}/run`;
2929
3710
  const skills = () => `${BASE_URL}/api/skills`;
2930
3711
  const importSkill$1 = () => `${skills()}/import`;
2931
3712
  const getSkill$1 = (id) => `${skills()}/${encodeURIComponent(id)}`;
@@ -2939,6 +3720,15 @@ const listSkillsWithFilters = (filter) => {
2939
3720
  };
2940
3721
  const skillFiles = (id) => `${getSkill$1(id)}/files`;
2941
3722
  const skillFile = (id, relativePath) => `${skillFiles(id)}/${encodeURIComponent(relativePath)}`;
3723
+ const insights = () => `${BASE_URL}/api/insights`;
3724
+ const insightsAccess = () => `${insights()}/access`;
3725
+ const conversationTrace = (conversationId) => `${BASE_URL}/api/traces/${encodeURIComponent(conversationId)}`;
3726
+ const conversationTraceAvailability = (conversationId) => `${conversationTrace(conversationId)}/availability`;
3727
+ const conversationTraceRecords = (conversationId, cursor) => `${conversationTrace(conversationId)}/records${cursor ? `?${new URLSearchParams({ cursor }).toString()}` : ""}`;
3728
+ const conversationTraceRecord = (conversationId, recordId, messageId, sourceId) => `${conversationTrace(conversationId)}/records/${encodeURIComponent(recordId)}?${new URLSearchParams({
3729
+ message: messageId,
3730
+ ...sourceId ? { source: sourceId } : {}
3731
+ }).toString()}`;
2942
3732
  const adminSkillsSync = () => `${BASE_URL}/api/admin/skills/sync`;
2943
3733
  const adminSkillsSyncStatus = () => `${adminSkillsSync()}/status`;
2944
3734
  const adminSkillsSyncRun = () => `${adminSkillsSync()}/run`;
@@ -2947,6 +3737,7 @@ const skillStates = () => `${BASE_URL}/api/user/settings/skills/active`;
2947
3737
  const adminLangfuseConnection = () => `${BASE_URL}/api/admin/langfuse/connection`;
2948
3738
  const adminLangfuseConnectionTest = () => `${adminLangfuseConnection()}/test`;
2949
3739
  const adminLangfuseSessionLink = (conversationId) => `${adminLangfuseConnection()}/session/${encodeURIComponent(conversationId)}`;
3740
+ const pinnedOrder = () => `${BASE_URL}/api/user/settings/pinned-order`;
2950
3741
  const toolFavorites = () => `${BASE_URL}/api/user/settings/favorites/tools`;
2951
3742
  const toolFavorite = (itemType, itemId) => `${toolFavorites()}/${itemType}/${encodeURIComponent(itemId)}`;
2952
3743
  const roles = () => `${BASE_URL}/api/roles`;
@@ -2974,6 +3765,7 @@ const regenerateBackupCodes$1 = () => `${BASE_URL}/api/auth/2fa/backup/regenerat
2974
3765
  const verifyTwoFactorTemp$1 = () => `${BASE_URL}/api/auth/2fa/verify-temp`;
2975
3766
  const memories = () => `${BASE_URL}/api/memories`;
2976
3767
  const memory = (key, agentId) => `${memories()}/${encodeURIComponent(key)}${agentId ? `?agentId=${encodeURIComponent(agentId)}` : ""}`;
3768
+ const memoryById = (id, agentId) => `${memories()}/id/${encodeURIComponent(id)}${agentId ? `?agentId=${encodeURIComponent(agentId)}` : ""}`;
2977
3769
  const memoryPreferences = () => `${memories()}/preferences`;
2978
3770
  const searchPrincipals$1 = (params) => {
2979
3771
  const { q: query, limit, types } = params;
@@ -3017,6 +3809,7 @@ let FileContext = /* @__PURE__ */ function(FileContext) {
3017
3809
  FileContext["image_generation"] = "image_generation";
3018
3810
  FileContext["assistants_output"] = "assistants_output";
3019
3811
  FileContext["message_attachment"] = "message_attachment";
3812
+ FileContext["run_artifact"] = "run_artifact";
3020
3813
  FileContext["skill_file"] = "skill_file";
3021
3814
  FileContext["filename"] = "filename";
3022
3815
  FileContext["updatedAt"] = "updatedAt";
@@ -3047,6 +3840,12 @@ let TokenExchangeMethodEnum = /* @__PURE__ */ function(TokenExchangeMethodEnum)
3047
3840
  }({});
3048
3841
  //#endregion
3049
3842
  //#region src/mcp.ts
3843
+ /**
3844
+ * Upper bound on a stored MCP `iconPath` (URL or data URI). Enforced by
3845
+ * `sanitizeMcpIconPath`, not a schema `.max()`, so re-submitting a server whose
3846
+ * stored icon predates the cap clears the icon instead of rejecting the update.
3847
+ */
3848
+ const MAX_MCP_ICON_PATH_LENGTH = 256 * 1024;
3050
3849
  const validateOAuthClientCredentials = (oauth, ctx) => {
3051
3850
  if (oauth.client_secret && !oauth.client_id) ctx.addIssue({
3052
3851
  code: zod.z.ZodIssueCode.custom,
@@ -3151,9 +3950,11 @@ const UserOAuthOptionsSchema = OAuthOptionsBaseSchema.omit({
3151
3950
  const OboOptionsSchema = zod.z.object({
3152
3951
  /** Scopes to request for the downstream MCP server (e.g., "api://<client-id>/Mcp.Tools.ReadWrite") */
3153
3952
  scopes: zod.z.string().min(1) });
3953
+ const MCP_SERVER_TITLE_PATTERN = /* @__PURE__ */ new RegExp("^[\\p{L}\\p{N}][\\p{L}\\p{N}\\p{M}'’ -]*$", "u");
3954
+ const MCP_SERVER_TITLE_ERROR = "Title must start with a letter or number and can include spaces, hyphens, and apostrophes";
3154
3955
  const BaseOptionsSchema = zod.z.object({
3155
- /** Display name for the MCP server - only letters, numbers, and spaces allowed */
3156
- title: zod.z.string().regex(/^[a-zA-Z0-9 ]+$/, "Title can only contain letters, numbers, and spaces").optional(),
3956
+ /** Display name for the MCP server */
3957
+ title: zod.z.string().regex(MCP_SERVER_TITLE_PATTERN, MCP_SERVER_TITLE_ERROR).optional(),
3157
3958
  /** Description of the MCP server */
3158
3959
  description: zod.z.string().optional(),
3159
3960
  /**
@@ -3168,7 +3969,14 @@ const BaseOptionsSchema = zod.z.object({
3168
3969
  /** Timeout (ms) for the long-lived SSE GET stream body before undici aborts it. Default: 300_000 (5 min). */
3169
3970
  sseReadTimeout: zod.z.number().int().positive().optional(),
3170
3971
  initTimeout: zod.z.number().int().nonnegative().optional(),
3171
- /** Controls visibility in chat dropdown menu (MCPSelect) */
3972
+ /**
3973
+ * Whether the server is offered in chat.
3974
+ *
3975
+ * `false` hides it from the chat dropdown (MCPSelect) AND bars it from the
3976
+ * chat selection a request carries, so a stale or hand-written request cannot
3977
+ * reach it either. It does not restrict agents, nor a server a model spec
3978
+ * pins through `mcpServers` — both are the operator's own choice.
3979
+ */
3172
3980
  chatMenu: zod.z.boolean().optional(),
3173
3981
  /**
3174
3982
  * Controls server instruction behavior:
@@ -3224,6 +4032,26 @@ const ProxyUrlSchema = zod.z.string().transform((val) => extractEnvVariable(val)
3224
4032
  const protocol = new URL(val).protocol;
3225
4033
  return protocol === "http:" || protocol === "https:" || protocol === "socks:" || protocol === "socks5:";
3226
4034
  }, { message: "Proxy URL must use http://, https://, socks://, or socks5://" });
4035
+ const PROCESS_MCP_SERVER_FIELDS = new Set([
4036
+ "command",
4037
+ "args",
4038
+ "env",
4039
+ "cwd",
4040
+ "stderr"
4041
+ ]);
4042
+ function isProcessMCPServerField(field) {
4043
+ return PROCESS_MCP_SERVER_FIELDS.has(field);
4044
+ }
4045
+ function isProcessMCPServerConfig(value) {
4046
+ if (value == null || typeof value !== "object" || Array.isArray(value)) return false;
4047
+ const config = value;
4048
+ if (config.type === "stdio") return true;
4049
+ return Object.keys(config).some(isProcessMCPServerField);
4050
+ }
4051
+ function hasProcessMCPServerConfig(value) {
4052
+ if (value == null || typeof value !== "object" || Array.isArray(value)) return false;
4053
+ return Object.values(value).some(isProcessMCPServerConfig);
4054
+ }
3227
4055
  const StdioOptionsSchema = BaseOptionsSchema.extend({
3228
4056
  type: zod.z.literal("stdio").default("stdio"),
3229
4057
  obo: zod.z.undefined().optional(),
@@ -3396,7 +4224,7 @@ const defaultSocialLogins = [
3396
4224
  "discord",
3397
4225
  "saml"
3398
4226
  ];
3399
- const BASE_ONLY_CONFIG_SECTIONS = [];
4227
+ const BASE_ONLY_CONFIG_SECTIONS = ["filters"];
3400
4228
  /** Sections that may be stored in the tenant's base config document but must
3401
4229
  * not be overridden or tombstoned by role, group, or user config documents. */
3402
4230
  const BASE_PRINCIPAL_CONFIG_SECTIONS = ["langfuse"];
@@ -3424,6 +4252,14 @@ const defaultRetrievalModels = [
3424
4252
  ];
3425
4253
  const excludedKeys = new Set([
3426
4254
  "conversationId",
4255
+ "agentEventBinding",
4256
+ "agentEventActor",
4257
+ "agentEventActorCleanup",
4258
+ "agentEventActorSuspension",
4259
+ "agentEventActorReconciliations",
4260
+ "agentEventActorEpoch",
4261
+ "agentEventActorLegacyTurn",
4262
+ "subagentThread",
3427
4263
  "title",
3428
4264
  "iconURL",
3429
4265
  "greeting",
@@ -3435,6 +4271,8 @@ const excludedKeys = new Set([
3435
4271
  "isTemporary",
3436
4272
  "messages",
3437
4273
  "isArchived",
4274
+ "pinned",
4275
+ "archivedAt",
3438
4276
  "tags",
3439
4277
  "user",
3440
4278
  "__v",
@@ -3824,6 +4662,22 @@ const baseEndpointSchema = zod.z.object({
3824
4662
  activityPhasePrompt: zod.z.string().optional(),
3825
4663
  /** Cost cap: maximum phase summaries generated per run. Default 5. */
3826
4664
  activityPhaseMaxPerRun: zod.z.number().int().positive().optional(),
4665
+ /** Generates a live orientation label for sufficiently long top-level response reasoning. */
4666
+ reasoningLabel: zod.z.boolean().optional(),
4667
+ /** Model used for reasoning labels. Defaults to activityModel, titleModel, then run model. */
4668
+ reasoningLabelModel: zod.z.string().optional(),
4669
+ /** Endpoint receiving the bounded visible-reasoning snapshot. Defaults to activityEndpoint. */
4670
+ reasoningLabelEndpoint: zod.z.string().optional(),
4671
+ /** Overrides the dedicated reasoning-label system prompt. */
4672
+ reasoningLabelPrompt: zod.z.string().optional(),
4673
+ /** Characters required before the first reasoning label. Default 500. */
4674
+ reasoningLabelMinChars: zod.z.number().int().positive().optional(),
4675
+ /** New characters required between streaming revisions. Default 400. */
4676
+ reasoningLabelUpdateChars: zod.z.number().int().positive().optional(),
4677
+ /** Minimum milliseconds between streaming revisions. Default 3000. */
4678
+ reasoningLabelUpdateIntervalMs: zod.z.number().int().nonnegative().optional(),
4679
+ /** Cost cap: maximum reasoning-label provider calls attempted per run. Default 8. */
4680
+ reasoningLabelMaxPerRun: zod.z.number().int().positive().optional(),
3827
4681
  /** Maximum characters allowed in a single tool result before truncation. */
3828
4682
  maxToolResultChars: zod.z.number().positive().optional()
3829
4683
  });
@@ -3910,13 +4764,13 @@ function isRemoteOidcUrlAllowed(value) {
3910
4764
  }
3911
4765
  const remoteApiOidcUrlSchema = zod.z.string().url().refine(isRemoteOidcUrlAllowed, { message: "must use https:// unless targeting localhost" });
3912
4766
  const remoteApiOidcScopeSchema = zod.z.string().refine((scope) => !scope.includes(","), { message: "scopes must be space-separated" });
3913
- const remoteApiOidcSchema = zod.z.object({
4767
+ const oidcAccessTokenSchema = zod.z.object({
3914
4768
  enabled: zod.z.boolean().default(false),
3915
4769
  issuer: remoteApiOidcUrlSchema.optional(),
3916
4770
  audience: zod.z.string().min(1).optional(),
3917
- jwksUri: remoteApiOidcUrlSchema.optional(),
3918
- scope: remoteApiOidcScopeSchema.optional()
3919
- }).superRefine((oidc, ctx) => {
4771
+ jwksUri: remoteApiOidcUrlSchema.optional()
4772
+ });
4773
+ function validateEnabledOidc(oidc, ctx) {
3920
4774
  if (oidc.enabled === true && !oidc.issuer) ctx.addIssue({
3921
4775
  code: zod.z.ZodIssueCode.custom,
3922
4776
  path: ["issuer"],
@@ -3927,12 +4781,46 @@ const remoteApiOidcSchema = zod.z.object({
3927
4781
  path: ["audience"],
3928
4782
  message: "audience is required when OIDC auth is enabled"
3929
4783
  });
3930
- });
4784
+ }
4785
+ const remoteApiOidcSchema = oidcAccessTokenSchema.extend({ scope: remoteApiOidcScopeSchema.optional() }).superRefine(validateEnabledOidc);
3931
4786
  const remoteApiAuthSchema = zod.z.object({
3932
4787
  apiKey: zod.z.object({ enabled: zod.z.boolean().default(true) }).optional(),
3933
4788
  oidc: remoteApiOidcSchema.optional()
3934
4789
  });
3935
4790
  const remoteApiSchema = zod.z.object({ auth: remoteApiAuthSchema.optional() });
4791
+ const managementClientBindingSchema = zod.z.object({
4792
+ clientId: zod.z.string().trim().min(1).max(128),
4793
+ subject: zod.z.string().trim().min(1).max(512).optional(),
4794
+ userId: zod.z.string().trim().regex(/^[a-f\d]{24}$/i, "must be a MongoDB ObjectId").transform((userId) => userId.toLowerCase()),
4795
+ tenantId: zod.z.string().trim().min(1).max(128).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/, "must be a valid tenant id").refine((tenantId) => tenantId !== "__SYSTEM__", "system tenant is not allowed"),
4796
+ enabled: zod.z.boolean().default(true)
4797
+ }).strict();
4798
+ const managementApiOidcSchema = oidcAccessTokenSchema.strict().superRefine(validateEnabledOidc);
4799
+ const managementApiAuthSchema = zod.z.object({
4800
+ oidc: managementApiOidcSchema,
4801
+ clients: zod.z.array(managementClientBindingSchema).max(100).default([])
4802
+ }).strict().superRefine((auth, ctx) => {
4803
+ if (auth.oidc.enabled === true && auth.clients.length === 0) ctx.addIssue({
4804
+ code: zod.z.ZodIssueCode.custom,
4805
+ path: ["clients"],
4806
+ message: "at least one client binding is required when management auth is enabled"
4807
+ });
4808
+ const clientIds = /* @__PURE__ */ new Set();
4809
+ for (let index = 0; index < auth.clients.length; index++) {
4810
+ const client = auth.clients[index];
4811
+ if (clientIds.has(client.clientId)) ctx.addIssue({
4812
+ code: zod.z.ZodIssueCode.custom,
4813
+ path: [
4814
+ "clients",
4815
+ index,
4816
+ "clientId"
4817
+ ],
4818
+ message: "client IDs must be unique"
4819
+ });
4820
+ clientIds.add(client.clientId);
4821
+ }
4822
+ });
4823
+ const managementApiSchema = zod.z.object({ auth: managementApiAuthSchema.optional() }).strict();
3936
4824
  /**
3937
4825
  * Permission mode applied to a tool call. Mirrors `@librechat/agents`'s
3938
4826
  * `ToolPolicyMode` 1:1.
@@ -3955,7 +4843,7 @@ const toolApprovalModeSchema = zod.z.enum([
3955
4843
  *
3956
4844
  * Shape mirrors `@librechat/agents`'s `ToolPolicyConfig` so the host can map it
3957
4845
  * directly into `createToolPolicyHook(config)`. The SDK does the evaluation
3958
- * (`deny → bypass → allow → ask → dontAsk → fallthrough(ask)`); this config
4846
+ * (`deny → ask → allow → bypass → dontAsk → fallthrough(ask)`); this config
3959
4847
  * just describes the surface.
3960
4848
  *
3961
4849
  * Conventions:
@@ -4038,6 +4926,62 @@ const checkpointerSchema = zod.z.object({
4038
4926
  checkpointCollectionName: zod.z.string().optional(),
4039
4927
  checkpointWritesCollectionName: zod.z.string().optional()
4040
4928
  }).optional();
4929
+ const codeEnvironmentBaseURLSchema = zod.z.string().trim().url().refine((value) => {
4930
+ try {
4931
+ const url = new URL(value);
4932
+ return (url.protocol === "http:" || url.protocol === "https:") && !value.includes("?") && !value.includes("#") && url.search.length === 0 && url.hash.length === 0;
4933
+ } catch {
4934
+ return false;
4935
+ }
4936
+ }, { message: "Code environment baseURL must be an HTTP(S) base URL without query or fragment" });
4937
+ function isSecureCodeEnvironmentControlURL(baseURL) {
4938
+ try {
4939
+ const url = new URL(baseURL.trim());
4940
+ if (url.protocol === "https:") return true;
4941
+ if (url.protocol !== "http:") return false;
4942
+ return url.hostname === "localhost" || url.hostname === "127.0.0.1" || url.hostname === "[::1]";
4943
+ } catch {
4944
+ return false;
4945
+ }
4946
+ }
4947
+ const codeEnvironmentPermissionDecisionSchema = zod.z.enum([
4948
+ "allow",
4949
+ "ask",
4950
+ "deny"
4951
+ ]);
4952
+ const codeEnvironmentPermissionFieldSchema = zod.z.object({
4953
+ allowed: zod.z.array(codeEnvironmentPermissionDecisionSchema).min(1),
4954
+ default: codeEnvironmentPermissionDecisionSchema.optional().default("ask")
4955
+ }).strict().superRefine((field, context) => {
4956
+ if (!field.allowed.includes(field.default)) context.addIssue({
4957
+ code: zod.z.ZodIssueCode.custom,
4958
+ path: ["default"],
4959
+ message: "Permission default must be included in allowed values"
4960
+ });
4961
+ });
4962
+ /** Existing attached commands used a fixed 30-second execution budget. */
4963
+ const CODE_ENVIRONMENT_COMMAND_TIMEOUT_DEFAULT_MS = 3e4;
4964
+ /** Protocol-level ceiling; deployments may only lower this value. */
4965
+ const CODE_ENVIRONMENT_COMMAND_TIMEOUT_HARD_MAX_MS = 5 * 6e4;
4966
+ /**
4967
+ * Typed user-tunable surface for one attached code environment. Omitted fields
4968
+ * remain fixed at LibreChat's safe baseline. Isolation, networking, mounts,
4969
+ * privileged execution, and secrets are deliberately not representable here.
4970
+ */
4971
+ const codeEnvironmentUserConfigSchema = zod.z.object({
4972
+ permissions: zod.z.object({
4973
+ fileWrite: codeEnvironmentPermissionFieldSchema.optional(),
4974
+ commandExecution: codeEnvironmentPermissionFieldSchema.optional()
4975
+ }).strict().optional(),
4976
+ limits: zod.z.object({
4977
+ /** Maximum timeout a Bash invocation may request. Omission preserves
4978
+ * the historical 30-second command budget. */
4979
+ maxCommandTimeoutMs: zod.z.number().int().min(1).max(CODE_ENVIRONMENT_COMMAND_TIMEOUT_HARD_MAX_MS).optional() }).strict().optional()
4980
+ }).strict();
4981
+ const codeEnvironmentUserSettingsSchema = zod.z.object({ permissions: zod.z.object({
4982
+ fileWrite: codeEnvironmentPermissionDecisionSchema.optional(),
4983
+ commandExecution: codeEnvironmentPermissionDecisionSchema.optional()
4984
+ }).strict().optional() }).strict();
4041
4985
  const agentsEndpointSchema = baseEndpointSchema.omit({ baseURL: true }).merge(zod.z.object({
4042
4986
  recursionLimit: zod.z.number().optional(),
4043
4987
  disableBuilder: zod.z.boolean().optional().default(false),
@@ -4054,9 +4998,150 @@ const agentsEndpointSchema = baseEndpointSchema.omit({ baseURL: true }).merge(zo
4054
4998
  maxCitations: zod.z.number().min(1).max(50).optional().default(30),
4055
4999
  maxCitationsPerFile: zod.z.number().min(1).max(10).optional().default(7),
4056
5000
  minRelevanceScore: zod.z.number().min(0).max(1).optional().default(.45),
5001
+ /** Maximum explicit subagents per agent (`agent_ids` and `graphs`); raised from
5002
+ * the shipped default of 10 for orchestration-heavy deployments, bounded by
5003
+ * `MAX_SUBAGENTS_CEILING`. */
5004
+ maxSubagents: zod.z.number().int().min(1).max(50).optional().default(10),
5005
+ /** Run-scoped file access for explicitly opted-in subagent delegations. */
5006
+ fileSharing: zod.z.object({
5007
+ enabled: zod.z.boolean().optional().default(false),
5008
+ allowSiblingSharing: zod.z.boolean().optional().default(false),
5009
+ maxFiles: zod.z.number().int().min(1).max(1e3).optional().default(100),
5010
+ /** Aggregate disk budget for private output versions retained during a run. */
5011
+ maxPrivateBytes: zod.z.number().int().min(1).max(10737418240).optional().default(268435456),
5012
+ ttlMs: zod.z.number().int().min(1).max(864e5).optional().default(36e5)
5013
+ }).optional(),
5014
+ /** Maximum concurrent Code API uploads per route and authenticated principal. */
5015
+ codeApiUploadConcurrency: zod.z.number().int().min(1).max(100).optional().default(3),
5016
+ /** Maximum wall-clock time spent waiting on Code API rate limits per operation. */
5017
+ codeApiMaxRetryWaitMs: zod.z.number().int().min(0).max(3e5).optional().default(2e4),
4057
5018
  allowedProviders: zod.z.array(zod.z.union([zod.z.string(), eModelEndpointSchema])).optional(),
4058
5019
  capabilities: zod.z.array(zod.z.nativeEnum(AgentCapabilities)).optional().default(defaultAgentCapabilities),
5020
+ /** Controls which workspace-sharing scopes users may select for stateful code sessions.
5021
+ * Omit this block to preserve the legacy behavior of allowing every scope. */
5022
+ statefulCodeSessions: zod.z.object({
5023
+ allowedEnvironments: zod.z.array(zod.z.enum(STATEFUL_CODE_ENVIRONMENTS)).min(1),
5024
+ /** Server-only personal worker enrollment policy. Effective principal
5025
+ * policy may tighten, but never raise, the deployment ceiling. */
5026
+ principalWorkers: zod.z.object({
5027
+ enabled: zod.z.boolean().optional(),
5028
+ /** Defaults to five. Zero disables enrollment; existing machines remain usable. */
5029
+ maxPerUser: zod.z.number().int().min(0).max(Number.MAX_SAFE_INTEGER).optional()
5030
+ }).optional(),
5031
+ /** Operator-managed execution environments. Attached entries route to a
5032
+ * Code API deployment backed by an outbound librechat-code worker. */
5033
+ environments: zod.z.array(zod.z.object({
5034
+ id: zod.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/),
5035
+ name: zod.z.string().min(1).max(100),
5036
+ type: zod.z.enum(["managed", "attached"]),
5037
+ baseURL: codeEnvironmentBaseURLSchema,
5038
+ default: zod.z.boolean().optional(),
5039
+ /** Server-only outbound worker route. Removed from public config. */
5040
+ workerId: zod.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/).optional(),
5041
+ /** Distinguishes operator policy from a principal-authorized
5042
+ * environment merged into request-scoped server config. */
5043
+ owner: zod.z.enum(["deployment", "principal"]).optional().default("deployment"),
5044
+ /** Administrator-controlled user-tunable settings. Only fields
5045
+ * represented here may be changed by a principal. */
5046
+ configSchema: codeEnvironmentUserConfigSchema.optional(),
5047
+ /** Request-scoped effective settings for a principal-owned environment.
5048
+ * Deployment config should define defaults through configSchema instead. */
5049
+ settings: codeEnvironmentUserSettingsSchema.optional(),
5050
+ /** Server-only enrollment metadata. `tokenEnv` names an
5051
+ * environment variable and never contains the token itself. */
5052
+ pairing: zod.z.object({
5053
+ workerId: zod.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/).optional(),
5054
+ allowPrincipalWorkers: zod.z.boolean().optional().default(false),
5055
+ tokenEnv: zod.z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/)
5056
+ }).superRefine((pairing, pairingContext) => {
5057
+ if (pairing.workerId != null || pairing.allowPrincipalWorkers === true) return;
5058
+ pairingContext.addIssue({
5059
+ code: zod.z.ZodIssueCode.custom,
5060
+ message: "Pairing requires a workerId or principal workers"
5061
+ });
5062
+ }).optional()
5063
+ })).optional()
5064
+ }).superRefine((value, context) => {
5065
+ if (!value?.environments) return;
5066
+ const ids = /* @__PURE__ */ new Set();
5067
+ let defaults = 0;
5068
+ let executableEnvironments = 0;
5069
+ for (const environment of value.environments) {
5070
+ const pairingOnly = environment.pairing?.allowPrincipalWorkers === true && environment.pairing.workerId == null && environment.workerId == null;
5071
+ if (environment.pairing != null && environment.type !== "attached") context.addIssue({
5072
+ code: zod.z.ZodIssueCode.custom,
5073
+ message: "Only attached code environments may configure pairing",
5074
+ path: [
5075
+ "environments",
5076
+ environment.id,
5077
+ "pairing"
5078
+ ]
5079
+ });
5080
+ if (environment.pairing != null && environment.owner !== "deployment") context.addIssue({
5081
+ code: zod.z.ZodIssueCode.custom,
5082
+ message: "Only deployment-owned code environments may configure pairing",
5083
+ path: [
5084
+ "environments",
5085
+ environment.id,
5086
+ "pairing"
5087
+ ]
5088
+ });
5089
+ if (environment.pairing != null && !isSecureCodeEnvironmentControlURL(environment.baseURL)) context.addIssue({
5090
+ code: zod.z.ZodIssueCode.custom,
5091
+ message: "Paired code environments require HTTPS outside loopback development",
5092
+ path: [
5093
+ "environments",
5094
+ environment.id,
5095
+ "baseURL"
5096
+ ]
5097
+ });
5098
+ if (environment.workerId != null && environment.pairing?.workerId != null && environment.workerId !== environment.pairing.workerId) context.addIssue({
5099
+ code: zod.z.ZodIssueCode.custom,
5100
+ message: "Code environment workerId must match pairing.workerId",
5101
+ path: [
5102
+ "environments",
5103
+ environment.id,
5104
+ "workerId"
5105
+ ]
5106
+ });
5107
+ if (pairingOnly && environment.default === true) context.addIssue({
5108
+ code: zod.z.ZodIssueCode.custom,
5109
+ message: "Pairing-only code control planes cannot be execution defaults",
5110
+ path: [
5111
+ "environments",
5112
+ environment.id,
5113
+ "default"
5114
+ ]
5115
+ });
5116
+ if (ids.has(environment.id)) context.addIssue({
5117
+ code: zod.z.ZodIssueCode.custom,
5118
+ message: `Duplicate code environment id: ${environment.id}`,
5119
+ path: ["environments"]
5120
+ });
5121
+ ids.add(environment.id);
5122
+ if (!pairingOnly) {
5123
+ executableEnvironments += 1;
5124
+ if (environment.default === true) defaults += 1;
5125
+ }
5126
+ }
5127
+ if (executableEnvironments > 0 && defaults !== 1) context.addIssue({
5128
+ code: zod.z.ZodIssueCode.custom,
5129
+ message: "Exactly one stateful code environment must be the default",
5130
+ path: ["environments"]
5131
+ });
5132
+ }).optional(),
5133
+ /** Optional trusted origin for in-process agent event delivery. */
5134
+ eventDriven: zod.z.object({ selfUrl: zod.z.string().url().optional() }).optional(),
5135
+ /** Conversational background-task delivery policy. Automatic completion wakeups are
5136
+ * enabled unless an administrator explicitly restores poll-only behavior. */
5137
+ backgroundTasks: zod.z.object({
5138
+ completionWakeups: zod.z.boolean().optional().default(true),
5139
+ /** Cooperative cancellation for process-local ordinary tools. Off
5140
+ * by default so existing deployments opt into the new control. */
5141
+ ordinaryToolCancellation: zod.z.boolean().optional().default(false)
5142
+ }).optional(),
4059
5143
  skills: zod.z.object({ maxCatalogSkills: zod.z.number().int().min(1).max(100).optional() }).optional(),
5144
+ managementApi: managementApiSchema.optional(),
4060
5145
  remoteApi: remoteApiSchema.optional(),
4061
5146
  /** Human-in-the-loop tool approval policy. Off by default. */
4062
5147
  toolApproval: toolApprovalPolicySchema,
@@ -4068,7 +5153,8 @@ const agentsEndpointSchema = baseEndpointSchema.omit({ baseURL: true }).merge(zo
4068
5153
  capabilities: defaultAgentCapabilities,
4069
5154
  maxCitations: 30,
4070
5155
  maxCitationsPerFile: 7,
4071
- minRelevanceScore: .45
5156
+ minRelevanceScore: .45,
5157
+ maxSubagents: 10
4072
5158
  });
4073
5159
  const paramDefinitionSchema = zod.z.object({
4074
5160
  key: zod.z.string(),
@@ -4086,7 +5172,11 @@ const paramDefinitionSchema = zod.z.object({
4086
5172
  range: zod.z.object({
4087
5173
  min: zod.z.number(),
4088
5174
  max: zod.z.number(),
4089
- step: zod.z.number().optional()
5175
+ step: zod.z.number().optional(),
5176
+ positiveMin: zod.z.number().optional()
5177
+ }).refine((value) => value.positiveMin == null || value.positiveMin <= value.max, {
5178
+ message: "range.positiveMin cannot exceed range.max",
5179
+ path: ["positiveMin"]
4090
5180
  }).optional(),
4091
5181
  enumMappings: zod.z.record(zod.z.union([
4092
5182
  zod.z.number(),
@@ -4197,7 +5287,15 @@ const azureEndpointSchema = zod.z.object({
4197
5287
  activityPhaseModel: true,
4198
5288
  activityPhaseEndpoint: true,
4199
5289
  activityPhasePrompt: true,
4200
- activityPhaseMaxPerRun: true
5290
+ activityPhaseMaxPerRun: true,
5291
+ reasoningLabel: true,
5292
+ reasoningLabelModel: true,
5293
+ reasoningLabelEndpoint: true,
5294
+ reasoningLabelPrompt: true,
5295
+ reasoningLabelMinChars: true,
5296
+ reasoningLabelUpdateChars: true,
5297
+ reasoningLabelUpdateIntervalMs: true,
5298
+ reasoningLabelMaxPerRun: true
4201
5299
  }).partial()
4202
5300
  );
4203
5301
  /**
@@ -4301,6 +5399,21 @@ const sttSchema = zod.z.object({
4301
5399
  openai: sttOpenaiSchema.optional(),
4302
5400
  azureOpenAI: sttAzureOpenAISchema.optional()
4303
5401
  });
5402
+ /**
5403
+ * The speech providers a schema actually configures. `allowedAddresses` is transport
5404
+ * policy rather than a provider, and a provider key present but empty configures
5405
+ * nothing. The speech services accept a schema only when exactly one survives here, so
5406
+ * the upload router reads availability from the same list and never routes audio to a
5407
+ * transcription that cannot run.
5408
+ */
5409
+ function listConfiguredSpeechProviders(schema) {
5410
+ if (schema == null) return [];
5411
+ return Object.entries(schema).filter(([key, value]) => key !== "allowedAddresses" && value != null && typeof value === "object" && Object.keys(value).length > 0);
5412
+ }
5413
+ /** Whether a speech schema names exactly one usable provider. */
5414
+ function isSpeechProviderConfigured(schema) {
5415
+ return listConfiguredSpeechProviders(schema).length === 1;
5416
+ }
4304
5417
  const speechTab = zod.z.object({
4305
5418
  conversationMode: zod.z.boolean().optional(),
4306
5419
  advancedMode: zod.z.boolean().optional(),
@@ -4342,6 +5455,10 @@ let RateLimitPrefix = /* @__PURE__ */ function(RateLimitPrefix) {
4342
5455
  return RateLimitPrefix;
4343
5456
  }({});
4344
5457
  const rateLimitSchema = zod.z.object({
5458
+ agentEvents: zod.z.object({
5459
+ userMax: zod.z.number().int().positive().optional(),
5460
+ userWindowInMinutes: zod.z.number().positive().optional()
5461
+ }).optional(),
4345
5462
  fileUploads: zod.z.object({
4346
5463
  ipMax: zod.z.number().optional(),
4347
5464
  ipWindowInMinutes: zod.z.number().optional(),
@@ -4381,7 +5498,14 @@ const termsOfServiceSchema = zod.z.object({
4381
5498
  modalContent: zod.z.string().or(zod.z.array(zod.z.string())).optional()
4382
5499
  });
4383
5500
  const localizedStringSchema = zod.z.union([zod.z.string(), zod.z.record(zod.z.string())]);
5501
+ const mcpRefreshDefaults = {
5502
+ toolsRefreshInterval: 300 * 1e3,
5503
+ statusRefreshInterval: 30 * 1e3
5504
+ };
4384
5505
  const mcpServersSchema = zod.z.object({
5506
+ /** Foreground polling intervals in milliseconds; 0 disables polling. */
5507
+ toolsRefreshInterval: zod.z.number().int().nonnegative().max(2147483647).optional(),
5508
+ statusRefreshInterval: zod.z.number().int().nonnegative().max(2147483647).optional(),
4385
5509
  placeholder: zod.z.string().optional(),
4386
5510
  use: zod.z.boolean().optional(),
4387
5511
  create: zod.z.boolean().optional(),
@@ -4393,6 +5517,68 @@ const mcpServersSchema = zod.z.object({
4393
5517
  subLabel: localizedStringSchema.optional()
4394
5518
  }).optional()
4395
5519
  }).optional();
5520
+ /** Values the trace viewer uses for any `interface.traceViewer` field left unset. */
5521
+ const traceViewerDefaults = {
5522
+ enabled: false,
5523
+ showInputOutput: false,
5524
+ maxRecords: 1e3,
5525
+ maxContentLength: 5e4,
5526
+ requestsPerMinute: 30,
5527
+ requestTimeoutMs: 1e4
5528
+ };
5529
+ /** Inclusive bounds for the numeric `interface.traceViewer` fields. */
5530
+ const traceViewerLimits = {
5531
+ maxRecords: {
5532
+ min: 1,
5533
+ max: 1e4
5534
+ },
5535
+ maxContentLength: {
5536
+ min: 1,
5537
+ max: 1e6
5538
+ },
5539
+ requestsPerMinute: {
5540
+ min: 1,
5541
+ max: 1e3
5542
+ },
5543
+ requestTimeoutMs: {
5544
+ min: 1e3,
5545
+ max: 3e5
5546
+ }
5547
+ };
5548
+ const boundedIntegerSchema = (field) => zod.z.number().int().min(traceViewerLimits[field].min).max(traceViewerLimits[field].max).optional();
5549
+ const traceViewerSchema = zod.z.object({
5550
+ /** Shows the conversation trace control for traces this deployment exported. */
5551
+ enabled: zod.z.boolean().optional(),
5552
+ /** Returns observation input, output and metadata in the record inspector. */
5553
+ showInputOutput: zod.z.boolean().optional(),
5554
+ /** Observations read from the tracing backend per request. */
5555
+ maxRecords: boundedIntegerSchema("maxRecords"),
5556
+ /** Characters kept from each input, output and metadata value before truncation. */
5557
+ maxContentLength: boundedIntegerSchema("maxContentLength"),
5558
+ /** Trace reads one user may start per minute. */
5559
+ requestsPerMinute: boundedIntegerSchema("requestsPerMinute"),
5560
+ /** Budget for each round trip to the tracing backend, in milliseconds. */
5561
+ requestTimeoutMs: boundedIntegerSchema("requestTimeoutMs")
5562
+ });
5563
+ function boundedInteger(value, field) {
5564
+ const { min, max } = traceViewerLimits[field];
5565
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= min ? Math.min(value, max) : traceViewerDefaults[field];
5566
+ }
5567
+ /**
5568
+ * Fills unset or invalid `interface.traceViewer` fields from
5569
+ * {@link traceViewerDefaults}. Admin config overrides reach runtime without
5570
+ * schema validation, so every consumer reads the section through this.
5571
+ */
5572
+ function resolveTraceViewerConfig(config) {
5573
+ return {
5574
+ enabled: config?.enabled === true,
5575
+ showInputOutput: config?.showInputOutput === true,
5576
+ maxRecords: boundedInteger(config?.maxRecords, "maxRecords"),
5577
+ maxContentLength: boundedInteger(config?.maxContentLength, "maxContentLength"),
5578
+ requestsPerMinute: boundedInteger(config?.requestsPerMinute, "requestsPerMinute"),
5579
+ requestTimeoutMs: boundedInteger(config?.requestTimeoutMs, "requestTimeoutMs")
5580
+ };
5581
+ }
4396
5582
  let RetentionMode = /* @__PURE__ */ function(RetentionMode) {
4397
5583
  RetentionMode["ALL"] = "all";
4398
5584
  RetentionMode["TEMPORARY"] = "temporary";
@@ -4426,6 +5612,7 @@ const interfaceSchema = zod.z.object({
4426
5612
  })]).optional(),
4427
5613
  temporaryChat: zod.z.boolean().optional(),
4428
5614
  temporaryChatRetention: zod.z.number().min(1).max(8760).optional(),
5615
+ generalChatRetention: zod.z.number().min(1).max(8760).optional(),
4429
5616
  autoSubmitFromUrl: zod.z.boolean().optional(),
4430
5617
  retentionMode: zod.z.nativeEnum(RetentionMode).default("temporary"),
4431
5618
  retainAgentFiles: zod.z.boolean().optional(),
@@ -4433,6 +5620,7 @@ const interfaceSchema = zod.z.object({
4433
5620
  webSearch: zod.z.boolean().optional(),
4434
5621
  contextUsage: zod.z.boolean().optional(),
4435
5622
  contextCost: zod.z.boolean().optional(),
5623
+ feedback: zod.z.boolean().optional(),
4436
5624
  currency: zod.z.object({
4437
5625
  code: zod.z.string(),
4438
5626
  rate: zod.z.number().positive()
@@ -4445,6 +5633,7 @@ const interfaceSchema = zod.z.object({
4445
5633
  marketplace: zod.z.object({ use: zod.z.boolean().optional() }).optional(),
4446
5634
  fileSearch: zod.z.boolean().optional(),
4447
5635
  fileCitations: zod.z.boolean().optional(),
5636
+ traceViewer: traceViewerSchema.optional(),
4448
5637
  /** Tool keys (and `'mcp'` or an MCP server name) pinned to the prompt bar by default */
4449
5638
  defaultPinnedTools: zod.z.array(zod.z.string()).optional(),
4450
5639
  buildInfo: zod.z.boolean().optional(),
@@ -4466,6 +5655,26 @@ const interfaceSchema = zod.z.object({
4466
5655
  share: zod.z.boolean().optional(),
4467
5656
  public: zod.z.boolean().optional(),
4468
5657
  snapshotFiles: zod.z.boolean().optional()
5658
+ })]).optional(),
5659
+ schedules: zod.z.union([zod.z.boolean(), zod.z.object({
5660
+ use: zod.z.boolean().optional(),
5661
+ create: zod.z.boolean().optional(),
5662
+ maxPerUser: zod.z.number().int().min(0).optional(),
5663
+ minIntervalMinutes: zod.z.number().int().min(1).optional(),
5664
+ autoDisableAfterFailures: zod.z.number().int().min(1).optional(),
5665
+ admissionConcurrency: zod.z.number().int().min(1).max(100).optional(),
5666
+ fireConcurrency: zod.z.number().int().min(1).optional(),
5667
+ mcpPreflightConcurrency: zod.z.number().int().min(1).max(10).optional(),
5668
+ mcpPreflightTimeoutMs: zod.z.number().int().min(1e3).max(6e5).optional(),
5669
+ /** Refuse schedules that are not filed under a chat project. Enforced on
5670
+ * create/update AND at every fire, so raising it later stops schedules
5671
+ * that predate the policy instead of grandfathering them. */
5672
+ requireProject: zod.z.boolean().optional(),
5673
+ /** Pins every scheduled run to ONE chat project, ignoring any client
5674
+ * choice. Implies `requireProject`. The project must belong to the
5675
+ * schedule's owner, so a deployment-wide value only makes sense with a
5676
+ * per-user/per-role config override. */
5677
+ projectId: zod.z.string().trim().min(1).optional()
4469
5678
  })]).optional()
4470
5679
  }).default({
4471
5680
  modelSelect: true,
@@ -4492,6 +5701,7 @@ const interfaceSchema = zod.z.object({
4492
5701
  webSearch: true,
4493
5702
  contextUsage: true,
4494
5703
  contextCost: false,
5704
+ feedback: true,
4495
5705
  peoplePicker: {
4496
5706
  users: true,
4497
5707
  groups: true,
@@ -4561,12 +5771,14 @@ let SearchProviders = /* @__PURE__ */ function(SearchProviders) {
4561
5771
  SearchProviders["SERPER"] = "serper";
4562
5772
  SearchProviders["SEARXNG"] = "searxng";
4563
5773
  SearchProviders["TAVILY"] = "tavily";
5774
+ SearchProviders["KEENABLE"] = "keenable";
4564
5775
  return SearchProviders;
4565
5776
  }({});
4566
5777
  let ScraperProviders = /* @__PURE__ */ function(ScraperProviders) {
4567
5778
  ScraperProviders["FIRECRAWL"] = "firecrawl";
4568
5779
  ScraperProviders["SERPER"] = "serper";
4569
5780
  ScraperProviders["TAVILY"] = "tavily";
5781
+ ScraperProviders["KEENABLE"] = "keenable";
4570
5782
  return ScraperProviders;
4571
5783
  }({});
4572
5784
  let RerankerTypes = /* @__PURE__ */ function(RerankerTypes) {
@@ -4581,6 +5793,17 @@ let SafeSearchTypes = /* @__PURE__ */ function(SafeSearchTypes) {
4581
5793
  SafeSearchTypes[SafeSearchTypes["STRICT"] = 2] = "STRICT";
4582
5794
  return SafeSearchTypes;
4583
5795
  }({});
5796
+ /**
5797
+ * Normalizes a SearXNG engine list into the comma-separated form the API expects.
5798
+ * Accepts the YAML list or comma-separated string an operator may write, and is
5799
+ * applied both at the schema boundary and when loading the runtime config, since
5800
+ * `loadCustomConfig` returns the raw YAML object rather than the parsed result.
5801
+ */
5802
+ function normalizeSearxngEngines(engines) {
5803
+ if (engines == null) return;
5804
+ const normalized = (Array.isArray(engines) ? engines : engines.split(",")).map((engine) => engine.trim()).filter(Boolean);
5805
+ return normalized.length ? normalized.join(",") : void 0;
5806
+ }
4584
5807
  const webSearchSchema = zod.z.object({
4585
5808
  allowedAddresses: allowedAddressesSchema,
4586
5809
  serperApiKey: zod.z.string().optional().default("${SERPER_API_KEY}"),
@@ -4596,6 +5819,8 @@ const webSearchSchema = zod.z.object({
4596
5819
  tavilyApiKeyPreview: apiKeyPreviewSchema,
4597
5820
  tavilySearchUrl: zod.z.string().optional().default("${TAVILY_SEARCH_URL}"),
4598
5821
  tavilyExtractUrl: zod.z.string().optional().default("${TAVILY_EXTRACT_URL}"),
5822
+ keenableApiKey: zod.z.string().optional().default("${KEENABLE_API_KEY}"),
5823
+ keenableApiUrl: zod.z.string().optional().default("${KEENABLE_API_URL}"),
4599
5824
  jinaApiKey: zod.z.string().optional().default("${JINA_API_KEY}"),
4600
5825
  jinaApiKeyPreview: apiKeyPreviewSchema,
4601
5826
  jinaApiUrl: zod.z.string().optional().default("${JINA_API_URL}"),
@@ -4633,6 +5858,16 @@ const webSearchSchema = zod.z.object({
4633
5858
  tag: zod.z.string().nullable().optional()
4634
5859
  }).optional()
4635
5860
  }).optional(),
5861
+ searxngSearchOptions: zod.z.object({
5862
+ engines: zod.z.union([zod.z.string(), zod.z.array(zod.z.string())]).transform(normalizeSearxngEngines).optional(),
5863
+ language: zod.z.string().optional(),
5864
+ timeRange: zod.z.enum([
5865
+ "day",
5866
+ "month",
5867
+ "year"
5868
+ ]).optional(),
5869
+ timeout: zod.z.number().int().positive().max(12e4).optional()
5870
+ }).optional(),
4636
5871
  tavilySearchOptions: zod.z.object({
4637
5872
  searchDepth: zod.z.enum([
4638
5873
  "basic",
@@ -4673,6 +5908,16 @@ const webSearchSchema = zod.z.object({
4673
5908
  includeFavicon: zod.z.boolean().optional(),
4674
5909
  format: zod.z.enum(["markdown", "text"]).optional(),
4675
5910
  timeout: zod.z.number().int().nonnegative().max(12e4).optional()
5911
+ }).optional(),
5912
+ keenableSearchOptions: zod.z.object({
5913
+ maxResults: zod.z.number().int().min(1).max(20).optional(),
5914
+ site: zod.z.string().optional(),
5915
+ attributionTitle: zod.z.string().optional(),
5916
+ timeout: zod.z.number().int().nonnegative().max(12e4).optional()
5917
+ }).optional(),
5918
+ keenableScraperOptions: zod.z.object({
5919
+ attributionTitle: zod.z.string().optional(),
5920
+ timeout: zod.z.number().int().nonnegative().max(12e4).optional()
4676
5921
  }).optional()
4677
5922
  });
4678
5923
  const ocrSchema = zod.z.object({
@@ -4760,13 +6005,6 @@ const summarizationConfigSchema = zod.z.object({
4760
6005
  retainRecent: retainRecentConfigSchema.optional()
4761
6006
  });
4762
6007
  const customEndpointsSchema = zod.z.array(endpointSchema.partial()).optional();
4763
- /**
4764
- * Validates a messageFilter PII regex at config load. Defaults to native RegExp so browser
4765
- * builds add no extra engine; the server injects a check backed by the linear-time runtime
4766
- * engine (RE2) via setMessageFilterRegexValidator, so a pattern the runtime cannot compile
4767
- * (backreferences, lookaround, control escapes, and so on) is rejected at load rather than
4768
- * silently dropped at request time.
4769
- */
4770
6008
  let messageFilterRegexValidator = (value) => {
4771
6009
  try {
4772
6010
  new RegExp(value, "g");
@@ -4779,28 +6017,134 @@ const setMessageFilterRegexValidator = (validate) => {
4779
6017
  messageFilterRegexValidator = validate;
4780
6018
  };
4781
6019
  const messageFilterPiiCustomPatternSchema = zod.z.object({
4782
- id: zod.z.string().min(1),
4783
- label: zod.z.string().min(1),
4784
- regex: zod.z.string().min(1).refine((value) => messageFilterRegexValidator(value), { message: "Unsupported regex: not compatible with the RE2 engine (no backreferences, lookaround, or control escapes)" })
6020
+ id: zod.z.string().min(1).max(256),
6021
+ label: zod.z.string().min(1).max(512),
6022
+ regex: zod.z.string().min(1).max(512)
4785
6023
  });
4786
6024
  const messageFilterPiiSchema = zod.z.object({
4787
- starterPatterns: zod.z.array(zod.z.string()).optional(),
4788
- customPatterns: zod.z.array(messageFilterPiiCustomPatternSchema).optional()
6025
+ starterPatterns: zod.z.array(zod.z.string().max(256)).max(256).optional(),
6026
+ customPatterns: zod.z.array(messageFilterPiiCustomPatternSchema).max(256).optional()
6027
+ }).superRefine((pii, context) => {
6028
+ let regexCharacters = 0;
6029
+ let regexInstructions = 0;
6030
+ for (let index = 0; index < (pii.customPatterns?.length ?? 0); index++) {
6031
+ const pattern = pii.customPatterns?.[index];
6032
+ if (pattern == null) continue;
6033
+ regexCharacters += pattern.regex.length;
6034
+ const result = messageFilterRegexValidator(pattern.regex);
6035
+ if (!(typeof result === "boolean" ? result : result.supported)) {
6036
+ context.addIssue({
6037
+ code: zod.z.ZodIssueCode.custom,
6038
+ path: [
6039
+ "customPatterns",
6040
+ index,
6041
+ "regex"
6042
+ ],
6043
+ message: "Unsupported regex: not compatible with the RE2 engine (no backreferences, lookaround, or control escapes)"
6044
+ });
6045
+ continue;
6046
+ }
6047
+ if (typeof result !== "boolean" && result.programSize != null) regexInstructions += result.programSize;
6048
+ }
6049
+ if (regexCharacters > 8192) context.addIssue({
6050
+ code: zod.z.ZodIssueCode.custom,
6051
+ path: ["customPatterns"],
6052
+ message: `Custom PII regexes may contain at most ${MAX_PII_CUSTOM_REGEX_CHARACTERS} characters in total`
6053
+ });
6054
+ if (regexInstructions > 8192) context.addIssue({
6055
+ code: zod.z.ZodIssueCode.custom,
6056
+ path: ["customPatterns"],
6057
+ message: `Custom PII regexes may compile to at most ${MAX_PII_CUSTOM_REGEX_INSTRUCTIONS} instructions in total`
6058
+ });
4789
6059
  });
4790
6060
  const messageFilterSchema = zod.z.object({ pii: messageFilterPiiSchema.optional() });
4791
- const langfuseConfigSchema = zod.z.object({
4792
- enabled: zod.z.boolean().optional(),
4793
- publicKey: zod.z.string().optional(),
4794
- secretKey: zod.z.string().optional(),
4795
- /** Stable Langfuse project identity returned when credentials are verified. */
4796
- projectId: zod.z.string().optional(),
4797
- /** Masked preview of the secret key, stored at write time so
4798
- * admin reads can show which secret key is configured without returning the secret. */
4799
- secretKeyPreview: zod.z.string().optional(),
4800
- /** Routing key for one of the deployment-configured tenant Langfuse destinations. */
4801
- destination: zod.z.string().optional()
4802
- });
4803
- const configSchema = zod.z.object({
6061
+ /** User fields a deployment may select as the Langfuse trace `userId`. */
6062
+ const LANGFUSE_TRACE_USER_ID_FIELDS = [
6063
+ "id",
6064
+ "email",
6065
+ "username",
6066
+ "name",
6067
+ "openidId",
6068
+ "samlId",
6069
+ "ldapId",
6070
+ "googleId",
6071
+ "githubId",
6072
+ "discordId",
6073
+ "appleId",
6074
+ "facebookId"
6075
+ ];
6076
+ /** User fields a deployment may copy into Langfuse trace metadata. */
6077
+ const LANGFUSE_TRACE_USER_METADATA_FIELDS = [
6078
+ ...LANGFUSE_TRACE_USER_ID_FIELDS,
6079
+ "role",
6080
+ "provider"
6081
+ ];
6082
+ /** Request fields a deployment may copy into Langfuse trace metadata. */
6083
+ const LANGFUSE_TRACE_CONVERSATION_METADATA_FIELDS = [
6084
+ "conversationId",
6085
+ "endpoint",
6086
+ "endpointType",
6087
+ "provider",
6088
+ "model",
6089
+ "modelLabel",
6090
+ "spec"
6091
+ ];
6092
+ /**
6093
+ * What a deployment attaches to every Langfuse trace beyond the defaults.
6094
+ * Nothing here is exported unless explicitly listed, so the default trace
6095
+ * carries only the internal user id and no user or request metadata.
6096
+ */
6097
+ const langfuseTraceConfigSchema = zod.z.object({
6098
+ /**
6099
+ * Which user field becomes the trace `userId`. Defaults to the internal user
6100
+ * id; a user with no value for the chosen field keeps the internal id.
6101
+ */
6102
+ userIdField: zod.z.enum(LANGFUSE_TRACE_USER_ID_FIELDS).optional(),
6103
+ /** User fields exported as `librechat.user.<field>` trace metadata. */
6104
+ userMetadataFields: zod.z.array(zod.z.enum(LANGFUSE_TRACE_USER_METADATA_FIELDS)).optional(),
6105
+ /**
6106
+ * Request fields exported as trace metadata: `librechat.conversation.id`,
6107
+ * `librechat.endpoint`, `librechat.endpoint.type`, `librechat.provider`,
6108
+ * `librechat.model`, `librechat.model.label`, and `librechat.spec`.
6109
+ */
6110
+ conversationMetadataFields: zod.z.array(zod.z.enum(LANGFUSE_TRACE_CONVERSATION_METADATA_FIELDS)).optional()
6111
+ });
6112
+ const langfuseConfigSchema = zod.z.object({
6113
+ enabled: zod.z.boolean().optional(),
6114
+ publicKey: zod.z.string().optional(),
6115
+ secretKey: zod.z.string().optional(),
6116
+ /** Stable Langfuse project identity returned when credentials are verified. */
6117
+ projectId: zod.z.string().optional(),
6118
+ /** Masked preview of the secret key, stored at write time so
6119
+ * admin reads can show which secret key is configured without returning the secret. */
6120
+ secretKeyPreview: zod.z.string().optional(),
6121
+ /** Routing key for one of the deployment-configured tenant Langfuse destinations. */
6122
+ destination: zod.z.string().optional(),
6123
+ /**
6124
+ * Custom request headers sent on every outbound Langfuse request — trace and
6125
+ * media export, feedback scores, and credential verification — for
6126
+ * self-hosted instances behind an authenticating proxy or gateway. Values
6127
+ * support `${ENV_VAR}` interpolation.
6128
+ *
6129
+ * Deployment-level only. Trace export batches spans from every user through
6130
+ * one exporter, so unlike endpoint headers these cannot carry per-user
6131
+ * placeholders. Headers referencing an unset variable, naming an
6132
+ * infrastructure secret, or carrying an invalid HTTP field name are dropped
6133
+ * with a warning rather than sent.
6134
+ *
6135
+ * Sent only when the deployment configures exactly one Langfuse origin, and
6136
+ * only to that origin. The map cannot say which endpoint it authenticates
6137
+ * to, so with several configured origins any choice of recipient would risk
6138
+ * disclosing a gateway credential to the others; a warning is logged instead.
6139
+ * Multi-destination deployments need per-destination headers, which this
6140
+ * schema does not yet express — and note the fanout collector forwards only
6141
+ * `Authorization` upstream regardless.
6142
+ */
6143
+ headers: zod.z.record(zod.z.string()).optional(),
6144
+ /** Trace user identity and allowlisted user/request metadata. */
6145
+ trace: langfuseTraceConfigSchema.optional()
6146
+ });
6147
+ const configSchema = zod.z.object({
4804
6148
  version: zod.z.string(),
4805
6149
  cache: zod.z.boolean().default(true),
4806
6150
  ocr: ocrSchema.optional(),
@@ -4816,7 +6160,35 @@ const configSchema = zod.z.object({
4816
6160
  mcpServers: MCPServersSchema.optional(),
4817
6161
  mcpSettings: zod.z.object({
4818
6162
  allowedDomains: zod.z.array(zod.z.string()).optional(),
4819
- allowedAddresses: allowedAddressesSchema
6163
+ allowedAddresses: allowedAddressesSchema,
6164
+ catalogRecovery: zod.z.object({
6165
+ discoveryBackoffMs: zod.z.array(zod.z.number().int().positive().max(1440 * 6e4)).min(1).max(8).default([
6166
+ 5 * 6e4,
6167
+ 10 * 6e4,
6168
+ 20 * 6e4,
6169
+ 30 * 6e4
6170
+ ]),
6171
+ discoveryTimeoutMs: zod.z.number().int().positive().max(5 * 6e4).default(3e3),
6172
+ /** How long past `discoveryTimeoutMs` a stalled discovery may hold its catalog slot and
6173
+ * coalesced requests. It is never cancelled, so OAuth tokens it redeemed still persist,
6174
+ * and no other discovery for the same server state starts until it settles. */
6175
+ discoverySettleGraceMs: zod.z.number().int().nonnegative().max(5 * 6e4).default(1e4),
6176
+ reauthRetryMs: zod.z.number().int().positive().max(1440 * 6e4).default(30 * 6e4),
6177
+ maxStateEntries: zod.z.number().int().positive().max(1e6).default(1e4),
6178
+ /** Process-wide: how many discoveries released past `discoverySettleGraceMs` may still be
6179
+ * running before recovery starts no new discovery until one settles. The default matches
6180
+ * the three catalog slots a stalled dependency could hold before discoveries were released. */
6181
+ maxDetachedDiscoveries: zod.z.number().int().positive().max(1e3).default(3),
6182
+ generationReadTimeoutMs: zod.z.number().int().positive().max(1e4).default(500),
6183
+ authorizationFenceRetryMs: zod.z.array(zod.z.number().int().nonnegative().max(6e4)).min(1).max(8).default([
6184
+ 0,
6185
+ 50,
6186
+ 200
6187
+ ]),
6188
+ authorizationFenceTimeoutMs: zod.z.number().int().positive().max(3e4).default(1e3),
6189
+ authorizationFenceRetryIntervalMs: zod.z.number().int().positive().max(60 * 6e4).default(3e4),
6190
+ authorizationFenceRetryBatchSize: zod.z.number().int().positive().max(1e4).default(100)
6191
+ }).default({})
4820
6192
  }).optional(),
4821
6193
  interface: interfaceSchema,
4822
6194
  turnstile: turnstileSchema.optional(),
@@ -4841,6 +6213,7 @@ const configSchema = zod.z.object({
4841
6213
  rateLimits: rateLimitSchema.optional(),
4842
6214
  fileConfig: fileConfigSchema.optional(),
4843
6215
  modelSpecs: specsConfigSchema.optional(),
6216
+ filters: filtersConfigSchema.optional(),
4844
6217
  messageFilter: messageFilterSchema.optional(),
4845
6218
  endpoints: zod.z.object({
4846
6219
  allowedAddresses: allowedAddressesSchema,
@@ -4874,6 +6247,7 @@ let KnownEndpoints = /* @__PURE__ */ function(KnownEndpoints) {
4874
6247
  KnownEndpoints["groq"] = "groq";
4875
6248
  KnownEndpoints["helicone"] = "helicone";
4876
6249
  KnownEndpoints["huggingface"] = "huggingface";
6250
+ KnownEndpoints["lemonade"] = "lemonade";
4877
6251
  KnownEndpoints["mistral"] = "mistral";
4878
6252
  KnownEndpoints["mlx"] = "mlx";
4879
6253
  KnownEndpoints["ollama"] = "ollama";
@@ -4912,6 +6286,7 @@ const alternateName = {
4912
6286
  ["anthropic"]: "Anthropic",
4913
6287
  ["custom"]: "Custom",
4914
6288
  ["bedrock"]: "AWS Bedrock",
6289
+ ["lemonade"]: "AMD Lemonade",
4915
6290
  ["ollama"]: "Ollama",
4916
6291
  ["deepseek"]: "DeepSeek",
4917
6292
  ["moonshot"]: "Moonshot",
@@ -4919,6 +6294,14 @@ const alternateName = {
4919
6294
  ["vercel"]: "Vercel",
4920
6295
  ["helicone"]: "Helicone"
4921
6296
  };
6297
+ /**
6298
+ * Models the Assistants endpoints cannot run. GPT-6 Astra serves tool calls only
6299
+ * from the Responses API, and the Assistants surface does not route through
6300
+ * `getOpenAILLMConfig`, so listing it there would offer a configuration the
6301
+ * provider rejects. Kept out of `sharedOpenAIModels`, which both Assistants
6302
+ * catalogs consume.
6303
+ */
6304
+ const responsesOnlyOpenAIModels = ["gpt-6-astra"];
4922
6305
  const sharedOpenAIModels = [
4923
6306
  "gpt-5.6",
4924
6307
  "gpt-5.6-terra",
@@ -4946,6 +6329,7 @@ const sharedOpenAIModels = [
4946
6329
  "gpt-4o"
4947
6330
  ];
4948
6331
  const sharedAnthropicModels = [
6332
+ "claude-fable-5-1",
4949
6333
  "claude-fable-5",
4950
6334
  "claude-opus-5",
4951
6335
  "claude-opus-4-8",
@@ -4980,6 +6364,7 @@ const sharedAnthropicModels = [
4980
6364
  * availability); Opus 4.1 has no global profile, so it uses `us.`.
4981
6365
  */
4982
6366
  const bedrockModels = [
6367
+ "global.anthropic.claude-fable-5-1",
4983
6368
  "global.anthropic.claude-fable-5",
4984
6369
  "global.anthropic.claude-opus-5",
4985
6370
  "global.anthropic.claude-opus-4-8",
@@ -5012,8 +6397,9 @@ const bedrockModels = [
5012
6397
  const defaultModels = {
5013
6398
  ["azureAssistants"]: sharedOpenAIModels,
5014
6399
  ["assistants"]: [...sharedOpenAIModels, "chatgpt-4o-latest"],
5015
- ["agents"]: sharedOpenAIModels,
6400
+ ["agents"]: [...responsesOnlyOpenAIModels, ...sharedOpenAIModels],
5016
6401
  ["google"]: [
6402
+ "gemini-3.8-flash",
5017
6403
  "gemini-3.7-flash",
5018
6404
  "gemini-3.6-flash",
5019
6405
  "gemini-3.5-flash",
@@ -5029,6 +6415,7 @@ const defaultModels = {
5029
6415
  ],
5030
6416
  ["anthropic"]: sharedAnthropicModels,
5031
6417
  ["openAI"]: [
6418
+ ...responsesOnlyOpenAIModels,
5032
6419
  ...sharedOpenAIModels,
5033
6420
  "chatgpt-4o-latest",
5034
6421
  "gpt-4-vision-preview",
@@ -5041,12 +6428,19 @@ const fitlerAssistantModels = (str) => {
5041
6428
  return /gpt-4|gpt-3\\.5/i.test(str) && !/vision|instruct/i.test(str);
5042
6429
  };
5043
6430
  const openAIModels = defaultModels["openAI"];
6431
+ /**
6432
+ * The OpenAI catalog without the models only the first-party OpenAI endpoint
6433
+ * can run. Azure OpenAI shares this list, but Astra is neither routed to the
6434
+ * Responses API nor given its request constraints there, and listing it first
6435
+ * would let it become the default selection.
6436
+ */
6437
+ const nonResponsesOnlyOpenAIModels = openAIModels.filter((model) => !responsesOnlyOpenAIModels.includes(model));
5044
6438
  const initialModelsConfig = {
5045
6439
  initial: [],
5046
6440
  ["openAI"]: openAIModels,
5047
6441
  ["assistants"]: openAIModels.filter(fitlerAssistantModels),
5048
6442
  ["agents"]: openAIModels,
5049
- ["azureOpenAI"]: openAIModels,
6443
+ ["azureOpenAI"]: nonResponsesOnlyOpenAIModels,
5050
6444
  ["google"]: defaultModels["google"],
5051
6445
  ["anthropic"]: defaultModels["anthropic"],
5052
6446
  ["bedrock"]: defaultModels["bedrock"]
@@ -5181,6 +6575,10 @@ let CacheKeys = /* @__PURE__ */ function(CacheKeys) {
5181
6575
  */
5182
6576
  CacheKeys["USER_PRINCIPALS"] = "USER_PRINCIPALS";
5183
6577
  /**
6578
+ * Key for cached prompt group access ID sets (accessible, public, owned).
6579
+ */
6580
+ CacheKeys["PROMPT_GROUPS_ACCESS"] = "PROMPT_GROUPS_ACCESS";
6581
+ /**
5184
6582
  * Key for per-conversation stateful code sandbox prewarm/warm state.
5185
6583
  */
5186
6584
  CacheKeys["SANDBOX_PREWARM"] = "SANDBOX_PREWARM";
@@ -5340,6 +6738,10 @@ let ViolationTypes = /* @__PURE__ */ function(ViolationTypes) {
5340
6738
  * Registration violations.
5341
6739
  */
5342
6740
  ViolationTypes["REGISTRATIONS"] = "registrations";
6741
+ /**
6742
+ * Shared link retrieval limit violations.
6743
+ */
6744
+ ViolationTypes["SHARE_LIMIT"] = "share_limit";
5343
6745
  return ViolationTypes;
5344
6746
  }({});
5345
6747
  /**
@@ -5403,6 +6805,14 @@ let ErrorTypes = /* @__PURE__ */ function(ErrorTypes) {
5403
6805
  */
5404
6806
  ErrorTypes["RESOURCE_RECOVERY_REQUIRED"] = "resource_recovery_required";
5405
6807
  /**
6808
+ * Agent selected a stateful Code API workspace scope disabled by the deployment.
6809
+ */
6810
+ ErrorTypes["STATEFUL_CODE_ENVIRONMENT_NOT_ALLOWED"] = "stateful_code_environment_not_allowed";
6811
+ /**
6812
+ * A conversation's selected attached workspace cannot be used as requested.
6813
+ */
6814
+ ErrorTypes["CODE_WORKSPACE_UNAVAILABLE"] = "code_workspace_unavailable";
6815
+ /**
5406
6816
  * Invalid Agent Provider (excluded by Admin)
5407
6817
  */
5408
6818
  ErrorTypes["INVALID_AGENT_PROVIDER"] = "invalid_agent_provider";
@@ -5423,6 +6833,14 @@ let ErrorTypes = /* @__PURE__ */ function(ErrorTypes) {
5423
6833
  */
5424
6834
  ErrorTypes["AUTH_FAILED"] = "auth_failed";
5425
6835
  /**
6836
+ * Authentication rejected by a rate limiter
6837
+ */
6838
+ ErrorTypes["AUTH_RATE_LIMITED"] = "auth_rate_limited";
6839
+ /**
6840
+ * Authentication rejected because the account or IP is banned
6841
+ */
6842
+ ErrorTypes["AUTH_BANNED"] = "auth_banned";
6843
+ /**
5426
6844
  * Model refused to respond (content policy violation)
5427
6845
  */
5428
6846
  ErrorTypes["REFUSAL"] = "refusal";
@@ -5430,6 +6848,34 @@ let ErrorTypes = /* @__PURE__ */ function(ErrorTypes) {
5430
6848
  * SSE stream 404 — job completed, expired, or was deleted before the subscriber connected
5431
6849
  */
5432
6850
  ErrorTypes["STREAM_EXPIRED"] = "stream_expired";
6851
+ /**
6852
+ * Provider does not serve the requested model
6853
+ */
6854
+ ErrorTypes["MODEL_NOT_FOUND"] = "model_not_found";
6855
+ /**
6856
+ * Provider throttled or refused the request for exceeding a rate/spend allowance
6857
+ */
6858
+ ErrorTypes["MODEL_RATE_LIMIT"] = "model_rate_limit";
6859
+ /**
6860
+ * An agent model provider failed and the run could not recover.
6861
+ */
6862
+ ErrorTypes["UPSTREAM_MODEL_ERROR"] = "upstream_model_error";
6863
+ /**
6864
+ * Context pruning removed every message; nothing fits the configured context window
6865
+ */
6866
+ ErrorTypes["EMPTY_MESSAGES"] = "empty_messages";
6867
+ /**
6868
+ * Formatted provider payload exceeded the context budget before invocation
6869
+ */
6870
+ ErrorTypes["FINAL_CONTEXT_OVERFLOW"] = "final_context_overflow";
6871
+ /**
6872
+ * A manual compaction the graph could not attempt; `reason` says why
6873
+ */
6874
+ ErrorTypes["COMPACTION_SKIPPED"] = "compaction_skipped";
6875
+ /**
6876
+ * A manual compaction whose summarizer produced nothing; history is untouched
6877
+ */
6878
+ ErrorTypes["COMPACTION_FAILED"] = "compaction_failed";
5433
6879
  return ErrorTypes;
5434
6880
  }({});
5435
6881
  /**
@@ -5561,7 +7007,7 @@ let TTSProviders = /* @__PURE__ */ function(TTSProviders) {
5561
7007
  /** Enum for app-wide constants */
5562
7008
  let Constants = /* @__PURE__ */ function(Constants) {
5563
7009
  /**
5564
- * Key for the app's version. The placeholder `v0.8.8-rc1` is
7010
+ * Key for the app's version. The placeholder `v0.8.8-rc3` is
5565
7011
  * swapped in by `@rollup/plugin-replace` during `npm run build:data-provider`
5566
7012
  * using the value of the root `package.json`'s `version` field. Consumers
5567
7013
  * always import this via the built dist bundle (see `main` field in
@@ -5569,9 +7015,9 @@ let Constants = /* @__PURE__ */ function(Constants) {
5569
7015
  * substituted value. Only tests that import the TypeScript source directly
5570
7016
  * would observe the raw placeholder.
5571
7017
  */
5572
- Constants["VERSION"] = "v0.8.8-rc1";
7018
+ Constants["VERSION"] = "v0.8.8-rc3";
5573
7019
  /** Key for the Custom Config's version (librechat.yaml). */
5574
- Constants["CONFIG_VERSION"] = "1.3.14";
7020
+ Constants["CONFIG_VERSION"] = "1.3.16";
5575
7021
  /** Standard value for the first message's `parentMessageId` value, to indicate no parent exists. */
5576
7022
  Constants["NO_PARENT"] = "00000000-0000-0000-0000-000000000000";
5577
7023
  /** Standard value to use whatever the submission prelim. `responseMessageId` is */
@@ -5625,6 +7071,15 @@ let Constants = /* @__PURE__ */ function(Constants) {
5625
7071
  Constants["SUBAGENT"] = "subagent";
5626
7072
  /** Poll tool for retrieving the status/result of a backgrounded tool call. */
5627
7073
  Constants["CHECK_BACKGROUND_TASK"] = "check_background_task";
7074
+ /**
7075
+ * `finish_reason` stamped on an assistant message whose turn ended because the
7076
+ * agent exhausted its per-turn graph step budget (`recursionLimit`) rather than
7077
+ * because the model chose to stop. Distinct from a user abort: nothing failed and
7078
+ * nothing was cancelled, the turn simply ran out of room. The UI keys its
7079
+ * "tool call limit reached" notice off this value. The hover Continue control
7080
+ * is withheld for this reason because the notice already offers the way forward.
7081
+ */
7082
+ Constants["TOOL_CALL_LIMIT_FINISH_REASON"] = "tool_call_limit";
5628
7083
  return Constants;
5629
7084
  }({});
5630
7085
  /**
@@ -5711,6 +7166,95 @@ function normalizeMCPToolKey(toolKey, rawServerNames) {
5711
7166
  if (normalized === matched) return toolKey;
5712
7167
  return `${toolKey.slice(0, toolKey.length - matched.length)}${normalized}`;
5713
7168
  }
7169
+ /**
7170
+ * Strips a redundant leading server-name prefix from a raw upstream tool name
7171
+ * before it is embedded into a model-facing key, so the key doesn't carry the
7172
+ * server twice (`acme_trace_..._mcp_acme`) and push long tool names
7173
+ * past provider function-name limits (64 chars). The match is case-insensitive
7174
+ * because display-cased server names ("Acme") conventionally prefix their
7175
+ * tools in lowercase. Ingestion that strips must record the original name
7176
+ * (`serverToolName` on the cached definition) — tool calls send THAT name back
7177
+ * to the server, never the stripped one. Catalog producers must not call this
7178
+ * directly: only {@link stripServerNamePrefixes} sees the whole sibling set and
7179
+ * can keep colliding results apart.
7180
+ */
7181
+ function stripServerNamePrefix(toolName, normalizedServerName) {
7182
+ const prefixLength = normalizedServerName.length + 1;
7183
+ if (toolName.length <= prefixLength) return toolName;
7184
+ if (toolName.slice(0, prefixLength).toLowerCase() !== `${normalizedServerName.toLowerCase()}_`) return toolName;
7185
+ const stripped = toolName.slice(prefixLength);
7186
+ if (isReservedMCPToolName(stripped)) return toolName;
7187
+ /** `isActionTool` classifies keys by the RELATIVE position of `_action_`
7188
+ * and `_mcp_`; stripping moves the first `_mcp_` earlier, so a server
7189
+ * whose normalized name contains `_action_` could see a real MCP tool
7190
+ * reclassified as an OpenAPI action (bypassing MCP authorization). Never
7191
+ * produce a key whose classification differs from the raw key's. */
7192
+ const keySuffix = `_mcp_${normalizedServerName}`;
7193
+ if (isActionTool(`${stripped}${keySuffix}`) !== isActionTool(`${toolName}${keySuffix}`)) return toolName;
7194
+ return stripped;
7195
+ }
7196
+ /**
7197
+ * Synthetic markers consumed by prefix (`isMCPAllPlaceholder`, the server-pin
7198
+ * skip, the client's OAuth stream classification), so each reserves BOTH its
7199
+ * exact name and its `${marker}${mcp_delimiter}` namespace: a stripped
7200
+ * remainder inside any of them would turn a real upstream tool into the
7201
+ * server-wide wildcard, the UI pin placeholder, or a synthetic OAuth call.
7202
+ */
7203
+ const RESERVED_MCP_TOOL_MARKERS = [
7204
+ `sys__all__sys`,
7205
+ `sys__server__sys`,
7206
+ "oauth"
7207
+ ];
7208
+ function isReservedMCPToolName(toolName) {
7209
+ /** `mcp_` opens the server-scoped pluginKey namespace (`mcp_${serverName}`),
7210
+ * and `lc_transfer_to_` opens the agent-handoff namespace (the client
7211
+ * renders such calls as handoffs; the background and intent passes exclude
7212
+ * them) — pre-strip tool keys could never enter either, since they always
7213
+ * began with the server name itself. */
7214
+ if (toolName.startsWith(`mcp_`) || toolName.startsWith(`lc_transfer_to_`)) return true;
7215
+ return RESERVED_MCP_TOOL_MARKERS.some((marker) => toolName === marker || toolName.startsWith(`${marker}_mcp_`));
7216
+ }
7217
+ /**
7218
+ * Maps every raw tool name in a server's catalog to its model-facing name,
7219
+ * stripping redundant server-name prefixes collision-free: when two names
7220
+ * yield the same result — a bare `foo` next to `<server>_foo`, or the
7221
+ * case-variant pair `<server>_Foo` / `<Server>_Foo` under the case-insensitive
7222
+ * prefix match — every collider keeps its raw name, so two distinct upstream
7223
+ * tools can never collapse onto one key. Unprefixed names count against the
7224
+ * result set through their identity mapping, which is what makes the bare-name
7225
+ * case fall out of the same counter.
7226
+ */
7227
+ function stripServerNamePrefixes(toolNames, normalizedServerName) {
7228
+ const rawNames = new Set(toolNames);
7229
+ const finalNames = new Map(toolNames.map((name) => {
7230
+ const stripped = stripServerNamePrefix(name, normalizedServerName);
7231
+ /** Every sibling's RAW name is reserved even when that sibling itself
7232
+ * strips away: keys persisted BEFORE stripping embed raw names, so a
7233
+ * stripped result landing on another sibling's raw name would route
7234
+ * that sibling's legacy references to the wrong upstream tool. */
7235
+ return [name, stripped !== name && rawNames.has(stripped) ? name : stripped];
7236
+ }));
7237
+ /** Reverting a collider to its raw name can itself collide with ANOTHER
7238
+ * sibling's stripped result (`foo` / `acme_foo` / `acme_acme_foo`), so the
7239
+ * guard iterates to a fixpoint. Each pass converts at least one stripped
7240
+ * result back to its unique raw name, so it terminates within the catalog
7241
+ * size. */
7242
+ let changed = true;
7243
+ while (changed) {
7244
+ changed = false;
7245
+ const counts = /* @__PURE__ */ new Map();
7246
+ finalNames.forEach((result) => {
7247
+ counts.set(result, (counts.get(result) ?? 0) + 1);
7248
+ });
7249
+ finalNames.forEach((result, raw) => {
7250
+ if (result !== raw && (counts.get(result) ?? 0) > 1) {
7251
+ finalNames.set(raw, raw);
7252
+ changed = true;
7253
+ }
7254
+ });
7255
+ }
7256
+ return finalNames;
7257
+ }
5714
7258
  function splitMCPToolKey(toolKey, knownServerNames) {
5715
7259
  if (knownServerNames?.length) {
5716
7260
  let matched;
@@ -5930,6 +7474,7 @@ let PrincipalModel = /* @__PURE__ */ function(PrincipalModel) {
5930
7474
  */
5931
7475
  let ResourceType = /* @__PURE__ */ function(ResourceType) {
5932
7476
  ResourceType["AGENT"] = "agent";
7477
+ ResourceType["CODE_ENVIRONMENT"] = "codeEnvironment";
5933
7478
  ResourceType["PROMPTGROUP"] = "promptGroup";
5934
7479
  ResourceType["MCPSERVER"] = "mcpServer";
5935
7480
  ResourceType["REMOTE_AGENT"] = "remoteAgent";
@@ -5949,6 +7494,8 @@ let PermissionBits = /* @__PURE__ */ function(PermissionBits) {
5949
7494
  PermissionBits[PermissionBits["DELETE"] = 4] = "DELETE";
5950
7495
  /** 1000 - Can share agent with others (future) */
5951
7496
  PermissionBits[PermissionBits["SHARE"] = 8] = "SHARE";
7497
+ /** 10000 - Can view Insights data for an agent when VIEW is also present */
7498
+ PermissionBits[PermissionBits["VIEW_INSIGHTS"] = 16] = "VIEW_INSIGHTS";
5952
7499
  return PermissionBits;
5953
7500
  }({});
5954
7501
  /**
@@ -5958,6 +7505,9 @@ let AccessRoleIds = /* @__PURE__ */ function(AccessRoleIds) {
5958
7505
  AccessRoleIds["AGENT_VIEWER"] = "agent_viewer";
5959
7506
  AccessRoleIds["AGENT_EDITOR"] = "agent_editor";
5960
7507
  AccessRoleIds["AGENT_OWNER"] = "agent_owner";
7508
+ AccessRoleIds["CODE_ENVIRONMENT_VIEWER"] = "codeEnvironment_viewer";
7509
+ AccessRoleIds["CODE_ENVIRONMENT_EDITOR"] = "codeEnvironment_editor";
7510
+ AccessRoleIds["CODE_ENVIRONMENT_OWNER"] = "codeEnvironment_owner";
5961
7511
  AccessRoleIds["PROMPTGROUP_VIEWER"] = "promptGroup_viewer";
5962
7512
  AccessRoleIds["PROMPTGROUP_EDITOR"] = "promptGroup_editor";
5963
7513
  AccessRoleIds["PROMPTGROUP_OWNER"] = "promptGroup_owner";
@@ -5987,6 +7537,8 @@ const principalSchema = zod.z.object({
5987
7537
  description: zod.z.string().optional(),
5988
7538
  idOnTheSource: zod.z.string().optional(),
5989
7539
  accessRoleId: zod.z.nativeEnum(AccessRoleIds).optional(),
7540
+ viewInsights: zod.z.boolean().optional(),
7541
+ isAdmin: zod.z.boolean().optional(),
5990
7542
  memberCount: zod.z.number().optional()
5991
7543
  });
5992
7544
  /**
@@ -6074,17 +7626,20 @@ function permBitsToAccessLevel(permBits) {
6074
7626
  function accessRoleToPermBits(accessRoleId) {
6075
7627
  switch (accessRoleId) {
6076
7628
  case "agent_viewer":
7629
+ case "codeEnvironment_viewer":
6077
7630
  case "promptGroup_viewer":
6078
7631
  case "mcpServer_viewer":
6079
7632
  case "remoteAgent_viewer":
6080
7633
  case "skill_viewer":
6081
7634
  case "sharedLink_viewer": return 1;
6082
7635
  case "agent_editor":
7636
+ case "codeEnvironment_editor":
6083
7637
  case "promptGroup_editor":
6084
7638
  case "mcpServer_editor":
6085
7639
  case "remoteAgent_editor":
6086
7640
  case "skill_editor": return 3;
6087
7641
  case "agent_owner":
7642
+ case "codeEnvironment_owner":
6088
7643
  case "promptGroup_owner":
6089
7644
  case "mcpServer_owner":
6090
7645
  case "remoteAgent_owner":
@@ -6111,11 +7666,15 @@ let QueryKeys = /* @__PURE__ */ function(QueryKeys) {
6111
7666
  QueryKeys["sharedLinks"] = "sharedLinks";
6112
7667
  QueryKeys["allConversations"] = "allConversations";
6113
7668
  QueryKeys["archivedConversations"] = "archivedConversations";
7669
+ QueryKeys["pinnedConversations"] = "pinnedConversations";
6114
7670
  QueryKeys["searchConversations"] = "searchConversations";
6115
7671
  QueryKeys["conversation"] = "conversation";
6116
7672
  QueryKeys["searchEnabled"] = "searchEnabled";
6117
7673
  QueryKeys["langfuseConnection"] = "langfuseConnection";
6118
7674
  QueryKeys["langfuseSessionLink"] = "langfuseSessionLink";
7675
+ QueryKeys["conversationTraceAvailability"] = "conversationTraceAvailability";
7676
+ QueryKeys["conversationTraceRecords"] = "conversationTraceRecords";
7677
+ QueryKeys["conversationTraceRecord"] = "conversationTraceRecord";
6119
7678
  QueryKeys["user"] = "user";
6120
7679
  QueryKeys["name"] = "name";
6121
7680
  QueryKeys["models"] = "models";
@@ -6127,6 +7686,8 @@ let QueryKeys = /* @__PURE__ */ function(QueryKeys) {
6127
7686
  QueryKeys["tokenCount"] = "tokenCount";
6128
7687
  QueryKeys["availablePlugins"] = "availablePlugins";
6129
7688
  QueryKeys["startupConfig"] = "startupConfig";
7689
+ QueryKeys["insights"] = "insights";
7690
+ QueryKeys["insightsAccess"] = "insightsAccess";
6130
7691
  QueryKeys["assistants"] = "assistants";
6131
7692
  QueryKeys["assistant"] = "assistant";
6132
7693
  QueryKeys["agents"] = "agents";
@@ -6184,10 +7745,32 @@ let QueryKeys = /* @__PURE__ */ function(QueryKeys) {
6184
7745
  QueryKeys["toolFavorites"] = "toolFavorites";
6185
7746
  QueryKeys["skillStates"] = "skillStates";
6186
7747
  QueryKeys["favorites"] = "favorites";
7748
+ QueryKeys["schedules"] = "schedules";
7749
+ QueryKeys["schedule"] = "schedule";
7750
+ QueryKeys["parentSubagents"] = "parentSubagents";
7751
+ QueryKeys["subagentThread"] = "subagentThread";
7752
+ QueryKeys["codeEnvironments"] = "codeEnvironments";
7753
+ QueryKeys["agentQueuedTurns"] = "agentQueuedTurns";
7754
+ QueryKeys["pinnedOrder"] = "pinnedOrder";
6187
7755
  return QueryKeys;
6188
7756
  }({});
6189
- const DynamicQueryKeys = { agentFiles: (agentId) => ["agentFiles", agentId] };
7757
+ const DynamicQueryKeys = {
7758
+ agentFiles: (agentId) => ["agentFiles", agentId],
7759
+ codeEnvironmentStatus: (id) => [
7760
+ "codeEnvironments",
7761
+ id,
7762
+ "status"
7763
+ ]
7764
+ };
6190
7765
  let MutationKeys = /* @__PURE__ */ function(MutationKeys) {
7766
+ MutationKeys["subagentControl"] = "subagentControl";
7767
+ MutationKeys["enqueueAgentQueuedTurn"] = "enqueueAgentQueuedTurn";
7768
+ MutationKeys["cancelAgentQueuedTurn"] = "cancelAgentQueuedTurn";
7769
+ /** Whole-array favorites write, keyed so every hook instance's write is
7770
+ * visible to the others through the query client. */
7771
+ MutationKeys["updateFavorites"] = "updateFavorites";
7772
+ /** Pinned-section display order write, keyed for the same reason. */
7773
+ MutationKeys["updatePinnedOrder"] = "updatePinnedOrder";
6191
7774
  MutationKeys["updateLangfuseConnection"] = "updateLangfuseConnection";
6192
7775
  MutationKeys["testLangfuseConnection"] = "testLangfuseConnection";
6193
7776
  MutationKeys["createAgentApiKey"] = "createAgentApiKey";
@@ -6211,6 +7794,7 @@ let MutationKeys = /* @__PURE__ */ function(MutationKeys) {
6211
7794
  MutationKeys["deleteAgentAction"] = "deleteAgentAction";
6212
7795
  MutationKeys["revertAgentVersion"] = "revertAgentVersion";
6213
7796
  MutationKeys["deleteUser"] = "deleteUser";
7797
+ MutationKeys["updateUserPreferences"] = "updateUserPreferences";
6214
7798
  MutationKeys["updateRole"] = "updateRole";
6215
7799
  MutationKeys["enableTwoFactor"] = "enableTwoFactor";
6216
7800
  MutationKeys["verifyTwoFactor"] = "verifyTwoFactor";
@@ -6224,6 +7808,14 @@ let MutationKeys = /* @__PURE__ */ function(MutationKeys) {
6224
7808
  MutationKeys["deleteSkillNode"] = "deleteSkillNode";
6225
7809
  MutationKeys["updateSkillNodeContent"] = "updateSkillNodeContent";
6226
7810
  MutationKeys["convoPin"] = "convoPin";
7811
+ MutationKeys["archiveAllConversations"] = "archiveAllConversations";
7812
+ MutationKeys["createSchedule"] = "createSchedule";
7813
+ MutationKeys["updateSchedule"] = "updateSchedule";
7814
+ MutationKeys["deleteSchedule"] = "deleteSchedule";
7815
+ MutationKeys["runSchedule"] = "runSchedule";
7816
+ MutationKeys["pairCodeEnvironment"] = "pairCodeEnvironment";
7817
+ MutationKeys["updateCodeEnvironmentSettings"] = "updateCodeEnvironmentSettings";
7818
+ MutationKeys["deleteCodeEnvironment"] = "deleteCodeEnvironment";
6227
7819
  return MutationKeys;
6228
7820
  }({});
6229
7821
  //#endregion
@@ -6625,15 +8217,18 @@ var data_service_exports = /* @__PURE__ */ __exportAll({
6625
8217
  addPromptToGroup: () => addPromptToGroup,
6626
8218
  addTagToConversation: () => addTagToConversation,
6627
8219
  addToolFavorite: () => addToolFavorite,
8220
+ archiveAllConversations: () => archiveAllConversations,
6628
8221
  archiveConversation: () => archiveConversation,
6629
8222
  assignConversationToProject: () => assignConversationToProject,
6630
8223
  bindActionOAuth: () => bindActionOAuth,
6631
8224
  bindMCPOAuth: () => bindMCPOAuth,
6632
8225
  branchMessage: () => branchMessage,
6633
8226
  callTool: () => callTool,
8227
+ cancelAgentQueuedTurn: () => cancelAgentQueuedTurn,
6634
8228
  cancelMCPOAuth: () => cancelMCPOAuth,
6635
8229
  clearAllConversations: () => clearAllConversations,
6636
8230
  confirmTwoFactor: () => confirmTwoFactor,
8231
+ controlSubagentTask: () => controlSubagentTask,
6637
8232
  createAgent: () => createAgent,
6638
8233
  createAgentApiKey: () => createAgentApiKey,
6639
8234
  createAssistant: () => createAssistant,
@@ -6643,6 +8238,7 @@ var data_service_exports = /* @__PURE__ */ __exportAll({
6643
8238
  createPreset: () => createPreset,
6644
8239
  createProject: () => createProject,
6645
8240
  createPrompt: () => createPrompt,
8241
+ createSchedule: () => createSchedule,
6646
8242
  createSharedLink: () => createSharedLink,
6647
8243
  createSkill: () => createSkill,
6648
8244
  createSkillNode: () => createSkillNode,
@@ -6651,16 +8247,19 @@ var data_service_exports = /* @__PURE__ */ __exportAll({
6651
8247
  deleteAgentAction: () => deleteAgentAction,
6652
8248
  deleteAgentApiKey: () => deleteAgentApiKey,
6653
8249
  deleteAssistant: () => deleteAssistant,
8250
+ deleteCodeEnvironment: () => deleteCodeEnvironment,
6654
8251
  deleteConversation: () => deleteConversation,
6655
8252
  deleteConversationTag: () => deleteConversationTag,
6656
8253
  deleteFiles: () => deleteFiles,
6657
8254
  deleteGitHubSkillSyncCredential: () => deleteGitHubSkillSyncCredential,
6658
8255
  deleteMCPServer: () => deleteMCPServer,
6659
8256
  deleteMemory: () => deleteMemory,
8257
+ deleteMemoryById: () => deleteMemoryById,
6660
8258
  deletePreset: () => deletePreset,
6661
8259
  deleteProject: () => deleteProject,
6662
8260
  deletePrompt: () => deletePrompt,
6663
8261
  deletePromptGroup: () => deletePromptGroup,
8262
+ deleteSchedule: () => deleteSchedule,
6664
8263
  deleteSharedLink: () => deleteSharedLink,
6665
8264
  deleteSkill: () => deleteSkill,
6666
8265
  deleteSkillFile: () => deleteSkillFile,
@@ -6671,6 +8270,7 @@ var data_service_exports = /* @__PURE__ */ __exportAll({
6671
8270
  duplicateConversation: () => duplicateConversation,
6672
8271
  editArtifact: () => editArtifact,
6673
8272
  enableTwoFactor: () => enableTwoFactor,
8273
+ enqueueAgentQueuedTurn: () => enqueueAgentQueuedTurn,
6674
8274
  forkConversation: () => forkConversation,
6675
8275
  forkSharedConversation: () => forkSharedConversation,
6676
8276
  genTitle: () => genTitle,
@@ -6692,9 +8292,14 @@ var data_service_exports = /* @__PURE__ */ __exportAll({
6692
8292
  getAvailableTools: () => getAvailableTools,
6693
8293
  getBanner: () => getBanner,
6694
8294
  getCategories: () => getCategories,
8295
+ getCodeEnvironmentStatus: () => getCodeEnvironmentStatus,
8296
+ getCodeEnvironments: () => getCodeEnvironments,
6695
8297
  getCodeOutputDownload: () => getCodeOutputDownload,
6696
8298
  getConversationById: () => getConversationById,
6697
8299
  getConversationTags: () => getConversationTags,
8300
+ getConversationTraceAvailability: () => getConversationTraceAvailability,
8301
+ getConversationTraceRecord: () => getConversationTraceRecord,
8302
+ getConversationTraceRecords: () => getConversationTraceRecords,
6698
8303
  getConversations: () => getConversations,
6699
8304
  getCustomConfigSpeech: () => getCustomConfigSpeech,
6700
8305
  getDomainServerBaseUrl: () => getDomainServerBaseUrl,
@@ -6708,6 +8313,8 @@ var data_service_exports = /* @__PURE__ */ __exportAll({
6708
8313
  getFiles: () => getFiles,
6709
8314
  getGitHubSkillSyncStatus: () => getGitHubSkillSyncStatus,
6710
8315
  getGraphApiToken: () => getGraphApiToken,
8316
+ getInsights: () => getInsights,
8317
+ getInsightsAccess: () => getInsightsAccess,
6711
8318
  getLangfuseConnection: () => getLangfuseConnection,
6712
8319
  getLangfuseSessionLink: () => getLangfuseSessionLink,
6713
8320
  getLoginGoogle: () => getLoginGoogle,
@@ -6720,8 +8327,11 @@ var data_service_exports = /* @__PURE__ */ __exportAll({
6720
8327
  getMCPTools: () => getMCPTools,
6721
8328
  getMarketplaceAgents: () => getMarketplaceAgents,
6722
8329
  getMemories: () => getMemories,
8330
+ getMessageById: () => getMessageById,
6723
8331
  getMessagesByConvoId: () => getMessagesByConvoId,
6724
8332
  getModels: () => getModels,
8333
+ getParentSubagents: () => getParentSubagents,
8334
+ getPinnedOrder: () => getPinnedOrder,
6725
8335
  getPresets: () => getPresets,
6726
8336
  getProjectById: () => getProjectById,
6727
8337
  getPrompt: () => getPrompt,
@@ -6731,6 +8341,8 @@ var data_service_exports = /* @__PURE__ */ __exportAll({
6731
8341
  getRandomPrompts: () => getRandomPrompts,
6732
8342
  getResourcePermissions: () => getResourcePermissions,
6733
8343
  getRole: () => getRole,
8344
+ getSchedule: () => getSchedule,
8345
+ getSchedules: () => getSchedules,
6734
8346
  getSearchEnabled: () => getSearchEnabled,
6735
8347
  getSharedFileDownload: () => getSharedFileDownload,
6736
8348
  getSharedFilePreview: () => getSharedFilePreview,
@@ -6743,6 +8355,7 @@ var data_service_exports = /* @__PURE__ */ __exportAll({
6743
8355
  getSkillStates: () => getSkillStates,
6744
8356
  getSkillTree: () => getSkillTree,
6745
8357
  getStartupConfig: () => getStartupConfig,
8358
+ getSubagentThread: () => getSubagentThread,
6746
8359
  getTokenConfig: () => getTokenConfig,
6747
8360
  getToolCalls: () => getToolCalls,
6748
8361
  getToolFavorites: () => getToolFavorites,
@@ -6754,6 +8367,7 @@ var data_service_exports = /* @__PURE__ */ __exportAll({
6754
8367
  healthCheck: () => healthCheck,
6755
8368
  importConversationsFile: () => importConversationsFile,
6756
8369
  importSkill: () => importSkill,
8370
+ listAgentQueuedTurns: () => listAgentQueuedTurns,
6757
8371
  listAgents: () => listAgents,
6758
8372
  listAssistants: () => listAssistants,
6759
8373
  listConversations: () => listConversations,
@@ -6767,6 +8381,7 @@ var data_service_exports = /* @__PURE__ */ __exportAll({
6767
8381
  logout: () => logout,
6768
8382
  makePromptProduction: () => makePromptProduction,
6769
8383
  markFilesUsage: () => markFilesUsage,
8384
+ pairCodeEnvironment: () => pairCodeEnvironment,
6770
8385
  pinConversation: () => pinConversation,
6771
8386
  rebuildConversationTags: () => rebuildConversationTags,
6772
8387
  recordPromptGroupUsage: () => recordPromptGroupUsage,
@@ -6781,6 +8396,7 @@ var data_service_exports = /* @__PURE__ */ __exportAll({
6781
8396
  revokeAllUserKeys: () => revokeAllUserKeys,
6782
8397
  revokeUserKey: () => revokeUserKey,
6783
8398
  runGitHubSkillSync: () => runGitHubSkillSync,
8399
+ runScheduleNow: () => runScheduleNow,
6784
8400
  searchPrincipals: () => searchPrincipals,
6785
8401
  setGitHubSkillSyncCredential: () => setGitHubSkillSyncCredential,
6786
8402
  speechToText: () => speechToText,
@@ -6791,6 +8407,7 @@ var data_service_exports = /* @__PURE__ */ __exportAll({
6791
8407
  updateAgentAction: () => updateAgentAction,
6792
8408
  updateAgentPermissions: () => updateAgentPermissions,
6793
8409
  updateAssistant: () => updateAssistant,
8410
+ updateCodeEnvironmentSettings: () => updateCodeEnvironmentSettings,
6794
8411
  updateConversation: () => updateConversation,
6795
8412
  updateConversationTag: () => updateConversationTag,
6796
8413
  updateFavorites: () => updateFavorites,
@@ -6800,11 +8417,13 @@ var data_service_exports = /* @__PURE__ */ __exportAll({
6800
8417
  updateMCPServersPermissions: () => updateMCPServersPermissions,
6801
8418
  updateMarketplacePermissions: () => updateMarketplacePermissions,
6802
8419
  updateMemory: () => updateMemory,
8420
+ updateMemoryById: () => updateMemoryById,
6803
8421
  updateMemoryPermissions: () => updateMemoryPermissions,
6804
8422
  updateMemoryPreferences: () => updateMemoryPreferences,
6805
8423
  updateMessage: () => updateMessage,
6806
8424
  updateMessageContent: () => updateMessageContent,
6807
8425
  updatePeoplePickerPermissions: () => updatePeoplePickerPermissions,
8426
+ updatePinnedOrder: () => updatePinnedOrder,
6808
8427
  updatePreset: () => updatePreset,
6809
8428
  updateProject: () => updateProject,
6810
8429
  updatePromptGroup: () => updatePromptGroup,
@@ -6812,6 +8431,7 @@ var data_service_exports = /* @__PURE__ */ __exportAll({
6812
8431
  updatePromptPermissions: () => updatePromptPermissions,
6813
8432
  updateRemoteAgentsPermissions: () => updateRemoteAgentsPermissions,
6814
8433
  updateResourcePermissions: () => updateResourcePermissions,
8434
+ updateSchedule: () => updateSchedule,
6815
8435
  updateSharedLink: () => updateSharedLink,
6816
8436
  updateSkill: () => updateSkill,
6817
8437
  updateSkillNode: () => updateSkillNode,
@@ -6821,6 +8441,7 @@ var data_service_exports = /* @__PURE__ */ __exportAll({
6821
8441
  updateTokenCount: () => updateTokenCount,
6822
8442
  updateUserKey: () => updateUserKey,
6823
8443
  updateUserPlugins: () => updateUserPlugins,
8444
+ updateUserPreferences: () => updateUserPreferences,
6824
8445
  uploadAgentAvatar: () => uploadAgentAvatar,
6825
8446
  uploadAssistantAvatar: () => uploadAssistantAvatar,
6826
8447
  uploadAvatar: () => uploadAvatar,
@@ -6832,6 +8453,25 @@ var data_service_exports = /* @__PURE__ */ __exportAll({
6832
8453
  verifyTwoFactor: () => verifyTwoFactor,
6833
8454
  verifyTwoFactorTemp: () => verifyTwoFactorTemp
6834
8455
  });
8456
+ function getInsights(params = {}) {
8457
+ const query = new URLSearchParams();
8458
+ for (const [key, value] of Object.entries(params)) if (Array.isArray(value)) value.forEach((item) => query.append(key, String(item)));
8459
+ else if (value !== void 0 && value !== null && value !== "") query.set(key, String(value));
8460
+ const suffix = query.toString() ? `?${query.toString()}` : "";
8461
+ return request_default.get(`${insights()}${suffix}`);
8462
+ }
8463
+ function getInsightsAccess() {
8464
+ return request_default.get(insightsAccess());
8465
+ }
8466
+ function getConversationTraceAvailability(conversationId) {
8467
+ return request_default.get(conversationTraceAvailability(conversationId));
8468
+ }
8469
+ function getConversationTraceRecords({ conversationId, cursor }, signal) {
8470
+ return request_default.get(conversationTraceRecords(conversationId, cursor), signal ? { signal } : void 0);
8471
+ }
8472
+ function getConversationTraceRecord({ conversationId, recordId, messageId, sourceId }, signal) {
8473
+ return request_default.get(conversationTraceRecord(conversationId, recordId, messageId, sourceId), signal ? { signal } : void 0);
8474
+ }
6835
8475
  function getLangfuseConnection() {
6836
8476
  return request_default.get(adminLangfuseConnection());
6837
8477
  }
@@ -6853,12 +8493,34 @@ function revokeAllUserKeys() {
6853
8493
  function deleteUser(payload) {
6854
8494
  return request_default.deleteWithOptions(deleteUser$1(), { data: payload });
6855
8495
  }
8496
+ function getCodeEnvironments() {
8497
+ return request_default.get(codeEnvironments());
8498
+ }
8499
+ function getCodeEnvironmentStatus(id) {
8500
+ return request_default.get(codeEnvironmentStatus(id));
8501
+ }
8502
+ function pairCodeEnvironment(payload) {
8503
+ return request_default.post(codeEnvironmentPairings(), payload);
8504
+ }
8505
+ function deleteCodeEnvironment(id) {
8506
+ return request_default.delete(codeEnvironmentById(id));
8507
+ }
8508
+ function updateCodeEnvironmentSettings({ id, settings }) {
8509
+ return request_default.patch(codeEnvironmentSettings(id), { settings });
8510
+ }
6856
8511
  function getFavorites() {
6857
8512
  return request_default.get(`${apiBaseUrl()}/api/user/settings/favorites`);
6858
8513
  }
6859
8514
  function updateFavorites(favorites) {
6860
8515
  return request_default.post(`${apiBaseUrl()}/api/user/settings/favorites`, { favorites });
6861
8516
  }
8517
+ /** Combined Pinned-section display order: favorite and pinned-chat entry keys interleaved. */
8518
+ function getPinnedOrder() {
8519
+ return request_default.get(pinnedOrder());
8520
+ }
8521
+ function updatePinnedOrder(pinnedOrder$1) {
8522
+ return request_default.post(pinnedOrder(), { pinnedOrder: pinnedOrder$1 });
8523
+ }
6862
8524
  /** Tool favorites — starred marketplace items (builtins, tools, MCP servers, skills). */
6863
8525
  function getToolFavorites() {
6864
8526
  return request_default.get(toolFavorites());
@@ -6936,6 +8598,9 @@ function getSearchEnabled() {
6936
8598
  function getUser() {
6937
8599
  return request_default.get(user());
6938
8600
  }
8601
+ function updateUserPreferences(preferences) {
8602
+ return request_default.patch(userPreferences(), preferences);
8603
+ }
6939
8604
  function getUserBalance() {
6940
8605
  return request_default.get(balance());
6941
8606
  }
@@ -7314,6 +8979,9 @@ function updateConversation(payload) {
7314
8979
  function archiveConversation(payload) {
7315
8980
  return request_default.post(archiveConversation$1(), { arg: payload });
7316
8981
  }
8982
+ function archiveAllConversations() {
8983
+ return request_default.post(archiveAllConversations$1(), {});
8984
+ }
7317
8985
  function listProjects(params) {
7318
8986
  return request_default.get(projects(params ?? {}));
7319
8987
  }
@@ -7372,6 +9040,21 @@ function getMessagesByConvoId(conversationId) {
7372
9040
  if (conversationId === "new" || conversationId === "PENDING") return Promise.resolve([]);
7373
9041
  return request_default.get(messages({ conversationId }));
7374
9042
  }
9043
+ function getMessageById(conversationId, messageId) {
9044
+ return request_default.get(messages({
9045
+ conversationId,
9046
+ messageId
9047
+ }));
9048
+ }
9049
+ function getParentSubagents(parentConversationId) {
9050
+ return request_default.get(parentSubagents(parentConversationId));
9051
+ }
9052
+ function getSubagentThread(parentConversationId, threadId, taskId, cursor) {
9053
+ return request_default.get(subagentThread(parentConversationId, threadId, taskId, cursor));
9054
+ }
9055
+ function controlSubagentTask(parentConversationId, threadId, body) {
9056
+ return request_default.post(subagentControl(parentConversationId, threadId), body);
9057
+ }
7375
9058
  function getPrompt(id) {
7376
9059
  return request_default.get(getPrompt$1(id));
7377
9060
  }
@@ -7420,6 +9103,33 @@ function getRandomPrompts(variables) {
7420
9103
  function listSkills(params) {
7421
9104
  return request_default.get(listSkillsWithFilters(params ?? {}));
7422
9105
  }
9106
+ function getSchedules() {
9107
+ return request_default.get(schedules());
9108
+ }
9109
+ function enqueueAgentQueuedTurn(payload) {
9110
+ return request_default.post(agentQueuedTurns(), payload);
9111
+ }
9112
+ function listAgentQueuedTurns(conversationId, clientRequestIds) {
9113
+ return request_default.get(agentQueuedTurnsByConversation(conversationId, clientRequestIds));
9114
+ }
9115
+ function cancelAgentQueuedTurn(queuedTurnId) {
9116
+ return request_default.delete(agentQueuedTurn(queuedTurnId));
9117
+ }
9118
+ function getSchedule(id) {
9119
+ return request_default.get(schedule(id));
9120
+ }
9121
+ function createSchedule(payload) {
9122
+ return request_default.post(schedules(), payload);
9123
+ }
9124
+ function updateSchedule(id, payload) {
9125
+ return request_default.patch(schedule(id), payload);
9126
+ }
9127
+ function deleteSchedule(id) {
9128
+ return request_default.delete(schedule(id));
9129
+ }
9130
+ function runScheduleNow(id) {
9131
+ return request_default.post(runSchedule(id), {});
9132
+ }
7423
9133
  function getSkill(id) {
7424
9134
  return request_default.get(getSkill$1(id));
7425
9135
  }
@@ -7610,12 +9320,21 @@ const getMemories = () => {
7610
9320
  const deleteMemory = (key, agentId) => {
7611
9321
  return request_default.delete(memory(key, agentId));
7612
9322
  };
9323
+ const deleteMemoryById = (id, agentId) => {
9324
+ return request_default.delete(memoryById(id, agentId));
9325
+ };
7613
9326
  const updateMemory = (key, value, originalKey, agentId) => {
7614
9327
  return request_default.patch(memory(originalKey || key, agentId), {
7615
9328
  key,
7616
9329
  value
7617
9330
  });
7618
9331
  };
9332
+ const updateMemoryById = (id, value, key, agentId) => {
9333
+ return request_default.patch(memoryById(id, agentId), {
9334
+ value,
9335
+ ...key ? { key } : {}
9336
+ });
9337
+ };
7619
9338
  const updateMemoryPreferences = (preferences) => {
7620
9339
  return request_default.patch(memoryPreferences(), preferences);
7621
9340
  };
@@ -7650,6 +9369,18 @@ const getActiveJobs = () => {
7650
9369
  return request_default.get(activeJobs());
7651
9370
  };
7652
9371
  //#endregion
9372
+ Object.defineProperty(exports, "ACTION_METADATA_FILTER_FIELDS", {
9373
+ enumerable: true,
9374
+ get: function() {
9375
+ return ACTION_METADATA_FILTER_FIELDS;
9376
+ }
9377
+ });
9378
+ Object.defineProperty(exports, "AGENT_INSTRUCTION_FILTER_FIELDS", {
9379
+ enumerable: true,
9380
+ get: function() {
9381
+ return AGENT_INSTRUCTION_FILTER_FIELDS;
9382
+ }
9383
+ });
7653
9384
  Object.defineProperty(exports, "AUTH_USER_DOC_BY_ID_PREFIX", {
7654
9385
  enumerable: true,
7655
9386
  get: function() {
@@ -7734,6 +9465,72 @@ Object.defineProperty(exports, "BedrockReasoningConfig", {
7734
9465
  return BedrockReasoningConfig;
7735
9466
  }
7736
9467
  });
9468
+ Object.defineProperty(exports, "CODE_APPROVAL_MODES", {
9469
+ enumerable: true,
9470
+ get: function() {
9471
+ return CODE_APPROVAL_MODES;
9472
+ }
9473
+ });
9474
+ Object.defineProperty(exports, "CODE_ENVIRONMENT_COMMAND_TIMEOUT_DEFAULT_MS", {
9475
+ enumerable: true,
9476
+ get: function() {
9477
+ return CODE_ENVIRONMENT_COMMAND_TIMEOUT_DEFAULT_MS;
9478
+ }
9479
+ });
9480
+ Object.defineProperty(exports, "CODE_ENVIRONMENT_COMMAND_TIMEOUT_HARD_MAX_MS", {
9481
+ enumerable: true,
9482
+ get: function() {
9483
+ return CODE_ENVIRONMENT_COMMAND_TIMEOUT_HARD_MAX_MS;
9484
+ }
9485
+ });
9486
+ Object.defineProperty(exports, "CODE_ENVIRONMENT_DECISION_VERSION", {
9487
+ enumerable: true,
9488
+ get: function() {
9489
+ return CODE_ENVIRONMENT_DECISION_VERSION;
9490
+ }
9491
+ });
9492
+ Object.defineProperty(exports, "CODE_ENVIRONMENT_MODES", {
9493
+ enumerable: true,
9494
+ get: function() {
9495
+ return CODE_ENVIRONMENT_MODES;
9496
+ }
9497
+ });
9498
+ Object.defineProperty(exports, "CODE_WORKSPACE_ID_PATTERN", {
9499
+ enumerable: true,
9500
+ get: function() {
9501
+ return CODE_WORKSPACE_ID_PATTERN;
9502
+ }
9503
+ });
9504
+ Object.defineProperty(exports, "CODE_WORKSPACE_MAX_COUNT", {
9505
+ enumerable: true,
9506
+ get: function() {
9507
+ return CODE_WORKSPACE_MAX_COUNT;
9508
+ }
9509
+ });
9510
+ Object.defineProperty(exports, "CODE_WORKSPACE_OPERATIONS", {
9511
+ enumerable: true,
9512
+ get: function() {
9513
+ return CODE_WORKSPACE_OPERATIONS;
9514
+ }
9515
+ });
9516
+ Object.defineProperty(exports, "CODE_WORKSPACE_SELECTION_ERROR_REASONS", {
9517
+ enumerable: true,
9518
+ get: function() {
9519
+ return CODE_WORKSPACE_SELECTION_ERROR_REASONS;
9520
+ }
9521
+ });
9522
+ Object.defineProperty(exports, "CONVERSATION_STARTER_FILTER_FIELDS", {
9523
+ enumerable: true,
9524
+ get: function() {
9525
+ return CONVERSATION_STARTER_FILTER_FIELDS;
9526
+ }
9527
+ });
9528
+ Object.defineProperty(exports, "CONVERSATION_TITLE_FILTER_FIELDS", {
9529
+ enumerable: true,
9530
+ get: function() {
9531
+ return CONVERSATION_TITLE_FILTER_FIELDS;
9532
+ }
9533
+ });
7737
9534
  Object.defineProperty(exports, "CacheKeys", {
7738
9535
  enumerable: true,
7739
9536
  get: function() {
@@ -7746,6 +9543,12 @@ Object.defineProperty(exports, "Capabilities", {
7746
9543
  return Capabilities;
7747
9544
  }
7748
9545
  });
9546
+ Object.defineProperty(exports, "CodeApprovalModeError", {
9547
+ enumerable: true,
9548
+ get: function() {
9549
+ return CodeApprovalModeError;
9550
+ }
9551
+ });
7749
9552
  Object.defineProperty(exports, "CohereConstants", {
7750
9553
  enumerable: true,
7751
9554
  get: function() {
@@ -7770,6 +9573,12 @@ Object.defineProperty(exports, "DEFAULT_MEMORY_MAX_INPUT_TOKENS", {
7770
9573
  return DEFAULT_MEMORY_MAX_INPUT_TOKENS;
7771
9574
  }
7772
9575
  });
9576
+ Object.defineProperty(exports, "DefaultLLMDeliveryPath", {
9577
+ enumerable: true,
9578
+ get: function() {
9579
+ return DefaultLLMDeliveryPath;
9580
+ }
9581
+ });
7773
9582
  Object.defineProperty(exports, "DynamicQueryKeys", {
7774
9583
  enumerable: true,
7775
9584
  get: function() {
@@ -7806,6 +9615,12 @@ Object.defineProperty(exports, "ErrorTypes", {
7806
9615
  return ErrorTypes;
7807
9616
  }
7808
9617
  });
9618
+ Object.defineProperty(exports, "FEEDBACK_FILTER_FIELDS", {
9619
+ enumerable: true,
9620
+ get: function() {
9621
+ return FEEDBACK_FILTER_FIELDS;
9622
+ }
9623
+ });
7809
9624
  Object.defineProperty(exports, "FEEDBACK_RATINGS", {
7810
9625
  enumerable: true,
7811
9626
  get: function() {
@@ -7824,6 +9639,18 @@ Object.defineProperty(exports, "FEEDBACK_TAGS", {
7824
9639
  return FEEDBACK_TAGS;
7825
9640
  }
7826
9641
  });
9642
+ Object.defineProperty(exports, "FILE_FILTER_FIELDS", {
9643
+ enumerable: true,
9644
+ get: function() {
9645
+ return FILE_FILTER_FIELDS;
9646
+ }
9647
+ });
9648
+ Object.defineProperty(exports, "FILTER_PII_STARTER_PATTERNS", {
9649
+ enumerable: true,
9650
+ get: function() {
9651
+ return FILTER_PII_STARTER_PATTERNS;
9652
+ }
9653
+ });
7827
9654
  Object.defineProperty(exports, "FetchTokenConfig", {
7828
9655
  enumerable: true,
7829
9656
  get: function() {
@@ -7854,6 +9681,12 @@ Object.defineProperty(exports, "ForkOptions", {
7854
9681
  return ForkOptions;
7855
9682
  }
7856
9683
  });
9684
+ Object.defineProperty(exports, "HITL_MESSAGE_FILTER_FIELDS", {
9685
+ enumerable: true,
9686
+ get: function() {
9687
+ return HITL_MESSAGE_FILTER_FIELDS;
9688
+ }
9689
+ });
7857
9690
  Object.defineProperty(exports, "ImageDetail", {
7858
9691
  enumerable: true,
7859
9692
  get: function() {
@@ -7884,154 +9717,280 @@ Object.defineProperty(exports, "KnownEndpoints", {
7884
9717
  return KnownEndpoints;
7885
9718
  }
7886
9719
  });
7887
- Object.defineProperty(exports, "LocalStorageKeys", {
9720
+ Object.defineProperty(exports, "LANGFUSE_TRACE_CONVERSATION_METADATA_FIELDS", {
7888
9721
  enumerable: true,
7889
9722
  get: function() {
7890
- return LocalStorageKeys;
9723
+ return LANGFUSE_TRACE_CONVERSATION_METADATA_FIELDS;
7891
9724
  }
7892
9725
  });
7893
- Object.defineProperty(exports, "MAX_SUBAGENTS", {
9726
+ Object.defineProperty(exports, "LANGFUSE_TRACE_USER_ID_FIELDS", {
7894
9727
  enumerable: true,
7895
9728
  get: function() {
7896
- return MAX_SUBAGENTS;
9729
+ return LANGFUSE_TRACE_USER_ID_FIELDS;
7897
9730
  }
7898
9731
  });
7899
- Object.defineProperty(exports, "MAX_SUBAGENT_DEPTH", {
9732
+ Object.defineProperty(exports, "LANGFUSE_TRACE_USER_METADATA_FIELDS", {
7900
9733
  enumerable: true,
7901
9734
  get: function() {
7902
- return MAX_SUBAGENT_DEPTH;
9735
+ return LANGFUSE_TRACE_USER_METADATA_FIELDS;
7903
9736
  }
7904
9737
  });
7905
- Object.defineProperty(exports, "MAX_SUBAGENT_GRAPH_NODES", {
9738
+ Object.defineProperty(exports, "LocalStorageKeys", {
7906
9739
  enumerable: true,
7907
9740
  get: function() {
7908
- return MAX_SUBAGENT_GRAPH_NODES;
9741
+ return LocalStorageKeys;
7909
9742
  }
7910
9743
  });
7911
- Object.defineProperty(exports, "MAX_SUBAGENT_RUN_CONFIGS", {
9744
+ Object.defineProperty(exports, "MAX_CHAT_PROJECT_DESCRIPTION_LENGTH", {
7912
9745
  enumerable: true,
7913
9746
  get: function() {
7914
- return MAX_SUBAGENT_RUN_CONFIGS;
9747
+ return MAX_CHAT_PROJECT_DESCRIPTION_LENGTH;
7915
9748
  }
7916
9749
  });
7917
- Object.defineProperty(exports, "MCPOptionsSchema", {
9750
+ Object.defineProperty(exports, "MAX_CHAT_PROJECT_NAME_LENGTH", {
7918
9751
  enumerable: true,
7919
9752
  get: function() {
7920
- return MCPOptionsSchema;
9753
+ return MAX_CHAT_PROJECT_NAME_LENGTH;
7921
9754
  }
7922
9755
  });
7923
- Object.defineProperty(exports, "MCPServerUserInputSchema", {
9756
+ Object.defineProperty(exports, "MAX_GRAPH_SUBAGENT_MEMBERS", {
7924
9757
  enumerable: true,
7925
9758
  get: function() {
7926
- return MCPServerUserInputSchema;
9759
+ return MAX_GRAPH_SUBAGENT_MEMBERS;
7927
9760
  }
7928
9761
  });
7929
- Object.defineProperty(exports, "MCPServersSchema", {
9762
+ Object.defineProperty(exports, "MAX_MCP_ICON_PATH_LENGTH", {
7930
9763
  enumerable: true,
7931
9764
  get: function() {
7932
- return MCPServersSchema;
9765
+ return MAX_MCP_ICON_PATH_LENGTH;
7933
9766
  }
7934
9767
  });
7935
- Object.defineProperty(exports, "MCP_USER_INPUT_FIELDS", {
9768
+ Object.defineProperty(exports, "MAX_PII_CUSTOM_PATTERNS_TOTAL", {
7936
9769
  enumerable: true,
7937
9770
  get: function() {
7938
- return MCP_USER_INPUT_FIELDS;
9771
+ return MAX_PII_CUSTOM_PATTERNS_TOTAL;
7939
9772
  }
7940
9773
  });
7941
- Object.defineProperty(exports, "MYTHOS_CLASS_FAMILIES", {
9774
+ Object.defineProperty(exports, "MAX_PII_CUSTOM_REGEX_CHARACTERS", {
7942
9775
  enumerable: true,
7943
9776
  get: function() {
7944
- return MYTHOS_CLASS_FAMILIES;
9777
+ return MAX_PII_CUSTOM_REGEX_CHARACTERS;
7945
9778
  }
7946
9779
  });
7947
- Object.defineProperty(exports, "MemoryScope", {
9780
+ Object.defineProperty(exports, "MAX_PII_CUSTOM_REGEX_INSTRUCTIONS", {
7948
9781
  enumerable: true,
7949
9782
  get: function() {
7950
- return MemoryScope;
9783
+ return MAX_PII_CUSTOM_REGEX_INSTRUCTIONS;
7951
9784
  }
7952
9785
  });
7953
- Object.defineProperty(exports, "MessageContentTypes", {
9786
+ Object.defineProperty(exports, "MAX_PII_PATTERNS_PER_SOURCE", {
7954
9787
  enumerable: true,
7955
9788
  get: function() {
7956
- return MessageContentTypes;
9789
+ return MAX_PII_PATTERNS_PER_SOURCE;
7957
9790
  }
7958
9791
  });
7959
- Object.defineProperty(exports, "MutationKeys", {
9792
+ Object.defineProperty(exports, "MAX_PII_PATTERN_ID_LENGTH", {
7960
9793
  enumerable: true,
7961
9794
  get: function() {
7962
- return MutationKeys;
9795
+ return MAX_PII_PATTERN_ID_LENGTH;
7963
9796
  }
7964
9797
  });
7965
- Object.defineProperty(exports, "OCRStrategy", {
9798
+ Object.defineProperty(exports, "MAX_PII_PATTERN_LABEL_LENGTH", {
7966
9799
  enumerable: true,
7967
9800
  get: function() {
7968
- return OCRStrategy;
9801
+ return MAX_PII_PATTERN_LABEL_LENGTH;
7969
9802
  }
7970
9803
  });
7971
- Object.defineProperty(exports, "OptionTypes", {
9804
+ Object.defineProperty(exports, "MAX_PII_PATTERN_LENGTH", {
7972
9805
  enumerable: true,
7973
9806
  get: function() {
7974
- return OptionTypes;
9807
+ return MAX_PII_PATTERN_LENGTH;
7975
9808
  }
7976
9809
  });
7977
- Object.defineProperty(exports, "PermissionBits", {
9810
+ Object.defineProperty(exports, "MAX_SUBAGENTS", {
7978
9811
  enumerable: true,
7979
9812
  get: function() {
7980
- return PermissionBits;
9813
+ return MAX_SUBAGENTS;
7981
9814
  }
7982
9815
  });
7983
- Object.defineProperty(exports, "PrincipalModel", {
9816
+ Object.defineProperty(exports, "MAX_SUBAGENTS_CEILING", {
7984
9817
  enumerable: true,
7985
9818
  get: function() {
7986
- return PrincipalModel;
9819
+ return MAX_SUBAGENTS_CEILING;
7987
9820
  }
7988
9821
  });
7989
- Object.defineProperty(exports, "PrincipalType", {
9822
+ Object.defineProperty(exports, "MAX_SUBAGENT_DEPTH", {
7990
9823
  enumerable: true,
7991
9824
  get: function() {
7992
- return PrincipalType;
9825
+ return MAX_SUBAGENT_DEPTH;
7993
9826
  }
7994
9827
  });
7995
- Object.defineProperty(exports, "Providers", {
9828
+ Object.defineProperty(exports, "MAX_SUBAGENT_GRAPH_NODES", {
7996
9829
  enumerable: true,
7997
9830
  get: function() {
7998
- return Providers;
9831
+ return MAX_SUBAGENT_GRAPH_NODES;
7999
9832
  }
8000
9833
  });
8001
- Object.defineProperty(exports, "QueryKeys", {
9834
+ Object.defineProperty(exports, "MAX_SUBAGENT_RUN_CONFIGS", {
8002
9835
  enumerable: true,
8003
9836
  get: function() {
8004
- return QueryKeys;
9837
+ return MAX_SUBAGENT_RUN_CONFIGS;
8005
9838
  }
8006
9839
  });
8007
- Object.defineProperty(exports, "REFILL_INTERVAL_UNITS", {
9840
+ Object.defineProperty(exports, "MCPOptionsSchema", {
8008
9841
  enumerable: true,
8009
9842
  get: function() {
8010
- return REFILL_INTERVAL_UNITS;
9843
+ return MCPOptionsSchema;
8011
9844
  }
8012
9845
  });
8013
- Object.defineProperty(exports, "RateLimitPrefix", {
9846
+ Object.defineProperty(exports, "MCPServerUserInputSchema", {
8014
9847
  enumerable: true,
8015
9848
  get: function() {
8016
- return RateLimitPrefix;
9849
+ return MCPServerUserInputSchema;
8017
9850
  }
8018
9851
  });
8019
- Object.defineProperty(exports, "ReasoningContext", {
9852
+ Object.defineProperty(exports, "MCPServersSchema", {
8020
9853
  enumerable: true,
8021
9854
  get: function() {
8022
- return ReasoningContext;
9855
+ return MCPServersSchema;
8023
9856
  }
8024
9857
  });
8025
- Object.defineProperty(exports, "ReasoningEffort", {
9858
+ Object.defineProperty(exports, "MCP_SERVER_TITLE_ERROR", {
8026
9859
  enumerable: true,
8027
9860
  get: function() {
8028
- return ReasoningEffort;
9861
+ return MCP_SERVER_TITLE_ERROR;
8029
9862
  }
8030
9863
  });
8031
- Object.defineProperty(exports, "ReasoningMode", {
9864
+ Object.defineProperty(exports, "MCP_SERVER_TITLE_PATTERN", {
8032
9865
  enumerable: true,
8033
9866
  get: function() {
8034
- return ReasoningMode;
9867
+ return MCP_SERVER_TITLE_PATTERN;
9868
+ }
9869
+ });
9870
+ Object.defineProperty(exports, "MCP_USER_INPUT_FIELDS", {
9871
+ enumerable: true,
9872
+ get: function() {
9873
+ return MCP_USER_INPUT_FIELDS;
9874
+ }
9875
+ });
9876
+ Object.defineProperty(exports, "MEMORY_FILTER_FIELDS", {
9877
+ enumerable: true,
9878
+ get: function() {
9879
+ return MEMORY_FILTER_FIELDS;
9880
+ }
9881
+ });
9882
+ Object.defineProperty(exports, "MESSAGE_FILTER_FIELDS", {
9883
+ enumerable: true,
9884
+ get: function() {
9885
+ return MESSAGE_FILTER_FIELDS;
9886
+ }
9887
+ });
9888
+ Object.defineProperty(exports, "MODEL_PARAMETER_FILTER_FIELDS", {
9889
+ enumerable: true,
9890
+ get: function() {
9891
+ return MODEL_PARAMETER_FILTER_FIELDS;
9892
+ }
9893
+ });
9894
+ Object.defineProperty(exports, "MYTHOS_CLASS_FAMILIES", {
9895
+ enumerable: true,
9896
+ get: function() {
9897
+ return MYTHOS_CLASS_FAMILIES;
9898
+ }
9899
+ });
9900
+ Object.defineProperty(exports, "MemoryScope", {
9901
+ enumerable: true,
9902
+ get: function() {
9903
+ return MemoryScope;
9904
+ }
9905
+ });
9906
+ Object.defineProperty(exports, "MessageContentTypes", {
9907
+ enumerable: true,
9908
+ get: function() {
9909
+ return MessageContentTypes;
9910
+ }
9911
+ });
9912
+ Object.defineProperty(exports, "MutationKeys", {
9913
+ enumerable: true,
9914
+ get: function() {
9915
+ return MutationKeys;
9916
+ }
9917
+ });
9918
+ Object.defineProperty(exports, "OCRStrategy", {
9919
+ enumerable: true,
9920
+ get: function() {
9921
+ return OCRStrategy;
9922
+ }
9923
+ });
9924
+ Object.defineProperty(exports, "OptionTypes", {
9925
+ enumerable: true,
9926
+ get: function() {
9927
+ return OptionTypes;
9928
+ }
9929
+ });
9930
+ Object.defineProperty(exports, "PROMPT_FILTER_FIELDS", {
9931
+ enumerable: true,
9932
+ get: function() {
9933
+ return PROMPT_FILTER_FIELDS;
9934
+ }
9935
+ });
9936
+ Object.defineProperty(exports, "PermissionBits", {
9937
+ enumerable: true,
9938
+ get: function() {
9939
+ return PermissionBits;
9940
+ }
9941
+ });
9942
+ Object.defineProperty(exports, "PrincipalModel", {
9943
+ enumerable: true,
9944
+ get: function() {
9945
+ return PrincipalModel;
9946
+ }
9947
+ });
9948
+ Object.defineProperty(exports, "PrincipalType", {
9949
+ enumerable: true,
9950
+ get: function() {
9951
+ return PrincipalType;
9952
+ }
9953
+ });
9954
+ Object.defineProperty(exports, "Providers", {
9955
+ enumerable: true,
9956
+ get: function() {
9957
+ return Providers;
9958
+ }
9959
+ });
9960
+ Object.defineProperty(exports, "QueryKeys", {
9961
+ enumerable: true,
9962
+ get: function() {
9963
+ return QueryKeys;
9964
+ }
9965
+ });
9966
+ Object.defineProperty(exports, "REFILL_INTERVAL_UNITS", {
9967
+ enumerable: true,
9968
+ get: function() {
9969
+ return REFILL_INTERVAL_UNITS;
9970
+ }
9971
+ });
9972
+ Object.defineProperty(exports, "RateLimitPrefix", {
9973
+ enumerable: true,
9974
+ get: function() {
9975
+ return RateLimitPrefix;
9976
+ }
9977
+ });
9978
+ Object.defineProperty(exports, "ReasoningContext", {
9979
+ enumerable: true,
9980
+ get: function() {
9981
+ return ReasoningContext;
9982
+ }
9983
+ });
9984
+ Object.defineProperty(exports, "ReasoningEffort", {
9985
+ enumerable: true,
9986
+ get: function() {
9987
+ return ReasoningEffort;
9988
+ }
9989
+ });
9990
+ Object.defineProperty(exports, "ReasoningMode", {
9991
+ enumerable: true,
9992
+ get: function() {
9993
+ return ReasoningMode;
8035
9994
  }
8036
9995
  });
8037
9996
  Object.defineProperty(exports, "ReasoningParameterFormat", {
@@ -8076,6 +10035,12 @@ Object.defineProperty(exports, "RunStatus", {
8076
10035
  return RunStatus;
8077
10036
  }
8078
10037
  });
10038
+ Object.defineProperty(exports, "SKILL_FILTER_FIELDS", {
10039
+ enumerable: true,
10040
+ get: function() {
10041
+ return SKILL_FILTER_FIELDS;
10042
+ }
10043
+ });
8079
10044
  Object.defineProperty(exports, "SKILL_SYNC_DEFAULT_DISCOVERY_DEPTH", {
8080
10045
  enumerable: true,
8081
10046
  get: function() {
@@ -8106,6 +10071,18 @@ Object.defineProperty(exports, "SSEOptionsSchema", {
8106
10071
  return SSEOptionsSchema;
8107
10072
  }
8108
10073
  });
10074
+ Object.defineProperty(exports, "STATEFUL_CODE_ENVIRONMENTS", {
10075
+ enumerable: true,
10076
+ get: function() {
10077
+ return STATEFUL_CODE_ENVIRONMENTS;
10078
+ }
10079
+ });
10080
+ Object.defineProperty(exports, "STORED_MESSAGE_FILTER_FIELDS", {
10081
+ enumerable: true,
10082
+ get: function() {
10083
+ return STORED_MESSAGE_FILTER_FIELDS;
10084
+ }
10085
+ });
8109
10086
  Object.defineProperty(exports, "STTProviders", {
8110
10087
  enumerable: true,
8111
10088
  get: function() {
@@ -8154,6 +10131,12 @@ Object.defineProperty(exports, "SettingsViews", {
8154
10131
  return SettingsViews;
8155
10132
  }
8156
10133
  });
10134
+ Object.defineProperty(exports, "SkillsScope", {
10135
+ enumerable: true,
10136
+ get: function() {
10137
+ return SkillsScope;
10138
+ }
10139
+ });
8157
10140
  Object.defineProperty(exports, "StdioOptionsSchema", {
8158
10141
  enumerable: true,
8159
10142
  get: function() {
@@ -8178,6 +10161,12 @@ Object.defineProperty(exports, "SystemCategories", {
8178
10161
  return SystemCategories;
8179
10162
  }
8180
10163
  });
10164
+ Object.defineProperty(exports, "TOOL_ARGUMENT_FILTER_FIELDS", {
10165
+ enumerable: true,
10166
+ get: function() {
10167
+ return TOOL_ARGUMENT_FILTER_FIELDS;
10168
+ }
10169
+ });
8181
10170
  Object.defineProperty(exports, "TTSProviders", {
8182
10171
  enumerable: true,
8183
10172
  get: function() {
@@ -8268,6 +10257,24 @@ Object.defineProperty(exports, "actionDomainSeparator", {
8268
10257
  return actionDomainSeparator;
8269
10258
  }
8270
10259
  });
10260
+ Object.defineProperty(exports, "actionMetadataFilterFieldSchema", {
10261
+ enumerable: true,
10262
+ get: function() {
10263
+ return actionMetadataFilterFieldSchema;
10264
+ }
10265
+ });
10266
+ Object.defineProperty(exports, "agentGitIdentitySchema", {
10267
+ enumerable: true,
10268
+ get: function() {
10269
+ return agentGitIdentitySchema;
10270
+ }
10271
+ });
10272
+ Object.defineProperty(exports, "agentInstructionFilterFieldSchema", {
10273
+ enumerable: true,
10274
+ get: function() {
10275
+ return agentInstructionFilterFieldSchema;
10276
+ }
10277
+ });
8271
10278
  Object.defineProperty(exports, "agentsBaseSchema", {
8272
10279
  enumerable: true,
8273
10280
  get: function() {
@@ -8478,6 +10485,12 @@ Object.defineProperty(exports, "checkpointerTypeSchema", {
8478
10485
  return checkpointerTypeSchema;
8479
10486
  }
8480
10487
  });
10488
+ Object.defineProperty(exports, "clampSettingRange", {
10489
+ enumerable: true,
10490
+ get: function() {
10491
+ return clampSettingRange;
10492
+ }
10493
+ });
8481
10494
  Object.defineProperty(exports, "clearAllConversations", {
8482
10495
  enumerable: true,
8483
10496
  get: function() {
@@ -8490,6 +10503,24 @@ Object.defineProperty(exports, "cloudfrontConfigSchema", {
8490
10503
  return cloudfrontConfigSchema;
8491
10504
  }
8492
10505
  });
10506
+ Object.defineProperty(exports, "codeEnvironmentPermissionDecisionSchema", {
10507
+ enumerable: true,
10508
+ get: function() {
10509
+ return codeEnvironmentPermissionDecisionSchema;
10510
+ }
10511
+ });
10512
+ Object.defineProperty(exports, "codeEnvironmentUserConfigSchema", {
10513
+ enumerable: true,
10514
+ get: function() {
10515
+ return codeEnvironmentUserConfigSchema;
10516
+ }
10517
+ });
10518
+ Object.defineProperty(exports, "codeEnvironmentUserSettingsSchema", {
10519
+ enumerable: true,
10520
+ get: function() {
10521
+ return codeEnvironmentUserSettingsSchema;
10522
+ }
10523
+ });
8493
10524
  Object.defineProperty(exports, "codeInterpreterMimeTypes", {
8494
10525
  enumerable: true,
8495
10526
  get: function() {
@@ -8550,6 +10581,18 @@ Object.defineProperty(exports, "contextPruningSchema", {
8550
10581
  return contextPruningSchema;
8551
10582
  }
8552
10583
  });
10584
+ Object.defineProperty(exports, "conversationStarterFilterFieldSchema", {
10585
+ enumerable: true,
10586
+ get: function() {
10587
+ return conversationStarterFilterFieldSchema;
10588
+ }
10589
+ });
10590
+ Object.defineProperty(exports, "conversationTitleFilterFieldSchema", {
10591
+ enumerable: true,
10592
+ get: function() {
10593
+ return conversationTitleFilterFieldSchema;
10594
+ }
10595
+ });
8553
10596
  Object.defineProperty(exports, "convertStringsToRegex", {
8554
10597
  enumerable: true,
8555
10598
  get: function() {
@@ -8604,6 +10647,12 @@ Object.defineProperty(exports, "defaultEndpoints", {
8604
10647
  return defaultEndpoints;
8605
10648
  }
8606
10649
  });
10650
+ Object.defineProperty(exports, "defaultLLMDeliveryPathSchema", {
10651
+ enumerable: true,
10652
+ get: function() {
10653
+ return defaultLLMDeliveryPathSchema;
10654
+ }
10655
+ });
8607
10656
  Object.defineProperty(exports, "defaultModels", {
8608
10657
  enumerable: true,
8609
10658
  get: function() {
@@ -8808,6 +10857,12 @@ Object.defineProperty(exports, "extractVariableName", {
8808
10857
  return extractVariableName;
8809
10858
  }
8810
10859
  });
10860
+ Object.defineProperty(exports, "feedbackFilterFieldSchema", {
10861
+ enumerable: true,
10862
+ get: function() {
10863
+ return feedbackFilterFieldSchema;
10864
+ }
10865
+ });
8811
10866
  Object.defineProperty(exports, "feedbackRatingSchema", {
8812
10867
  enumerable: true,
8813
10868
  get: function() {
@@ -8838,6 +10893,12 @@ Object.defineProperty(exports, "fileConfigSchema", {
8838
10893
  return fileConfigSchema;
8839
10894
  }
8840
10895
  });
10896
+ Object.defineProperty(exports, "fileFilterFieldSchema", {
10897
+ enumerable: true,
10898
+ get: function() {
10899
+ return fileFilterFieldSchema;
10900
+ }
10901
+ });
8841
10902
  Object.defineProperty(exports, "fileSourceSchema", {
8842
10903
  enumerable: true,
8843
10904
  get: function() {
@@ -8856,6 +10917,36 @@ Object.defineProperty(exports, "fileStrategiesSchema", {
8856
10917
  return fileStrategiesSchema;
8857
10918
  }
8858
10919
  });
10920
+ Object.defineProperty(exports, "filterPiiActionSchema", {
10921
+ enumerable: true,
10922
+ get: function() {
10923
+ return filterPiiActionSchema;
10924
+ }
10925
+ });
10926
+ Object.defineProperty(exports, "filterPiiCustomPatternSchema", {
10927
+ enumerable: true,
10928
+ get: function() {
10929
+ return filterPiiCustomPatternSchema;
10930
+ }
10931
+ });
10932
+ Object.defineProperty(exports, "filterPiiRegexSchema", {
10933
+ enumerable: true,
10934
+ get: function() {
10935
+ return filterPiiRegexSchema;
10936
+ }
10937
+ });
10938
+ Object.defineProperty(exports, "filterPiiStarterPatternSchema", {
10939
+ enumerable: true,
10940
+ get: function() {
10941
+ return filterPiiStarterPatternSchema;
10942
+ }
10943
+ });
10944
+ Object.defineProperty(exports, "filtersConfigSchema", {
10945
+ enumerable: true,
10946
+ get: function() {
10947
+ return filtersConfigSchema;
10948
+ }
10949
+ });
8859
10950
  Object.defineProperty(exports, "fullMimeTypesList", {
8860
10951
  enumerable: true,
8861
10952
  get: function() {
@@ -8898,6 +10989,12 @@ Object.defineProperty(exports, "getAllEffectivePermissions", {
8898
10989
  return getAllEffectivePermissions;
8899
10990
  }
8900
10991
  });
10992
+ Object.defineProperty(exports, "getAllowedCodeApprovalModes", {
10993
+ enumerable: true,
10994
+ get: function() {
10995
+ return getAllowedCodeApprovalModes;
10996
+ }
10997
+ });
8901
10998
  Object.defineProperty(exports, "getAvailablePlugins", {
8902
10999
  enumerable: true,
8903
11000
  get: function() {
@@ -8934,6 +11031,12 @@ Object.defineProperty(exports, "getDefaultParamsEndpoint", {
8934
11031
  return getDefaultParamsEndpoint;
8935
11032
  }
8936
11033
  });
11034
+ Object.defineProperty(exports, "getDocumentFileExtension", {
11035
+ enumerable: true,
11036
+ get: function() {
11037
+ return getDocumentFileExtension;
11038
+ }
11039
+ });
8937
11040
  Object.defineProperty(exports, "getEffectivePermissions", {
8938
11041
  enumerable: true,
8939
11042
  get: function() {
@@ -8952,12 +11055,30 @@ Object.defineProperty(exports, "getEndpointFileConfig", {
8952
11055
  return getEndpointFileConfig;
8953
11056
  }
8954
11057
  });
11058
+ Object.defineProperty(exports, "getGoogleThinkingBudgetBounds", {
11059
+ enumerable: true,
11060
+ get: function() {
11061
+ return getGoogleThinkingBudgetBounds;
11062
+ }
11063
+ });
11064
+ Object.defineProperty(exports, "getGoogleThinkingBudgetMax", {
11065
+ enumerable: true,
11066
+ get: function() {
11067
+ return getGoogleThinkingBudgetMax;
11068
+ }
11069
+ });
8955
11070
  Object.defineProperty(exports, "getMCPServerConnectionStatus", {
8956
11071
  enumerable: true,
8957
11072
  get: function() {
8958
11073
  return getMCPServerConnectionStatus;
8959
11074
  }
8960
11075
  });
11076
+ Object.defineProperty(exports, "getMaxSubagents", {
11077
+ enumerable: true,
11078
+ get: function() {
11079
+ return getMaxSubagents;
11080
+ }
11081
+ });
8961
11082
  Object.defineProperty(exports, "getModelKey", {
8962
11083
  enumerable: true,
8963
11084
  get: function() {
@@ -8970,6 +11091,12 @@ Object.defineProperty(exports, "getModels", {
8970
11091
  return getModels;
8971
11092
  }
8972
11093
  });
11094
+ Object.defineProperty(exports, "getPiiRegexProgramSize", {
11095
+ enumerable: true,
11096
+ get: function() {
11097
+ return getPiiRegexProgramSize;
11098
+ }
11099
+ });
8973
11100
  Object.defineProperty(exports, "getRefillEligibilityDate", {
8974
11101
  enumerable: true,
8975
11102
  get: function() {
@@ -9054,12 +11181,36 @@ Object.defineProperty(exports, "googleSettings", {
9054
11181
  return googleSettings;
9055
11182
  }
9056
11183
  });
11184
+ Object.defineProperty(exports, "hasActiveFiltersConfig", {
11185
+ enumerable: true,
11186
+ get: function() {
11187
+ return hasActiveFiltersConfig;
11188
+ }
11189
+ });
11190
+ Object.defineProperty(exports, "hasActivePiiFields", {
11191
+ enumerable: true,
11192
+ get: function() {
11193
+ return hasActivePiiFields;
11194
+ }
11195
+ });
11196
+ Object.defineProperty(exports, "hasActivePiiPatterns", {
11197
+ enumerable: true,
11198
+ get: function() {
11199
+ return hasActivePiiPatterns;
11200
+ }
11201
+ });
9057
11202
  Object.defineProperty(exports, "hasPermissions", {
9058
11203
  enumerable: true,
9059
11204
  get: function() {
9060
11205
  return hasPermissions;
9061
11206
  }
9062
11207
  });
11208
+ Object.defineProperty(exports, "hasProcessMCPServerConfig", {
11209
+ enumerable: true,
11210
+ get: function() {
11211
+ return hasProcessMCPServerConfig;
11212
+ }
11213
+ });
9063
11214
  Object.defineProperty(exports, "hostImageIdSuffix", {
9064
11215
  enumerable: true,
9065
11216
  get: function() {
@@ -9168,6 +11319,30 @@ Object.defineProperty(exports, "isBedrockDocumentType", {
9168
11319
  return isBedrockDocumentType;
9169
11320
  }
9170
11321
  });
11322
+ Object.defineProperty(exports, "isCodeEnvironmentMode", {
11323
+ enumerable: true,
11324
+ get: function() {
11325
+ return isCodeEnvironmentMode;
11326
+ }
11327
+ });
11328
+ Object.defineProperty(exports, "isCodeWorkspaceSelection", {
11329
+ enumerable: true,
11330
+ get: function() {
11331
+ return isCodeWorkspaceSelection;
11332
+ }
11333
+ });
11334
+ Object.defineProperty(exports, "isCodeWorkspaceSelectionErrorReason", {
11335
+ enumerable: true,
11336
+ get: function() {
11337
+ return isCodeWorkspaceSelectionErrorReason;
11338
+ }
11339
+ });
11340
+ Object.defineProperty(exports, "isCodeWorkspaceSelections", {
11341
+ enumerable: true,
11342
+ get: function() {
11343
+ return isCodeWorkspaceSelections;
11344
+ }
11345
+ });
9171
11346
  Object.defineProperty(exports, "isDocumentSupportedProvider", {
9172
11347
  enumerable: true,
9173
11348
  get: function() {
@@ -9180,6 +11355,24 @@ Object.defineProperty(exports, "isImageVisionTool", {
9180
11355
  return isImageVisionTool;
9181
11356
  }
9182
11357
  });
11358
+ Object.defineProperty(exports, "isKnownProviderIdentifier", {
11359
+ enumerable: true,
11360
+ get: function() {
11361
+ return isKnownProviderIdentifier;
11362
+ }
11363
+ });
11364
+ Object.defineProperty(exports, "isMediaSupportedProvider", {
11365
+ enumerable: true,
11366
+ get: function() {
11367
+ return isMediaSupportedProvider;
11368
+ }
11369
+ });
11370
+ Object.defineProperty(exports, "isMessageFileUpload", {
11371
+ enumerable: true,
11372
+ get: function() {
11373
+ return isMessageFileUpload;
11374
+ }
11375
+ });
9183
11376
  Object.defineProperty(exports, "isMythosClassModel", {
9184
11377
  enumerable: true,
9185
11378
  get: function() {
@@ -9204,18 +11397,48 @@ Object.defineProperty(exports, "isPermissiveMimeConfig", {
9204
11397
  return isPermissiveMimeConfig;
9205
11398
  }
9206
11399
  });
11400
+ Object.defineProperty(exports, "isProcessMCPServerConfig", {
11401
+ enumerable: true,
11402
+ get: function() {
11403
+ return isProcessMCPServerConfig;
11404
+ }
11405
+ });
11406
+ Object.defineProperty(exports, "isProcessMCPServerField", {
11407
+ enumerable: true,
11408
+ get: function() {
11409
+ return isProcessMCPServerField;
11410
+ }
11411
+ });
9207
11412
  Object.defineProperty(exports, "isRemoteOidcUrlAllowed", {
9208
11413
  enumerable: true,
9209
11414
  get: function() {
9210
11415
  return isRemoteOidcUrlAllowed;
9211
11416
  }
9212
11417
  });
11418
+ Object.defineProperty(exports, "isResponsesApiUpload", {
11419
+ enumerable: true,
11420
+ get: function() {
11421
+ return isResponsesApiUpload;
11422
+ }
11423
+ });
11424
+ Object.defineProperty(exports, "isSecureCodeEnvironmentControlURL", {
11425
+ enumerable: true,
11426
+ get: function() {
11427
+ return isSecureCodeEnvironmentControlURL;
11428
+ }
11429
+ });
9213
11430
  Object.defineProperty(exports, "isSensitiveEnvVar", {
9214
11431
  enumerable: true,
9215
11432
  get: function() {
9216
11433
  return isSensitiveEnvVar;
9217
11434
  }
9218
11435
  });
11436
+ Object.defineProperty(exports, "isSpeechProviderConfigured", {
11437
+ enumerable: true,
11438
+ get: function() {
11439
+ return isSpeechProviderConfigured;
11440
+ }
11441
+ });
9219
11442
  Object.defineProperty(exports, "isUUID", {
9220
11443
  enumerable: true,
9221
11444
  get: function() {
@@ -9228,24 +11451,60 @@ Object.defineProperty(exports, "langfuseConfigSchema", {
9228
11451
  return langfuseConfigSchema;
9229
11452
  }
9230
11453
  });
11454
+ Object.defineProperty(exports, "langfuseTraceConfigSchema", {
11455
+ enumerable: true,
11456
+ get: function() {
11457
+ return langfuseTraceConfigSchema;
11458
+ }
11459
+ });
11460
+ Object.defineProperty(exports, "listConfiguredSpeechProviders", {
11461
+ enumerable: true,
11462
+ get: function() {
11463
+ return listConfiguredSpeechProviders;
11464
+ }
11465
+ });
9231
11466
  Object.defineProperty(exports, "loginPage", {
9232
11467
  enumerable: true,
9233
11468
  get: function() {
9234
11469
  return loginPage;
9235
11470
  }
9236
11471
  });
11472
+ Object.defineProperty(exports, "materializeModelSpecEndpoints", {
11473
+ enumerable: true,
11474
+ get: function() {
11475
+ return materializeModelSpecEndpoints;
11476
+ }
11477
+ });
9237
11478
  Object.defineProperty(exports, "mbToBytes", {
9238
11479
  enumerable: true,
9239
11480
  get: function() {
9240
11481
  return mbToBytes;
9241
11482
  }
9242
11483
  });
11484
+ Object.defineProperty(exports, "mcpRefreshDefaults", {
11485
+ enumerable: true,
11486
+ get: function() {
11487
+ return mcpRefreshDefaults;
11488
+ }
11489
+ });
11490
+ Object.defineProperty(exports, "mediaSupportedProviders", {
11491
+ enumerable: true,
11492
+ get: function() {
11493
+ return mediaSupportedProviders;
11494
+ }
11495
+ });
9243
11496
  Object.defineProperty(exports, "megabyte", {
9244
11497
  enumerable: true,
9245
11498
  get: function() {
9246
11499
  return megabyte;
9247
11500
  }
9248
11501
  });
11502
+ Object.defineProperty(exports, "memoryFilterFieldSchema", {
11503
+ enumerable: true,
11504
+ get: function() {
11505
+ return memoryFilterFieldSchema;
11506
+ }
11507
+ });
9249
11508
  Object.defineProperty(exports, "memorySchema", {
9250
11509
  enumerable: true,
9251
11510
  get: function() {
@@ -9258,6 +11517,12 @@ Object.defineProperty(exports, "mergeFileConfig", {
9258
11517
  return mergeFileConfig;
9259
11518
  }
9260
11519
  });
11520
+ Object.defineProperty(exports, "messageFilterFieldSchema", {
11521
+ enumerable: true,
11522
+ get: function() {
11523
+ return messageFilterFieldSchema;
11524
+ }
11525
+ });
9261
11526
  Object.defineProperty(exports, "messageFilterPiiSchema", {
9262
11527
  enumerable: true,
9263
11528
  get: function() {
@@ -9282,6 +11547,12 @@ Object.defineProperty(exports, "modelConfigSchema", {
9282
11547
  return modelConfigSchema;
9283
11548
  }
9284
11549
  });
11550
+ Object.defineProperty(exports, "modelParameterFilterFieldSchema", {
11551
+ enumerable: true,
11552
+ get: function() {
11553
+ return modelParameterFilterFieldSchema;
11554
+ }
11555
+ });
9285
11556
  Object.defineProperty(exports, "modelSpecSubagentsSchema", {
9286
11557
  enumerable: true,
9287
11558
  get: function() {
@@ -9306,6 +11577,12 @@ Object.defineProperty(exports, "normalizeMCPToolKey", {
9306
11577
  return normalizeMCPToolKey;
9307
11578
  }
9308
11579
  });
11580
+ Object.defineProperty(exports, "normalizeSearxngEngines", {
11581
+ enumerable: true,
11582
+ get: function() {
11583
+ return normalizeSearxngEngines;
11584
+ }
11585
+ });
9309
11586
  Object.defineProperty(exports, "normalizeServerName", {
9310
11587
  enumerable: true,
9311
11588
  get: function() {
@@ -9372,6 +11649,12 @@ Object.defineProperty(exports, "principalSchema", {
9372
11649
  return principalSchema;
9373
11650
  }
9374
11651
  });
11652
+ Object.defineProperty(exports, "promptFilterFieldSchema", {
11653
+ enumerable: true,
11654
+ get: function() {
11655
+ return promptFilterFieldSchema;
11656
+ }
11657
+ });
9375
11658
  Object.defineProperty(exports, "providerEndpointMap", {
9376
11659
  enumerable: true,
9377
11660
  get: function() {
@@ -9426,12 +11709,66 @@ Object.defineProperty(exports, "resetPassword", {
9426
11709
  return resetPassword;
9427
11710
  }
9428
11711
  });
11712
+ Object.defineProperty(exports, "resolveAgentSkillsScope", {
11713
+ enumerable: true,
11714
+ get: function() {
11715
+ return resolveAgentSkillsScope;
11716
+ }
11717
+ });
11718
+ Object.defineProperty(exports, "resolveAllowedStatefulCodeEnvironments", {
11719
+ enumerable: true,
11720
+ get: function() {
11721
+ return resolveAllowedStatefulCodeEnvironments;
11722
+ }
11723
+ });
11724
+ Object.defineProperty(exports, "resolveCodeApprovalMode", {
11725
+ enumerable: true,
11726
+ get: function() {
11727
+ return resolveCodeApprovalMode;
11728
+ }
11729
+ });
11730
+ Object.defineProperty(exports, "resolveCodePermissionDecision", {
11731
+ enumerable: true,
11732
+ get: function() {
11733
+ return resolveCodePermissionDecision;
11734
+ }
11735
+ });
9429
11736
  Object.defineProperty(exports, "resolveEndpointType", {
9430
11737
  enumerable: true,
9431
11738
  get: function() {
9432
11739
  return resolveEndpointType;
9433
11740
  }
9434
11741
  });
11742
+ Object.defineProperty(exports, "resolveModelSpecEndpoint", {
11743
+ enumerable: true,
11744
+ get: function() {
11745
+ return resolveModelSpecEndpoint;
11746
+ }
11747
+ });
11748
+ Object.defineProperty(exports, "resolveSandboxFilename", {
11749
+ enumerable: true,
11750
+ get: function() {
11751
+ return resolveSandboxFilename;
11752
+ }
11753
+ });
11754
+ Object.defineProperty(exports, "resolveStatefulCodeEnvironment", {
11755
+ enumerable: true,
11756
+ get: function() {
11757
+ return resolveStatefulCodeEnvironment;
11758
+ }
11759
+ });
11760
+ Object.defineProperty(exports, "resolveTraceViewerConfig", {
11761
+ enumerable: true,
11762
+ get: function() {
11763
+ return resolveTraceViewerConfig;
11764
+ }
11765
+ });
11766
+ Object.defineProperty(exports, "resolveUseResponsesApi", {
11767
+ enumerable: true,
11768
+ get: function() {
11769
+ return resolveUseResponsesApi;
11770
+ }
11771
+ });
9435
11772
  Object.defineProperty(exports, "resourcePermissionsResponseSchema", {
9436
11773
  enumerable: true,
9437
11774
  get: function() {
@@ -9486,6 +11823,12 @@ Object.defineProperty(exports, "setFileConfigRegexCompiler", {
9486
11823
  return setFileConfigRegexCompiler;
9487
11824
  }
9488
11825
  });
11826
+ Object.defineProperty(exports, "setMaxSubagents", {
11827
+ enumerable: true,
11828
+ get: function() {
11829
+ return setMaxSubagents;
11830
+ }
11831
+ });
9489
11832
  Object.defineProperty(exports, "setMessageFilterRegexValidator", {
9490
11833
  enumerable: true,
9491
11834
  get: function() {
@@ -9504,6 +11847,12 @@ Object.defineProperty(exports, "sharedFileDownload", {
9504
11847
  return sharedFileDownload;
9505
11848
  }
9506
11849
  });
11850
+ Object.defineProperty(exports, "skillFilterFieldSchema", {
11851
+ enumerable: true,
11852
+ get: function() {
11853
+ return skillFilterFieldSchema;
11854
+ }
11855
+ });
9507
11856
  Object.defineProperty(exports, "skillSyncConfigSchema", {
9508
11857
  enumerable: true,
9509
11858
  get: function() {
@@ -9540,6 +11889,24 @@ Object.defineProperty(exports, "splitToolCallName", {
9540
11889
  return splitToolCallName;
9541
11890
  }
9542
11891
  });
11892
+ Object.defineProperty(exports, "stripServerNamePrefix", {
11893
+ enumerable: true,
11894
+ get: function() {
11895
+ return stripServerNamePrefix;
11896
+ }
11897
+ });
11898
+ Object.defineProperty(exports, "stripServerNamePrefixes", {
11899
+ enumerable: true,
11900
+ get: function() {
11901
+ return stripServerNamePrefixes;
11902
+ }
11903
+ });
11904
+ Object.defineProperty(exports, "subagentThreadLineageSchema", {
11905
+ enumerable: true,
11906
+ get: function() {
11907
+ return subagentThreadLineageSchema;
11908
+ }
11909
+ });
9543
11910
  Object.defineProperty(exports, "summarizationConfigSchema", {
9544
11911
  enumerable: true,
9545
11912
  get: function() {
@@ -9678,6 +12045,24 @@ Object.defineProperty(exports, "toolApprovalPolicySchema", {
9678
12045
  return toolApprovalPolicySchema;
9679
12046
  }
9680
12047
  });
12048
+ Object.defineProperty(exports, "toolArgumentFilterFieldSchema", {
12049
+ enumerable: true,
12050
+ get: function() {
12051
+ return toolArgumentFilterFieldSchema;
12052
+ }
12053
+ });
12054
+ Object.defineProperty(exports, "traceViewerDefaults", {
12055
+ enumerable: true,
12056
+ get: function() {
12057
+ return traceViewerDefaults;
12058
+ }
12059
+ });
12060
+ Object.defineProperty(exports, "traceViewerLimits", {
12061
+ enumerable: true,
12062
+ get: function() {
12063
+ return traceViewerLimits;
12064
+ }
12065
+ });
9681
12066
  Object.defineProperty(exports, "transactionsSchema", {
9682
12067
  enumerable: true,
9683
12068
  get: function() {
@@ -9696,6 +12081,12 @@ Object.defineProperty(exports, "turnstileSchema", {
9696
12081
  return turnstileSchema;
9697
12082
  }
9698
12083
  });
12084
+ Object.defineProperty(exports, "unattributedAssistantContentSchema", {
12085
+ enumerable: true,
12086
+ get: function() {
12087
+ return unattributedAssistantContentSchema;
12088
+ }
12089
+ });
9699
12090
  Object.defineProperty(exports, "updateFeedback", {
9700
12091
  enumerable: true,
9701
12092
  get: function() {
@@ -9756,6 +12147,12 @@ Object.defineProperty(exports, "userKeyQuery", {
9756
12147
  return userKeyQuery;
9757
12148
  }
9758
12149
  });
12150
+ Object.defineProperty(exports, "userSubmittedMessageFieldPathSchema", {
12151
+ enumerable: true,
12152
+ get: function() {
12153
+ return userSubmittedMessageFieldPathSchema;
12154
+ }
12155
+ });
9759
12156
  Object.defineProperty(exports, "validateSettingDefinitions", {
9760
12157
  enumerable: true,
9761
12158
  get: function() {
@@ -9799,4 +12196,4 @@ Object.defineProperty(exports, "webSearchSchema", {
9799
12196
  }
9800
12197
  });
9801
12198
 
9802
- //# sourceMappingURL=data-service-DOIF4BkW.js.map
12199
+ //# sourceMappingURL=data-service-CTX0tVO5.js.map