openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
50 lines (49 loc) • 2.64 kB
JavaScript
import { l as isUnscopedSessionKeySentinel } from "./session-key-BnWWjqNc.js";
import { o as resolveSessionStorePathCore } from "./paths-CXdaYWF_.js";
import { _ as resolveSessionAgentId } from "./agent-scope-DbtJyKUL.js";
import { E as resolveSessionStorePathForScope } from "./session-accessor.sqlite-entry-CWk3jL7s.js";
import { t as formatTokenCount } from "./token-format-D942KbWN.js";
import { r as formatUsd } from "./usage-format-DhUP1uYp.js";
import { a as loadCostUsageSummary, n as loadSessionCostSummary } from "./session-cost-usage-IjaucgZJ.js";
//#region src/auto-reply/reply/commands-session-cost.runtime.ts
async function formatSessionUsageCostSummary(params) {
const agentId = (params.sessionKey && !isUnscopedSessionKeySentinel(params.sessionKey) ? resolveSessionAgentId({
sessionKey: params.sessionKey,
config: params.cfg,
agentId: params.agentId
}) : params.agentId) ?? "main";
const sessionSummary = await loadSessionCostSummary({
sessionId: params.sessionEntry?.sessionId,
sessionEntry: params.sessionEntry,
...params.sessionEntry?.sessionId && params.sessionKey ? { sessionTarget: {
agentId,
sessionId: params.sessionEntry.sessionId,
sessionKey: params.sessionKey,
storePath: resolveSessionStorePathForScope({
agentId,
sessionKey: params.sessionKey,
storePath: params.storePath ?? resolveSessionStorePathCore(params.cfg.session?.store, { agentId })
})
} } : {},
config: params.cfg,
agentId
});
const summary = await loadCostUsageSummary({
config: params.cfg,
agentId
});
const sessionCost = formatUsd(sessionSummary?.totalCost);
const sessionTokens = sessionSummary?.totalTokens ? formatTokenCount(sessionSummary.totalTokens) : void 0;
const sessionSuffix = (sessionSummary?.missingCostEntries ?? 0) > 0 ? " (partial)" : "";
const sessionLine = sessionCost || sessionTokens ? `Session ${sessionCost ?? "n/a"}${sessionSuffix}${sessionTokens ? ` · ${sessionTokens} tokens` : ""}` : "Session n/a";
const todayKey = (/* @__PURE__ */ new Date()).toLocaleDateString("en-CA");
const todayEntry = summary.daily.find((entry) => entry.date === todayKey);
const todayCost = formatUsd(todayEntry?.totalCost);
const todaySuffix = (todayEntry?.missingCostEntries ?? 0) > 0 ? " (partial)" : "";
const todayLine = `Today ${todayCost ?? "n/a"}${todaySuffix}`;
const last30Cost = formatUsd(summary.totals.totalCost);
const last30Suffix = summary.totals.missingCostEntries > 0 ? " (partial)" : "";
return `💸 Usage cost\n${sessionLine}\n${todayLine}\n${`Last 30d ${last30Cost ?? "n/a"}${last30Suffix}`}`;
}
//#endregion
export { formatSessionUsageCostSummary };