import { z } from "zod" import { McpNameSchema } from "../mcp/types" const PermissionValue = z.enum(["ask", "allow", "deny"]) const BashPermission = z.union([ PermissionValue, z.record(z.string(), PermissionValue), ]) const AgentPermissionSchema = z.object({ edit: PermissionValue.optional(), bash: BashPermission.optional(), webfetch: PermissionValue.optional(), doom_loop: PermissionValue.optional(), external_directory: PermissionValue.optional(), }) export const AgentNameSchema = z.enum([ "oracle", "librarian", "explore", "frontend-ui-ux-engineer", "document-writer", ]) export const AgentOverrideConfigSchema = z.object({ model: z.string().optional(), temperature: z.number().min(0).max(2).optional(), top_p: z.number().min(0).max(1).optional(), prompt: z.string().optional(), tools: z.record(z.string(), z.boolean()).optional(), disable: z.boolean().optional(), description: z.string().optional(), mode: z.enum(["subagent", "primary", "all"]).optional(), color: z .string() .regex(/^#[0-9A-Fa-f]{6}$/) .optional(), permission: AgentPermissionSchema.optional(), }) export const AgentOverridesSchema = z.record(AgentNameSchema, AgentOverrideConfigSchema) export const OhMyOpenCodeConfigSchema = z.object({ $schema: z.string().optional(), disabled_mcps: z.array(McpNameSchema).optional(), disabled_agents: z.array(AgentNameSchema).optional(), agents: AgentOverridesSchema.optional(), }) export type OhMyOpenCodeConfig = z.infer export type AgentOverrideConfig = z.infer export type AgentOverrides = z.infer export type AgentName = z.infer export { McpNameSchema, type McpName } from "../mcp/types"