← back to ClawCoder

src/lib/profiles/types.ts

80 lines

export type AgeGroup = 'teen' | 'young_adult' | 'professional' | 'pre_senior' | 'senior'
export type SkillLevel = 'beginner' | 'intermediate' | 'expert'
export type MotionLevel = 'minimal' | 'reduced' | 'normal' | 'full'
export type ContrastLevel = 'standard' | 'enhanced' | 'high'
export type LayoutDensity = 'compact' | 'comfortable' | 'spacious'
export type ThemeMode = 'light' | 'dark' | 'auto'

export interface UIConfig {
  fontSize: number
  fontScale: number
  motionLevel: MotionLevel
  contrast: ContrastLevel
  touchTargetMin: number
  layoutDensity: LayoutDensity
  theme: ThemeMode
}

export interface TemplateConfig {
  slug: string
  verbosity: 'minimal' | 'low' | 'medium' | 'medium-high' | 'high' | 'maximum'
  safety: 'standard' | 'high' | 'maximum' | 'policy-driven'
  targetLines: [number, number]
  content: string
}

export interface LearningResource {
  title: string
  url: string
  type: 'video' | 'course' | 'article' | 'repo' | 'docs'
  level: SkillLevel
}

export interface SkillRef {
  name: string
  description: string
}

export interface MCPServerRef {
  name: string
  package: string
  installCmd: string
  requiresKey: boolean
  trustLevel: 'official' | 'verified' | 'community'
}

export interface SubagentRef {
  name: string
  model: 'haiku' | 'sonnet' | 'opus' | 'inherit'
  tools: string[]
}

export interface HookRule {
  matcher: string
  hooks: { type: 'command'; command: string }[]
}

export interface HookConfig {
  PreToolUse?: HookRule[]
  PostToolUse?: HookRule[]
  Stop?: HookRule[]
  SessionStart?: HookRule[]
  PreCompact?: HookRule[]
}

export interface Profile {
  slug: string
  ageGroup: AgeGroup
  skillLevel: SkillLevel
  displayName: string
  persona: string
  ui: UIConfig
  template: TemplateConfig
  skillBundle: SkillRef[]
  mcpServers: MCPServerRef[]
  hooks: HookConfig
  subagents: SubagentRef[]
  learningPath: LearningResource[]
  rulesFiles: { path: string; content: string }[]
}