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 HookNameSchema = z.enum([ "todo-continuation-enforcer", "context-window-monitor", "session-recovery", "session-notification", "comment-checker", "grep-output-truncator", "directory-agents-injector", "directory-readme-injector", "empty-task-response-detector", "think-mode", "anthropic-auto-compact", "rules-injector", "background-notification", "auto-update-checker", "ultrawork-mode", ]) 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 .object({ oracle: AgentOverrideConfigSchema.optional(), librarian: AgentOverrideConfigSchema.optional(), explore: AgentOverrideConfigSchema.optional(), "frontend-ui-ux-engineer": AgentOverrideConfigSchema.optional(), "document-writer": AgentOverrideConfigSchema.optional(), }) .partial() export const ClaudeCodeConfigSchema = z.object({ mcp: z.boolean().optional(), commands: z.boolean().optional(), skills: z.boolean().optional(), agents: z.boolean().optional(), hooks: z.boolean().optional(), }) export const OhMyOpenCodeConfigSchema = z.object({ $schema: z.string().optional(), disabled_mcps: z.array(McpNameSchema).optional(), disabled_agents: z.array(AgentNameSchema).optional(), disabled_hooks: z.array(HookNameSchema).optional(), agents: AgentOverridesSchema.optional(), claude_code: ClaudeCodeConfigSchema.optional(), google_auth: z.boolean().optional(), }) export type OhMyOpenCodeConfig = z.infer export type AgentOverrideConfig = z.infer export type AgentOverrides = z.infer export type AgentName = z.infer export type HookName = z.infer export { McpNameSchema, type McpName } from "../mcp/types"