export type Protocol = 'TCP' | 'UDP'; export type ProfileItemType = 'process' | 'folder' | 'exe'; export type TargetKind = 'local' | 'external'; export type ProxyProtocol = 'socks5' | 'http'; export type ComponentId = 'control-app' | 'proxyfier' | 'singbox'; export type ComponentState = 'installed' | 'missing' | 'stopped' | 'running' | 'error'; export type ActivityLevel = 'info' | 'warning' | 'error' | 'success'; export interface ProfileItemInput { type: ProfileItemType | string; value: string; recursive?: boolean; } export interface ProfileInput { id?: string; name: string; enabled?: boolean; targetId?: string; protocols?: string[]; items?: ProfileItemInput[]; } export interface ProfileItem { type: ProfileItemType; value: string; recursive: boolean; } export interface Profile { id: string; name: string; enabled: boolean; targetId: string; protocols: Protocol[]; items: ProfileItem[]; } export interface TargetInput { id?: string; name: string; kind?: TargetKind | string; protocol?: ProxyProtocol | string; host: string; port: number; requiresComponent?: ComponentId | string; } export interface Target { id: string; name: string; kind: TargetKind; protocol: ProxyProtocol; host: string; port: number; requiresComponent?: ComponentId; } export interface ComponentStatus { id: ComponentId; name: string; state: ComponentState; installed: boolean; running: boolean; version?: string; path?: string; problems: string[]; actions: string[]; } export interface LocalSingBoxConfig { subscriptionDisplayUrl?: string; hasSubscription: boolean; selectedServerTag?: string; listenHost: string; listenPort: number; serviceName: string; installRoot: string; updatedAt?: string; } export interface SubscriptionServer { tag: string; type: string; server: string; serverPort: number; } export interface SubscriptionCache { servers: SubscriptionServer[]; userInfo: Record; fetchedAt: string; } export interface ActivityEntry { id: string; at: string; level: ActivityLevel; title: string; message: string; }