fix(core): support snake_case in policy settings schema

This commit is contained in:
Akhilesh Kumar
2026-03-02 23:07:58 +00:00
parent 03c6714c6d
commit 7554679d15
3 changed files with 160 additions and 17 deletions
+37 -17
View File
@@ -25,22 +25,42 @@ export const MCPServerConfigSchema = z.object({
/**
* Zod schema for PolicySettings.
*/
export const PolicySettingsSchema = z.object({
mcp: z
.object({
excluded: z.array(z.string()).optional(),
allowed: z.array(z.string()).optional(),
})
.optional(),
tools: z
.object({
exclude: z.array(z.string()).optional(),
allowed: z.array(z.string()).optional(),
})
.optional(),
mcpServers: z.record(z.object({ trust: z.boolean().optional() })).optional(),
policyPaths: z.array(z.string()).optional(),
workspacePoliciesDir: z.string().optional(),
});
export const PolicySettingsSchema = z.preprocess(
(val) => {
if (typeof val === 'object' && val !== null) {
const v = val as Record<string, unknown>;
// Map snake_case to camelCase
if (v.policy_paths && !v.policyPaths) {
v.policyPaths = v.policy_paths;
}
if (v.workspace_policies_dir && !v.workspacePoliciesDir) {
v.workspacePoliciesDir = v.workspace_policies_dir;
}
if (v.mcp_servers && !v.mcpServers) {
v.mcpServers = v.mcp_servers;
}
}
return val;
},
z.object({
mcp: z
.object({
excluded: z.array(z.string()).optional(),
allowed: z.array(z.string()).optional(),
})
.optional(),
tools: z
.object({
exclude: z.array(z.string()).optional(),
allowed: z.array(z.string()).optional(),
})
.optional(),
mcpServers: z
.record(z.object({ trust: z.boolean().optional() }))
.optional(),
policyPaths: z.array(z.string()).optional(),
workspacePoliciesDir: z.string().optional(),
}),
);
export const MCPServersConfigSchema = z.record(MCPServerConfigSchema);