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.
- package/dist/{data-service-pwrlWjJs.mjs → data-service-Bx6IFaSa.mjs} +1770 -51
- package/dist/data-service-Bx6IFaSa.mjs.map +1 -0
- package/dist/{data-service-DOIF4BkW.js → data-service-CTX0tVO5.js} +2509 -112
- package/dist/data-service-CTX0tVO5.js.map +1 -0
- package/dist/index.js +1503 -54
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1314 -55
- package/dist/index.mjs.map +1 -1
- package/dist/react-query/index.js +2 -1
- package/dist/react-query/index.js.map +1 -1
- package/dist/react-query/index.mjs +2 -1
- package/dist/react-query/index.mjs.map +1 -1
- package/dist/types/accessPermissions.d.ts +58 -1
- package/dist/types/actions.d.ts +2 -2
- package/dist/types/agentToolOptions.d.ts +11 -0
- package/dist/types/api-endpoints.d.ts +24 -0
- package/dist/types/bedrock.d.ts +238 -10
- package/dist/types/cadence.d.ts +33 -0
- package/dist/types/code/approval.d.ts +26 -0
- package/dist/types/code/worker.d.ts +10 -0
- package/dist/types/code/workspace.d.ts +28 -0
- package/dist/types/codeEnvRef.d.ts +26 -0
- package/dist/types/config.d.ts +13180 -3021
- package/dist/types/data-service.d.ts +48 -2
- package/dist/types/errors.d.ts +2 -0
- package/dist/types/file-config.d.ts +138 -9
- package/dist/types/filters.d.ts +1422 -0
- package/dist/types/generate.d.ts +103 -1
- package/dist/types/index.d.ts +17 -0
- package/dist/types/keys.d.ts +33 -2
- package/dist/types/langchain.d.ts +4 -0
- package/dist/types/limits.d.ts +13 -0
- package/dist/types/mcp.d.ts +555 -460
- package/dist/types/messages.d.ts +24 -0
- package/dist/types/models.d.ts +1112 -319
- package/dist/types/parameterSettings.d.ts +13 -1
- package/dist/types/parsers.d.ts +10 -0
- package/dist/types/permissions.d.ts +42 -1
- package/dist/types/providers.d.ts +37 -0
- package/dist/types/request.d.ts +2 -2
- package/dist/types/resolve-llm-delivery-path.d.ts +68 -0
- package/dist/types/roles.d.ts +34 -0
- package/dist/types/runSteps.d.ts +59 -0
- package/dist/types/schemas.d.ts +1724 -248
- package/dist/types/stateful-code.d.ts +7 -0
- package/dist/types/svg.d.ts +34 -0
- package/dist/types/types/agents.d.ts +116 -7
- package/dist/types/types/assistants.d.ts +121 -6
- package/dist/types/types/files.d.ts +46 -2
- package/dist/types/types/index.d.ts +2 -0
- package/dist/types/types/insights.d.ts +71 -0
- package/dist/types/types/mutations.d.ts +1 -0
- package/dist/types/types/queries.d.ts +37 -2
- package/dist/types/types/queuedTurns.d.ts +870 -0
- package/dist/types/types/runs.d.ts +119 -9
- package/dist/types/types/schedules.d.ts +339 -0
- package/dist/types/types/skills.d.ts +9 -0
- package/dist/types/types/subagents.d.ts +159 -0
- package/dist/types/types/traces.d.ts +85 -0
- package/dist/types/types/web.d.ts +12 -2
- package/dist/types/types.d.ts +101 -1
- package/package.json +5 -3
- package/dist/data-service-DOIF4BkW.js.map +0 -1
- package/dist/data-service-pwrlWjJs.mjs.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_data_service = require("./data-service-
|
|
2
|
+
const require_data_service = require("./data-service-CTX0tVO5.js");
|
|
3
3
|
let zod = require("zod");
|
|
4
4
|
let dayjs = require("dayjs");
|
|
5
5
|
dayjs = require_data_service.__toESM(dayjs);
|
|
@@ -7,6 +7,7 @@ let dayjs_plugin_utc_js = require("dayjs/plugin/utc.js");
|
|
|
7
7
|
dayjs_plugin_utc_js = require_data_service.__toESM(dayjs_plugin_utc_js);
|
|
8
8
|
let dayjs_plugin_timezone_js = require("dayjs/plugin/timezone.js");
|
|
9
9
|
dayjs_plugin_timezone_js = require_data_service.__toESM(dayjs_plugin_timezone_js);
|
|
10
|
+
let croner = require("croner");
|
|
10
11
|
let axios = require("axios");
|
|
11
12
|
axios = require_data_service.__toESM(axios);
|
|
12
13
|
let url = require("url");
|
|
@@ -190,6 +191,17 @@ function supportsContext1m(model) {
|
|
|
190
191
|
return false;
|
|
191
192
|
}
|
|
192
193
|
/**
|
|
194
|
+
* Checks whether a native Anthropic Claude model supports prompt caching.
|
|
195
|
+
*
|
|
196
|
+
* This uses the configured model ID directly. Resolving it through a token
|
|
197
|
+
* map first can collapse a newly released Claude model to the generic
|
|
198
|
+
* `claude-` fallback and incorrectly disable cache control.
|
|
199
|
+
*/
|
|
200
|
+
function supportsPromptCache(model) {
|
|
201
|
+
if (model.includes("claude-3-5-sonnet-latest") || model.includes("claude-3.5-sonnet-latest")) return false;
|
|
202
|
+
return /claude-3[-.]7/.test(model) || /claude-3[-.]5-(?:sonnet|haiku)/.test(model) || /claude-3-(?:sonnet|haiku|opus)?/.test(model) || /claude-(?:sonnet|opus|haiku)[-.]?(?:[4-9]|\d{2,})/.test(model) || /claude-(?:[4-9]|\d{2,})(?:[-.](?:sonnet|opus|haiku))?/.test(model) || require_data_service.isMythosClassModel(model);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
193
205
|
* A Bedrock Claude model ID may be prefixed (`anthropic.claude-*`,
|
|
194
206
|
* `us.anthropic.claude-*`, `global.anthropic.claude-*`) or bare (`claude-*`,
|
|
195
207
|
* used when the LibreChat model ID maps to an application inference profile).
|
|
@@ -644,11 +656,14 @@ let StepEvents = /* @__PURE__ */ function(StepEvents) {
|
|
|
644
656
|
StepEvents["ON_REASONING_DELTA"] = "on_reasoning_delta";
|
|
645
657
|
StepEvents["ON_RUN_STEP_DELTA"] = "on_run_step_delta";
|
|
646
658
|
StepEvents["ON_RUN_STEP_COMPLETED"] = "on_run_step_completed";
|
|
659
|
+
/** Terminal signal for a run step: closed with a status and timestamps. */
|
|
660
|
+
StepEvents["ON_RUN_STEP_CLOSED"] = "on_run_step_closed";
|
|
647
661
|
StepEvents["ON_SUMMARIZE_START"] = "on_summarize_start";
|
|
648
662
|
StepEvents["ON_SUMMARIZE_DELTA"] = "on_summarize_delta";
|
|
649
663
|
StepEvents["ON_SUMMARIZE_COMPLETE"] = "on_summarize_complete";
|
|
650
664
|
StepEvents["ON_SUBAGENT_UPDATE"] = "on_subagent_update";
|
|
651
665
|
StepEvents["ON_SANDBOX_STARTING"] = "on_sandbox_starting";
|
|
666
|
+
StepEvents["ON_PTC_TOOL_CALL"] = "on_ptc_tool_call";
|
|
652
667
|
return StepEvents;
|
|
653
668
|
}({});
|
|
654
669
|
/** Token-tracking event names streamed to the client (separate from StepEvents dispatch). */
|
|
@@ -689,6 +704,17 @@ let ActivityLabelEvents = /* @__PURE__ */ function(ActivityLabelEvents) {
|
|
|
689
704
|
ActivityLabelEvents["ON_ACTIVITY_LABEL"] = "on_activity_label";
|
|
690
705
|
return ActivityLabelEvents;
|
|
691
706
|
}({});
|
|
707
|
+
/** Live title updates for an existing reasoning content part. */
|
|
708
|
+
let ReasoningLabelEvents = /* @__PURE__ */ function(ReasoningLabelEvents) {
|
|
709
|
+
ReasoningLabelEvents["ON_REASONING_LABEL"] = "on_reasoning_label";
|
|
710
|
+
/** Internal durable budget reservation; clients intentionally do not render it. */
|
|
711
|
+
ReasoningLabelEvents["ON_REASONING_LABEL_ATTEMPT"] = "on_reasoning_label_attempt";
|
|
712
|
+
return ReasoningLabelEvents;
|
|
713
|
+
}({});
|
|
714
|
+
const finiteNonNegativeInteger = (value) => {
|
|
715
|
+
if (typeof value !== "number" || !Number.isFinite(value)) return;
|
|
716
|
+
return Math.min(Number.MAX_SAFE_INTEGER, Math.max(0, Math.floor(value)));
|
|
717
|
+
};
|
|
692
718
|
/**
|
|
693
719
|
* Full prompt token count for one completed model call — the EXACT context the
|
|
694
720
|
* model saw, provider-aware: additive providers (Bedrock) report `input_tokens`
|
|
@@ -700,37 +726,114 @@ let ActivityLabelEvents = /* @__PURE__ */ function(ActivityLabelEvents) {
|
|
|
700
726
|
* gauge reconciles its calibrated estimate to.
|
|
701
727
|
*/
|
|
702
728
|
const promptTokensFromUsage = (event) => {
|
|
703
|
-
const input = event.input_tokens ?? 0;
|
|
729
|
+
const input = finiteNonNegativeInteger(event.input_tokens) ?? 0;
|
|
704
730
|
const details = event.input_token_details ?? {};
|
|
705
|
-
const cacheRead = details.cache_read ?? 0;
|
|
706
|
-
const cacheCreation = details.cache_creation ?? 0;
|
|
707
|
-
return (event.provider != null ? require_data_service.inputTokensIncludesCache(event.provider) : cacheRead + cacheCreation <= input) ? input : input + cacheRead + cacheCreation;
|
|
731
|
+
const cacheRead = finiteNonNegativeInteger(details.cache_read) ?? 0;
|
|
732
|
+
const cacheCreation = finiteNonNegativeInteger(details.cache_creation) ?? 0;
|
|
733
|
+
return (event.provider != null ? require_data_service.inputTokensIncludesCache(event.provider) : cacheRead + cacheCreation <= input) ? input : Math.min(Number.MAX_SAFE_INTEGER, input + cacheRead + cacheCreation);
|
|
734
|
+
};
|
|
735
|
+
/**
|
|
736
|
+
* Scales per-tool result-message counts while bounding both malformed input and
|
|
737
|
+
* rounding error. Null-prototype records keep tool names as ordinary data keys;
|
|
738
|
+
* cumulative apportionment preserves the scaled sum in one linear pass.
|
|
739
|
+
*/
|
|
740
|
+
const scaleToolMessageTokenCounts = (value, oldTotal, newTotal) => {
|
|
741
|
+
if (value == null || typeof value !== "object" || Array.isArray(value)) return;
|
|
742
|
+
const scaled = Object.create(null);
|
|
743
|
+
let remaining = oldTotal;
|
|
744
|
+
let cumulative = 0;
|
|
745
|
+
let allocated = 0;
|
|
746
|
+
let found = false;
|
|
747
|
+
for (const [name, rawCount] of Object.entries(value)) {
|
|
748
|
+
const count = finiteNonNegativeInteger(rawCount);
|
|
749
|
+
if (count == null || count === 0) continue;
|
|
750
|
+
const bounded = Math.min(count, remaining);
|
|
751
|
+
remaining -= bounded;
|
|
752
|
+
cumulative += bounded;
|
|
753
|
+
const target = oldTotal > 0 ? Math.round(cumulative / oldTotal * newTotal) : 0;
|
|
754
|
+
const apportioned = target - allocated;
|
|
755
|
+
allocated = target;
|
|
756
|
+
if (apportioned > 0) {
|
|
757
|
+
scaled[name] = apportioned;
|
|
758
|
+
found = true;
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
return found ? scaled : void 0;
|
|
708
762
|
};
|
|
709
763
|
/**
|
|
710
764
|
* Reconciles a pre-invoke context snapshot's CALIBRATED estimate to a call's
|
|
711
765
|
* ACTUAL prompt tokens. The SDK's calibration multiplier scales only
|
|
712
|
-
* `messageTokens` (instructions/summary are raw tiktoken counts)
|
|
766
|
+
* `messageTokens` (instructions/summary are raw tiktoken counts) and can
|
|
713
767
|
* over-shoot badly when a provider injects server-side content the SDK never
|
|
714
768
|
* counted (e.g. Anthropic web search) — pinning the gauge several× too high and
|
|
715
769
|
* persisting it. Trust the provider's own prompt count: keep the raw
|
|
716
|
-
* instruction/summary rows, set `messageTokens` to the remainder,
|
|
717
|
-
*
|
|
770
|
+
* instruction/summary rows, set `messageTokens` to the remainder, recompute the
|
|
771
|
+
* free space, and rescale the `toolMessageTokens` share to the new message
|
|
772
|
+
* total. No-op when `promptTokens` is unusable.
|
|
718
773
|
*/
|
|
719
774
|
const reconcileContextUsage = (snapshot, promptTokens) => {
|
|
720
775
|
if (!Number.isFinite(promptTokens) || promptTokens <= 0) return snapshot;
|
|
776
|
+
const normalizedPromptTokens = Math.min(Number.MAX_SAFE_INTEGER, Math.floor(promptTokens));
|
|
777
|
+
if (normalizedPromptTokens <= 0) return snapshot;
|
|
721
778
|
const { breakdown } = snapshot;
|
|
722
|
-
const
|
|
723
|
-
const
|
|
724
|
-
const
|
|
725
|
-
|
|
779
|
+
const instructionTokens = finiteNonNegativeInteger(breakdown.instructionTokens) ?? 0;
|
|
780
|
+
const summaryTokens = finiteNonNegativeInteger(breakdown.summaryTokens) ?? 0;
|
|
781
|
+
const budget = finiteNonNegativeInteger(snapshot.contextBudget) ?? finiteNonNegativeInteger(breakdown.maxContextTokens);
|
|
782
|
+
const nonMessageTokens = instructionTokens + summaryTokens;
|
|
783
|
+
const messageTokens = Math.max(0, normalizedPromptTokens - nonMessageTokens);
|
|
784
|
+
/** `toolMessageTokens` is a subset of the OLD (calibrated) `messageTokens`;
|
|
785
|
+
* rescale it by the same proportion so the split tracks the provider's real
|
|
786
|
+
* total. A supplied zero remains a known-zero split; absent fields stay absent
|
|
787
|
+
* for older snapshots. */
|
|
788
|
+
const priorMessageTokens = finiteNonNegativeInteger(breakdown.messageTokens) ?? 0;
|
|
789
|
+
const priorToolMessageTokens = finiteNonNegativeInteger(breakdown.toolMessageTokens);
|
|
790
|
+
let toolMessageTokens;
|
|
791
|
+
if (priorToolMessageTokens != null) {
|
|
792
|
+
toolMessageTokens = 0;
|
|
793
|
+
if (priorMessageTokens > 0 && priorToolMessageTokens > 0) toolMessageTokens = Math.min(messageTokens, Math.round(Math.min(priorToolMessageTokens, priorMessageTokens) / priorMessageTokens * messageTokens));
|
|
794
|
+
}
|
|
795
|
+
const toolMessageTokenCounts = toolMessageTokens != null ? scaleToolMessageTokenCounts(breakdown.toolMessageTokenCounts, Math.min(priorToolMessageTokens ?? 0, priorMessageTokens), toolMessageTokens) : void 0;
|
|
796
|
+
const nextBreakdown = {
|
|
797
|
+
...breakdown,
|
|
798
|
+
instructionTokens,
|
|
799
|
+
summaryTokens,
|
|
800
|
+
messageTokens
|
|
801
|
+
};
|
|
802
|
+
if (toolMessageTokens == null) {
|
|
803
|
+
delete nextBreakdown.toolMessageTokens;
|
|
804
|
+
delete nextBreakdown.toolMessageTokenCounts;
|
|
805
|
+
} else {
|
|
806
|
+
nextBreakdown.toolMessageTokens = toolMessageTokens;
|
|
807
|
+
if (toolMessageTokenCounts == null) delete nextBreakdown.toolMessageTokenCounts;
|
|
808
|
+
else nextBreakdown.toolMessageTokenCounts = toolMessageTokenCounts;
|
|
809
|
+
}
|
|
810
|
+
const result = {
|
|
726
811
|
...snapshot,
|
|
727
|
-
breakdown:
|
|
728
|
-
...breakdown,
|
|
729
|
-
messageTokens
|
|
730
|
-
},
|
|
731
|
-
remainingContextTokens: budget != null ? Math.max(0, budget - promptTokens) : snapshot.remainingContextTokens
|
|
812
|
+
breakdown: nextBreakdown
|
|
732
813
|
};
|
|
814
|
+
if (budget != null) result.remainingContextTokens = Math.max(0, budget - normalizedPromptTokens);
|
|
815
|
+
else {
|
|
816
|
+
const remaining = finiteNonNegativeInteger(snapshot.remainingContextTokens);
|
|
817
|
+
if (remaining == null) delete result.remainingContextTokens;
|
|
818
|
+
else result.remainingContextTokens = remaining;
|
|
819
|
+
}
|
|
820
|
+
return result;
|
|
733
821
|
};
|
|
822
|
+
/** Provider output, including reasoning omitted from an under-reported output count. */
|
|
823
|
+
const outputTokensFromUsage = (event) => {
|
|
824
|
+
const output = finiteNonNegativeInteger(event.output_tokens) ?? 0;
|
|
825
|
+
const total = finiteNonNegativeInteger(event.total_tokens) ?? 0;
|
|
826
|
+
return Math.max(output, total - promptTokensFromUsage(event));
|
|
827
|
+
};
|
|
828
|
+
/** Reconcile and retain the primary call details on live, saved, and resumable snapshots. */
|
|
829
|
+
const reconcileContextUsageFromEvent = (snapshot, event) => ({
|
|
830
|
+
...reconcileContextUsage(snapshot, promptTokensFromUsage(event)),
|
|
831
|
+
model: event.model,
|
|
832
|
+
provider: event.provider,
|
|
833
|
+
completedOutputTokens: outputTokensFromUsage(event),
|
|
834
|
+
cacheRead: finiteNonNegativeInteger(event.input_token_details?.cache_read) ?? 0,
|
|
835
|
+
cacheWrite: finiteNonNegativeInteger(event.input_token_details?.cache_creation) ?? 0
|
|
836
|
+
});
|
|
734
837
|
//#endregion
|
|
735
838
|
//#region src/parsers.ts
|
|
736
839
|
dayjs.default.extend(dayjs_plugin_utc_js.default);
|
|
@@ -964,6 +1067,14 @@ function replaceSpecialVars({ text, user, now: inputNow, timezone }) {
|
|
|
964
1067
|
return result;
|
|
965
1068
|
}
|
|
966
1069
|
/**
|
|
1070
|
+
* Resolves the display label ("sender") for an ephemeral agent:
|
|
1071
|
+
* `modelLabel` (user/preset) → model spec's `label` → endpoint config's
|
|
1072
|
+
* `modelDisplayLabel` → `''` (lets consumers fall back to the model name).
|
|
1073
|
+
*/
|
|
1074
|
+
function getEphemeralSender({ modelLabel, specLabel, modelDisplayLabel }) {
|
|
1075
|
+
return modelLabel ?? specLabel ?? modelDisplayLabel ?? "";
|
|
1076
|
+
}
|
|
1077
|
+
/**
|
|
967
1078
|
* Encodes an ephemeral agent ID from endpoint, model, optional sender, and optional index.
|
|
968
1079
|
* Uses __ to replace : (reserved in graph node names) and ___ to separate sender.
|
|
969
1080
|
*
|
|
@@ -1255,7 +1366,266 @@ function mapGroupToAzureConfig({ groupName, groupMap }) {
|
|
|
1255
1366
|
return result;
|
|
1256
1367
|
}
|
|
1257
1368
|
//#endregion
|
|
1369
|
+
//#region src/langchain.ts
|
|
1370
|
+
/**
|
|
1371
|
+
* LangChain classifies a provider failure by mutating the error: it stamps `lc_error_code` and
|
|
1372
|
+
* appends `\n\nTroubleshooting URL: <docs url>\n` to the message. Both halves are handled here
|
|
1373
|
+
* because the server strips the URL before persisting the message, while the client still reads the
|
|
1374
|
+
* code back out of messages persisted before it did.
|
|
1375
|
+
*/
|
|
1376
|
+
const LANGCHAIN = "langchain";
|
|
1377
|
+
const ERROR_PATH = "/errors/";
|
|
1378
|
+
const TROUBLESHOOTING_LABEL = "Troubleshooting URL:";
|
|
1379
|
+
const WHITESPACE = /\s/;
|
|
1380
|
+
/** Provider errors cross untyped boundaries, so a `message` is not guaranteed to be a string. */
|
|
1381
|
+
function toMessageText(message) {
|
|
1382
|
+
if (typeof message === "string") return message;
|
|
1383
|
+
return message == null ? "" : String(message);
|
|
1384
|
+
}
|
|
1385
|
+
function isErrorCodeCharacter(character) {
|
|
1386
|
+
const code = character.charCodeAt(0);
|
|
1387
|
+
return character === "_" || code >= 65 && code <= 90 || code >= 97 && code <= 122;
|
|
1388
|
+
}
|
|
1389
|
+
function findTokenEnd(text, start, limit = text.length) {
|
|
1390
|
+
let end = start;
|
|
1391
|
+
while (end < limit && !WHITESPACE.test(text[end])) end += 1;
|
|
1392
|
+
return end;
|
|
1393
|
+
}
|
|
1394
|
+
function findErrorCode(text, searchableText, start, end) {
|
|
1395
|
+
const langChainIndex = searchableText.indexOf(LANGCHAIN, start);
|
|
1396
|
+
if (langChainIndex < 0 || langChainIndex >= end) return;
|
|
1397
|
+
let errorCode;
|
|
1398
|
+
let pathIndex = searchableText.indexOf(ERROR_PATH, langChainIndex + 9);
|
|
1399
|
+
while (pathIndex >= 0 && pathIndex < end) {
|
|
1400
|
+
const codeStart = pathIndex + 8;
|
|
1401
|
+
let codeEnd = codeStart;
|
|
1402
|
+
while (codeEnd < end && isErrorCodeCharacter(text[codeEnd])) codeEnd += 1;
|
|
1403
|
+
if (codeEnd > codeStart) errorCode = {
|
|
1404
|
+
start: codeStart,
|
|
1405
|
+
end: codeEnd
|
|
1406
|
+
};
|
|
1407
|
+
pathIndex = searchableText.indexOf(ERROR_PATH, Math.max(codeStart, codeEnd));
|
|
1408
|
+
}
|
|
1409
|
+
return errorCode;
|
|
1410
|
+
}
|
|
1411
|
+
/** Removes LangChain's appended docs URL so provider text carries no third-party attribution. */
|
|
1412
|
+
function stripLangChainTroubleshootingUrl(message) {
|
|
1413
|
+
const text = toMessageText(message);
|
|
1414
|
+
const parts = [];
|
|
1415
|
+
let copiedUntil = 0;
|
|
1416
|
+
let searchFrom = 0;
|
|
1417
|
+
while (searchFrom < text.length) {
|
|
1418
|
+
const labelStart = text.indexOf(TROUBLESHOOTING_LABEL, searchFrom);
|
|
1419
|
+
if (labelStart < 0) break;
|
|
1420
|
+
let matchStart = labelStart;
|
|
1421
|
+
while (matchStart > copiedUntil && WHITESPACE.test(text[matchStart - 1])) matchStart -= 1;
|
|
1422
|
+
let urlStart = labelStart + 20;
|
|
1423
|
+
while (urlStart < text.length && WHITESPACE.test(text[urlStart])) urlStart += 1;
|
|
1424
|
+
if (!text.startsWith("https://", urlStart) && !text.startsWith("http://", urlStart)) {
|
|
1425
|
+
searchFrom = urlStart;
|
|
1426
|
+
continue;
|
|
1427
|
+
}
|
|
1428
|
+
const urlEnd = findTokenEnd(text, urlStart);
|
|
1429
|
+
const errorCode = findErrorCode(text, text, urlStart, urlEnd);
|
|
1430
|
+
if (errorCode == null) {
|
|
1431
|
+
searchFrom = urlEnd;
|
|
1432
|
+
continue;
|
|
1433
|
+
}
|
|
1434
|
+
let matchEnd = errorCode.end;
|
|
1435
|
+
if (text[matchEnd] === "/") matchEnd += 1;
|
|
1436
|
+
while (matchEnd < text.length && WHITESPACE.test(text[matchEnd])) matchEnd += 1;
|
|
1437
|
+
parts.push(text.slice(copiedUntil, matchStart), " ");
|
|
1438
|
+
copiedUntil = matchEnd;
|
|
1439
|
+
searchFrom = matchEnd;
|
|
1440
|
+
}
|
|
1441
|
+
parts.push(text.slice(copiedUntil));
|
|
1442
|
+
return parts.join("").trim();
|
|
1443
|
+
}
|
|
1444
|
+
/** The classification LangChain encoded in the docs URL it appended, when the text carries one. */
|
|
1445
|
+
function parseLangChainErrorCode(message) {
|
|
1446
|
+
const text = toMessageText(message);
|
|
1447
|
+
const searchableText = text.toLowerCase();
|
|
1448
|
+
let searchFrom = 0;
|
|
1449
|
+
while (searchFrom < text.length) {
|
|
1450
|
+
const langChainIndex = searchableText.indexOf(LANGCHAIN, searchFrom);
|
|
1451
|
+
if (langChainIndex < 0) return;
|
|
1452
|
+
const tokenEnd = findTokenEnd(text, langChainIndex);
|
|
1453
|
+
const errorCode = findErrorCode(text, searchableText, langChainIndex, tokenEnd);
|
|
1454
|
+
if (errorCode != null) return text.slice(errorCode.start, errorCode.end).toUpperCase();
|
|
1455
|
+
searchFrom = tokenEnd + 1;
|
|
1456
|
+
}
|
|
1457
|
+
}
|
|
1458
|
+
//#endregion
|
|
1459
|
+
//#region src/resolve-llm-delivery-path.ts
|
|
1460
|
+
/** Audio and video reach the model only through the media encoders, which support a
|
|
1461
|
+
* narrower provider set than documents. Images use the broadly supported vision
|
|
1462
|
+
* path and are never gated here. */
|
|
1463
|
+
const isProviderCapable = (mimeType, endpoint, useResponsesApi) => {
|
|
1464
|
+
if (mimeType.startsWith("audio/") || mimeType.startsWith("video/")) return require_data_service.isMediaSupportedProvider(endpoint);
|
|
1465
|
+
if (mimeType === "application/pdf") return useResponsesApi === true || require_data_service.isDocumentSupportedProvider(endpoint);
|
|
1466
|
+
return true;
|
|
1467
|
+
};
|
|
1468
|
+
const SYSTEM_LLM_DELIVERY_DEFAULTS = {
|
|
1469
|
+
fallback: "text",
|
|
1470
|
+
overrides: {
|
|
1471
|
+
"image/*": "provider",
|
|
1472
|
+
"video/*": "provider",
|
|
1473
|
+
"audio/*": "provider",
|
|
1474
|
+
"application/pdf": "provider"
|
|
1475
|
+
}
|
|
1476
|
+
};
|
|
1477
|
+
/**
|
|
1478
|
+
* Types some step in the upload pipeline can turn into text: natively readable text,
|
|
1479
|
+
* documents a parser or OCR handles, images through OCR, and audio through transcription.
|
|
1480
|
+
*
|
|
1481
|
+
* Everything absent from this list, notably archives, tarballs, columnar data files and
|
|
1482
|
+
* video, has no such step, and the default text matcher accepts any well-formed type, so
|
|
1483
|
+
* routing them to text ends in their bytes being decoded as UTF-8.
|
|
1484
|
+
*/
|
|
1485
|
+
const TEXT_RECOVERABLE_MIME_TYPES = [
|
|
1486
|
+
/^text\//,
|
|
1487
|
+
/^image\//,
|
|
1488
|
+
/^audio\//,
|
|
1489
|
+
/^application\/(json|javascript|xml|sql|yaml|x-yaml|csv|typescript|x-sh|vnd\.coffeescript)$/,
|
|
1490
|
+
/^application\/pdf$/,
|
|
1491
|
+
/^application\/vnd\.openxmlformats-officedocument\.(wordprocessingml\.document|spreadsheetml\.sheet)$/,
|
|
1492
|
+
/^application\/vnd\.oasis\.opendocument\.(text|spreadsheet)$/,
|
|
1493
|
+
/^application\/(vnd\.ms-excel|x-msexcel|msexcel|x-ms-excel|x-excel|x-dos_ms_excel|xls|x-xls)$/,
|
|
1494
|
+
/^message\/rfc822$/
|
|
1495
|
+
];
|
|
1496
|
+
/**
|
|
1497
|
+
* Types whose bytes are text already, so reading them directly is meaningful. Everything
|
|
1498
|
+
* else needs a real extractor: decoding it as UTF-8 produces mojibake rather than content.
|
|
1499
|
+
*/
|
|
1500
|
+
/** Application types whose payload is text. Mirrors the set the content-protection code
|
|
1501
|
+
* treats as textual, plus the source and data formats this pipeline also accepts. */
|
|
1502
|
+
const TEXTUAL_APPLICATION_MIME_TYPES = new Set([
|
|
1503
|
+
"application/json",
|
|
1504
|
+
"application/javascript",
|
|
1505
|
+
"application/sql",
|
|
1506
|
+
"application/xml",
|
|
1507
|
+
"application/x-yaml",
|
|
1508
|
+
"application/yaml",
|
|
1509
|
+
"application/csv",
|
|
1510
|
+
"application/typescript",
|
|
1511
|
+
"application/x-sh",
|
|
1512
|
+
"application/vnd.coffeescript"
|
|
1513
|
+
]);
|
|
1514
|
+
function isNativelyReadableText(mimeType) {
|
|
1515
|
+
const normalized = mimeType.split(";", 1)[0].trim().toLowerCase();
|
|
1516
|
+
return normalized.startsWith("text/") || TEXTUAL_APPLICATION_MIME_TYPES.has(normalized) || normalized === "message/rfc822";
|
|
1517
|
+
}
|
|
1518
|
+
function hasTextExtractionPath(mimeType) {
|
|
1519
|
+
return TEXT_RECOVERABLE_MIME_TYPES.some((pattern) => pattern.test(mimeType));
|
|
1520
|
+
}
|
|
1521
|
+
/**
|
|
1522
|
+
* Resolves the default file path destination for a given mime type.
|
|
1523
|
+
* Resolution chain: endpoint overrides -> endpoint fallback -> global overrides -> global fallback -> system defaults.
|
|
1524
|
+
*/
|
|
1525
|
+
function resolveDefaultLLMDeliveryPath(mimeType, endpointConfig, globalConfig, endpoint, useResponsesApi, sttConfigured) {
|
|
1526
|
+
const wildcard = mimeType.split("/")[0] + "/*";
|
|
1527
|
+
if (endpointConfig?.overrides) {
|
|
1528
|
+
if (endpointConfig.overrides[mimeType]) return endpointConfig.overrides[mimeType];
|
|
1529
|
+
if (endpointConfig.overrides[wildcard]) return endpointConfig.overrides[wildcard];
|
|
1530
|
+
}
|
|
1531
|
+
if (endpointConfig?.fallback) return endpointConfig.fallback;
|
|
1532
|
+
if (globalConfig?.overrides) {
|
|
1533
|
+
if (globalConfig.overrides[mimeType]) return globalConfig.overrides[mimeType];
|
|
1534
|
+
if (globalConfig.overrides[wildcard]) return globalConfig.overrides[wildcard];
|
|
1535
|
+
}
|
|
1536
|
+
if (globalConfig?.fallback) return globalConfig.fallback;
|
|
1537
|
+
const systemDefault = SYSTEM_LLM_DELIVERY_DEFAULTS.overrides[mimeType] ?? SYSTEM_LLM_DELIVERY_DEFAULTS.overrides[wildcard] ?? SYSTEM_LLM_DELIVERY_DEFAULTS.fallback;
|
|
1538
|
+
/** Only the system default is capability-gated: an explicit config above is the
|
|
1539
|
+
* admin's decision. A known endpoint that cannot encode documents or media would
|
|
1540
|
+
* otherwise accept the upload and hand the model nothing at all. */
|
|
1541
|
+
/** `agents` is a container, not a provider: it is what an upload reports when the
|
|
1542
|
+
* agent's real provider could not be resolved, as for ephemeral agents. A custom
|
|
1543
|
+
* endpoint name is likewise unresolvable here, since its real provider is chosen
|
|
1544
|
+
* at request time and is usually OpenAI- or Anthropic-compatible. Judging
|
|
1545
|
+
* capability from either would downgrade media the actual provider can deliver,
|
|
1546
|
+
* so an unresolved provider keeps the system default. */
|
|
1547
|
+
const namedEndpoint = endpoint != null && endpoint !== "agents";
|
|
1548
|
+
const providerKnown = namedEndpoint && require_data_service.isKnownProviderIdentifier(endpoint);
|
|
1549
|
+
const isMedia = mimeType.startsWith("audio/") || mimeType.startsWith("video/");
|
|
1550
|
+
const canRecoverText = (type) => type.startsWith("audio/") && sttConfigured === false ? false : hasTextExtractionPath(type);
|
|
1551
|
+
if (systemDefault === "provider" && (isMedia ? namedEndpoint : providerKnown) && !isProviderCapable(mimeType, endpoint, useResponsesApi)) return canRecoverText(mimeType) ? "text" : "none";
|
|
1552
|
+
/** Bedrock's Converse document path natively accepts more than PDF, so on that
|
|
1553
|
+
* endpoint its document types belong on the provider path rather than being
|
|
1554
|
+
* extracted, which would drop non-text content and layout. */
|
|
1555
|
+
if (systemDefault !== "provider" && endpoint === "bedrock" && require_data_service.isBedrockDocumentType(mimeType)) return "provider";
|
|
1556
|
+
if (systemDefault === "text" && !canRecoverText(mimeType)) return "none";
|
|
1557
|
+
return systemDefault;
|
|
1558
|
+
}
|
|
1559
|
+
/**
|
|
1560
|
+
* Delivery path for an upload that named no tool resource. The legacy chooser makes the
|
|
1561
|
+
* destination explicit, so nothing is inferred there.
|
|
1562
|
+
*/
|
|
1563
|
+
function resolveDefaultUploadLLMDeliveryPath({ mimeType, endpointConfig, fileConfig, endpoint, useResponsesApi, sttConfigured }) {
|
|
1564
|
+
if (endpointConfig?.legacyFileUploadUX === true) return "provider";
|
|
1565
|
+
return resolveDefaultLLMDeliveryPath(mimeType, endpointConfig?.defaultLLMDeliveryPath, fileConfig?.defaultLLMDeliveryPath, endpoint, useResponsesApi, sttConfigured);
|
|
1566
|
+
}
|
|
1567
|
+
/** Delivery path for an upload, honoring an explicitly chosen tool resource. */
|
|
1568
|
+
function resolveUploadLLMDeliveryPath({ toolResource, mimeType, endpointConfig, fileConfig, endpoint, useResponsesApi, sttConfigured }) {
|
|
1569
|
+
if (toolResource === "context" || toolResource === "ocr") return "text";
|
|
1570
|
+
if (toolResource === "file_search" || toolResource === "execute_code") return "none";
|
|
1571
|
+
return resolveDefaultUploadLLMDeliveryPath({
|
|
1572
|
+
mimeType,
|
|
1573
|
+
endpointConfig,
|
|
1574
|
+
fileConfig,
|
|
1575
|
+
endpoint,
|
|
1576
|
+
useResponsesApi,
|
|
1577
|
+
sttConfigured
|
|
1578
|
+
});
|
|
1579
|
+
}
|
|
1580
|
+
/**
|
|
1581
|
+
* Whether a file tool can do anything with this type. `file_search` indexes extracted
|
|
1582
|
+
* text, so it needs a type some step can turn into text and cannot use media, whose
|
|
1583
|
+
* extraction paths are OCR and speech rather than the vector store. Code execution is
|
|
1584
|
+
* judged by the list the client offers it from. Shared by upload-time selection and
|
|
1585
|
+
* deferred provisioning so the two cannot queue a file the other would refuse.
|
|
1586
|
+
*/
|
|
1587
|
+
function canToolResourceConsume(toolResource, mimeType) {
|
|
1588
|
+
if (toolResource === "file_search") return !mimeType.startsWith("image") && !mimeType.startsWith("audio") && !mimeType.startsWith("video") && (hasTextExtractionPath(mimeType) || matchesMimeList(mimeType, require_data_service.retrievalMimeTypes));
|
|
1589
|
+
if (toolResource === "execute_code") return matchesMimeList(mimeType, require_data_service.codeInterpreterMimeTypes);
|
|
1590
|
+
return true;
|
|
1591
|
+
}
|
|
1592
|
+
const matchesMimeList = (mimeType, patterns) => patterns.some((pattern) => pattern.test(mimeType));
|
|
1593
|
+
/**
|
|
1594
|
+
* Where a unified upload will end up, and whether it can be accepted at all.
|
|
1595
|
+
*
|
|
1596
|
+
* An upload has to be readable by something: the model, an extraction step, or a file
|
|
1597
|
+
* tool. A permanent one has to land on an agent resource too, or storing it succeeds
|
|
1598
|
+
* while leaving the agent no reference to it. Both outcomes are decided here rather than
|
|
1599
|
+
* discovered later, so a request that would change nothing is refused with a reason.
|
|
1600
|
+
*
|
|
1601
|
+
* `agentTools` is undefined when no agent record backs the upload, as for an ephemeral
|
|
1602
|
+
* agent that exists only for the request. An unknown tool set is not judged.
|
|
1603
|
+
*/
|
|
1604
|
+
function resolveUploadDestination(params) {
|
|
1605
|
+
const { toolResource, deliveryPath, mimeType, agentTools, hasAgent, isMessageAttachment, allowUnknownMessageConsumer = false, contextEnabled } = params;
|
|
1606
|
+
const refusesContext = (resource) => resource === "context" && hasAgent && !isMessageAttachment && contextEnabled === false;
|
|
1607
|
+
if (toolResource) {
|
|
1608
|
+
const resolved = toolResource === "ocr" ? "context" : toolResource;
|
|
1609
|
+
return refusesContext(resolved) ? { rejection: "context-disabled" } : { toolResource: resolved };
|
|
1610
|
+
}
|
|
1611
|
+
if (deliveryPath === "text") return refusesContext("context") ? { rejection: "context-disabled" } : { toolResource: "context" };
|
|
1612
|
+
const consumingTool = agentTools?.find((tool) => (tool === "execute_code" || tool === "file_search") && canToolResourceConsume(tool, mimeType));
|
|
1613
|
+
if (deliveryPath === "none" && consumingTool) return { toolResource: consumingTool };
|
|
1614
|
+
if (hasAgent && !isMessageAttachment) return { rejection: "no-agent-resource" };
|
|
1615
|
+
if (deliveryPath === "none" && (!isMessageAttachment || !allowUnknownMessageConsumer)) return { rejection: "no-consumer" };
|
|
1616
|
+
return {};
|
|
1617
|
+
}
|
|
1618
|
+
//#endregion
|
|
1258
1619
|
//#region src/messages.ts
|
|
1620
|
+
/** A generated reasoning title describes the text as it existed at generation time.
|
|
1621
|
+
* Any manual edit or merge into a different reasoning step invalidates the entire
|
|
1622
|
+
* title revision domain while preserving unrelated content metadata. */
|
|
1623
|
+
function stripReasoningLabelMetadata(part) {
|
|
1624
|
+
if (part.type !== "think") return part;
|
|
1625
|
+
const { reasoning_label: _label, reasoning_label_step_id: _stepId, reasoning_label_attempts: _attempts, reasoning_label_submitted_chars: _submittedChars, reasoning_label_revision: _revision, reasoning_label_status: _status, ...unlabeledPart } = part;
|
|
1626
|
+
return unlabeledPart;
|
|
1627
|
+
}
|
|
1628
|
+
const treeCache = /* @__PURE__ */ new WeakMap();
|
|
1259
1629
|
/**
|
|
1260
1630
|
* Builds the render tree from the flat messages array. Order-robust: live
|
|
1261
1631
|
* stream/steer/preempt cache writes can momentarily place a child before its
|
|
@@ -1266,6 +1636,11 @@ function mapGroupToAzureConfig({ groupName, groupMap }) {
|
|
|
1266
1636
|
*/
|
|
1267
1637
|
function buildTree({ messages, fileMap }) {
|
|
1268
1638
|
if (messages === null) return null;
|
|
1639
|
+
const cached = treeCache.get(messages);
|
|
1640
|
+
if (cached) {
|
|
1641
|
+
if (fileMap == null && cached.bare) return cached.bare;
|
|
1642
|
+
if (fileMap != null && cached.fileMap === fileMap && cached.hydrated) return cached.hydrated;
|
|
1643
|
+
}
|
|
1269
1644
|
const messageMap = {};
|
|
1270
1645
|
const orderedMessages = [];
|
|
1271
1646
|
const rootMessages = [];
|
|
@@ -1319,7 +1694,129 @@ function buildTree({ messages, fileMap }) {
|
|
|
1319
1694
|
rootMessages.push(extendedMessage);
|
|
1320
1695
|
assignDepths(extendedMessage);
|
|
1321
1696
|
}
|
|
1322
|
-
|
|
1697
|
+
const tree = rootMessages;
|
|
1698
|
+
const entry = cached ?? {};
|
|
1699
|
+
if (fileMap == null) entry.bare = tree;
|
|
1700
|
+
else {
|
|
1701
|
+
entry.fileMap = fileMap;
|
|
1702
|
+
entry.hydrated = tree;
|
|
1703
|
+
}
|
|
1704
|
+
if (!cached) treeCache.set(messages, entry);
|
|
1705
|
+
return tree;
|
|
1706
|
+
}
|
|
1707
|
+
/**
|
|
1708
|
+
* Memoizes a messages array's id index. Every row that needs to look another
|
|
1709
|
+
* message up (the hover controls resolving the turn a rerun would replay) would
|
|
1710
|
+
* otherwise scan the whole array, which is quadratic in the conversation. A
|
|
1711
|
+
* cache write replaces the array, so the index dies with the array it indexes
|
|
1712
|
+
* and can never answer from stale rows.
|
|
1713
|
+
*/
|
|
1714
|
+
const indexCache = /* @__PURE__ */ new WeakMap();
|
|
1715
|
+
/** The message with this id, resolved through the array's memoized index. */
|
|
1716
|
+
function findMessageById(messages, messageId) {
|
|
1717
|
+
if (messages == null || messageId == null) return;
|
|
1718
|
+
let index = indexCache.get(messages);
|
|
1719
|
+
if (index == null) {
|
|
1720
|
+
index = /* @__PURE__ */ new Map();
|
|
1721
|
+
for (const message of messages) if (message?.messageId != null && !index.has(message.messageId)) index.set(message.messageId, message);
|
|
1722
|
+
indexCache.set(messages, index);
|
|
1723
|
+
}
|
|
1724
|
+
return index.get(messageId);
|
|
1725
|
+
}
|
|
1726
|
+
/**
|
|
1727
|
+
* True when a turn carries the marker the server stamps on a manual compaction:
|
|
1728
|
+
* `markCompactionSummary` sets `initiatedBy: 'user'` on the summary a Compact
|
|
1729
|
+
* action produced, and nothing else writes it, so an automatic summary detour is
|
|
1730
|
+
* not one. This is the compaction's own identity, independent of where it hangs:
|
|
1731
|
+
* Compact runs on whatever leaf the branch ends with, so its response can parent
|
|
1732
|
+
* onto a user message as easily as onto the answer it summarized. Redoing one is
|
|
1733
|
+
* the context indicator's Compact action, never a rerun of the turn behind it.
|
|
1734
|
+
*/
|
|
1735
|
+
function isUserInitiatedCompaction(message) {
|
|
1736
|
+
const content = message?.content;
|
|
1737
|
+
if (!Array.isArray(content)) return false;
|
|
1738
|
+
return content.some((part) => part?.type === "summary" && part.initiatedBy === "user");
|
|
1739
|
+
}
|
|
1740
|
+
/**
|
|
1741
|
+
* True when a message is a finished manual compaction: every content part is a
|
|
1742
|
+
* summary and at least one of them carries text. A part that is still streaming
|
|
1743
|
+
* or that failed contributes no text of its own, so an interrupted compaction
|
|
1744
|
+
* can be retried.
|
|
1745
|
+
*/
|
|
1746
|
+
function isCompactedLeaf(message) {
|
|
1747
|
+
const content = message?.content;
|
|
1748
|
+
if (!Array.isArray(content) || content.length === 0) return false;
|
|
1749
|
+
let usable = false;
|
|
1750
|
+
for (const part of content) {
|
|
1751
|
+
if (part?.type !== "summary") return false;
|
|
1752
|
+
if (part.summarizing === true || part.failed === true) continue;
|
|
1753
|
+
const hasText = (part.content ?? []).some((block) => typeof block?.text === "string" && block.text.trim().length > 0);
|
|
1754
|
+
usable = usable || hasText;
|
|
1755
|
+
}
|
|
1756
|
+
return usable;
|
|
1757
|
+
}
|
|
1758
|
+
//#endregion
|
|
1759
|
+
//#region src/errors.ts
|
|
1760
|
+
const TOOL_CALL_ERROR_PREFIX = /^Error:\s*(?:\[[^\]]*\]\s*)*tool call failed:\s*/i;
|
|
1761
|
+
function hasToolCallErrorPrefix(text) {
|
|
1762
|
+
return TOOL_CALL_ERROR_PREFIX.test(text);
|
|
1763
|
+
}
|
|
1764
|
+
function stripToolCallErrorPrefix(text) {
|
|
1765
|
+
return text.replace(TOOL_CALL_ERROR_PREFIX, "");
|
|
1766
|
+
}
|
|
1767
|
+
//#endregion
|
|
1768
|
+
//#region src/runSteps.ts
|
|
1769
|
+
/**
|
|
1770
|
+
* Below this, a duration is noise rather than information: sub-second tool
|
|
1771
|
+
* calls are the common case, and labelling every one of them `· 0.3s` adds a
|
|
1772
|
+
* moving number to the end of most cards without telling the reader anything
|
|
1773
|
+
* they could act on. Callers use {@link isReportableRunStepDuration} rather
|
|
1774
|
+
* than comparing against this directly.
|
|
1775
|
+
*/
|
|
1776
|
+
const MIN_REPORTABLE_RUN_STEP_DURATION_MS = 1e3;
|
|
1777
|
+
/**
|
|
1778
|
+
* Wall-clock duration of a run step, derived from the terminal
|
|
1779
|
+
* `on_run_step_closed` event.
|
|
1780
|
+
*
|
|
1781
|
+
* Returns `undefined` rather than a fallback whenever the value would be a
|
|
1782
|
+
* guess, because a wrong duration is worse than an absent one — an absent one
|
|
1783
|
+
* renders nothing, a wrong one is indistinguishable from a real measurement:
|
|
1784
|
+
*
|
|
1785
|
+
* - `created_at` is optional on the event; emitters that do not know when the
|
|
1786
|
+
* step opened cannot have their duration inferred from anything else.
|
|
1787
|
+
* - A negative result means the two timestamps came from clocks that disagree.
|
|
1788
|
+
* That is not hypothetical: since `@librechat/agents` v3.6.0 a step can be
|
|
1789
|
+
* opened in one process and closed in another after a checkpoint resume, so
|
|
1790
|
+
* the two stamps can legitimately originate on different machines.
|
|
1791
|
+
* - Non-finite input is treated as absent instead of propagating `NaN` into
|
|
1792
|
+
* rendering.
|
|
1793
|
+
*
|
|
1794
|
+
* Known limits, accepted rather than guessed at: only the negative direction
|
|
1795
|
+
* of clock skew is detectable from a single stamp pair — positive skew
|
|
1796
|
+
* inflates the result and cannot be distinguished from a genuinely long
|
|
1797
|
+
* step. And the value is wall-clock elapsed between open and close, so a
|
|
1798
|
+
* step held open across a suspension (a checkpoint resume, a HITL approval
|
|
1799
|
+
* wait) includes that held-open time. Both are properties of the only data
|
|
1800
|
+
* available, not derivation bugs.
|
|
1801
|
+
*/
|
|
1802
|
+
function getRunStepDurationMs(closed) {
|
|
1803
|
+
const { created_at: createdAt, closed_at: closedAt } = closed;
|
|
1804
|
+
if (typeof createdAt !== "number" || typeof closedAt !== "number") return;
|
|
1805
|
+
if (!Number.isFinite(createdAt) || !Number.isFinite(closedAt)) return;
|
|
1806
|
+
const durationMs = closedAt - createdAt;
|
|
1807
|
+
return durationMs >= 0 ? durationMs : void 0;
|
|
1808
|
+
}
|
|
1809
|
+
/**
|
|
1810
|
+
* Whether a derived duration is worth showing to the reader.
|
|
1811
|
+
*
|
|
1812
|
+
* This is a presentation judgment, so it belongs at render time only. The
|
|
1813
|
+
* stamp sites persist the raw {@link getRunStepDurationMs} value instead of
|
|
1814
|
+
* pre-filtering through this — thresholding at write time would bake a
|
|
1815
|
+
* display rule into stored data, making "fast" indistinguishable from "not
|
|
1816
|
+
* derivable" and unrecoverable if the rule ever changes.
|
|
1817
|
+
*/
|
|
1818
|
+
function isReportableRunStepDuration(durationMs) {
|
|
1819
|
+
return typeof durationMs === "number" && durationMs >= 1e3;
|
|
1323
1820
|
}
|
|
1324
1821
|
//#endregion
|
|
1325
1822
|
//#region src/artifacts.ts
|
|
@@ -4492,6 +4989,10 @@ let PermissionTypes = /* @__PURE__ */ function(PermissionTypes) {
|
|
|
4492
4989
|
* Type for Shared Link Permissions
|
|
4493
4990
|
*/
|
|
4494
4991
|
PermissionTypes["SHARED_LINKS"] = "SHARED_LINKS";
|
|
4992
|
+
/**
|
|
4993
|
+
* Type for Scheduled Chats Permissions
|
|
4994
|
+
*/
|
|
4995
|
+
PermissionTypes["SCHEDULES"] = "SCHEDULES";
|
|
4495
4996
|
return PermissionTypes;
|
|
4496
4997
|
}({});
|
|
4497
4998
|
/**
|
|
@@ -4515,11 +5016,20 @@ const PERMISSION_TYPE_INTERFACE_FIELDS = {
|
|
|
4515
5016
|
["MCP_SERVERS"]: "mcpServers",
|
|
4516
5017
|
["REMOTE_AGENTS"]: "remoteAgents",
|
|
4517
5018
|
["SKILLS"]: "skills",
|
|
4518
|
-
["SHARED_LINKS"]: "sharedLinks"
|
|
5019
|
+
["SHARED_LINKS"]: "sharedLinks",
|
|
5020
|
+
["SCHEDULES"]: "schedules"
|
|
4519
5021
|
};
|
|
4520
5022
|
/** Set of interface config field names that correspond to role permissions. */
|
|
4521
5023
|
const INTERFACE_PERMISSION_FIELDS = new Set(Object.values(PERMISSION_TYPE_INTERFACE_FIELDS));
|
|
4522
5024
|
/**
|
|
5025
|
+
* Interface fields that seed a permission (use/create) BUT also carry runtime
|
|
5026
|
+
* config that must survive DB/tenant/user overrides. For these, override
|
|
5027
|
+
* sanitizers strip only the permission sub-keys (use/create) from the object
|
|
5028
|
+
* form and PRESERVE the boolean form — for `schedules`, `interface.schedules: false`
|
|
5029
|
+
* is the runtime feature disable that `getLimits` reads, not a permission toggle.
|
|
5030
|
+
*/
|
|
5031
|
+
const RUNTIME_CONFIG_INTERFACE_FIELDS = new Set(["schedules"]);
|
|
5032
|
+
/**
|
|
4523
5033
|
* YAML sub-keys within composite interface permission fields that map to permission bits.
|
|
4524
5034
|
* When an interface permission field is an object, only these sub-keys are stripped from
|
|
4525
5035
|
* DB overrides — other sub-keys (like `placeholder`, `trustCheckbox`) are UI-only and pass through.
|
|
@@ -4620,6 +5130,10 @@ const skillPermissionsSchema = zod.z.object({
|
|
|
4620
5130
|
["SHARE"]: zod.z.boolean().default(false),
|
|
4621
5131
|
["SHARE_PUBLIC"]: zod.z.boolean().default(false)
|
|
4622
5132
|
});
|
|
5133
|
+
const schedulesPermissionsSchema = zod.z.object({
|
|
5134
|
+
["USE"]: zod.z.boolean().default(true),
|
|
5135
|
+
["CREATE"]: zod.z.boolean().default(true)
|
|
5136
|
+
});
|
|
4623
5137
|
const sharedLinksPermissionsSchema = zod.z.object({
|
|
4624
5138
|
["CREATE"]: zod.z.boolean().default(true),
|
|
4625
5139
|
["SHARE"]: zod.z.boolean().default(true),
|
|
@@ -4641,7 +5155,8 @@ const permissionsSchema = zod.z.object({
|
|
|
4641
5155
|
["MCP_SERVERS"]: mcpServersPermissionsSchema,
|
|
4642
5156
|
["REMOTE_AGENTS"]: remoteAgentsPermissionsSchema,
|
|
4643
5157
|
["SKILLS"]: skillPermissionsSchema,
|
|
4644
|
-
["SHARED_LINKS"]: sharedLinksPermissionsSchema
|
|
5158
|
+
["SHARED_LINKS"]: sharedLinksPermissionsSchema,
|
|
5159
|
+
["SCHEDULES"]: schedulesPermissionsSchema
|
|
4645
5160
|
});
|
|
4646
5161
|
//#endregion
|
|
4647
5162
|
//#region src/roles.ts
|
|
@@ -4722,6 +5237,10 @@ const defaultRolesSchema = zod.z.object({
|
|
|
4722
5237
|
["CREATE"]: zod.z.boolean().default(true),
|
|
4723
5238
|
["SHARE"]: zod.z.boolean().default(true),
|
|
4724
5239
|
["SHARE_PUBLIC"]: zod.z.boolean().default(true)
|
|
5240
|
+
}),
|
|
5241
|
+
["SCHEDULES"]: schedulesPermissionsSchema.extend({
|
|
5242
|
+
["USE"]: zod.z.boolean().default(true),
|
|
5243
|
+
["CREATE"]: zod.z.boolean().default(true)
|
|
4725
5244
|
})
|
|
4726
5245
|
})
|
|
4727
5246
|
}),
|
|
@@ -4795,6 +5314,10 @@ const roleDefaults = defaultRolesSchema.parse({
|
|
|
4795
5314
|
["CREATE"]: true,
|
|
4796
5315
|
["SHARE"]: true,
|
|
4797
5316
|
["SHARE_PUBLIC"]: true
|
|
5317
|
+
},
|
|
5318
|
+
["SCHEDULES"]: {
|
|
5319
|
+
["USE"]: true,
|
|
5320
|
+
["CREATE"]: true
|
|
4798
5321
|
}
|
|
4799
5322
|
}
|
|
4800
5323
|
},
|
|
@@ -4850,6 +5373,10 @@ const roleDefaults = defaultRolesSchema.parse({
|
|
|
4850
5373
|
["CREATE"]: true,
|
|
4851
5374
|
["SHARE"]: true,
|
|
4852
5375
|
["SHARE_PUBLIC"]: true
|
|
5376
|
+
},
|
|
5377
|
+
["SCHEDULES"]: {
|
|
5378
|
+
["USE"]: true,
|
|
5379
|
+
["CREATE"]: true
|
|
4853
5380
|
}
|
|
4854
5381
|
}
|
|
4855
5382
|
}
|
|
@@ -4869,6 +5396,337 @@ let InvocationMode = /* @__PURE__ */ function(InvocationMode) {
|
|
|
4869
5396
|
return InvocationMode;
|
|
4870
5397
|
}({});
|
|
4871
5398
|
//#endregion
|
|
5399
|
+
//#region src/types/schedules.ts
|
|
5400
|
+
/** Cadences the dialog builds from structured pickers (hour, minute, weekday). */
|
|
5401
|
+
const scheduleStructuredFrequencies = [
|
|
5402
|
+
"hourly",
|
|
5403
|
+
"daily",
|
|
5404
|
+
"weekdays",
|
|
5405
|
+
"weekly"
|
|
5406
|
+
];
|
|
5407
|
+
const scheduleFrequencies = [...scheduleStructuredFrequencies, "cron"];
|
|
5408
|
+
/** Bounds a stored expression. Generous for five fields, because each one can hold a
|
|
5409
|
+
* list: an every-minute-of-the-hour cadence spelled out runs past two hundred chars. */
|
|
5410
|
+
const SCHEDULE_CRON_MAX_LENGTH = 256;
|
|
5411
|
+
const scheduleTargets = ["new"];
|
|
5412
|
+
const structuredCadenceSchema = zod.z.object({
|
|
5413
|
+
frequency: zod.z.enum(scheduleStructuredFrequencies),
|
|
5414
|
+
hour: zod.z.number().int().min(0).max(23),
|
|
5415
|
+
minute: zod.z.number().int().min(0).max(59),
|
|
5416
|
+
daysOfWeek: zod.z.array(zod.z.number().int().min(0).max(6)).min(1).max(7).transform((days) => Array.from(new Set(days))).optional()
|
|
5417
|
+
});
|
|
5418
|
+
/**
|
|
5419
|
+
* A raw cron expression carries its own hour and minute, so it cannot share the
|
|
5420
|
+
* structured shape: there is no single `hour` for `0 9,17 * * 1-5`. Syntax is
|
|
5421
|
+
* validated server-side by croner, the same parser the engine fires from, rather
|
|
5422
|
+
* than by a regex that would accept patterns croner then rejects at fire time.
|
|
5423
|
+
*/
|
|
5424
|
+
const cronCadenceSchema = zod.z.object({
|
|
5425
|
+
frequency: zod.z.literal("cron"),
|
|
5426
|
+
expression: zod.z.string().trim().min(1).max(256)
|
|
5427
|
+
});
|
|
5428
|
+
const scheduleCadenceSchema = zod.z.discriminatedUnion("frequency", [structuredCadenceSchema, cronCadenceSchema]);
|
|
5429
|
+
const isCronCadence = (cadence) => cadence.frequency === "cron";
|
|
5430
|
+
const createSchedulePayloadSchema = zod.z.object({
|
|
5431
|
+
name: zod.z.string().trim().min(1).max(256),
|
|
5432
|
+
prompt: zod.z.string().trim().min(1).max(32e3),
|
|
5433
|
+
agent_id: zod.z.string().trim().min(1),
|
|
5434
|
+
cadence: scheduleCadenceSchema,
|
|
5435
|
+
timezone: zod.z.string().min(1),
|
|
5436
|
+
target: zod.z.enum(scheduleTargets).default("new"),
|
|
5437
|
+
file_ids: zod.z.array(zod.z.string()).max(10).transform((ids) => Array.from(new Set(ids))).optional(),
|
|
5438
|
+
/**
|
|
5439
|
+
* Chat project each run's conversation is filed under. `null` clears the scope.
|
|
5440
|
+
* Ownership is checked server-side at write time and again at every fire, so a
|
|
5441
|
+
* deleted project disables the schedule instead of silently filing runs loose.
|
|
5442
|
+
*/
|
|
5443
|
+
chatProjectId: zod.z.string().trim().min(1).nullable().optional(),
|
|
5444
|
+
enabled: zod.z.boolean().default(true),
|
|
5445
|
+
/**
|
|
5446
|
+
* Client-generated key making creation idempotent across retries. Creation commits
|
|
5447
|
+
* the row and arms it in two writes, so a failure between them leaves the client
|
|
5448
|
+
* unable to tell whether anything persisted; retrying blind can produce two recurring
|
|
5449
|
+
* schedules. A retry carrying the same key resolves to the original row instead.
|
|
5450
|
+
* REQUIRED: an optional key preserves the keyless duplicate path for any client
|
|
5451
|
+
* that omits it, which is exactly the failure the key exists to close.
|
|
5452
|
+
*/
|
|
5453
|
+
clientRequestId: zod.z.string().trim().min(1).max(128)
|
|
5454
|
+
});
|
|
5455
|
+
/** Idempotency is a property of the CREATE attempt, not of the schedule's config. */
|
|
5456
|
+
const updateSchedulePayloadSchema = createSchedulePayloadSchema.omit({ clientRequestId: true }).partial().extend({
|
|
5457
|
+
/**
|
|
5458
|
+
* The configRevision the client's edit was computed from (captured when the
|
|
5459
|
+
* dialog opened). The server fences the update on it, so a concurrent edit
|
|
5460
|
+
* from another tab answers 409 instead of being silently overwritten by a
|
|
5461
|
+
* payload rebuilt from a stale snapshot (cadence is sent whole, so the
|
|
5462
|
+
* server-side fresh-read fence alone cannot detect this).
|
|
5463
|
+
*/
|
|
5464
|
+
expectedConfigRevision: zod.z.number().int().min(0).optional() });
|
|
5465
|
+
/** Only structured schedule preflight failures may request immediate suspension. */
|
|
5466
|
+
function getScheduleMCPDisabledReason(outcomes) {
|
|
5467
|
+
const statuses = new Set(outcomes?.map((outcome) => outcome.status));
|
|
5468
|
+
if (statuses.has("mcp_permission_denied")) return "mcp_permission_denied";
|
|
5469
|
+
if (statuses.has("mcp_configuration_missing")) return "mcp_configuration_missing";
|
|
5470
|
+
if (statuses.has("mcp_reauth_required")) return "mcp_reauth_required";
|
|
5471
|
+
}
|
|
5472
|
+
const scheduleMCPOutcomeSchema = zod.z.object({
|
|
5473
|
+
server: zod.z.string(),
|
|
5474
|
+
/** Agent whose selected tool requires this server. Used to open the correct
|
|
5475
|
+
* recovery chat when the requirement belongs to a handoff or subagent. */
|
|
5476
|
+
agentId: zod.z.string().optional(),
|
|
5477
|
+
status: zod.z.enum([
|
|
5478
|
+
"ready",
|
|
5479
|
+
"mcp_reauth_required",
|
|
5480
|
+
"mcp_configuration_missing",
|
|
5481
|
+
"mcp_permission_denied",
|
|
5482
|
+
"mcp_unavailable"
|
|
5483
|
+
])
|
|
5484
|
+
});
|
|
5485
|
+
function readScheduleMCPOutcomes(error) {
|
|
5486
|
+
if (!error || !/^mcp_(reauth_required|configuration_missing|permission_denied|unavailable): \[/.test(error)) return [];
|
|
5487
|
+
try {
|
|
5488
|
+
const result = scheduleMCPOutcomeSchema.array().safeParse(JSON.parse(error.slice(error.indexOf(": ") + 2)));
|
|
5489
|
+
return result.success ? result.data : [];
|
|
5490
|
+
} catch {
|
|
5491
|
+
return [];
|
|
5492
|
+
}
|
|
5493
|
+
}
|
|
5494
|
+
//#endregion
|
|
5495
|
+
//#region src/cadence.ts
|
|
5496
|
+
/** Mirrors the server default when a weekly cadence omits `daysOfWeek`. */
|
|
5497
|
+
const WEEKLY_DEFAULT_DAY = 1;
|
|
5498
|
+
/**
|
|
5499
|
+
* Minute, hour, day of month, month, day of week. croner also reads a six-field form
|
|
5500
|
+
* carrying seconds and a seven-field form that pins a year, and both are refused.
|
|
5501
|
+
* Seconds would promise a precision the runtime does not keep: the engine polls on a
|
|
5502
|
+
* thirty-second tick and offsets each schedule by up to two minutes of jitter. A pinned
|
|
5503
|
+
* year makes a cadence that runs out, and every caller here treats "no next occurrence"
|
|
5504
|
+
* as a cadence it cannot read.
|
|
5505
|
+
*/
|
|
5506
|
+
const CRON_FIELD_COUNT = 5;
|
|
5507
|
+
/**
|
|
5508
|
+
* Spring-forward compresses consecutive wall-clock occurrences, so the ENFORCEABLE
|
|
5509
|
+
* minimum for day-and-longer gaps is the nominal gap minus the largest real-world
|
|
5510
|
+
* transition: two hours (Antarctica/Troll; every other zone shifts at most one).
|
|
5511
|
+
* A floor set exactly at the nominal value would otherwise admit a schedule that
|
|
5512
|
+
* genuinely violates it once a year. Hourly gaps are unaffected (the skipped hours
|
|
5513
|
+
* lengthen, never shorten, the gap between occurrences).
|
|
5514
|
+
*/
|
|
5515
|
+
const DST_COMPRESSION_MINUTES = 120;
|
|
5516
|
+
/**
|
|
5517
|
+
* Occurrences sampled when measuring a cron expression's tightest gap. The floor
|
|
5518
|
+
* exists to reject expressions that fire too OFTEN, and a dense pattern reveals
|
|
5519
|
+
* its short gap within the first few occurrences, so a small window answers the
|
|
5520
|
+
* question this guards. Known limit: this is a bounded probe, not the exhaustive
|
|
5521
|
+
* proof the structured formulas give. An expression that is sparse for the next
|
|
5522
|
+
* `CRON_PROBE_OCCURRENCES` runs and dense later would pass here and be caught by
|
|
5523
|
+
* the fire-time recheck instead.
|
|
5524
|
+
*/
|
|
5525
|
+
const CRON_PROBE_OCCURRENCES = 32;
|
|
5526
|
+
/** Enough to span four nominal gaps from an anchor two gaps before a transition,
|
|
5527
|
+
* which is what guarantees the straddling pair falls inside the window. */
|
|
5528
|
+
const TRANSITION_PROBE_OCCURRENCES = 5;
|
|
5529
|
+
/**
|
|
5530
|
+
* Compiles a cadence to the cron expression the engine fires from. Shared rather
|
|
5531
|
+
* than server-owned because the dialog previews the next runs, validates the
|
|
5532
|
+
* interval floor, and disables its own submit from these same functions: a second
|
|
5533
|
+
* client-side implementation would drift and either show run times the schedule
|
|
5534
|
+
* does not keep or accept a cadence the server then rejects.
|
|
5535
|
+
*/
|
|
5536
|
+
function cadenceToCron(cadence) {
|
|
5537
|
+
if (cadence.frequency === "cron") return cadence.expression;
|
|
5538
|
+
const { frequency, hour, minute } = cadence;
|
|
5539
|
+
if (frequency === "hourly") return `${minute} * * * *`;
|
|
5540
|
+
if (frequency === "daily") return `${minute} ${hour} * * *`;
|
|
5541
|
+
if (frequency === "weekdays") return `${minute} ${hour} * * 1-5`;
|
|
5542
|
+
return `${minute} ${hour} * * ${[...cadence.daysOfWeek?.length ? cadence.daysOfWeek : [WEEKLY_DEFAULT_DAY]].sort((a, b) => a - b).join(",")}`;
|
|
5543
|
+
}
|
|
5544
|
+
/**
|
|
5545
|
+
* Everything `cronCadenceSchema` will accept: exactly five fields, within the length
|
|
5546
|
+
* the schema stores, and actually matching at some point. croner accepts syntactically
|
|
5547
|
+
* valid patterns that can never match (`0 0 30 2 *`), and those would arm a schedule
|
|
5548
|
+
* that never fires. Validated with croner rather than a regex, because a regex would
|
|
5549
|
+
* accept patterns croner then rejects at fire time.
|
|
5550
|
+
*
|
|
5551
|
+
* A five-field expression that matches at all matches forever, which is what lets every
|
|
5552
|
+
* caller keep reading "no next occurrence" as "this cadence is unreadable".
|
|
5553
|
+
*/
|
|
5554
|
+
function isValidCronExpression(expression, timezone) {
|
|
5555
|
+
const trimmed = expression.trim();
|
|
5556
|
+
if (trimmed.length > 256) return false;
|
|
5557
|
+
if (trimmed.split(/\s+/).length !== CRON_FIELD_COUNT) return false;
|
|
5558
|
+
try {
|
|
5559
|
+
return new croner.Cron(trimmed, {
|
|
5560
|
+
timezone,
|
|
5561
|
+
paused: true
|
|
5562
|
+
}).nextRun() != null;
|
|
5563
|
+
} catch {
|
|
5564
|
+
return false;
|
|
5565
|
+
}
|
|
5566
|
+
}
|
|
5567
|
+
/**
|
|
5568
|
+
* The next occurrences the engine would fire. Server-side jitter (up to two
|
|
5569
|
+
* minutes) is deliberately not modelled: it is keyed off a schedule id that does
|
|
5570
|
+
* not exist yet at create time, and showing 9:01 for a 9:00 schedule reads as a bug.
|
|
5571
|
+
*/
|
|
5572
|
+
function nextRunInstants(cadence, timezone, count) {
|
|
5573
|
+
try {
|
|
5574
|
+
const runs = new croner.Cron(cadenceToCron(cadence), {
|
|
5575
|
+
timezone,
|
|
5576
|
+
paused: true
|
|
5577
|
+
}).nextRuns(count);
|
|
5578
|
+
return runs.filter((run, index) => index === 0 || run.getTime() !== runs[index - 1].getTime());
|
|
5579
|
+
} catch {
|
|
5580
|
+
return [];
|
|
5581
|
+
}
|
|
5582
|
+
}
|
|
5583
|
+
const MINUTE_MS = 6e4;
|
|
5584
|
+
const DAY_MS = 1440 * MINUTE_MS;
|
|
5585
|
+
/** A year and a bit, so a zone with a single yearly transition always shows one. */
|
|
5586
|
+
const TRANSITION_SEARCH_DAYS = 400;
|
|
5587
|
+
const offsetFormatters = /* @__PURE__ */ new Map();
|
|
5588
|
+
/** Minutes east of UTC in `zone` at `instant`, read back from the wall clock the
|
|
5589
|
+
* zone renders. The only way to observe a zone's offset without a tz database. */
|
|
5590
|
+
function zoneOffsetMinutes(zone, instant) {
|
|
5591
|
+
let formatter = offsetFormatters.get(zone);
|
|
5592
|
+
if (formatter == null) {
|
|
5593
|
+
formatter = new Intl.DateTimeFormat("en-US", {
|
|
5594
|
+
timeZone: zone,
|
|
5595
|
+
hourCycle: "h23",
|
|
5596
|
+
year: "numeric",
|
|
5597
|
+
month: "2-digit",
|
|
5598
|
+
day: "2-digit",
|
|
5599
|
+
hour: "2-digit",
|
|
5600
|
+
minute: "2-digit",
|
|
5601
|
+
second: "2-digit"
|
|
5602
|
+
});
|
|
5603
|
+
offsetFormatters.set(zone, formatter);
|
|
5604
|
+
}
|
|
5605
|
+
const parts = {};
|
|
5606
|
+
for (const part of formatter.formatToParts(instant)) parts[part.type] = part.value;
|
|
5607
|
+
const wallClock = Date.UTC(Number(parts.year), Number(parts.month) - 1, Number(parts.day), Number(parts.hour), Number(parts.minute), Number(parts.second));
|
|
5608
|
+
return Math.round((wallClock - instant.getTime()) / MINUTE_MS);
|
|
5609
|
+
}
|
|
5610
|
+
/** Zone transitions are asked for once per fire, and the scan below costs ~10ms.
|
|
5611
|
+
* Keyed by day because that is how far the answer stays put as the window slides,
|
|
5612
|
+
* and cleared wholesale at the cap so a long-lived worker cannot accumulate an
|
|
5613
|
+
* entry per zone per day forever. */
|
|
5614
|
+
const transitionCache = /* @__PURE__ */ new Map();
|
|
5615
|
+
const TRANSITION_CACHE_MAX = 512;
|
|
5616
|
+
/**
|
|
5617
|
+
* Every instant `zone` changes its UTC offset within the search window; empty for a
|
|
5618
|
+
* fixed-offset zone. Both directions matter and only one of them shortens anything,
|
|
5619
|
+
* so taking just the next one would usually find the harmless fall-back and miss the
|
|
5620
|
+
* spring-forward six months behind it. Bracketed a day at a time, bisected to the
|
|
5621
|
+
* minute.
|
|
5622
|
+
*/
|
|
5623
|
+
function offsetChanges(zone, from) {
|
|
5624
|
+
const day = Math.floor(from.getTime() / DAY_MS);
|
|
5625
|
+
const cacheKey = `${zone}:${day}`;
|
|
5626
|
+
const cached = transitionCache.get(cacheKey);
|
|
5627
|
+
if (cached != null) return cached;
|
|
5628
|
+
const changes = [];
|
|
5629
|
+
const start = /* @__PURE__ */ new Date((day - 1) * DAY_MS);
|
|
5630
|
+
let low = start.getTime();
|
|
5631
|
+
let baseOffset = zoneOffsetMinutes(zone, start);
|
|
5632
|
+
const end = low + TRANSITION_SEARCH_DAYS * DAY_MS;
|
|
5633
|
+
for (let probe = low + DAY_MS; probe <= end; probe += DAY_MS) {
|
|
5634
|
+
const offset = zoneOffsetMinutes(zone, new Date(probe));
|
|
5635
|
+
if (offset !== baseOffset) {
|
|
5636
|
+
let high = probe;
|
|
5637
|
+
let bracket = low;
|
|
5638
|
+
while (high - bracket > MINUTE_MS) {
|
|
5639
|
+
const mid = bracket + Math.floor((high - bracket) / 2);
|
|
5640
|
+
if (zoneOffsetMinutes(zone, new Date(mid)) === baseOffset) bracket = mid;
|
|
5641
|
+
else high = mid;
|
|
5642
|
+
}
|
|
5643
|
+
changes.push(new Date(high));
|
|
5644
|
+
baseOffset = offset;
|
|
5645
|
+
}
|
|
5646
|
+
low = probe;
|
|
5647
|
+
}
|
|
5648
|
+
if (transitionCache.size >= TRANSITION_CACHE_MAX) transitionCache.clear();
|
|
5649
|
+
transitionCache.set(cacheKey, changes);
|
|
5650
|
+
return changes;
|
|
5651
|
+
}
|
|
5652
|
+
function runsAfter(expression, from, zone, occurrences = CRON_PROBE_OCCURRENCES) {
|
|
5653
|
+
return new croner.Cron(expression, {
|
|
5654
|
+
timezone: zone,
|
|
5655
|
+
paused: true
|
|
5656
|
+
}).nextRuns(occurrences, from);
|
|
5657
|
+
}
|
|
5658
|
+
/** Tightest gap, in minutes, across `runs`; null when there is no pair to measure. */
|
|
5659
|
+
function minGapMinutes(runs) {
|
|
5660
|
+
if (runs.length < 2) return null;
|
|
5661
|
+
let minGapMs = Number.MAX_SAFE_INTEGER;
|
|
5662
|
+
for (let i = 1; i < runs.length; i++) {
|
|
5663
|
+
const gapMs = runs[i].getTime() - runs[i - 1].getTime();
|
|
5664
|
+
if (gapMs <= 0) continue;
|
|
5665
|
+
minGapMs = Math.min(minGapMs, gapMs);
|
|
5666
|
+
}
|
|
5667
|
+
if (minGapMs === Number.MAX_SAFE_INTEGER) return null;
|
|
5668
|
+
return Math.floor(minGapMs / MINUTE_MS);
|
|
5669
|
+
}
|
|
5670
|
+
function probeMinGapMinutes(expression, zone, from, occurrences = CRON_PROBE_OCCURRENCES) {
|
|
5671
|
+
return minGapMinutes(runsAfter(expression, from, zone, occurrences));
|
|
5672
|
+
}
|
|
5673
|
+
/**
|
|
5674
|
+
* Smallest gap in minutes between occurrences. Returns 0 for an unparseable or
|
|
5675
|
+
* never-matching expression so every floor rejects it, failing closed rather than
|
|
5676
|
+
* admitting an expression the engine cannot fire.
|
|
5677
|
+
*
|
|
5678
|
+
* Measured twice, and the smaller wins:
|
|
5679
|
+
*
|
|
5680
|
+
* 1. Nominal, probed in UTC, then discounted by the same worst-case DST allowance
|
|
5681
|
+
* the structured branches assume. This keeps `0 9 * * *` reporting exactly what
|
|
5682
|
+
* the Daily preset reports, so the same schedule cannot be admitted in one form
|
|
5683
|
+
* and rejected in the other.
|
|
5684
|
+
* 2. Real elapsed time in the schedule's own zone, across each of that zone's
|
|
5685
|
+
* transitions. Spring-forward compresses a gap that straddles one
|
|
5686
|
+
* (`0 0,12 * * *` in America/New_York is 11 hours that day, not 12), and step 1
|
|
5687
|
+
* only discounts gaps of a day or more, so a subdaily gap needs measuring rather
|
|
5688
|
+
* than estimating. Anchoring at the transition is what makes a bounded probe see
|
|
5689
|
+
* it at all: from today it is usually months outside any reasonable window.
|
|
5690
|
+
*/
|
|
5691
|
+
function cronIntervalMinutes(expression, timezone) {
|
|
5692
|
+
try {
|
|
5693
|
+
const now = /* @__PURE__ */ new Date();
|
|
5694
|
+
const nominal = probeMinGapMinutes(expression, "UTC", now);
|
|
5695
|
+
if (nominal == null) return 0;
|
|
5696
|
+
const estimate = nominal < 1440 ? nominal : Math.max(0, nominal - DST_COMPRESSION_MINUTES);
|
|
5697
|
+
if (timezone == null || estimate === 0) return estimate;
|
|
5698
|
+
const anchorBackMs = 2 * Math.max(nominal, 1) * MINUTE_MS;
|
|
5699
|
+
let smallest = estimate;
|
|
5700
|
+
for (const transition of offsetChanges(timezone, now)) {
|
|
5701
|
+
const measured = probeMinGapMinutes(expression, timezone, new Date(Math.max(now.getTime(), transition.getTime() - anchorBackMs)), TRANSITION_PROBE_OCCURRENCES);
|
|
5702
|
+
if (measured != null) smallest = Math.min(smallest, measured);
|
|
5703
|
+
}
|
|
5704
|
+
return smallest;
|
|
5705
|
+
} catch {
|
|
5706
|
+
return 0;
|
|
5707
|
+
}
|
|
5708
|
+
}
|
|
5709
|
+
/**
|
|
5710
|
+
* Minimum minutes between occurrences, for the admin interval floor. `timezone` is
|
|
5711
|
+
* the schedule's own; passing it lets the cron branch measure a DST-compressed gap
|
|
5712
|
+
* instead of estimating one. The structured branches are zone-independent: their
|
|
5713
|
+
* formulas already carry the worst-case allowance.
|
|
5714
|
+
*/
|
|
5715
|
+
function cadenceIntervalMinutes(cadence, timezone) {
|
|
5716
|
+
if (isCronCadence(cadence)) return cronIntervalMinutes(cadence.expression, timezone);
|
|
5717
|
+
if (cadence.frequency === "hourly") return 60;
|
|
5718
|
+
if (cadence.frequency === "daily" || cadence.frequency === "weekdays") return 1440 - DST_COMPRESSION_MINUTES;
|
|
5719
|
+
const days = cadence.daysOfWeek?.length ? Array.from(new Set(cadence.daysOfWeek)) : [WEEKLY_DEFAULT_DAY];
|
|
5720
|
+
if (days.length <= 1) return 10080 - DST_COMPRESSION_MINUTES;
|
|
5721
|
+
const sorted = [...days].sort((a, b) => a - b);
|
|
5722
|
+
let minGapDays = 7;
|
|
5723
|
+
for (let i = 0; i < sorted.length; i++) {
|
|
5724
|
+
const gap = i + 1 < sorted.length ? sorted[i + 1] - sorted[i] : 7 - sorted[i] + sorted[0];
|
|
5725
|
+
minGapDays = Math.min(minGapDays, gap);
|
|
5726
|
+
}
|
|
5727
|
+
return minGapDays * 24 * 60 - DST_COMPRESSION_MINUTES;
|
|
5728
|
+
}
|
|
5729
|
+
//#endregion
|
|
4872
5730
|
//#region src/types/skills.ts
|
|
4873
5731
|
/**
|
|
4874
5732
|
* Shared skill validation constants — the single source of truth for name,
|
|
@@ -4901,6 +5759,252 @@ let DATE_RANGE = /* @__PURE__ */ function(DATE_RANGE) {
|
|
|
4901
5759
|
return DATE_RANGE;
|
|
4902
5760
|
}({});
|
|
4903
5761
|
//#endregion
|
|
5762
|
+
//#region src/types/insights.ts
|
|
5763
|
+
const INSIGHTS_MAX_RANGE_DAYS = 30;
|
|
5764
|
+
const INSIGHTS_SEARCH_MIN_LENGTH = 3;
|
|
5765
|
+
const INSIGHTS_SEARCH_MAX_LENGTH = 200;
|
|
5766
|
+
const INSIGHTS_AGENT_ID_MAX_LENGTH = 256;
|
|
5767
|
+
//#endregion
|
|
5768
|
+
//#region src/types/traces.ts
|
|
5769
|
+
const TRACE_CURSOR_MAX_LENGTH = 4096;
|
|
5770
|
+
const TRACE_SOURCE_ID_MAX_LENGTH = 128;
|
|
5771
|
+
const TRACE_RECORD_ID_MAX_LENGTH = 256;
|
|
5772
|
+
//#endregion
|
|
5773
|
+
//#region src/types/queuedTurns.ts
|
|
5774
|
+
const agentQueuedTurnStatuses = [
|
|
5775
|
+
"queued",
|
|
5776
|
+
"claimed",
|
|
5777
|
+
"admitted",
|
|
5778
|
+
"cancelled",
|
|
5779
|
+
"dead"
|
|
5780
|
+
];
|
|
5781
|
+
const agentQueuedTurnDurability = ["process_local", "durable"];
|
|
5782
|
+
const agentQueuedTurnFileRefSchema = zod.z.object({
|
|
5783
|
+
file_id: zod.z.string().trim().min(1),
|
|
5784
|
+
type: zod.z.string().optional(),
|
|
5785
|
+
filepath: zod.z.string().optional(),
|
|
5786
|
+
filename: zod.z.string().optional(),
|
|
5787
|
+
height: zod.z.number().optional(),
|
|
5788
|
+
width: zod.z.number().optional(),
|
|
5789
|
+
bytes: zod.z.number().nonnegative().optional()
|
|
5790
|
+
});
|
|
5791
|
+
const enqueueAgentQueuedTurnSchema = zod.z.object({
|
|
5792
|
+
conversationId: zod.z.string().trim().min(1),
|
|
5793
|
+
parentMessageId: zod.z.string().trim().min(1),
|
|
5794
|
+
clientRequestId: zod.z.string().trim().min(1).max(128),
|
|
5795
|
+
text: zod.z.string(),
|
|
5796
|
+
files: zod.z.array(agentQueuedTurnFileRefSchema).optional(),
|
|
5797
|
+
quotes: zod.z.array(zod.z.string()).optional(),
|
|
5798
|
+
manualSkills: zod.z.array(zod.z.string().trim().min(1)).optional(),
|
|
5799
|
+
priority: zod.z.boolean().optional(),
|
|
5800
|
+
expectedPredecessorCreatedAt: zod.z.number().int().nonnegative().optional()
|
|
5801
|
+
});
|
|
5802
|
+
const listAgentQueuedTurnsSchema = zod.z.object({
|
|
5803
|
+
conversationId: zod.z.string().trim().min(1),
|
|
5804
|
+
clientRequestIds: zod.z.array(zod.z.string().trim().min(1).max(128)).max(100).transform((ids) => Array.from(new Set(ids))).optional()
|
|
5805
|
+
});
|
|
5806
|
+
const cancelAgentQueuedTurnSchema = zod.z.object({ queuedTurnId: zod.z.string().trim().min(1) });
|
|
5807
|
+
const agentQueuedTurnReceiptSchema = enqueueAgentQueuedTurnSchema.extend({
|
|
5808
|
+
queuedTurnId: zod.z.string().trim().min(1),
|
|
5809
|
+
status: zod.z.enum(agentQueuedTurnStatuses),
|
|
5810
|
+
/** Effective generation boundary consumed by an admitted turn. This can
|
|
5811
|
+
* advance beyond the originally captured root as queued turns chain. */
|
|
5812
|
+
effectivePredecessorCreatedAt: zod.z.number().int().nonnegative().optional(),
|
|
5813
|
+
/** Explicitly proves that this admission consumed no predecessor boundary. */
|
|
5814
|
+
rootPredecessor: zod.z.literal(true).optional(),
|
|
5815
|
+
position: zod.z.number().int().nonnegative().optional(),
|
|
5816
|
+
/** Immutable queue sequence retained as `revision` for wire compatibility. */
|
|
5817
|
+
revision: zod.z.number().int().nonnegative(),
|
|
5818
|
+
failure: zod.z.object({
|
|
5819
|
+
code: zod.z.string().trim().min(1).max(128),
|
|
5820
|
+
message: zod.z.string().max(2048).optional()
|
|
5821
|
+
}).optional(),
|
|
5822
|
+
createdAt: zod.z.string(),
|
|
5823
|
+
updatedAt: zod.z.string()
|
|
5824
|
+
});
|
|
5825
|
+
const agentQueuedTurnCapabilitySchema = zod.z.discriminatedUnion("supported", [zod.z.object({ supported: zod.z.literal(false) }), zod.z.object({
|
|
5826
|
+
supported: zod.z.literal(true),
|
|
5827
|
+
durability: zod.z.enum(agentQueuedTurnDurability)
|
|
5828
|
+
})]);
|
|
5829
|
+
const enqueueAgentQueuedTurnResponseSchema = zod.z.object({
|
|
5830
|
+
receipt: agentQueuedTurnReceiptSchema,
|
|
5831
|
+
capability: agentQueuedTurnCapabilitySchema
|
|
5832
|
+
});
|
|
5833
|
+
const listAgentQueuedTurnsResponseSchema = zod.z.object({
|
|
5834
|
+
queuedTurns: zod.z.array(agentQueuedTurnReceiptSchema),
|
|
5835
|
+
capability: agentQueuedTurnCapabilitySchema,
|
|
5836
|
+
revision: zod.z.number().int().nonnegative()
|
|
5837
|
+
});
|
|
5838
|
+
const cancelAgentQueuedTurnResponseSchema = zod.z.object({ receipt: agentQueuedTurnReceiptSchema });
|
|
5839
|
+
//#endregion
|
|
5840
|
+
//#region src/providers.ts
|
|
5841
|
+
/** Canonical provider identity used for branding across client and server. */
|
|
5842
|
+
let ProviderId = /* @__PURE__ */ function(ProviderId) {
|
|
5843
|
+
ProviderId["openai"] = "openai";
|
|
5844
|
+
ProviderId["anthropic"] = "anthropic";
|
|
5845
|
+
ProviderId["google"] = "google";
|
|
5846
|
+
ProviderId["azure"] = "azure";
|
|
5847
|
+
ProviderId["bedrock"] = "bedrock";
|
|
5848
|
+
ProviderId["xai"] = "xai";
|
|
5849
|
+
ProviderId["moonshot"] = "moonshot";
|
|
5850
|
+
ProviderId["anyscale"] = "anyscale";
|
|
5851
|
+
ProviderId["apipie"] = "apipie";
|
|
5852
|
+
ProviderId["cohere"] = "cohere";
|
|
5853
|
+
ProviderId["deepseek"] = "deepseek";
|
|
5854
|
+
ProviderId["fireworks"] = "fireworks";
|
|
5855
|
+
ProviderId["groq"] = "groq";
|
|
5856
|
+
ProviderId["helicone"] = "helicone";
|
|
5857
|
+
ProviderId["huggingface"] = "huggingface";
|
|
5858
|
+
ProviderId["lemonade"] = "lemonade";
|
|
5859
|
+
ProviderId["mistral"] = "mistral";
|
|
5860
|
+
ProviderId["mlx"] = "mlx";
|
|
5861
|
+
ProviderId["ollama"] = "ollama";
|
|
5862
|
+
ProviderId["openrouter"] = "openrouter";
|
|
5863
|
+
ProviderId["perplexity"] = "perplexity";
|
|
5864
|
+
ProviderId["qwen"] = "qwen";
|
|
5865
|
+
ProviderId["shuttleai"] = "shuttleai";
|
|
5866
|
+
ProviderId["together"] = "together";
|
|
5867
|
+
ProviderId["unify"] = "unify";
|
|
5868
|
+
ProviderId["vercel"] = "vercel";
|
|
5869
|
+
return ProviderId;
|
|
5870
|
+
}({});
|
|
5871
|
+
const endpointToProvider = {
|
|
5872
|
+
["openAI"]: "openai",
|
|
5873
|
+
["azureOpenAI"]: "azure",
|
|
5874
|
+
["anthropic"]: "anthropic",
|
|
5875
|
+
["google"]: "google",
|
|
5876
|
+
["bedrock"]: "bedrock"
|
|
5877
|
+
};
|
|
5878
|
+
const knownEndpointToProvider = {
|
|
5879
|
+
["anyscale"]: "anyscale",
|
|
5880
|
+
["apipie"]: "apipie",
|
|
5881
|
+
["cohere"]: "cohere",
|
|
5882
|
+
["fireworks"]: "fireworks",
|
|
5883
|
+
["deepseek"]: "deepseek",
|
|
5884
|
+
["moonshot"]: "moonshot",
|
|
5885
|
+
["groq"]: "groq",
|
|
5886
|
+
["helicone"]: "helicone",
|
|
5887
|
+
["huggingface"]: "huggingface",
|
|
5888
|
+
["lemonade"]: "lemonade",
|
|
5889
|
+
["mistral"]: "mistral",
|
|
5890
|
+
["mlx"]: "mlx",
|
|
5891
|
+
["ollama"]: "ollama",
|
|
5892
|
+
["openrouter"]: "openrouter",
|
|
5893
|
+
["perplexity"]: "perplexity",
|
|
5894
|
+
["shuttleai"]: "shuttleai",
|
|
5895
|
+
["together.ai"]: "together",
|
|
5896
|
+
["unify"]: "unify",
|
|
5897
|
+
["vercel"]: "vercel",
|
|
5898
|
+
["xai"]: "xai"
|
|
5899
|
+
};
|
|
5900
|
+
const providerAliases = {
|
|
5901
|
+
chatgpt: "openai",
|
|
5902
|
+
gpt: "openai",
|
|
5903
|
+
azureopenai: "azure",
|
|
5904
|
+
claude: "anthropic",
|
|
5905
|
+
gemini: "google",
|
|
5906
|
+
gemma: "google",
|
|
5907
|
+
vertex: "google",
|
|
5908
|
+
vertexai: "google",
|
|
5909
|
+
palm: "google",
|
|
5910
|
+
awsbedrock: "bedrock",
|
|
5911
|
+
grok: "xai",
|
|
5912
|
+
kimi: "moonshot",
|
|
5913
|
+
moonshotai: "moonshot",
|
|
5914
|
+
amdlemonade: "lemonade",
|
|
5915
|
+
lemonadeserver: "lemonade",
|
|
5916
|
+
mistralai: "mistral",
|
|
5917
|
+
togetherai: "together"
|
|
5918
|
+
};
|
|
5919
|
+
const modelCatalogAliases = { ["vertexai"]: "google" };
|
|
5920
|
+
const normalize = (input) => input.toLowerCase().replace(/[\s._-]/g, "");
|
|
5921
|
+
const providerByNormalizedId = Object.values(ProviderId).reduce((acc, id) => {
|
|
5922
|
+
acc[normalize(id)] = id;
|
|
5923
|
+
return acc;
|
|
5924
|
+
}, {});
|
|
5925
|
+
/** Resolves free-form provider text to a canonical id, ignoring case and separators. */
|
|
5926
|
+
function resolveProviderId(input) {
|
|
5927
|
+
if (!input) return null;
|
|
5928
|
+
const key = normalize(input);
|
|
5929
|
+
return providerByNormalizedId[key] ?? providerAliases[key] ?? null;
|
|
5930
|
+
}
|
|
5931
|
+
/** Resolves a runtime provider to its model catalog, using a native alias only when needed. */
|
|
5932
|
+
function resolveModelCatalogKey(provider, catalogs) {
|
|
5933
|
+
const key = provider ?? "";
|
|
5934
|
+
return catalogs?.[key] != null ? key : modelCatalogAliases[key] ?? key;
|
|
5935
|
+
}
|
|
5936
|
+
//#endregion
|
|
5937
|
+
//#region src/svg.ts
|
|
5938
|
+
/**
|
|
5939
|
+
* DOMPurify policy for user-provided SVG icons, shared by the browser uploader and
|
|
5940
|
+
* the server trust boundary so a preview and the persisted icon cannot disagree.
|
|
5941
|
+
* `use` is re-added for self-contained `<defs>` references (targets restricted by
|
|
5942
|
+
* `restrictSvgReferences`); every SMIL element is forbidden so a stored icon
|
|
5943
|
+
* cannot animate forever wherever it renders.
|
|
5944
|
+
*/
|
|
5945
|
+
const SVG_SANITIZE_CONFIG = {
|
|
5946
|
+
USE_PROFILES: {
|
|
5947
|
+
svg: true,
|
|
5948
|
+
svgFilters: true
|
|
5949
|
+
},
|
|
5950
|
+
ADD_TAGS: ["use"],
|
|
5951
|
+
ADD_ATTR: ["fr"],
|
|
5952
|
+
FORBID_TAGS: [
|
|
5953
|
+
"script",
|
|
5954
|
+
"foreignObject",
|
|
5955
|
+
"style",
|
|
5956
|
+
"a",
|
|
5957
|
+
"image",
|
|
5958
|
+
"animate",
|
|
5959
|
+
"animateColor",
|
|
5960
|
+
"animateMotion",
|
|
5961
|
+
"animateTransform",
|
|
5962
|
+
"mpath",
|
|
5963
|
+
"set"
|
|
5964
|
+
],
|
|
5965
|
+
FORBID_ATTR: ["style"]
|
|
5966
|
+
};
|
|
5967
|
+
const URL_TOKEN_PREFIX = /url\(\s*['"]?\s*/gi;
|
|
5968
|
+
/**
|
|
5969
|
+
* True when every `url()` token targets a fragment. Backslashes reject the value
|
|
5970
|
+
* outright: CSS unescapes idents before tokenizing, so `u\72l(...)` is a `url()`.
|
|
5971
|
+
*/
|
|
5972
|
+
function referencesOnlyFragments(value) {
|
|
5973
|
+
if (value.includes("\\")) return false;
|
|
5974
|
+
if (!value.toLowerCase().includes("url(")) return true;
|
|
5975
|
+
URL_TOKEN_PREFIX.lastIndex = 0;
|
|
5976
|
+
while (URL_TOKEN_PREFIX.exec(value) !== null) if (value[URL_TOKEN_PREFIX.lastIndex] !== "#") return false;
|
|
5977
|
+
return true;
|
|
5978
|
+
}
|
|
5979
|
+
/** DOMPurify hook that drops every attribute referencing outside the document. */
|
|
5980
|
+
function restrictSvgReferences(node) {
|
|
5981
|
+
const names = [];
|
|
5982
|
+
for (let i = 0; i < node.attributes.length; i += 1) names.push(node.attributes[i].name);
|
|
5983
|
+
for (const name of names) {
|
|
5984
|
+
const value = node.getAttribute(name)?.trim();
|
|
5985
|
+
if (value == null) continue;
|
|
5986
|
+
if (name === "href" || name === "xlink:href") {
|
|
5987
|
+
if (!value.startsWith("#")) node.removeAttribute(name);
|
|
5988
|
+
continue;
|
|
5989
|
+
}
|
|
5990
|
+
if (!referencesOnlyFragments(value)) node.removeAttribute(name);
|
|
5991
|
+
}
|
|
5992
|
+
}
|
|
5993
|
+
/** SVG names the HTML parser lowercases and its adjustment table does not restore. */
|
|
5994
|
+
const UNADJUSTED_SVG_TAGS = [[/(<\/?)fedropshadow\b/gi, "$1feDropShadow"]];
|
|
5995
|
+
const SVG_ROOT_TAG = /<svg(\s[^>]*)?>/i;
|
|
5996
|
+
/**
|
|
5997
|
+
* Makes HTML-mode sanitizer output valid as a standalone `image/svg+xml`
|
|
5998
|
+
* document: restores camelCase element names the HTML parser lowercased and
|
|
5999
|
+
* declares the SVG namespace on the root, without which an XML parser puts the
|
|
6000
|
+
* root in no namespace and the icon renders blank.
|
|
6001
|
+
*/
|
|
6002
|
+
function finalizeSvgMarkup(markup) {
|
|
6003
|
+
let restored = markup;
|
|
6004
|
+
for (const [pattern, canonical] of UNADJUSTED_SVG_TAGS) restored = restored.replace(pattern, canonical);
|
|
6005
|
+
return restored.replace(SVG_ROOT_TAG, (tag, attributes) => attributes != null && /\sxmlns\s*=/i.test(attributes) ? tag : `<svg xmlns="http://www.w3.org/2000/svg"${attributes ?? ""}>`);
|
|
6006
|
+
}
|
|
6007
|
+
//#endregion
|
|
4904
6008
|
//#region src/actions.ts
|
|
4905
6009
|
function sha1(input) {
|
|
4906
6010
|
return crypto.default.createHash("sha1").update(input).digest("hex");
|
|
@@ -5384,11 +6488,13 @@ function getUserTimezone() {
|
|
|
5384
6488
|
}
|
|
5385
6489
|
}
|
|
5386
6490
|
function createPayload(submission) {
|
|
5387
|
-
const { isEdited, addedConvo, userMessage, isContinued, isTemporary, isRegenerate, conversation, editedContent, ephemeralAgent, endpointOption, manualSkills, clientRequestId, recoverySteerId, expectedPredecessorCreatedAt } = submission;
|
|
6491
|
+
const { isEdited, addedConvo, userMessage, isContinued, isTemporary, isRegenerate, compact, conversation, editedContent, ephemeralAgent, endpointOption, manualSkills, codeApprovalMode, codeEnvironmentMode, codeWorkspaces, clientRequestId, recoverySteerId, expectedPredecessorCreatedAt } = submission;
|
|
5388
6492
|
const { conversationId } = require_data_service.tConvoUpdateSchema.parse(conversation);
|
|
5389
6493
|
const { endpoint: _e, endpointType } = endpointOption;
|
|
5390
6494
|
const endpoint = _e;
|
|
5391
|
-
|
|
6495
|
+
/** Custom endpoint names are user-defined and may contain `/`, which would
|
|
6496
|
+
* otherwise split into extra path segments and miss the `/:endpoint` route. */
|
|
6497
|
+
let server = `${require_data_service.EndpointURLs["agents"]}/${encodeURIComponent(endpoint)}`;
|
|
5392
6498
|
if (require_data_service.isAssistantsEndpoint(endpoint)) server = require_data_service.EndpointURLs[endpointType ?? endpoint] + (isEdited ? "/modify" : "");
|
|
5393
6499
|
const payload = {
|
|
5394
6500
|
...userMessage,
|
|
@@ -5396,12 +6502,18 @@ function createPayload(submission) {
|
|
|
5396
6502
|
endpoint,
|
|
5397
6503
|
addedConvo,
|
|
5398
6504
|
isTemporary,
|
|
5399
|
-
|
|
6505
|
+
/** A compaction borrows the regenerate shape client-side only: the server
|
|
6506
|
+
* must see it as a compaction, never as a regenerated user turn. */
|
|
6507
|
+
isRegenerate: compact === true ? void 0 : isRegenerate,
|
|
6508
|
+
...compact === true && { compact: true },
|
|
5400
6509
|
editedContent,
|
|
5401
6510
|
conversationId,
|
|
5402
6511
|
isContinued: !!(isEdited && isContinued),
|
|
5403
6512
|
ephemeralAgent: require_data_service.isAssistantsEndpoint(endpoint) ? void 0 : ephemeralAgent,
|
|
5404
6513
|
manualSkills: require_data_service.isAssistantsEndpoint(endpoint) ? void 0 : manualSkills,
|
|
6514
|
+
codeApprovalMode: require_data_service.isAssistantsEndpoint(endpoint) ? void 0 : codeApprovalMode,
|
|
6515
|
+
codeEnvironmentMode: require_data_service.isAssistantsEndpoint(endpoint) ? void 0 : codeEnvironmentMode,
|
|
6516
|
+
codeWorkspaces: require_data_service.isAssistantsEndpoint(endpoint) ? void 0 : codeWorkspaces,
|
|
5405
6517
|
timezone: getUserTimezone(),
|
|
5406
6518
|
clientRequestId,
|
|
5407
6519
|
recoverySteerId,
|
|
@@ -5464,28 +6576,6 @@ const baseDefinitions = {
|
|
|
5464
6576
|
optionType: "conversation",
|
|
5465
6577
|
minTags: 0,
|
|
5466
6578
|
maxTags: 4
|
|
5467
|
-
},
|
|
5468
|
-
imageDetail: {
|
|
5469
|
-
key: "imageDetail",
|
|
5470
|
-
label: "com_endpoint_plug_image_detail",
|
|
5471
|
-
labelCode: true,
|
|
5472
|
-
description: "com_endpoint_openai_detail",
|
|
5473
|
-
descriptionCode: true,
|
|
5474
|
-
type: "enum",
|
|
5475
|
-
default: "auto",
|
|
5476
|
-
component: "slider",
|
|
5477
|
-
options: [
|
|
5478
|
-
"low",
|
|
5479
|
-
"auto",
|
|
5480
|
-
"high"
|
|
5481
|
-
],
|
|
5482
|
-
enumMappings: {
|
|
5483
|
-
["low"]: "com_ui_low",
|
|
5484
|
-
["auto"]: "com_ui_auto",
|
|
5485
|
-
["high"]: "com_ui_high"
|
|
5486
|
-
},
|
|
5487
|
-
optionType: "conversation",
|
|
5488
|
-
columnSpan: 2
|
|
5489
6579
|
}
|
|
5490
6580
|
};
|
|
5491
6581
|
const createDefinition = (base, overrides) => {
|
|
@@ -5543,6 +6633,30 @@ const librechat = {
|
|
|
5543
6633
|
placeholderCode: true,
|
|
5544
6634
|
optionType: "model"
|
|
5545
6635
|
},
|
|
6636
|
+
/** Controls how LibreChat encodes image content blocks, not a provider request
|
|
6637
|
+
* parameter — so it belongs to this group and is stripped from model options. */
|
|
6638
|
+
imageDetail: {
|
|
6639
|
+
key: "imageDetail",
|
|
6640
|
+
label: "com_endpoint_plug_image_detail",
|
|
6641
|
+
labelCode: true,
|
|
6642
|
+
description: "com_endpoint_openai_detail",
|
|
6643
|
+
descriptionCode: true,
|
|
6644
|
+
type: "enum",
|
|
6645
|
+
default: "auto",
|
|
6646
|
+
component: "slider",
|
|
6647
|
+
options: [
|
|
6648
|
+
"low",
|
|
6649
|
+
"auto",
|
|
6650
|
+
"high"
|
|
6651
|
+
],
|
|
6652
|
+
enumMappings: {
|
|
6653
|
+
["low"]: "com_ui_low",
|
|
6654
|
+
["auto"]: "com_ui_auto",
|
|
6655
|
+
["high"]: "com_ui_high"
|
|
6656
|
+
},
|
|
6657
|
+
optionType: "conversation",
|
|
6658
|
+
columnSpan: 2
|
|
6659
|
+
},
|
|
5546
6660
|
fileTokenLimit: {
|
|
5547
6661
|
key: "fileTokenLimit",
|
|
5548
6662
|
label: "com_ui_file_token_limit",
|
|
@@ -6121,6 +7235,14 @@ const meta = {
|
|
|
6121
7235
|
})
|
|
6122
7236
|
};
|
|
6123
7237
|
const google = {
|
|
7238
|
+
/** Bounds the hand-rolled editor enforced through InputNumber, and they stay
|
|
7239
|
+
* scoped to this endpoint: the shared definition is rendered by every other
|
|
7240
|
+
* endpoint, whose own context windows may fall outside them. */
|
|
7241
|
+
maxContextTokens: createDefinition(librechat.maxContextTokens, { range: {
|
|
7242
|
+
min: require_data_service.googleSettings.maxContextTokens.min,
|
|
7243
|
+
max: require_data_service.googleSettings.maxContextTokens.max,
|
|
7244
|
+
step: require_data_service.googleSettings.maxContextTokens.step
|
|
7245
|
+
} }),
|
|
6124
7246
|
temperature: createDefinition(baseDefinitions.temperature, {
|
|
6125
7247
|
default: require_data_service.googleSettings.temperature.default,
|
|
6126
7248
|
range: {
|
|
@@ -6260,7 +7382,7 @@ const google = {
|
|
|
6260
7382
|
const googleConfig = [
|
|
6261
7383
|
librechat.modelLabel,
|
|
6262
7384
|
librechat.promptPrefix,
|
|
6263
|
-
|
|
7385
|
+
google.maxContextTokens,
|
|
6264
7386
|
google.maxOutputTokens,
|
|
6265
7387
|
google.temperature,
|
|
6266
7388
|
google.topP,
|
|
@@ -6279,7 +7401,7 @@ const googleCol1 = [
|
|
|
6279
7401
|
librechat.promptPrefix
|
|
6280
7402
|
];
|
|
6281
7403
|
const googleCol2 = [
|
|
6282
|
-
|
|
7404
|
+
google.maxContextTokens,
|
|
6283
7405
|
google.maxOutputTokens,
|
|
6284
7406
|
google.temperature,
|
|
6285
7407
|
google.topP,
|
|
@@ -6303,7 +7425,7 @@ const openAI = [
|
|
|
6303
7425
|
openAIParams.presence_penalty,
|
|
6304
7426
|
baseDefinitions.stop,
|
|
6305
7427
|
librechat.resendFiles,
|
|
6306
|
-
|
|
7428
|
+
librechat.imageDetail,
|
|
6307
7429
|
openAIParams.web_search,
|
|
6308
7430
|
openAIParams.reasoning_effort,
|
|
6309
7431
|
openAIParams.useResponsesApi,
|
|
@@ -6333,7 +7455,7 @@ const openAICol2 = [
|
|
|
6333
7455
|
openAIParams.presence_penalty,
|
|
6334
7456
|
baseDefinitions.stop,
|
|
6335
7457
|
librechat.resendFiles,
|
|
6336
|
-
|
|
7458
|
+
librechat.imageDetail,
|
|
6337
7459
|
openAIParams.reasoning_effort,
|
|
6338
7460
|
openAIParams.reasoning_summary,
|
|
6339
7461
|
openAIParams.reasoning_mode,
|
|
@@ -6574,6 +7696,38 @@ const paramSettings = {
|
|
|
6574
7696
|
[`bedrock-zai`]: bedrockZAI,
|
|
6575
7697
|
["google"]: googleConfig
|
|
6576
7698
|
};
|
|
7699
|
+
/**
|
|
7700
|
+
* Maps effective backend param names for OpenAI-compatible/Azure endpoints (as deleted from
|
|
7701
|
+
* `llmConfig` via `dropParams`, e.g. `maxTokens`) to their corresponding UI/conversation keys
|
|
7702
|
+
* (e.g. `max_tokens`). Native providers (anthropic, google, bedrock, ...) already render these
|
|
7703
|
+
* same camelCase names as their UI key (e.g. `topP`), so this alias must only be applied to
|
|
7704
|
+
* OpenAI-compatible parameter sets — see `resolveDropParamsUIKeys`.
|
|
7705
|
+
*/
|
|
7706
|
+
const dropParamsBackendToUIKey = {
|
|
7707
|
+
maxTokens: "max_tokens",
|
|
7708
|
+
topP: "top_p",
|
|
7709
|
+
frequencyPenalty: "frequency_penalty",
|
|
7710
|
+
presencePenalty: "presence_penalty"
|
|
7711
|
+
};
|
|
7712
|
+
/** Endpoint keys whose parameter settings render the OpenAI-compatible (snake_case) UI keys. */
|
|
7713
|
+
const openAILikeParamEndpointKeys = new Set([
|
|
7714
|
+
"openAI",
|
|
7715
|
+
"azureOpenAI",
|
|
7716
|
+
"custom",
|
|
7717
|
+
"openrouter"
|
|
7718
|
+
]);
|
|
7719
|
+
/**
|
|
7720
|
+
* Normalizes an admin-configured `dropParams` list into the UI/conversation keys used to hide
|
|
7721
|
+
* the matching controls in the settings panels. `endpointKey` should be the same key used to
|
|
7722
|
+
* resolve the panel's parameter settings (e.g. `overriddenEndpointKey`); the backend-name alias
|
|
7723
|
+
* is only applied for OpenAI-compatible endpoints, since native providers (anthropic, google,
|
|
7724
|
+
* bedrock, ...) already use these backend names as their UI key.
|
|
7725
|
+
*/
|
|
7726
|
+
function resolveDropParamsUIKeys(dropParams, endpointKey) {
|
|
7727
|
+
if (!dropParams || dropParams.length === 0) return /* @__PURE__ */ new Set();
|
|
7728
|
+
if (!openAILikeParamEndpointKeys.has(endpointKey)) return new Set(dropParams);
|
|
7729
|
+
return new Set(dropParams.map((param) => dropParamsBackendToUIKey[param] ?? param));
|
|
7730
|
+
}
|
|
6577
7731
|
const openAIColumns = {
|
|
6578
7732
|
col1: openAICol1,
|
|
6579
7733
|
col2: openAICol2
|
|
@@ -6640,13 +7794,71 @@ const agentParamSettings = Object.entries(presetSettings).reduce((acc, [key, val
|
|
|
6640
7794
|
* Resolves model-aware defaults for a settings configuration before rendering.
|
|
6641
7795
|
* Google's `maxOutputTokens` default depends on the selected Gemini model so that
|
|
6642
7796
|
* current models (2.5 and 3+) surface their 64K output limit instead of the legacy 8K value.
|
|
7797
|
+
* Anthropic prompt-cache controls are only surfaced for models that support them.
|
|
6643
7798
|
*/
|
|
6644
7799
|
function applyModelAwareDefaults(settings, endpoint, model) {
|
|
6645
|
-
if (
|
|
6646
|
-
|
|
6647
|
-
|
|
6648
|
-
|
|
6649
|
-
|
|
7800
|
+
if (!model) return settings;
|
|
7801
|
+
const modelAwareSettings = endpoint === "google" ? settings.map((setting) => {
|
|
7802
|
+
if (setting.key === "maxOutputTokens") return {
|
|
7803
|
+
...setting,
|
|
7804
|
+
default: require_data_service.googleSettings.maxOutputTokens.reset(model)
|
|
7805
|
+
};
|
|
7806
|
+
/** The shared thinking budget range is model-agnostic, so it caps Pro below
|
|
7807
|
+
* its real ceiling and accepts Flash values the provider rejects. The
|
|
7808
|
+
* maximum and the positive floor move together. `range.min` stays -1 so
|
|
7809
|
+
* the "decide automatically" sentinel remains typeable. */
|
|
7810
|
+
if (setting.key === "thinkingBudget" && setting.range != null) {
|
|
7811
|
+
const bounds = require_data_service.getGoogleThinkingBudgetBounds(model);
|
|
7812
|
+
if (bounds != null) return {
|
|
7813
|
+
...setting,
|
|
7814
|
+
range: {
|
|
7815
|
+
...setting.range,
|
|
7816
|
+
max: bounds.max,
|
|
7817
|
+
positiveMin: bounds.min,
|
|
7818
|
+
modelSpecific: true
|
|
7819
|
+
}
|
|
7820
|
+
};
|
|
7821
|
+
}
|
|
7822
|
+
return setting;
|
|
7823
|
+
}) : settings;
|
|
7824
|
+
if (endpoint !== "anthropic" || supportsPromptCache(model)) return modelAwareSettings;
|
|
7825
|
+
return modelAwareSettings.filter((setting) => setting.key !== "promptCache" && setting.key !== "promptCacheTtl");
|
|
7826
|
+
}
|
|
7827
|
+
//#endregion
|
|
7828
|
+
//#region src/agentToolOptions.ts
|
|
7829
|
+
const actionDomainSeparatorRegex = /* @__PURE__ */ new RegExp("---", "g");
|
|
7830
|
+
/**
|
|
7831
|
+
* Collapses the encoded-domain suffix of an action tool name to the shape used
|
|
7832
|
+
* by runtime tool definitions. The operation id is deliberately preserved.
|
|
7833
|
+
*/
|
|
7834
|
+
function normalizeActionToolName(toolName) {
|
|
7835
|
+
if (!require_data_service.isActionTool(toolName)) return toolName;
|
|
7836
|
+
const prefixEnd = toolName.lastIndexOf(require_data_service.actionDelimiter) + require_data_service.actionDelimiter.length;
|
|
7837
|
+
const encodedDomain = toolName.slice(prefixEnd);
|
|
7838
|
+
return toolName.slice(0, prefixEnd) + encodedDomain.replace(actionDomainSeparatorRegex, "_");
|
|
7839
|
+
}
|
|
7840
|
+
/**
|
|
7841
|
+
* Removes Code Interpreter as an allowed caller without mutating the input.
|
|
7842
|
+
* Tool entries and unrelated options are preserved; an empty entry is removed.
|
|
7843
|
+
*/
|
|
7844
|
+
function removeCodeExecutionCaller(toolOptions) {
|
|
7845
|
+
if (toolOptions == null) return toolOptions;
|
|
7846
|
+
const normalized = {};
|
|
7847
|
+
for (const [toolName, options] of Object.entries(toolOptions)) {
|
|
7848
|
+
const callers = options.allowed_callers;
|
|
7849
|
+
if (callers?.includes("code_execution") !== true) {
|
|
7850
|
+
normalized[toolName] = options;
|
|
7851
|
+
continue;
|
|
7852
|
+
}
|
|
7853
|
+
const allowedCallers = callers.filter((caller) => caller !== "code_execution");
|
|
7854
|
+
const { allowed_callers: _removed, ...remainingOptions } = options;
|
|
7855
|
+
const nextOptions = allowedCallers.length > 0 ? {
|
|
7856
|
+
...remainingOptions,
|
|
7857
|
+
allowed_callers: allowedCallers
|
|
7858
|
+
} : remainingOptions;
|
|
7859
|
+
if (Object.keys(nextOptions).length > 0) normalized[toolName] = nextOptions;
|
|
7860
|
+
}
|
|
7861
|
+
return normalized;
|
|
6650
7862
|
}
|
|
6651
7863
|
//#endregion
|
|
6652
7864
|
//#region src/codeEnvRef.ts
|
|
@@ -6673,7 +7885,56 @@ const CODE_ENV_KINDS = [
|
|
|
6673
7885
|
"agent",
|
|
6674
7886
|
"user"
|
|
6675
7887
|
];
|
|
7888
|
+
function getCodeEnvRefForProfile(refs, routeKey) {
|
|
7889
|
+
const profileRef = refs?.codeEnvRefs?.[routeKey];
|
|
7890
|
+
if (profileRef) return profileRef;
|
|
7891
|
+
const legacyRef = refs?.codeEnvRef;
|
|
7892
|
+
if (legacyRef && (legacyRef.executionRouteKey ?? legacyRef.executionProfile ?? "default") === routeKey) return legacyRef;
|
|
7893
|
+
}
|
|
7894
|
+
/** Adds one profile pointer without discarding the other profile's storage object. */
|
|
7895
|
+
function mergeCodeEnvRef(refs, ref) {
|
|
7896
|
+
const codeEnvRefs = { ...refs?.codeEnvRefs };
|
|
7897
|
+
const legacyRef = refs?.codeEnvRef;
|
|
7898
|
+
if (legacyRef) codeEnvRefs[legacyRef.executionRouteKey ?? legacyRef.executionProfile ?? "default"] ??= legacyRef;
|
|
7899
|
+
const routeKey = ref.executionRouteKey ?? ref.executionProfile ?? "default";
|
|
7900
|
+
codeEnvRefs[routeKey] = ref;
|
|
7901
|
+
return {
|
|
7902
|
+
codeEnvRef: codeEnvRefs.default ?? codeEnvRefs.stateful ?? ref,
|
|
7903
|
+
codeEnvRefs
|
|
7904
|
+
};
|
|
7905
|
+
}
|
|
7906
|
+
/** Enumerates every deployment-local pointer, including legacy single-pointer records. */
|
|
7907
|
+
function getCodeEnvRefs(refs) {
|
|
7908
|
+
const merged = { ...refs?.codeEnvRefs };
|
|
7909
|
+
const legacyRef = refs?.codeEnvRef;
|
|
7910
|
+
if (legacyRef) merged[legacyRef.executionRouteKey ?? legacyRef.executionProfile ?? "default"] ??= legacyRef;
|
|
7911
|
+
return Object.entries(merged).flatMap(([routeKey, ref]) => ref ? [[routeKey, ref]] : []);
|
|
7912
|
+
}
|
|
7913
|
+
//#endregion
|
|
7914
|
+
//#region src/code/worker.ts
|
|
7915
|
+
function isCodeWorkerShell(value) {
|
|
7916
|
+
return value === "posix" || value === "powershell";
|
|
7917
|
+
}
|
|
7918
|
+
function quotePosix(value) {
|
|
7919
|
+
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
7920
|
+
}
|
|
7921
|
+
function quotePowerShell(value) {
|
|
7922
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
7923
|
+
}
|
|
7924
|
+
function createCodeWorkerSetupCommand(pairing, shell, options = {}) {
|
|
7925
|
+
const quote = shell === "powershell" ? quotePowerShell : quotePosix;
|
|
7926
|
+
const pair = `librechat-code pair ${quote(pairing.endpoint)} ${quote(pairing.code)} --worker-id ${quote(pairing.workerId)}`;
|
|
7927
|
+
const run = ["librechat-code run", ...[
|
|
7928
|
+
options.defaultWorkspace === false ? null : "--default-workspace",
|
|
7929
|
+
options.allowWorkspaceWrites === true ? "--allow-workspace-writes" : null,
|
|
7930
|
+
options.allowWorkspaceCommands === true ? "--allow-workspace-commands" : null
|
|
7931
|
+
].filter((value) => value != null)].join(" ");
|
|
7932
|
+
if (shell === "powershell") return `${pair}\n$env:LIBRECHAT_CODE_WORKER_ID = ${quote(pairing.workerId)}\n${run}`;
|
|
7933
|
+
return `${pair}\nLIBRECHAT_CODE_WORKER_ID=${quote(pairing.workerId)} ${run}`;
|
|
7934
|
+
}
|
|
6676
7935
|
//#endregion
|
|
7936
|
+
exports.ACTION_METADATA_FILTER_FIELDS = require_data_service.ACTION_METADATA_FILTER_FIELDS;
|
|
7937
|
+
exports.AGENT_INSTRUCTION_FILTER_FIELDS = require_data_service.AGENT_INSTRUCTION_FILTER_FIELDS;
|
|
6677
7938
|
exports.AUTH_USER_DOC_BY_ID_PREFIX = require_data_service.AUTH_USER_DOC_BY_ID_PREFIX;
|
|
6678
7939
|
exports.AccessRoleIds = require_data_service.AccessRoleIds;
|
|
6679
7940
|
exports.ActionRequest = ActionRequest;
|
|
@@ -6694,30 +7955,51 @@ exports.BEDROCK_FINE_GRAINED_TOOL_STREAMING_BETA = BEDROCK_FINE_GRAINED_TOOL_STR
|
|
|
6694
7955
|
exports.BEDROCK_OUTPUT_128K_BETA = BEDROCK_OUTPUT_128K_BETA;
|
|
6695
7956
|
exports.BedrockProviders = require_data_service.BedrockProviders;
|
|
6696
7957
|
exports.BedrockReasoningConfig = require_data_service.BedrockReasoningConfig;
|
|
7958
|
+
exports.CODE_APPROVAL_MODES = require_data_service.CODE_APPROVAL_MODES;
|
|
7959
|
+
exports.CODE_ENVIRONMENT_COMMAND_TIMEOUT_DEFAULT_MS = require_data_service.CODE_ENVIRONMENT_COMMAND_TIMEOUT_DEFAULT_MS;
|
|
7960
|
+
exports.CODE_ENVIRONMENT_COMMAND_TIMEOUT_HARD_MAX_MS = require_data_service.CODE_ENVIRONMENT_COMMAND_TIMEOUT_HARD_MAX_MS;
|
|
7961
|
+
exports.CODE_ENVIRONMENT_DECISION_VERSION = require_data_service.CODE_ENVIRONMENT_DECISION_VERSION;
|
|
7962
|
+
exports.CODE_ENVIRONMENT_MODES = require_data_service.CODE_ENVIRONMENT_MODES;
|
|
6697
7963
|
exports.CODE_ENV_KINDS = CODE_ENV_KINDS;
|
|
7964
|
+
exports.CODE_WORKSPACE_ID_PATTERN = require_data_service.CODE_WORKSPACE_ID_PATTERN;
|
|
7965
|
+
exports.CODE_WORKSPACE_MAX_COUNT = require_data_service.CODE_WORKSPACE_MAX_COUNT;
|
|
7966
|
+
exports.CODE_WORKSPACE_OPERATIONS = require_data_service.CODE_WORKSPACE_OPERATIONS;
|
|
7967
|
+
exports.CODE_WORKSPACE_SELECTION_ERROR_REASONS = require_data_service.CODE_WORKSPACE_SELECTION_ERROR_REASONS;
|
|
7968
|
+
exports.CONVERSATION_STARTER_FILTER_FIELDS = require_data_service.CONVERSATION_STARTER_FILTER_FIELDS;
|
|
7969
|
+
exports.CONVERSATION_TITLE_FILTER_FIELDS = require_data_service.CONVERSATION_TITLE_FILTER_FIELDS;
|
|
6698
7970
|
exports.CacheKeys = require_data_service.CacheKeys;
|
|
6699
7971
|
exports.Capabilities = require_data_service.Capabilities;
|
|
7972
|
+
exports.CodeApprovalModeError = require_data_service.CodeApprovalModeError;
|
|
6700
7973
|
exports.CohereConstants = require_data_service.CohereConstants;
|
|
6701
7974
|
exports.ComponentTypes = require_data_service.ComponentTypes;
|
|
6702
7975
|
exports.Constants = require_data_service.Constants;
|
|
6703
7976
|
exports.ContentTypes = ContentTypes;
|
|
6704
7977
|
exports.DATE_RANGE = DATE_RANGE;
|
|
6705
7978
|
exports.DEFAULT_MEMORY_MAX_INPUT_TOKENS = require_data_service.DEFAULT_MEMORY_MAX_INPUT_TOKENS;
|
|
7979
|
+
exports.DefaultLLMDeliveryPath = require_data_service.DefaultLLMDeliveryPath;
|
|
6706
7980
|
exports.DynamicQueryKeys = require_data_service.DynamicQueryKeys;
|
|
6707
7981
|
exports.EImageOutputType = require_data_service.EImageOutputType;
|
|
6708
7982
|
exports.EModelEndpoint = require_data_service.EModelEndpoint;
|
|
6709
7983
|
exports.EToolResources = require_data_service.EToolResources;
|
|
6710
7984
|
exports.EndpointURLs = require_data_service.EndpointURLs;
|
|
6711
7985
|
exports.ErrorTypes = require_data_service.ErrorTypes;
|
|
7986
|
+
exports.FEEDBACK_FILTER_FIELDS = require_data_service.FEEDBACK_FILTER_FIELDS;
|
|
6712
7987
|
exports.FEEDBACK_RATINGS = require_data_service.FEEDBACK_RATINGS;
|
|
6713
7988
|
exports.FEEDBACK_REASON_KEYS = require_data_service.FEEDBACK_REASON_KEYS;
|
|
6714
7989
|
exports.FEEDBACK_TAGS = require_data_service.FEEDBACK_TAGS;
|
|
7990
|
+
exports.FILE_FILTER_FIELDS = require_data_service.FILE_FILTER_FIELDS;
|
|
7991
|
+
exports.FILTER_PII_STARTER_PATTERNS = require_data_service.FILTER_PII_STARTER_PATTERNS;
|
|
6715
7992
|
exports.FetchTokenConfig = require_data_service.FetchTokenConfig;
|
|
6716
7993
|
exports.FileContext = require_data_service.FileContext;
|
|
6717
7994
|
exports.FilePurpose = require_data_service.FilePurpose;
|
|
6718
7995
|
exports.FileSources = require_data_service.FileSources;
|
|
6719
7996
|
exports.ForkOptions = require_data_service.ForkOptions;
|
|
6720
7997
|
exports.FunctionSignature = FunctionSignature;
|
|
7998
|
+
exports.HITL_MESSAGE_FILTER_FIELDS = require_data_service.HITL_MESSAGE_FILTER_FIELDS;
|
|
7999
|
+
exports.INSIGHTS_AGENT_ID_MAX_LENGTH = INSIGHTS_AGENT_ID_MAX_LENGTH;
|
|
8000
|
+
exports.INSIGHTS_MAX_RANGE_DAYS = INSIGHTS_MAX_RANGE_DAYS;
|
|
8001
|
+
exports.INSIGHTS_SEARCH_MAX_LENGTH = INSIGHTS_SEARCH_MAX_LENGTH;
|
|
8002
|
+
exports.INSIGHTS_SEARCH_MIN_LENGTH = INSIGHTS_SEARCH_MIN_LENGTH;
|
|
6721
8003
|
exports.INTERFACE_PERMISSION_FIELDS = INTERFACE_PERMISSION_FIELDS;
|
|
6722
8004
|
exports.ImageDetail = require_data_service.ImageDetail;
|
|
6723
8005
|
exports.ImageDetailCost = require_data_service.ImageDetailCost;
|
|
@@ -6725,15 +8007,36 @@ exports.ImageVisionTool = require_data_service.ImageVisionTool;
|
|
|
6725
8007
|
exports.InfiniteCollections = require_data_service.InfiniteCollections;
|
|
6726
8008
|
exports.InvocationMode = InvocationMode;
|
|
6727
8009
|
exports.KnownEndpoints = require_data_service.KnownEndpoints;
|
|
8010
|
+
exports.LANGFUSE_TRACE_CONVERSATION_METADATA_FIELDS = require_data_service.LANGFUSE_TRACE_CONVERSATION_METADATA_FIELDS;
|
|
8011
|
+
exports.LANGFUSE_TRACE_USER_ID_FIELDS = require_data_service.LANGFUSE_TRACE_USER_ID_FIELDS;
|
|
8012
|
+
exports.LANGFUSE_TRACE_USER_METADATA_FIELDS = require_data_service.LANGFUSE_TRACE_USER_METADATA_FIELDS;
|
|
6728
8013
|
exports.LocalStorageKeys = require_data_service.LocalStorageKeys;
|
|
8014
|
+
exports.MAX_CHAT_PROJECT_DESCRIPTION_LENGTH = require_data_service.MAX_CHAT_PROJECT_DESCRIPTION_LENGTH;
|
|
8015
|
+
exports.MAX_CHAT_PROJECT_NAME_LENGTH = require_data_service.MAX_CHAT_PROJECT_NAME_LENGTH;
|
|
8016
|
+
exports.MAX_GRAPH_SUBAGENT_MEMBERS = require_data_service.MAX_GRAPH_SUBAGENT_MEMBERS;
|
|
8017
|
+
exports.MAX_MCP_ICON_PATH_LENGTH = require_data_service.MAX_MCP_ICON_PATH_LENGTH;
|
|
8018
|
+
exports.MAX_PII_CUSTOM_PATTERNS_TOTAL = require_data_service.MAX_PII_CUSTOM_PATTERNS_TOTAL;
|
|
8019
|
+
exports.MAX_PII_CUSTOM_REGEX_CHARACTERS = require_data_service.MAX_PII_CUSTOM_REGEX_CHARACTERS;
|
|
8020
|
+
exports.MAX_PII_CUSTOM_REGEX_INSTRUCTIONS = require_data_service.MAX_PII_CUSTOM_REGEX_INSTRUCTIONS;
|
|
8021
|
+
exports.MAX_PII_PATTERNS_PER_SOURCE = require_data_service.MAX_PII_PATTERNS_PER_SOURCE;
|
|
8022
|
+
exports.MAX_PII_PATTERN_ID_LENGTH = require_data_service.MAX_PII_PATTERN_ID_LENGTH;
|
|
8023
|
+
exports.MAX_PII_PATTERN_LABEL_LENGTH = require_data_service.MAX_PII_PATTERN_LABEL_LENGTH;
|
|
8024
|
+
exports.MAX_PII_PATTERN_LENGTH = require_data_service.MAX_PII_PATTERN_LENGTH;
|
|
6729
8025
|
exports.MAX_SUBAGENTS = require_data_service.MAX_SUBAGENTS;
|
|
8026
|
+
exports.MAX_SUBAGENTS_CEILING = require_data_service.MAX_SUBAGENTS_CEILING;
|
|
6730
8027
|
exports.MAX_SUBAGENT_DEPTH = require_data_service.MAX_SUBAGENT_DEPTH;
|
|
6731
8028
|
exports.MAX_SUBAGENT_GRAPH_NODES = require_data_service.MAX_SUBAGENT_GRAPH_NODES;
|
|
6732
8029
|
exports.MAX_SUBAGENT_RUN_CONFIGS = require_data_service.MAX_SUBAGENT_RUN_CONFIGS;
|
|
6733
8030
|
exports.MCPOptionsSchema = require_data_service.MCPOptionsSchema;
|
|
6734
8031
|
exports.MCPServerUserInputSchema = require_data_service.MCPServerUserInputSchema;
|
|
6735
8032
|
exports.MCPServersSchema = require_data_service.MCPServersSchema;
|
|
8033
|
+
exports.MCP_SERVER_TITLE_ERROR = require_data_service.MCP_SERVER_TITLE_ERROR;
|
|
8034
|
+
exports.MCP_SERVER_TITLE_PATTERN = require_data_service.MCP_SERVER_TITLE_PATTERN;
|
|
6736
8035
|
exports.MCP_USER_INPUT_FIELDS = require_data_service.MCP_USER_INPUT_FIELDS;
|
|
8036
|
+
exports.MEMORY_FILTER_FIELDS = require_data_service.MEMORY_FILTER_FIELDS;
|
|
8037
|
+
exports.MESSAGE_FILTER_FIELDS = require_data_service.MESSAGE_FILTER_FIELDS;
|
|
8038
|
+
exports.MIN_REPORTABLE_RUN_STEP_DURATION_MS = MIN_REPORTABLE_RUN_STEP_DURATION_MS;
|
|
8039
|
+
exports.MODEL_PARAMETER_FILTER_FIELDS = require_data_service.MODEL_PARAMETER_FILTER_FIELDS;
|
|
6737
8040
|
exports.MYTHOS_CLASS_FAMILIES = require_data_service.MYTHOS_CLASS_FAMILIES;
|
|
6738
8041
|
exports.MemoryScope = require_data_service.MemoryScope;
|
|
6739
8042
|
exports.MessageContentTypes = require_data_service.MessageContentTypes;
|
|
@@ -6742,17 +8045,21 @@ exports.OCRStrategy = require_data_service.OCRStrategy;
|
|
|
6742
8045
|
exports.OptionTypes = require_data_service.OptionTypes;
|
|
6743
8046
|
exports.PERMISSION_SUB_KEYS = PERMISSION_SUB_KEYS;
|
|
6744
8047
|
exports.PERMISSION_TYPE_INTERFACE_FIELDS = PERMISSION_TYPE_INTERFACE_FIELDS;
|
|
8048
|
+
exports.PROMPT_FILTER_FIELDS = require_data_service.PROMPT_FILTER_FIELDS;
|
|
6745
8049
|
exports.PermissionBits = require_data_service.PermissionBits;
|
|
6746
8050
|
exports.PermissionTypes = PermissionTypes;
|
|
6747
8051
|
exports.Permissions = Permissions;
|
|
6748
8052
|
exports.PrincipalModel = require_data_service.PrincipalModel;
|
|
6749
8053
|
exports.PrincipalType = require_data_service.PrincipalType;
|
|
8054
|
+
exports.ProviderId = ProviderId;
|
|
6750
8055
|
exports.Providers = require_data_service.Providers;
|
|
6751
8056
|
exports.QueryKeys = require_data_service.QueryKeys;
|
|
6752
8057
|
exports.REFILL_INTERVAL_UNITS = require_data_service.REFILL_INTERVAL_UNITS;
|
|
8058
|
+
exports.RUNTIME_CONFIG_INTERFACE_FIELDS = RUNTIME_CONFIG_INTERFACE_FIELDS;
|
|
6753
8059
|
exports.RateLimitPrefix = require_data_service.RateLimitPrefix;
|
|
6754
8060
|
exports.ReasoningContext = require_data_service.ReasoningContext;
|
|
6755
8061
|
exports.ReasoningEffort = require_data_service.ReasoningEffort;
|
|
8062
|
+
exports.ReasoningLabelEvents = ReasoningLabelEvents;
|
|
6756
8063
|
exports.ReasoningMode = require_data_service.ReasoningMode;
|
|
6757
8064
|
exports.ReasoningParameterFormat = require_data_service.ReasoningParameterFormat;
|
|
6758
8065
|
exports.ReasoningResponseKey = require_data_service.ReasoningResponseKey;
|
|
@@ -6761,11 +8068,13 @@ exports.RerankerTypes = require_data_service.RerankerTypes;
|
|
|
6761
8068
|
exports.ResourceType = require_data_service.ResourceType;
|
|
6762
8069
|
exports.RetentionMode = require_data_service.RetentionMode;
|
|
6763
8070
|
exports.RunStatus = require_data_service.RunStatus;
|
|
8071
|
+
exports.SCHEDULE_CRON_MAX_LENGTH = SCHEDULE_CRON_MAX_LENGTH;
|
|
6764
8072
|
exports.SEPARATORS = SEPARATORS;
|
|
6765
8073
|
exports.SKILL_BODY_MAX_LENGTH = SKILL_BODY_MAX_LENGTH;
|
|
6766
8074
|
exports.SKILL_DESCRIPTION_MAX_LENGTH = SKILL_DESCRIPTION_MAX_LENGTH;
|
|
6767
8075
|
exports.SKILL_DESCRIPTION_SHORT_THRESHOLD = SKILL_DESCRIPTION_SHORT_THRESHOLD;
|
|
6768
8076
|
exports.SKILL_DISPLAY_TITLE_MAX_LENGTH = SKILL_DISPLAY_TITLE_MAX_LENGTH;
|
|
8077
|
+
exports.SKILL_FILTER_FIELDS = require_data_service.SKILL_FILTER_FIELDS;
|
|
6769
8078
|
exports.SKILL_NAME_MAX_LENGTH = SKILL_NAME_MAX_LENGTH;
|
|
6770
8079
|
exports.SKILL_NAME_PATTERN = SKILL_NAME_PATTERN;
|
|
6771
8080
|
exports.SKILL_SYNC_DEFAULT_DISCOVERY_DEPTH = require_data_service.SKILL_SYNC_DEFAULT_DISCOVERY_DEPTH;
|
|
@@ -6773,7 +8082,11 @@ exports.SKILL_SYNC_MAX_DISCOVERY_DEPTH = require_data_service.SKILL_SYNC_MAX_DIS
|
|
|
6773
8082
|
exports.SKILL_SYNC_MAX_INTERVAL_MINUTES = require_data_service.SKILL_SYNC_MAX_INTERVAL_MINUTES;
|
|
6774
8083
|
exports.SKILL_SYNC_MIN_INTERVAL_MINUTES = require_data_service.SKILL_SYNC_MIN_INTERVAL_MINUTES;
|
|
6775
8084
|
exports.SSEOptionsSchema = require_data_service.SSEOptionsSchema;
|
|
8085
|
+
exports.STATEFUL_CODE_ENVIRONMENTS = require_data_service.STATEFUL_CODE_ENVIRONMENTS;
|
|
8086
|
+
exports.STORED_MESSAGE_FILTER_FIELDS = require_data_service.STORED_MESSAGE_FILTER_FIELDS;
|
|
6776
8087
|
exports.STTProviders = require_data_service.STTProviders;
|
|
8088
|
+
exports.SVG_SANITIZE_CONFIG = SVG_SANITIZE_CONFIG;
|
|
8089
|
+
exports.SYSTEM_LLM_DELIVERY_DEFAULTS = SYSTEM_LLM_DELIVERY_DEFAULTS;
|
|
6777
8090
|
exports.SafeSearchTypes = require_data_service.SafeSearchTypes;
|
|
6778
8091
|
exports.ScraperProviders = require_data_service.ScraperProviders;
|
|
6779
8092
|
exports.SearchCategories = require_data_service.SearchCategories;
|
|
@@ -6781,6 +8094,7 @@ exports.SearchProviders = require_data_service.SearchProviders;
|
|
|
6781
8094
|
exports.SettingTypes = require_data_service.SettingTypes;
|
|
6782
8095
|
exports.SettingsTabValues = require_data_service.SettingsTabValues;
|
|
6783
8096
|
exports.SettingsViews = require_data_service.SettingsViews;
|
|
8097
|
+
exports.SkillsScope = require_data_service.SkillsScope;
|
|
6784
8098
|
exports.StdioOptionsSchema = require_data_service.StdioOptionsSchema;
|
|
6785
8099
|
exports.SteerEvents = SteerEvents;
|
|
6786
8100
|
exports.StepEvents = StepEvents;
|
|
@@ -6789,6 +8103,10 @@ exports.StepTypes = StepTypes;
|
|
|
6789
8103
|
exports.StreamableHTTPOptionsSchema = require_data_service.StreamableHTTPOptionsSchema;
|
|
6790
8104
|
exports.SystemCategories = require_data_service.SystemCategories;
|
|
6791
8105
|
exports.SystemRoles = SystemRoles;
|
|
8106
|
+
exports.TOOL_ARGUMENT_FILTER_FIELDS = require_data_service.TOOL_ARGUMENT_FILTER_FIELDS;
|
|
8107
|
+
exports.TRACE_CURSOR_MAX_LENGTH = TRACE_CURSOR_MAX_LENGTH;
|
|
8108
|
+
exports.TRACE_RECORD_ID_MAX_LENGTH = TRACE_RECORD_ID_MAX_LENGTH;
|
|
8109
|
+
exports.TRACE_SOURCE_ID_MAX_LENGTH = TRACE_SOURCE_ID_MAX_LENGTH;
|
|
6792
8110
|
exports.TTSProviders = require_data_service.TTSProviders;
|
|
6793
8111
|
exports.ThinkingDisplay = require_data_service.ThinkingDisplay;
|
|
6794
8112
|
exports.ThinkingLevel = require_data_service.ThinkingLevel;
|
|
@@ -6806,8 +8124,16 @@ exports.accessRoleToPermBits = require_data_service.accessRoleToPermBits;
|
|
|
6806
8124
|
exports.accordian = accordian;
|
|
6807
8125
|
exports.actionDelimiter = require_data_service.actionDelimiter;
|
|
6808
8126
|
exports.actionDomainSeparator = require_data_service.actionDomainSeparator;
|
|
8127
|
+
exports.actionMetadataFilterFieldSchema = require_data_service.actionMetadataFilterFieldSchema;
|
|
8128
|
+
exports.agentGitIdentitySchema = require_data_service.agentGitIdentitySchema;
|
|
8129
|
+
exports.agentInstructionFilterFieldSchema = require_data_service.agentInstructionFilterFieldSchema;
|
|
6809
8130
|
exports.agentParamSettings = agentParamSettings;
|
|
6810
8131
|
exports.agentPermissionsSchema = agentPermissionsSchema;
|
|
8132
|
+
exports.agentQueuedTurnCapabilitySchema = agentQueuedTurnCapabilitySchema;
|
|
8133
|
+
exports.agentQueuedTurnDurability = agentQueuedTurnDurability;
|
|
8134
|
+
exports.agentQueuedTurnFileRefSchema = agentQueuedTurnFileRefSchema;
|
|
8135
|
+
exports.agentQueuedTurnReceiptSchema = agentQueuedTurnReceiptSchema;
|
|
8136
|
+
exports.agentQueuedTurnStatuses = agentQueuedTurnStatuses;
|
|
6811
8137
|
exports.agentsBaseSchema = require_data_service.agentsBaseSchema;
|
|
6812
8138
|
exports.agentsEndpointSchema = require_data_service.agentsEndpointSchema;
|
|
6813
8139
|
exports.agentsSchema = require_data_service.agentsSchema;
|
|
@@ -6852,7 +8178,12 @@ exports.buildServerNameAliases = require_data_service.buildServerNameAliases;
|
|
|
6852
8178
|
exports.buildTree = buildTree;
|
|
6853
8179
|
exports.button = button;
|
|
6854
8180
|
exports.cacheSubsetProviders = require_data_service.cacheSubsetProviders;
|
|
8181
|
+
exports.cadenceIntervalMinutes = cadenceIntervalMinutes;
|
|
8182
|
+
exports.cadenceToCron = cadenceToCron;
|
|
6855
8183
|
exports.calendar = calendar;
|
|
8184
|
+
exports.canToolResourceConsume = canToolResourceConsume;
|
|
8185
|
+
exports.cancelAgentQueuedTurnResponseSchema = cancelAgentQueuedTurnResponseSchema;
|
|
8186
|
+
exports.cancelAgentQueuedTurnSchema = cancelAgentQueuedTurnSchema;
|
|
6856
8187
|
exports.capsEffortWhenThinkingDisabled = capsEffortWhenThinkingDisabled;
|
|
6857
8188
|
exports.card = card;
|
|
6858
8189
|
exports.carousel = carousel;
|
|
@@ -6862,7 +8193,11 @@ exports.checkpointerSchema = require_data_service.checkpointerSchema;
|
|
|
6862
8193
|
exports.checkpointerTypeSchema = require_data_service.checkpointerTypeSchema;
|
|
6863
8194
|
exports.clampEffortForDisabledThinking = clampEffortForDisabledThinking;
|
|
6864
8195
|
exports.clampOutputConfigEffort = clampOutputConfigEffort;
|
|
8196
|
+
exports.clampSettingRange = require_data_service.clampSettingRange;
|
|
6865
8197
|
exports.cloudfrontConfigSchema = require_data_service.cloudfrontConfigSchema;
|
|
8198
|
+
exports.codeEnvironmentPermissionDecisionSchema = require_data_service.codeEnvironmentPermissionDecisionSchema;
|
|
8199
|
+
exports.codeEnvironmentUserConfigSchema = require_data_service.codeEnvironmentUserConfigSchema;
|
|
8200
|
+
exports.codeEnvironmentUserSettingsSchema = require_data_service.codeEnvironmentUserSettingsSchema;
|
|
6866
8201
|
exports.codeInterpreterMimeTypes = require_data_service.codeInterpreterMimeTypes;
|
|
6867
8202
|
exports.codeInterpreterMimeTypesList = require_data_service.codeInterpreterMimeTypesList;
|
|
6868
8203
|
exports.codeTypeMapping = require_data_service.codeTypeMapping;
|
|
@@ -6874,9 +8209,14 @@ exports.compactAssistantSchema = require_data_service.compactAssistantSchema;
|
|
|
6874
8209
|
exports.compactGoogleSchema = require_data_service.compactGoogleSchema;
|
|
6875
8210
|
exports.configSchema = require_data_service.configSchema;
|
|
6876
8211
|
exports.contextPruningSchema = require_data_service.contextPruningSchema;
|
|
8212
|
+
exports.conversationStarterFilterFieldSchema = require_data_service.conversationStarterFilterFieldSchema;
|
|
8213
|
+
exports.conversationTitleFilterFieldSchema = require_data_service.conversationTitleFilterFieldSchema;
|
|
6877
8214
|
exports.convertStringsToRegex = require_data_service.convertStringsToRegex;
|
|
8215
|
+
exports.createCodeWorkerSetupCommand = createCodeWorkerSetupCommand;
|
|
6878
8216
|
exports.createPayload = createPayload;
|
|
8217
|
+
exports.createSchedulePayloadSchema = createSchedulePayloadSchema;
|
|
6879
8218
|
exports.createURL = createURL;
|
|
8219
|
+
exports.cronCadenceSchema = cronCadenceSchema;
|
|
6880
8220
|
Object.defineProperty(exports, "dataService", {
|
|
6881
8221
|
enumerable: true,
|
|
6882
8222
|
get: function() {
|
|
@@ -6888,6 +8228,7 @@ exports.defaultAgentFormValues = require_data_service.defaultAgentFormValues;
|
|
|
6888
8228
|
exports.defaultAssistantFormValues = require_data_service.defaultAssistantFormValues;
|
|
6889
8229
|
exports.defaultAssistantsVersion = require_data_service.defaultAssistantsVersion;
|
|
6890
8230
|
exports.defaultEndpoints = require_data_service.defaultEndpoints;
|
|
8231
|
+
exports.defaultLLMDeliveryPathSchema = require_data_service.defaultLLMDeliveryPathSchema;
|
|
6891
8232
|
exports.defaultModels = require_data_service.defaultModels;
|
|
6892
8233
|
exports.defaultOCRMimeTypes = require_data_service.defaultOCRMimeTypes;
|
|
6893
8234
|
exports.defaultOrderQuery = require_data_service.defaultOrderQuery;
|
|
@@ -6917,6 +8258,9 @@ exports.encodeEphemeralAgentId = encodeEphemeralAgentId;
|
|
|
6917
8258
|
exports.endpointFileConfigSchema = require_data_service.endpointFileConfigSchema;
|
|
6918
8259
|
exports.endpointSchema = require_data_service.endpointSchema;
|
|
6919
8260
|
exports.endpointSettings = require_data_service.endpointSettings;
|
|
8261
|
+
exports.endpointToProvider = endpointToProvider;
|
|
8262
|
+
exports.enqueueAgentQueuedTurnResponseSchema = enqueueAgentQueuedTurnResponseSchema;
|
|
8263
|
+
exports.enqueueAgentQueuedTurnSchema = enqueueAgentQueuedTurnSchema;
|
|
6920
8264
|
exports.envVarRegex = require_data_service.envVarRegex;
|
|
6921
8265
|
exports.errorsToString = errorsToString;
|
|
6922
8266
|
exports.essentialShadcnComponents = essentialShadcnComponents;
|
|
@@ -6927,33 +8271,53 @@ exports.extendedModelEndpointSchema = require_data_service.extendedModelEndpoint
|
|
|
6927
8271
|
exports.extractDomainFromUrl = extractDomainFromUrl;
|
|
6928
8272
|
exports.extractEnvVariable = require_data_service.extractEnvVariable;
|
|
6929
8273
|
exports.extractVariableName = require_data_service.extractVariableName;
|
|
8274
|
+
exports.feedbackFilterFieldSchema = require_data_service.feedbackFilterFieldSchema;
|
|
6930
8275
|
exports.feedbackRatingSchema = require_data_service.feedbackRatingSchema;
|
|
6931
8276
|
exports.feedbackSchema = require_data_service.feedbackSchema;
|
|
6932
8277
|
exports.feedbackTagKeySchema = require_data_service.feedbackTagKeySchema;
|
|
6933
8278
|
exports.fileCitationsPermissionsSchema = fileCitationsPermissionsSchema;
|
|
6934
8279
|
exports.fileConfig = require_data_service.fileConfig;
|
|
6935
8280
|
exports.fileConfigSchema = require_data_service.fileConfigSchema;
|
|
8281
|
+
exports.fileFilterFieldSchema = require_data_service.fileFilterFieldSchema;
|
|
6936
8282
|
exports.fileSearchPermissionsSchema = fileSearchPermissionsSchema;
|
|
6937
8283
|
exports.fileSourceSchema = require_data_service.fileSourceSchema;
|
|
6938
8284
|
exports.fileStorageSchema = require_data_service.fileStorageSchema;
|
|
6939
8285
|
exports.fileStrategiesSchema = require_data_service.fileStrategiesSchema;
|
|
8286
|
+
exports.filterPiiActionSchema = require_data_service.filterPiiActionSchema;
|
|
8287
|
+
exports.filterPiiCustomPatternSchema = require_data_service.filterPiiCustomPatternSchema;
|
|
8288
|
+
exports.filterPiiRegexSchema = require_data_service.filterPiiRegexSchema;
|
|
8289
|
+
exports.filterPiiStarterPatternSchema = require_data_service.filterPiiStarterPatternSchema;
|
|
8290
|
+
exports.filtersConfigSchema = require_data_service.filtersConfigSchema;
|
|
8291
|
+
exports.finalizeSvgMarkup = finalizeSvgMarkup;
|
|
6940
8292
|
exports.findLastSeparatorIndex = findLastSeparatorIndex;
|
|
8293
|
+
exports.findMessageById = findMessageById;
|
|
6941
8294
|
exports.fullMimeTypesList = require_data_service.fullMimeTypesList;
|
|
6942
8295
|
exports.generateDynamicSchema = require_data_service.generateDynamicSchema;
|
|
6943
8296
|
exports.generateGoogleSchema = require_data_service.generateGoogleSchema;
|
|
6944
8297
|
exports.generateOpenAISchema = require_data_service.generateOpenAISchema;
|
|
8298
|
+
exports.getAllowedCodeApprovalModes = require_data_service.getAllowedCodeApprovalModes;
|
|
8299
|
+
exports.getCodeEnvRefForProfile = getCodeEnvRefForProfile;
|
|
8300
|
+
exports.getCodeEnvRefs = getCodeEnvRefs;
|
|
6945
8301
|
exports.getConfigDefaults = require_data_service.getConfigDefaults;
|
|
6946
8302
|
exports.getConfiguredMimeAccept = require_data_service.getConfiguredMimeAccept;
|
|
6947
8303
|
exports.getDefaultParamsEndpoint = require_data_service.getDefaultParamsEndpoint;
|
|
8304
|
+
exports.getDocumentFileExtension = require_data_service.getDocumentFileExtension;
|
|
6948
8305
|
exports.getEnabledEndpoints = getEnabledEndpoints;
|
|
6949
8306
|
exports.getEndpointField = require_data_service.getEndpointField;
|
|
6950
8307
|
exports.getEndpointFileConfig = require_data_service.getEndpointFileConfig;
|
|
8308
|
+
exports.getEphemeralSender = getEphemeralSender;
|
|
6951
8309
|
exports.getFirstDefinedValue = getFirstDefinedValue;
|
|
8310
|
+
exports.getGoogleThinkingBudgetBounds = require_data_service.getGoogleThinkingBudgetBounds;
|
|
8311
|
+
exports.getGoogleThinkingBudgetMax = require_data_service.getGoogleThinkingBudgetMax;
|
|
8312
|
+
exports.getMaxSubagents = require_data_service.getMaxSubagents;
|
|
6952
8313
|
exports.getModelKey = require_data_service.getModelKey;
|
|
6953
8314
|
exports.getNonEmptyValue = getNonEmptyValue;
|
|
8315
|
+
exports.getPiiRegexProgramSize = require_data_service.getPiiRegexProgramSize;
|
|
6954
8316
|
exports.getRefillEligibilityDate = require_data_service.getRefillEligibilityDate;
|
|
6955
8317
|
exports.getResourcePermissionsResponseSchema = require_data_service.getResourcePermissionsResponseSchema;
|
|
6956
8318
|
exports.getResponseSender = getResponseSender;
|
|
8319
|
+
exports.getRunStepDurationMs = getRunStepDurationMs;
|
|
8320
|
+
exports.getScheduleMCPDisabledReason = getScheduleMCPDisabledReason;
|
|
6957
8321
|
exports.getSchemaDefaults = require_data_service.getSchemaDefaults;
|
|
6958
8322
|
exports.getSettingsKeys = require_data_service.getSettingsKeys;
|
|
6959
8323
|
exports.getTagByKey = require_data_service.getTagByKey;
|
|
@@ -6963,7 +8327,13 @@ exports.googleBaseSchema = require_data_service.googleBaseSchema;
|
|
|
6963
8327
|
exports.googleGenConfigSchema = require_data_service.googleGenConfigSchema;
|
|
6964
8328
|
exports.googleSchema = require_data_service.googleSchema;
|
|
6965
8329
|
exports.googleSettings = require_data_service.googleSettings;
|
|
8330
|
+
exports.hasActiveFiltersConfig = require_data_service.hasActiveFiltersConfig;
|
|
8331
|
+
exports.hasActivePiiFields = require_data_service.hasActivePiiFields;
|
|
8332
|
+
exports.hasActivePiiPatterns = require_data_service.hasActivePiiPatterns;
|
|
6966
8333
|
exports.hasPermissions = require_data_service.hasPermissions;
|
|
8334
|
+
exports.hasProcessMCPServerConfig = require_data_service.hasProcessMCPServerConfig;
|
|
8335
|
+
exports.hasTextExtractionPath = hasTextExtractionPath;
|
|
8336
|
+
exports.hasToolCallErrorPrefix = hasToolCallErrorPrefix;
|
|
6967
8337
|
exports.hostImageIdSuffix = require_data_service.hostImageIdSuffix;
|
|
6968
8338
|
exports.hostImageNamePrefix = require_data_service.hostImageNamePrefix;
|
|
6969
8339
|
exports.hoverCard = hoverCard;
|
|
@@ -6984,42 +8354,76 @@ exports.isAnthropicDocumentType = require_data_service.isAnthropicDocumentType;
|
|
|
6984
8354
|
exports.isAnthropicTextDocumentType = require_data_service.isAnthropicTextDocumentType;
|
|
6985
8355
|
exports.isAssistantsEndpoint = require_data_service.isAssistantsEndpoint;
|
|
6986
8356
|
exports.isBedrockDocumentType = require_data_service.isBedrockDocumentType;
|
|
8357
|
+
exports.isCodeEnvironmentMode = require_data_service.isCodeEnvironmentMode;
|
|
8358
|
+
exports.isCodeWorkerShell = isCodeWorkerShell;
|
|
8359
|
+
exports.isCodeWorkspaceSelection = require_data_service.isCodeWorkspaceSelection;
|
|
8360
|
+
exports.isCodeWorkspaceSelectionErrorReason = require_data_service.isCodeWorkspaceSelectionErrorReason;
|
|
8361
|
+
exports.isCodeWorkspaceSelections = require_data_service.isCodeWorkspaceSelections;
|
|
8362
|
+
exports.isCompactedLeaf = isCompactedLeaf;
|
|
8363
|
+
exports.isCronCadence = isCronCadence;
|
|
6987
8364
|
exports.isDocumentSupportedProvider = require_data_service.isDocumentSupportedProvider;
|
|
6988
8365
|
exports.isEphemeralAgentId = isEphemeralAgentId;
|
|
6989
8366
|
exports.isImageVisionTool = require_data_service.isImageVisionTool;
|
|
8367
|
+
exports.isKnownProviderIdentifier = require_data_service.isKnownProviderIdentifier;
|
|
8368
|
+
exports.isMediaSupportedProvider = require_data_service.isMediaSupportedProvider;
|
|
8369
|
+
exports.isMessageFileUpload = require_data_service.isMessageFileUpload;
|
|
6990
8370
|
exports.isMythosClassModel = require_data_service.isMythosClassModel;
|
|
8371
|
+
exports.isNativelyReadableText = isNativelyReadableText;
|
|
6991
8372
|
exports.isOpenAILikeProvider = require_data_service.isOpenAILikeProvider;
|
|
6992
8373
|
exports.isParamEndpoint = require_data_service.isParamEndpoint;
|
|
6993
8374
|
exports.isPermissiveMimeConfig = require_data_service.isPermissiveMimeConfig;
|
|
8375
|
+
exports.isProcessMCPServerConfig = require_data_service.isProcessMCPServerConfig;
|
|
8376
|
+
exports.isProcessMCPServerField = require_data_service.isProcessMCPServerField;
|
|
6994
8377
|
exports.isRemoteOidcUrlAllowed = require_data_service.isRemoteOidcUrlAllowed;
|
|
8378
|
+
exports.isReportableRunStepDuration = isReportableRunStepDuration;
|
|
8379
|
+
exports.isResponsesApiUpload = require_data_service.isResponsesApiUpload;
|
|
8380
|
+
exports.isSecureCodeEnvironmentControlURL = require_data_service.isSecureCodeEnvironmentControlURL;
|
|
6995
8381
|
exports.isSensitiveEnvVar = require_data_service.isSensitiveEnvVar;
|
|
8382
|
+
exports.isSpeechProviderConfigured = require_data_service.isSpeechProviderConfigured;
|
|
6996
8383
|
exports.isSystemRoleName = isSystemRoleName;
|
|
6997
8384
|
exports.isThinkingDisabled = isThinkingDisabled;
|
|
6998
8385
|
exports.isUUID = require_data_service.isUUID;
|
|
8386
|
+
exports.isUserInitiatedCompaction = isUserInitiatedCompaction;
|
|
8387
|
+
exports.isValidCronExpression = isValidCronExpression;
|
|
8388
|
+
exports.knownEndpointToProvider = knownEndpointToProvider;
|
|
6999
8389
|
exports.label = label;
|
|
7000
8390
|
exports.langfuseConfigSchema = require_data_service.langfuseConfigSchema;
|
|
8391
|
+
exports.langfuseTraceConfigSchema = require_data_service.langfuseTraceConfigSchema;
|
|
7001
8392
|
exports.librechat = librechat;
|
|
8393
|
+
exports.listAgentQueuedTurnsResponseSchema = listAgentQueuedTurnsResponseSchema;
|
|
8394
|
+
exports.listAgentQueuedTurnsSchema = listAgentQueuedTurnsSchema;
|
|
8395
|
+
exports.listConfiguredSpeechProviders = require_data_service.listConfiguredSpeechProviders;
|
|
7002
8396
|
exports.loginPage = require_data_service.loginPage;
|
|
7003
8397
|
exports.mapGroupToAzureConfig = mapGroupToAzureConfig;
|
|
7004
8398
|
exports.mapModelToAzureConfig = mapModelToAzureConfig;
|
|
7005
8399
|
exports.marketplacePermissionsSchema = marketplacePermissionsSchema;
|
|
8400
|
+
exports.materializeModelSpecEndpoints = require_data_service.materializeModelSpecEndpoints;
|
|
7006
8401
|
exports.mbToBytes = require_data_service.mbToBytes;
|
|
8402
|
+
exports.mcpRefreshDefaults = require_data_service.mcpRefreshDefaults;
|
|
7007
8403
|
exports.mcpServersPermissionsSchema = mcpServersPermissionsSchema;
|
|
8404
|
+
exports.mediaSupportedProviders = require_data_service.mediaSupportedProviders;
|
|
7008
8405
|
exports.megabyte = require_data_service.megabyte;
|
|
8406
|
+
exports.memoryFilterFieldSchema = require_data_service.memoryFilterFieldSchema;
|
|
7009
8407
|
exports.memoryPermissionsSchema = memoryPermissionsSchema;
|
|
7010
8408
|
exports.memorySchema = require_data_service.memorySchema;
|
|
7011
8409
|
exports.menuBar = menuBar;
|
|
8410
|
+
exports.mergeCodeEnvRef = mergeCodeEnvRef;
|
|
7012
8411
|
exports.mergeFileConfig = require_data_service.mergeFileConfig;
|
|
8412
|
+
exports.messageFilterFieldSchema = require_data_service.messageFilterFieldSchema;
|
|
7013
8413
|
exports.messageFilterPiiSchema = require_data_service.messageFilterPiiSchema;
|
|
7014
8414
|
exports.messageFilterSchema = require_data_service.messageFilterSchema;
|
|
7015
8415
|
exports.mimeTypeAliases = require_data_service.mimeTypeAliases;
|
|
7016
8416
|
exports.modelConfigSchema = require_data_service.modelConfigSchema;
|
|
8417
|
+
exports.modelParameterFilterFieldSchema = require_data_service.modelParameterFilterFieldSchema;
|
|
7017
8418
|
exports.modelSpecSubagentsSchema = require_data_service.modelSpecSubagentsSchema;
|
|
7018
8419
|
exports.modularEndpoints = require_data_service.modularEndpoints;
|
|
7019
8420
|
exports.multiConvoPermissionsSchema = multiConvoPermissionsSchema;
|
|
7020
8421
|
exports.navigationMenu = navigationMenu;
|
|
8422
|
+
exports.nextRunInstants = nextRunInstants;
|
|
8423
|
+
exports.normalizeActionToolName = normalizeActionToolName;
|
|
7021
8424
|
exports.normalizeEndpointName = require_data_service.normalizeEndpointName;
|
|
7022
8425
|
exports.normalizeMCPToolKey = require_data_service.normalizeMCPToolKey;
|
|
8426
|
+
exports.normalizeSearxngEngines = require_data_service.normalizeSearxngEngines;
|
|
7023
8427
|
exports.normalizeServerName = require_data_service.normalizeServerName;
|
|
7024
8428
|
exports.ocrSchema = require_data_service.ocrSchema;
|
|
7025
8429
|
exports.omitsSamplingParameters = omitsSamplingParameters;
|
|
@@ -7030,6 +8434,7 @@ exports.openAISettings = require_data_service.openAISettings;
|
|
|
7030
8434
|
exports.openRouterSchema = require_data_service.openRouterSchema;
|
|
7031
8435
|
exports.openapiToFunction = openapiToFunction;
|
|
7032
8436
|
exports.orderEndpointsConfig = orderEndpointsConfig;
|
|
8437
|
+
exports.outputTokensFromUsage = outputTokensFromUsage;
|
|
7033
8438
|
exports.pagination = pagination;
|
|
7034
8439
|
exports.paramDefinitionSchema = require_data_service.paramDefinitionSchema;
|
|
7035
8440
|
exports.paramEndpoints = require_data_service.paramEndpoints;
|
|
@@ -7037,6 +8442,7 @@ exports.paramSettings = paramSettings;
|
|
|
7037
8442
|
exports.parseCompactConvo = parseCompactConvo;
|
|
7038
8443
|
exports.parseConvo = parseConvo;
|
|
7039
8444
|
exports.parseEphemeralAgentId = parseEphemeralAgentId;
|
|
8445
|
+
exports.parseLangChainErrorCode = parseLangChainErrorCode;
|
|
7040
8446
|
exports.parseTextParts = parseTextParts;
|
|
7041
8447
|
exports.peoplePickerPermissionsSchema = peoplePickerPermissionsSchema;
|
|
7042
8448
|
exports.permBitsToAccessLevel = require_data_service.permBitsToAccessLevel;
|
|
@@ -7046,32 +8452,60 @@ exports.popover = popover;
|
|
|
7046
8452
|
exports.presetSettings = presetSettings;
|
|
7047
8453
|
exports.principalSchema = require_data_service.principalSchema;
|
|
7048
8454
|
exports.progress = progress;
|
|
8455
|
+
exports.promptFilterFieldSchema = require_data_service.promptFilterFieldSchema;
|
|
7049
8456
|
exports.promptPermissionsSchema = promptPermissionsSchema;
|
|
7050
8457
|
exports.promptTokensFromUsage = promptTokensFromUsage;
|
|
7051
8458
|
exports.providerEndpointMap = require_data_service.providerEndpointMap;
|
|
7052
8459
|
exports.radioGroup = radioGroup;
|
|
7053
8460
|
exports.rateLimitSchema = require_data_service.rateLimitSchema;
|
|
8461
|
+
exports.readScheduleMCPOutcomes = readScheduleMCPOutcomes;
|
|
7054
8462
|
exports.reconcileContextUsage = reconcileContextUsage;
|
|
8463
|
+
exports.reconcileContextUsageFromEvent = reconcileContextUsageFromEvent;
|
|
7055
8464
|
exports.registerPage = require_data_service.registerPage;
|
|
7056
8465
|
exports.remoteAgentsPermissionsSchema = remoteAgentsPermissionsSchema;
|
|
8466
|
+
exports.removeCodeExecutionCaller = removeCodeExecutionCaller;
|
|
7057
8467
|
exports.removeNullishValues = require_data_service.removeNullishValues;
|
|
7058
8468
|
exports.replaceSpecialVars = replaceSpecialVars;
|
|
7059
8469
|
exports.request = require_data_service.request_default;
|
|
7060
8470
|
exports.requiresExplicitThinkingDisabled = requiresExplicitThinkingDisabled;
|
|
8471
|
+
exports.resolveAgentSkillsScope = require_data_service.resolveAgentSkillsScope;
|
|
8472
|
+
exports.resolveAllowedStatefulCodeEnvironments = require_data_service.resolveAllowedStatefulCodeEnvironments;
|
|
8473
|
+
exports.resolveCodeApprovalMode = require_data_service.resolveCodeApprovalMode;
|
|
8474
|
+
exports.resolveCodePermissionDecision = require_data_service.resolveCodePermissionDecision;
|
|
8475
|
+
exports.resolveDefaultLLMDeliveryPath = resolveDefaultLLMDeliveryPath;
|
|
8476
|
+
exports.resolveDefaultUploadLLMDeliveryPath = resolveDefaultUploadLLMDeliveryPath;
|
|
8477
|
+
exports.resolveDropParamsUIKeys = resolveDropParamsUIKeys;
|
|
7061
8478
|
exports.resolveEndpointType = require_data_service.resolveEndpointType;
|
|
8479
|
+
exports.resolveModelCatalogKey = resolveModelCatalogKey;
|
|
8480
|
+
exports.resolveModelSpecEndpoint = require_data_service.resolveModelSpecEndpoint;
|
|
8481
|
+
exports.resolveProviderId = resolveProviderId;
|
|
7062
8482
|
exports.resolveRef = resolveRef;
|
|
8483
|
+
exports.resolveSandboxFilename = require_data_service.resolveSandboxFilename;
|
|
8484
|
+
exports.resolveStatefulCodeEnvironment = require_data_service.resolveStatefulCodeEnvironment;
|
|
7063
8485
|
exports.resolveThinkingDisplay = resolveThinkingDisplay;
|
|
8486
|
+
exports.resolveTraceViewerConfig = require_data_service.resolveTraceViewerConfig;
|
|
8487
|
+
exports.resolveUploadDestination = resolveUploadDestination;
|
|
8488
|
+
exports.resolveUploadLLMDeliveryPath = resolveUploadLLMDeliveryPath;
|
|
8489
|
+
exports.resolveUseResponsesApi = require_data_service.resolveUseResponsesApi;
|
|
7064
8490
|
exports.resourcePermissionsResponseSchema = require_data_service.resourcePermissionsResponseSchema;
|
|
8491
|
+
exports.restrictSvgReferences = restrictSvgReferences;
|
|
7065
8492
|
exports.retainRecentConfigSchema = require_data_service.retainRecentConfigSchema;
|
|
7066
8493
|
exports.retrievalMimeTypes = require_data_service.retrievalMimeTypes;
|
|
7067
8494
|
exports.retrievalMimeTypesList = require_data_service.retrievalMimeTypesList;
|
|
7068
8495
|
exports.roleDefaults = roleDefaults;
|
|
7069
8496
|
exports.roleSchema = roleSchema;
|
|
7070
8497
|
exports.runCodePermissionsSchema = runCodePermissionsSchema;
|
|
8498
|
+
exports.scheduleCadenceSchema = scheduleCadenceSchema;
|
|
8499
|
+
exports.scheduleFrequencies = scheduleFrequencies;
|
|
8500
|
+
exports.scheduleMCPOutcomeSchema = scheduleMCPOutcomeSchema;
|
|
8501
|
+
exports.scheduleStructuredFrequencies = scheduleStructuredFrequencies;
|
|
8502
|
+
exports.scheduleTargets = scheduleTargets;
|
|
8503
|
+
exports.schedulesPermissionsSchema = schedulesPermissionsSchema;
|
|
7071
8504
|
exports.select = select;
|
|
7072
8505
|
exports.separator = separator;
|
|
7073
8506
|
exports.setAcceptLanguageHeader = require_data_service.setAcceptLanguageHeader;
|
|
7074
8507
|
exports.setFileConfigRegexCompiler = require_data_service.setFileConfigRegexCompiler;
|
|
8508
|
+
exports.setMaxSubagents = require_data_service.setMaxSubagents;
|
|
7075
8509
|
exports.setMessageFilterRegexValidator = require_data_service.setMessageFilterRegexValidator;
|
|
7076
8510
|
exports.setTokenHeader = require_data_service.setTokenHeader;
|
|
7077
8511
|
exports.sha1 = sha1;
|
|
@@ -7079,6 +8513,7 @@ exports.shadcnComponents = shadcnComponents;
|
|
|
7079
8513
|
exports.sharedFileDownload = require_data_service.sharedFileDownload;
|
|
7080
8514
|
exports.sharedLinksPermissionsSchema = sharedLinksPermissionsSchema;
|
|
7081
8515
|
exports.skeleton = skeleton;
|
|
8516
|
+
exports.skillFilterFieldSchema = require_data_service.skillFilterFieldSchema;
|
|
7082
8517
|
exports.skillPermissionsSchema = skillPermissionsSchema;
|
|
7083
8518
|
exports.skillSyncConfigSchema = require_data_service.skillSyncConfigSchema;
|
|
7084
8519
|
exports.skillSyncGitHubSourceSchema = require_data_service.skillSyncGitHubSourceSchema;
|
|
@@ -7088,6 +8523,13 @@ exports.specsConfigSchema = require_data_service.specsConfigSchema;
|
|
|
7088
8523
|
exports.splitMCPToolKey = require_data_service.splitMCPToolKey;
|
|
7089
8524
|
exports.splitToolCallName = require_data_service.splitToolCallName;
|
|
7090
8525
|
exports.stripAgentIdSuffix = stripAgentIdSuffix;
|
|
8526
|
+
exports.stripLangChainTroubleshootingUrl = stripLangChainTroubleshootingUrl;
|
|
8527
|
+
exports.stripReasoningLabelMetadata = stripReasoningLabelMetadata;
|
|
8528
|
+
exports.stripServerNamePrefix = require_data_service.stripServerNamePrefix;
|
|
8529
|
+
exports.stripServerNamePrefixes = require_data_service.stripServerNamePrefixes;
|
|
8530
|
+
exports.stripToolCallErrorPrefix = stripToolCallErrorPrefix;
|
|
8531
|
+
exports.structuredCadenceSchema = structuredCadenceSchema;
|
|
8532
|
+
exports.subagentThreadLineageSchema = require_data_service.subagentThreadLineageSchema;
|
|
7091
8533
|
exports.summarizationConfigSchema = require_data_service.summarizationConfigSchema;
|
|
7092
8534
|
exports.summarizationTriggerSchema = require_data_service.summarizationTriggerSchema;
|
|
7093
8535
|
exports.supportedMimeTypes = require_data_service.supportedMimeTypes;
|
|
@@ -7095,6 +8537,7 @@ exports.supportsAdaptiveThinking = supportsAdaptiveThinking;
|
|
|
7095
8537
|
exports.supportsBalanceCheck = require_data_service.supportsBalanceCheck;
|
|
7096
8538
|
exports.supportsContext1m = supportsContext1m;
|
|
7097
8539
|
exports.supportsFiles = require_data_service.supportsFiles;
|
|
8540
|
+
exports.supportsPromptCache = supportsPromptCache;
|
|
7098
8541
|
exports.switchComponent = switchComponent;
|
|
7099
8542
|
exports.tBannerSchema = require_data_service.tBannerSchema;
|
|
7100
8543
|
exports.tConversationSchema = require_data_service.tConversationSchema;
|
|
@@ -7122,13 +8565,19 @@ exports.toggleGroup = toggleGroup;
|
|
|
7122
8565
|
exports.toolApprovalHookConfigSchema = require_data_service.toolApprovalHookConfigSchema;
|
|
7123
8566
|
exports.toolApprovalModeSchema = require_data_service.toolApprovalModeSchema;
|
|
7124
8567
|
exports.toolApprovalPolicySchema = require_data_service.toolApprovalPolicySchema;
|
|
8568
|
+
exports.toolArgumentFilterFieldSchema = require_data_service.toolArgumentFilterFieldSchema;
|
|
7125
8569
|
exports.tooltip = tooltip;
|
|
8570
|
+
exports.traceViewerDefaults = require_data_service.traceViewerDefaults;
|
|
8571
|
+
exports.traceViewerLimits = require_data_service.traceViewerLimits;
|
|
7126
8572
|
exports.transactionsSchema = require_data_service.transactionsSchema;
|
|
7127
8573
|
exports.turnstileOptionsSchema = require_data_service.turnstileOptionsSchema;
|
|
7128
8574
|
exports.turnstileSchema = require_data_service.turnstileSchema;
|
|
8575
|
+
exports.unattributedAssistantContentSchema = require_data_service.unattributedAssistantContentSchema;
|
|
7129
8576
|
exports.updateResourcePermissionsRequestSchema = require_data_service.updateResourcePermissionsRequestSchema;
|
|
7130
8577
|
exports.updateResourcePermissionsResponseSchema = require_data_service.updateResourcePermissionsResponseSchema;
|
|
8578
|
+
exports.updateSchedulePayloadSchema = updateSchedulePayloadSchema;
|
|
7131
8579
|
exports.useToast = useToast;
|
|
8580
|
+
exports.userSubmittedMessageFieldPathSchema = require_data_service.userSubmittedMessageFieldPathSchema;
|
|
7132
8581
|
exports.utils = utils;
|
|
7133
8582
|
exports.validateActionDomain = validateActionDomain;
|
|
7134
8583
|
exports.validateAndParseOpenAPISpec = validateAndParseOpenAPISpec;
|