mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-12 07:20:45 +00:00
refactor(shared): centralize assistant identity and usage timeseries types
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
16
src/shared/assistant-identity-values.ts
Normal file
16
src/shared/assistant-identity-values.ts
Normal 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);
|
||||
}
|
||||
16
src/shared/session-usage-timeseries-types.ts
Normal file
16
src/shared/session-usage-timeseries-types.ts
Normal 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[];
|
||||
};
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user