diff --git a/packages/server/src/server/persisted-config.test.ts b/packages/server/src/server/persisted-config.test.ts index 45e5e638a..fbbff8582 100644 --- a/packages/server/src/server/persisted-config.test.ts +++ b/packages/server/src/server/persisted-config.test.ts @@ -561,6 +561,39 @@ describe("PersistedConfigSchema voice mode config", () => { }); }); +describe("loadPersistedConfig", () => { + test("accepts the documented config schema marker", () => { + const home = createTempHome(); + const configPath = path.join(home, "config.json"); + try { + writeFileSync( + configPath, + `${JSON.stringify( + { + $schema: "https://paseo.sh/schemas/paseo.config.v1.json", + version: 1, + daemon: { + listen: "127.0.0.1:6767", + hostnames: ["localhost", ".localhost"], + mcp: { enabled: true }, + }, + }, + null, + 2, + )}\n`, + ); + + const config = loadPersistedConfig(home); + + expect(config.daemon?.listen).toBe("127.0.0.1:6767"); + expect(config.daemon?.hostnames).toEqual(["localhost", ".localhost"]); + expect(config.daemon?.mcp?.enabled).toBe(true); + } finally { + rmSync(home, { recursive: true, force: true }); + } + }); +}); + describe.skipIf(process.platform === "win32")("persisted config file permissions", () => { test("initializes config.json with private permissions", () => { const home = createTempHome(); diff --git a/packages/server/src/server/persisted-config.ts b/packages/server/src/server/persisted-config.ts index a5ba18970..cdeb0568b 100644 --- a/packages/server/src/server/persisted-config.ts +++ b/packages/server/src/server/persisted-config.ts @@ -203,6 +203,8 @@ function normalizeAgentProviders(value: unknown): unknown { export const PersistedConfigSchema = z .object({ + $schema: z.string().optional(), + // v1 schema marker version: z.literal(1).optional(), diff --git a/packages/website/public/schemas/paseo.config.v1.json b/packages/website/public/schemas/paseo.config.v1.json index 8ee78217b..f306777a8 100644 --- a/packages/website/public/schemas/paseo.config.v1.json +++ b/packages/website/public/schemas/paseo.config.v1.json @@ -4,6 +4,9 @@ "PaseoConfigV1": { "type": "object", "properties": { + "$schema": { + "type": "string" + }, "version": { "type": "number", "const": 1