mirror of
https://github.com/getpaseo/paseo.git
synced 2026-07-29 12:01:31 +00:00
* perf(protocol): generate inbound ws validators * perf(client): use generated ws validation * docs(protocol): document generated validation * fix(protocol): make validator generation source-only * test(protocol): cover explicit provider model normalization * fix(protocol): preserve inbound compat defaults * fix(protocol): make validator import rewrite portable * fix(protocol): harden validation safety checks * fix(protocol): guard generated validator boundaries * fix(protocol): normalize legacy inbound defaults * fix(protocol): simplify generated validation safety net * fix(protocol): keep cold typecheck source-only * fix(protocol): encapsulate validator codegen * fix(protocol): bootstrap source-alias typechecks * fix(app): keep source aliases out of bundler config * fix(protocol): harden validator codegen packaging * fix(protocol): own zod-aot patches in generator * fix(protocol): trim validator safety net * fix(client): normalize provider updates before dispatch * fix(protocol): keep validator generation out of install
75 lines
2.4 KiB
TypeScript
75 lines
2.4 KiB
TypeScript
import type { AgentModelDefinition, ProviderSnapshotEntry } from "@getpaseo/protocol/agent-types";
|
|
import { normalizeAgentModelDefinition } from "@getpaseo/protocol/agent-types";
|
|
import type {
|
|
GetProvidersSnapshotResponseMessage,
|
|
ListProviderModelsResponseMessage,
|
|
SessionOutboundMessage,
|
|
} from "@getpaseo/protocol/messages";
|
|
|
|
type ListProviderModelsPayload = ListProviderModelsResponseMessage["payload"];
|
|
type GetProvidersSnapshotPayload = GetProvidersSnapshotResponseMessage["payload"];
|
|
type ProvidersSnapshotUpdatePayload = Extract<
|
|
SessionOutboundMessage,
|
|
{ type: "providers_snapshot_update" }
|
|
>["payload"];
|
|
|
|
// COMPAT(model-normalize): daemon normalizes at source (provider-registry) — shim covers older daemons; drop when floor >= v0.1.104
|
|
function normalizeAgentModels(
|
|
models: AgentModelDefinition[] | undefined,
|
|
): AgentModelDefinition[] | undefined {
|
|
if (!models) {
|
|
return models;
|
|
}
|
|
|
|
let changed = false;
|
|
const normalized = models.map((model) => {
|
|
const next = normalizeAgentModelDefinition(model);
|
|
changed ||= next !== model;
|
|
return next;
|
|
});
|
|
|
|
return changed ? normalized : models;
|
|
}
|
|
|
|
function normalizeProviderSnapshotEntry(entry: ProviderSnapshotEntry): ProviderSnapshotEntry {
|
|
const models = normalizeAgentModels(entry.models);
|
|
return models === entry.models ? entry : { ...entry, models };
|
|
}
|
|
|
|
function normalizeProviderSnapshotEntries(
|
|
entries: ProviderSnapshotEntry[],
|
|
): ProviderSnapshotEntry[] {
|
|
let changed = false;
|
|
const normalized = entries.map((entry) => {
|
|
const next = normalizeProviderSnapshotEntry(entry);
|
|
changed ||= next !== entry;
|
|
return next;
|
|
});
|
|
|
|
return changed ? normalized : entries;
|
|
}
|
|
|
|
export function normalizeListProviderModelsPayload(
|
|
payload: ListProviderModelsPayload,
|
|
): ListProviderModelsPayload {
|
|
const models = normalizeAgentModels(payload.models);
|
|
return models === payload.models ? payload : { ...payload, models };
|
|
}
|
|
|
|
export function normalizeProvidersSnapshotPayload<
|
|
T extends GetProvidersSnapshotPayload | ProvidersSnapshotUpdatePayload,
|
|
>(payload: T): T {
|
|
const entries = normalizeProviderSnapshotEntries(payload.entries);
|
|
return entries === payload.entries ? payload : { ...payload, entries };
|
|
}
|
|
|
|
export function normalizeProviderSnapshotUpdateMessage(
|
|
msg: SessionOutboundMessage,
|
|
): SessionOutboundMessage {
|
|
if (msg.type !== "providers_snapshot_update") {
|
|
return msg;
|
|
}
|
|
|
|
return { ...msg, payload: normalizeProvidersSnapshotPayload(msg.payload) };
|
|
}
|