export type HookEvent = | 'SessionStart' | 'SessionEnd' | 'Stop' | 'SubagentStop' | 'PreToolUse' | 'PostToolUse' | 'PostToolUseFailure' | 'Notification' | 'PreCompact'; export type SkillHookEvent = 'PreToolUse' | 'PostToolUse'; export interface AgentConfig { enabled: boolean; hooks: Partial>; } export interface SkillConfig { enabled: boolean; hooks: Partial>; } export type UITheme = string; // Dynamic: derives from installed pack ui/ directory names; 'off' disables UI sounds export interface SelectMode { scope: string; // 'global' | agent-name | 'skill/qualifiedName' event: string; // HookEvent | SkillHookEvent label: string; // e.g. "SESSION START" } export interface UISlotMap { click?: string; // relative path under ~/code/claude-sounds/ hover?: string; error?: string; pageChange?: string; // tab/group navigation toggle?: string; // expand/collapse sidebar items confirm?: string; // sound assigned, settings saved } export interface SoundAssignments { global: Partial>; agents: Record; skills: Record; settings: { masterVolume: number; enabled: boolean; theme: 'terran' | 'protoss' | 'zerg'; uiTheme: UITheme; uiSounds?: Record; // theme -> slot -> path }; } export interface SoundAsset { id: string; filename: string; category: string; subcategory: string; path: string; waveform: number[]; // 16 RMS values, normalized 1–10 } export interface AgentInfo { name: string; filename: string; description?: string; model?: string; tools?: string; color?: string; prompt?: string; } export interface SkillInfo { name: string; // directory name, e.g. "hook-development" qualifiedName: string; // "plugin-dev:hook-development" or "ask-gemini" (user skill) description: string; namespace?: string; // "plugin-dev" for plugin skills, undefined for user skills } export interface AgentFormData { name: string; description: string; model: string; tools: string; color: string; prompt: string; }