← 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 }[]
}