openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
162 lines (161 loc) • 7.01 kB
JavaScript
import { r as theme } from "./theme-vjDs9tao.js";
import { i as resolveAgentModelPrimaryValue } from "./model-input-B2zxl6MM.js";
import { n as DEFAULT_MODEL, r as DEFAULT_PROVIDER } from "./defaults-mDjiWzE5.js";
import { l as inferUniqueProviderFromConfiguredModels } from "./model-selection-shared-b32cUYts.js";
import { h as isCliProvider } from "./model-selection-CA_65iXi.js";
import { n as formatTimeAgo } from "./format-relative-Bjc3l98W.js";
//#region src/commands/sessions-display-model.ts
/**
* Model display resolution for session listings.
*
* Session rows may carry persisted model/provider overrides or CLI-runtime
* model strings; this module normalizes them into display-ready model refs.
*/
function parseModelRef(raw, defaultProvider) {
const trimmed = raw.trim();
if (!trimmed) return {
provider: defaultProvider,
model: DEFAULT_MODEL
};
const slashIndex = trimmed.indexOf("/");
if (slashIndex <= 0 || slashIndex === trimmed.length - 1) return {
provider: defaultProvider,
model: trimmed
};
return {
provider: trimmed.slice(0, slashIndex).trim() || defaultProvider,
model: trimmed.slice(slashIndex + 1).trim() || "gpt-5.5"
};
}
function resolveAgentPrimaryModel(cfg, agentId) {
if (!agentId) return;
const agentConfig = cfg.agents?.list?.find((agent) => agent.id === agentId);
return resolveAgentModelPrimaryValue(agentConfig?.model);
}
function normalizeStoredOverrideModel(params) {
const providerOverride = params.providerOverride?.trim();
const modelOverride = params.modelOverride?.trim();
if (!providerOverride || !modelOverride) return {
providerOverride,
modelOverride
};
const providerPrefix = `${providerOverride.toLowerCase()}/`;
return {
providerOverride,
modelOverride: modelOverride.toLowerCase().startsWith(providerPrefix) ? modelOverride.slice(providerOverride.length + 1).trim() || modelOverride : modelOverride
};
}
function resolveDefaultModelRef(cfg, agentId) {
return parseModelRef(resolveAgentPrimaryModel(cfg, agentId) ?? resolveAgentModelPrimaryValue(cfg.agents?.defaults?.model) ?? "gpt-5.5", DEFAULT_PROVIDER);
}
/** Resolves default display values for a session table scoped to an agent. */
function resolveSessionDisplayDefaults(cfg, agentId) {
return { model: resolveDefaultModelRef(cfg, agentId).model };
}
function normalizeCliRuntimeDisplayRef(cfg, ref, defaultRef) {
if (!isCliProvider(ref.provider, cfg)) return ref;
if (ref.model.includes("/")) {
const parsed = parseModelRef(ref.model, defaultRef.provider);
if (!isCliProvider(parsed.provider, cfg)) return parsed;
}
const inferredProvider = inferUniqueProviderFromConfiguredModels({
cfg,
model: ref.model
});
if (inferredProvider && !isCliProvider(inferredProvider, cfg)) return {
provider: inferredProvider,
model: ref.model
};
const parsed = parseModelRef(ref.model, defaultRef.provider);
if (!isCliProvider(parsed.provider, cfg)) return parsed;
return {
provider: defaultRef.provider || ref.provider,
model: parsed.model || ref.model
};
}
/** Resolves only the model id to show for a session row. */
function resolveSessionDisplayModel(cfg, row) {
return resolveSessionDisplayModelRef(cfg, row).model;
}
/** Resolves provider/model display metadata for a session row. */
function resolveSessionDisplayModelRef(cfg, row) {
const defaultRef = resolveDefaultModelRef(cfg, row.key.startsWith("agent:") ? row.key.split(":")[1] : void 0);
const normalizedOverride = normalizeStoredOverrideModel({
providerOverride: row.providerOverride,
modelOverride: row.modelOverride
});
if (normalizedOverride.modelOverride) return parseModelRef(normalizedOverride.modelOverride, normalizedOverride.providerOverride ?? defaultRef.provider);
if (row.model) return normalizeCliRuntimeDisplayRef(cfg, parseModelRef(row.model, row.modelProvider ?? defaultRef.provider), defaultRef);
return defaultRef;
}
/** Converts a persisted session entry into the shared display row shape. */
function toSessionDisplayRow(key, entry) {
const updatedAt = entry?.updatedAt ?? null;
return {
key,
updatedAt,
ageMs: updatedAt ? Date.now() - updatedAt : null,
sessionId: entry?.sessionId,
systemSent: entry?.systemSent,
abortedLastRun: entry?.abortedLastRun,
thinkingLevel: entry?.thinkingLevel,
verboseLevel: entry?.verboseLevel,
traceLevel: entry?.traceLevel,
reasoningLevel: entry?.reasoningLevel,
elevatedLevel: entry?.elevatedLevel,
responseUsage: entry?.responseUsage,
groupActivation: entry?.groupActivation,
inputTokens: entry?.inputTokens,
outputTokens: entry?.outputTokens,
totalTokens: entry?.totalTokens,
totalTokensFresh: entry?.totalTokensFresh,
model: entry?.model,
modelProvider: entry?.modelProvider,
providerOverride: entry?.providerOverride,
modelOverride: entry?.modelOverride,
contextTokens: entry?.contextTokens
};
}
/** Converts and sorts a session store by most recent activity first. */
function toSessionDisplayRows(store) {
return Object.entries(store).map(([key, entry]) => toSessionDisplayRow(key, entry)).toSorted((a, b) => (b.updatedAt ?? 0) - (a.updatedAt ?? 0));
}
function truncateSessionKey(key) {
if (key.length <= 26) return key;
const head = Math.max(4, 16);
return `${key.slice(0, head)}...${key.slice(-6)}`;
}
/** Formats a session key cell for table output. */
function formatSessionKeyCell(key, rich) {
const label = truncateSessionKey(key).padEnd(26);
return rich ? theme.accent(label) : label;
}
/** Formats a relative session age cell for table output. */
function formatSessionAgeCell(updatedAt, rich) {
const padded = (updatedAt ? formatTimeAgo(Date.now() - updatedAt) : "unknown").padEnd(9);
return rich ? theme.muted(padded) : padded;
}
/** Formats a model cell for table output. */
function formatSessionModelCell(model, rich) {
const label = (model ?? "unknown").padEnd(14);
return rich ? theme.info(label) : label;
}
/** Formats compact per-session flags for table output. */
function formatSessionFlagsCell(row, rich) {
const label = [
row.thinkingLevel ? `think:${row.thinkingLevel}` : null,
row.verboseLevel ? `verbose:${row.verboseLevel}` : null,
row.traceLevel ? `trace:${row.traceLevel}` : null,
row.reasoningLevel ? `reasoning:${row.reasoningLevel}` : null,
row.elevatedLevel ? `elev:${row.elevatedLevel}` : null,
row.responseUsage ? `usage:${row.responseUsage}` : null,
row.groupActivation ? `activation:${row.groupActivation}` : null,
row.systemSent ? "system" : null,
row.abortedLastRun ? "aborted" : null,
row.runtimePolicySessionKey ? `policy:${row.runtimePolicySessionKey}` : null,
row.sessionId ? `id:${row.sessionId}` : null
].filter(Boolean).join(" ");
return label.length === 0 ? "" : rich ? theme.muted(label) : label;
}
//#endregion
export { toSessionDisplayRow as a, resolveSessionDisplayModel as c, formatSessionModelCell as i, resolveSessionDisplayModelRef as l, formatSessionFlagsCell as n, toSessionDisplayRows as o, formatSessionKeyCell as r, resolveSessionDisplayDefaults as s, formatSessionAgeCell as t };