export type Role = 'user' | 'assistant' | 'system' export type ChatMessage = { id: string role: Role content: string } export type Choice = { id: string label: string } // Contract types export type ContractType = 'simple' | 'specification' | 'execute' export type ContractPhase = 'research' | 'specify' | 'plan' | 'execute' | 'review' export type ContractStatus = 'active' | 'completed' | 'archived' export interface ContractSummary { id: string name: string description?: string contractType: string phase: string status: string supervisorTaskId?: string localOnly: boolean fileCount: number taskCount: number repositoryCount: number version: number createdAt: string // Red team fields redTeamEnabled?: boolean } export interface Contract { id: string ownerId: string name: string description?: string contractType: string phase: string status: string supervisorTaskId?: string autonomousLoop: boolean phaseGuard: boolean completedDeliverables: Record localOnly: boolean redTeamEnabled: boolean redTeamPrompt?: string version: number createdAt: string updatedAt: string } export interface CreateContractRequest { name: string description?: string contractType?: string initialPhase?: string autonomousLoop?: boolean phaseGuard?: boolean localOnly?: boolean redTeamEnabled?: boolean redTeamPrompt?: string } export interface TaskSummary { id: string contractId?: string contractName?: string contractPhase?: string contractStatus?: string parentTaskId?: string depth: number name: string status: string priority: number progressSummary?: string subtaskCount: number version: number isSupervisor: boolean isRedTeam: boolean hidden: boolean createdAt: string updatedAt: string } // Red team notification types export type NotificationSeverity = 'info' | 'warning' | 'critical' export interface RedTeamNotification { id: string contractId: string redTeamTaskId: string relatedTaskId?: string message: string severity: NotificationSeverity filePath?: string context?: string delivered: boolean deliveredAt?: string acknowledged: boolean acknowledgedAt?: string createdAt: string }