Files
paseo/packages/server/src/shared/messages.providers-snapshot.test.ts
T
Mohamed Boudra 4b3603604a feat: enable/disable providers from settings
Adds a per-provider toggle in Settings → Providers, persisted via daemon
config, so users can turn off providers they don't have installed (or
don't want to use) without removing them from the registry.

Disabled providers stay visible everywhere — settings, `paseo provider
ls`, MCP `list_providers`, model/mode lists — marked as disabled rather
than silently filtered. Availability probes are skipped for them, and
attempts to launch an agent or fetch models/modes from a disabled
provider return a clear "Provider '<id>' is disabled" error.

Schema additions (`enabled` on `ProviderSnapshotEntry`, MCP provider
summary) are backward-compatible: optional with a default of true so
older clients continue to parse new daemon messages.

CLI: `paseo provider ls` gains an ENABLED column; JSON output includes
the new field.
2026-04-25 14:00:38 +07:00

85 lines
2.2 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("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);
});
});