refactor(shared): centralize assistant identity and usage timeseries types

This commit is contained in:
Peter Steinberger
2026-03-02 14:35:34 +00:00
parent 3efd224ec6
commit 693f61404d
6 changed files with 47 additions and 58 deletions

View File

@@ -3,6 +3,7 @@ import { resolveAgentIdentity } from "../agents/identity.js";
import { loadAgentIdentity } from "../commands/agents.config.js";
import type { OpenClawConfig } from "../config/config.js";
import { normalizeAgentId } from "../routing/session-key.js";
import { coerceIdentityValue } from "../shared/assistant-identity-values.js";
import {
isAvatarHttpUrl,
isAvatarImageDataUrl,
@@ -26,20 +27,6 @@ export type AssistantIdentity = {
emoji?: string;
};
function coerceIdentityValue(value: string | undefined, maxLength: number): string | undefined {
if (typeof value !== "string") {
return undefined;
}
const trimmed = value.trim();
if (!trimmed) {
return undefined;
}
if (trimmed.length <= maxLength) {
return trimmed;
}
return trimmed.slice(0, maxLength);
}
function isAvatarUrl(value: string): boolean {
return isAvatarHttpUrl(value) || isAvatarImageDataUrl(value);
}

View File

@@ -1,4 +1,8 @@
import type { NormalizedUsage } from "../agents/usage.js";
import type {
SessionUsageTimePoint as SharedSessionUsageTimePoint,
SessionUsageTimeSeries as SharedSessionUsageTimeSeries,
} from "../shared/session-usage-timeseries-types.js";
export type CostBreakdown = {
total?: number;
@@ -141,22 +145,9 @@ export type DiscoveredSession = {
firstUserMessage?: string;
};
export type SessionUsageTimePoint = {
timestamp: number;
input: number;
output: number;
cacheRead: number;
cacheWrite: number;
totalTokens: number;
cost: number;
cumulativeTokens: number;
cumulativeCost: number;
};
export type SessionUsageTimePoint = SharedSessionUsageTimePoint;
export type SessionUsageTimeSeries = {
sessionId?: string;
points: SessionUsageTimePoint[];
};
export type SessionUsageTimeSeries = SharedSessionUsageTimeSeries;
export type SessionLogEntry = {
timestamp: number;

View File

@@ -0,0 +1,16 @@
export function coerceIdentityValue(
value: string | undefined,
maxLength: number,
): string | undefined {
if (typeof value !== "string") {
return undefined;
}
const trimmed = value.trim();
if (!trimmed) {
return undefined;
}
if (trimmed.length <= maxLength) {
return trimmed;
}
return trimmed.slice(0, maxLength);
}

View File

@@ -0,0 +1,16 @@
export type SessionUsageTimePoint = {
timestamp: number;
input: number;
output: number;
cacheRead: number;
cacheWrite: number;
totalTokens: number;
cost: number;
cumulativeTokens: number;
cumulativeCost: number;
};
export type SessionUsageTimeSeries = {
sessionId?: string;
points: SessionUsageTimePoint[];
};

View File

@@ -1,3 +1,5 @@
import { coerceIdentityValue } from "../../../src/shared/assistant-identity-values.js";
const MAX_ASSISTANT_NAME = 50;
const MAX_ASSISTANT_AVATAR = 200;
@@ -10,20 +12,6 @@ export type AssistantIdentity = {
avatar: string | null;
};
function coerceIdentityValue(value: string | undefined, maxLength: number): string | undefined {
if (typeof value !== "string") {
return undefined;
}
const trimmed = value.trim();
if (!trimmed) {
return undefined;
}
if (trimmed.length <= maxLength) {
return trimmed;
}
return trimmed.slice(0, maxLength);
}
export function normalizeAssistantIdentity(
input?: Partial<AssistantIdentity> | null,
): AssistantIdentity {

View File

@@ -1,3 +1,7 @@
import type {
SessionUsageTimePoint as SharedSessionUsageTimePoint,
SessionUsageTimeSeries as SharedSessionUsageTimeSeries,
} from "../../../src/shared/session-usage-timeseries-types.js";
import type { SessionsUsageResult as SharedSessionsUsageResult } from "../../../src/shared/usage-types.js";
export type SessionsUsageEntry = SharedSessionsUsageResult["sessions"][number];
@@ -13,19 +17,6 @@ export type CostUsageSummary = {
totals: SessionsUsageTotals;
};
export type SessionUsageTimePoint = {
timestamp: number;
input: number;
output: number;
cacheRead: number;
cacheWrite: number;
totalTokens: number;
cost: number;
cumulativeTokens: number;
cumulativeCost: number;
};
export type SessionUsageTimePoint = SharedSessionUsageTimePoint;
export type SessionUsageTimeSeries = {
sessionId?: string;
points: SessionUsageTimePoint[];
};
export type SessionUsageTimeSeries = SharedSessionUsageTimeSeries;