* feat: add live model and thinking option preferences UI * refactor: remove agent variant support and clean up thinking options * feat: live model + thinking presets (RPC)
57 lines
2.0 KiB
TypeScript
57 lines
2.0 KiB
TypeScript
import type { AgentLifecycleStatus } from "@server/shared/agent-lifecycle";
|
|
import type { AgentSnapshotPayload } from "@server/shared/messages";
|
|
import type { AgentPermissionRequest } from "@server/server/agent/agent-sdk-types";
|
|
|
|
export function derivePendingPermissionKey(
|
|
agentId: string,
|
|
request: AgentPermissionRequest
|
|
): string {
|
|
const fallbackId =
|
|
request.id ||
|
|
(typeof request.metadata?.id === "string" ? request.metadata.id : undefined) ||
|
|
request.name ||
|
|
request.title ||
|
|
`${request.kind}:${JSON.stringify(request.input ?? request.metadata ?? {})}`;
|
|
|
|
return `${agentId}:${fallbackId}`;
|
|
}
|
|
|
|
export function normalizeAgentSnapshot(snapshot: AgentSnapshotPayload, serverId: string) {
|
|
const createdAt = new Date(snapshot.createdAt);
|
|
const updatedAt = new Date(snapshot.updatedAt);
|
|
const lastUserMessageAt = snapshot.lastUserMessageAt ? new Date(snapshot.lastUserMessageAt) : null;
|
|
const attentionTimestamp = snapshot.attentionTimestamp
|
|
? new Date(snapshot.attentionTimestamp)
|
|
: null;
|
|
const archivedAt = snapshot.archivedAt ? new Date(snapshot.archivedAt) : null;
|
|
|
|
return {
|
|
serverId,
|
|
id: snapshot.id,
|
|
provider: snapshot.provider,
|
|
status: snapshot.status as AgentLifecycleStatus,
|
|
createdAt,
|
|
updatedAt,
|
|
lastUserMessageAt,
|
|
lastActivityAt: updatedAt,
|
|
capabilities: snapshot.capabilities,
|
|
currentModeId: snapshot.currentModeId,
|
|
availableModes: snapshot.availableModes ?? [],
|
|
pendingPermissions: snapshot.pendingPermissions ?? [],
|
|
persistence: snapshot.persistence ?? null,
|
|
runtimeInfo: snapshot.runtimeInfo,
|
|
lastUsage: snapshot.lastUsage,
|
|
lastError: snapshot.lastError ?? null,
|
|
title: snapshot.title ?? null,
|
|
cwd: snapshot.cwd,
|
|
model: snapshot.model ?? null,
|
|
thinkingOptionId: snapshot.thinkingOptionId ?? null,
|
|
requiresAttention: snapshot.requiresAttention ?? false,
|
|
attentionReason: snapshot.attentionReason ?? null,
|
|
attentionTimestamp,
|
|
archivedAt,
|
|
labels: snapshot.labels,
|
|
};
|
|
}
|
|
|