mirror of
https://github.com/getpaseo/paseo.git
synced 2026-11-05 07:54:38 +00:00
* fix(providers): remember model selections across workspace creation Keep saved model intent independent of catalogue readiness and use the caller-owned host and directory from the first render. Share discovery through provider-owned keys while preserving execution context. Give each target one committed snapshot, publish actual transitions atomically, and share catalogue content across client directory associations. Regression coverage exercises successful repeated creation and provider lifecycle boundaries. * fix(providers): preserve shared cache bodies during eviction Admit directory references with their bodies, retain reference recency during eviction and recovery, and remove the unused persisted index. Refresh known workspace catalogues concurrently. Make repeated-creation picker states explicit and seed mode tests from the installed provider catalogue, preserving assertions across Codex versions. * fix(providers): bound discovery independently per provider Settings refresh repairs all remembered targets, which otherwise starts an unbounded number of discoveries. Admit work after catalogue-key deduplication and keep each provider’s budget independent so a stalled provider cannot block another. Preserve active accounting across configuration changes and settle obsolete queued requests during replacement and shutdown.
114 lines
3.1 KiB
TypeScript
114 lines
3.1 KiB
TypeScript
import { describe, expect, test } from "vitest";
|
|
import {
|
|
GetProvidersSnapshotResponseMessageSchema,
|
|
ProviderSnapshotEntrySchema,
|
|
ProvidersSnapshotUpdateMessageSchema,
|
|
} from "./messages.js";
|
|
|
|
describe("provider snapshot message schemas", () => {
|
|
test("defaults missing provider snapshot entry enabled state to true", () => {
|
|
const parsed = ProviderSnapshotEntrySchema.parse({
|
|
provider: "codex",
|
|
status: "ready",
|
|
label: "Codex",
|
|
});
|
|
|
|
expect(parsed.enabled).toBe(true);
|
|
});
|
|
|
|
test("preserves disabled provider snapshot entries", () => {
|
|
const parsed = ProviderSnapshotEntrySchema.parse({
|
|
provider: "claude",
|
|
status: "unavailable",
|
|
enabled: false,
|
|
label: "Claude",
|
|
});
|
|
|
|
expect(parsed.enabled).toBe(false);
|
|
});
|
|
|
|
test("preserves enabled provider snapshot entries", () => {
|
|
const parsed = ProviderSnapshotEntrySchema.parse({
|
|
provider: "opencode",
|
|
status: "loading",
|
|
enabled: true,
|
|
label: "OpenCode",
|
|
});
|
|
|
|
expect(parsed.enabled).toBe(true);
|
|
});
|
|
|
|
test("preserves provider snapshot entry source", () => {
|
|
const parsed = ProviderSnapshotEntrySchema.parse({
|
|
provider: "gemini",
|
|
status: "ready",
|
|
enabled: true,
|
|
source: "custom",
|
|
label: "Gemini",
|
|
});
|
|
|
|
expect(parsed.source).toBe("custom");
|
|
});
|
|
|
|
test("defaults missing enabled state in providers snapshot response entries", () => {
|
|
const parsed = GetProvidersSnapshotResponseMessageSchema.parse({
|
|
type: "get_providers_snapshot_response",
|
|
payload: {
|
|
entries: [
|
|
{
|
|
provider: "codex",
|
|
status: "ready",
|
|
label: "Codex",
|
|
},
|
|
{
|
|
provider: "claude",
|
|
status: "unavailable",
|
|
enabled: false,
|
|
label: "Claude",
|
|
},
|
|
],
|
|
generatedAt: "2026-04-24T00:00:00.000Z",
|
|
requestId: "req-providers",
|
|
},
|
|
});
|
|
|
|
expect(parsed.payload.entries.map((entry) => entry.enabled)).toEqual([true, false]);
|
|
});
|
|
|
|
test("defaults missing enabled state in providers snapshot update entries", () => {
|
|
const parsed = ProvidersSnapshotUpdateMessageSchema.parse({
|
|
type: "providers_snapshot_update",
|
|
payload: {
|
|
cwd: "/tmp/repo",
|
|
entries: [
|
|
{
|
|
provider: "codex",
|
|
status: "ready",
|
|
label: "Codex",
|
|
},
|
|
],
|
|
generatedAt: "2026-04-24T00:00:00.000Z",
|
|
},
|
|
});
|
|
|
|
expect(parsed.payload.entries[0]?.enabled).toBe(true);
|
|
});
|
|
});
|
|
|
|
test("accepts a bodyless announcement with separate discovery freshness", async () => {
|
|
const { validateWSOutboundMessage } = await import("./validation/ws-outbound.js");
|
|
const message = {
|
|
type: "providers_snapshot_update",
|
|
payload: {
|
|
cwd: "/project",
|
|
entries: [],
|
|
snapshotHash: "content-hash",
|
|
fetchedAt: { codex: "2026-09-06T12:00:00.000Z" },
|
|
generatedAt: "2026-09-06T13:00:00.000Z",
|
|
},
|
|
};
|
|
expect(ProvidersSnapshotUpdateMessageSchema.parse(message)).toEqual(message);
|
|
const result = validateWSOutboundMessage({ type: "session", message });
|
|
expect(result.success).toBe(true);
|
|
});
|