openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
159 lines (158 loc) • 7.15 kB
JavaScript
import { r as truncateUtf16Safe } from "./utf16-slice-D_ngcYKd.mjs";
import { n as normalizeAgentId } from "./agent-id-D1-Q6vR4.mjs";
import "./session-key-C09ow4h0.mjs";
import { i as resolveSessionAuthProfileOverrideSource, r as resolveCollapsedSessionAuthPinSource } from "./auth-profile-override-provenance-Jztnei-C.mjs";
import { v as isUserModelAuthProfileId, y as parseUserModelAuthProfileId } from "./profile-usage-stats-BLwxBqRR.mjs";
import { c as readUserModelAccountSummary } from "./user-model-accounts-sYn17idc.mjs";
import { n as getUserProfileDisplay } from "./user-profile-list-CtETKur7.mjs";
import { s as resolveUserProfileId } from "./user-profiles-B3UR6UN9.mjs";
import { o as getPreparedModelRuntimeAuthMaterializations } from "./prepared-model-runtime-auth-Dn7HF9Vu.mjs";
import { n as readAcpSessionMetaForEntry } from "./session-meta-readonly-CvCR0QQG.mjs";
import { n as resolveSessionModelRef } from "./session-model-ref-3-J97GZs.mjs";
import { n as readSessionRuntimeOwnership } from "./session-utils-model-selection-BIBdj57O.mjs";
import { i as resolveGatewaySessionRuntimeSelectionLocked } from "./session-utils-projection-CiJVO9AC.mjs";
import { toUSVString } from "node:util";
//#region src/gateway/server-methods/chat-account-selection.ts
/** The session owns this preference; it is not a receipt for the account that served a turn. */
function resolveChatAccountSelection(params) {
const authProfileId = params.sessionEntry?.authProfileOverride?.trim();
if (!authProfileId) return {
kind: "automatic",
label: "Automatic account selection"
};
const source = resolveSessionAuthProfileOverrideSource(params.sessionEntry);
if (!isUserModelAuthProfileId(authProfileId)) {
const credential = params.authStore.profiles[authProfileId];
return {
kind: "shared",
authProfileId,
label: truncateUtf16Safe(toUSVString(credential?.displayName?.trim() || authProfileId), 256),
source
};
}
const personal = params.requesterProfileId ? readUserModelAccountSummary({
profileId: params.requesterProfileId,
authProfileId
}) : void 0;
if (personal) return {
kind: "personal",
authProfileId,
label: personal.label,
source
};
const locator = parseUserModelAuthProfileId(authProfileId);
const owner = locator ? resolveUserProfileId(locator.ownerProfileId) : void 0;
const rawDisplayName = owner ? getUserProfileDisplay(owner).displayName?.trim() : void 0;
const displayName = rawDisplayName ? toUSVString(rawDisplayName) : void 0;
return {
kind: "personal",
label: displayName ? truncateUtf16Safe(`${displayName}'s account`, 256) : "Personal account",
source
};
}
//#endregion
//#region src/gateway/server-methods/chat-metadata-session-projection.ts
async function prepareChatMetadataModelProjection(params) {
const { prepareModelsListResult, createGatewayAgentModelCatalogProjector } = await import("./models-list-result-DLi9cgeV.mjs");
params.assertCurrent?.();
const snapshot = params.facts.modelCatalog;
const projector = createGatewayAgentModelCatalogProjector({
cfg: params.facts.owner.config,
agentId: params.facts.agentId,
snapshot,
metadataSnapshot: params.facts.owner.metadataSnapshot,
preparedAuthStore: params.facts.authStore,
accountCatalog: params.facts.owner.accountCatalog,
requesterProfileId: params.requesterProfileId,
preparedRuntimeAuthModes: params.facts.authModes,
preparedRuntimeAuthMaterializations: getPreparedModelRuntimeAuthMaterializations(params.facts.owner),
pluginRegistry: params.facts.owner.pluginRegistry,
isCurrent: params.facts.owner.isCurrent,
observationConfig: params.facts.owner.observationConfig,
...params.preferredProfileId ? { preferredProfileId: params.preferredProfileId } : {},
...params.pinnedProfileId ? { pinnedProfileId: params.pinnedProfileId } : {},
...params.profileProvider ? { profileProvider: params.profileProvider } : {},
...params.runtimeOverride ? { runtimeOverride: params.runtimeOverride } : {}
});
const [modelCatalog, readModels] = await Promise.all([projector.projectCatalog(), prepareModelsListResult({
source: {
kind: "gateway",
context: params.context
},
agentId: params.facts.agentId,
params: { view: "configured" },
preloadedCatalog: {
agentId: params.facts.agentId,
config: params.facts.owner.config,
snapshot
},
preloadedOnly: true,
catalogProjector: projector
})]);
return {
modelCatalog,
read: () => ({ models: readModels.read().models }),
isCurrent: readModels.isCurrent
};
}
function resolveSessionCatalogProfiles(sessionEntry, config, agentId) {
const profileId = sessionEntry?.authProfileOverride?.trim();
const runtime = sessionEntry?.agentRuntimeOverride?.trim();
const provider = sessionEntry?.providerOverride ?? (runtime ? resolveSessionModelRef(config, sessionEntry, agentId, { allowPluginNormalization: false }).provider : void 0);
const context = {
...provider ? { profileProvider: provider } : {},
...runtime ? { runtimeOverride: runtime } : {}
};
if (!profileId) return context;
const profileSource = resolveCollapsedSessionAuthPinSource(sessionEntry);
return {
preferredProfileId: profileId,
...context,
...profileSource === "user" ? { pinnedProfileId: profileId } : {}
};
}
function sessionProjectionKey(agentId, profiles) {
return [
normalizeAgentId(agentId),
profiles.preferredProfileId ?? "",
profiles.pinnedProfileId ?? "",
profiles.profileProvider ?? "",
profiles.runtimeOverride ?? ""
].join("\0");
}
function hasSessionCatalogContext(profiles) {
return profiles.preferredProfileId !== void 0 || profiles.pinnedProfileId !== void 0 || profiles.profileProvider !== void 0 || profiles.runtimeOverride !== void 0;
}
function projectSessionModelCatalog(readParams, models, config) {
const ownership = readSessionRuntimeOwnership({
...readParams,
config
});
if (ownership?.auth !== "native") return models;
const renderedModel = ownership.modelRef ?? resolveSessionModelRef(config, readParams.sessionEntry, readParams.agentId, { allowPluginNormalization: false });
return models.map((model) => {
if (model.provider !== renderedModel.provider || model.id !== renderedModel.model) return model;
const { available: _available, unavailableReason: _reason, unavailableUntil: _until, ...native } = model;
return native;
});
}
function projectChatSessionMetadata(readParams, metadata, config) {
const projected = metadata.models ? {
...metadata,
models: projectSessionModelCatalog(readParams, metadata.models, config)
} : metadata;
if (!readParams.sessionKey) return projected;
const entry = readParams.sessionEntry;
const acpMeta = entry?.acp ?? (entry ? readAcpSessionMetaForEntry({
cfg: config,
sessionKey: readParams.sessionKey,
agentId: readParams.agentId,
entry
}) : void 0);
return {
...projected,
runtimeSelectionLocked: resolveGatewaySessionRuntimeSelectionLocked(entry, acpMeta)
};
}
//#endregion
export { resolveSessionCatalogProfiles as a, projectSessionModelCatalog as i, prepareChatMetadataModelProjection as n, sessionProjectionKey as o, projectChatSessionMetadata as r, resolveChatAccountSelection as s, hasSessionCatalogContext as t };