/ src / lib / server / daemon / types.ts
types.ts
  1  import type { EstopState } from '@/types'
  2  
  3  export interface DaemonStatusPayload {
  4    running: boolean
  5    schedulerActive: boolean
  6    autostartEnabled: boolean
  7    backgroundServicesEnabled: boolean
  8    reducedMode: boolean
  9    manualStopRequested: boolean
 10    estop: EstopState
 11    queueLength: number
 12    lastProcessed: number | null
 13    nextScheduled: number | null
 14    heartbeat: Record<string, unknown> | null
 15    health: {
 16      monitorActive: boolean
 17      connectorMonitorActive: boolean
 18      staleSessions: number
 19      connectorsInBackoff: number
 20      connectorsExhausted: number
 21      checkIntervalSec: number
 22      connectorCheckIntervalSec: number
 23      integrity: {
 24        enabled: boolean
 25        lastCheckedAt: number | null
 26        lastDriftCount: number
 27      }
 28    }
 29    webhookRetry: {
 30      pendingRetries: number
 31      deadLettered: number
 32    }
 33    guards: {
 34      healthCheckRunning: boolean
 35      connectorHealthCheckRunning: boolean
 36      shuttingDown: boolean
 37      providerCircuitBreakers: number
 38    }
 39  }
 40  
 41  export interface DaemonHealthSummaryPayload {
 42    ok: boolean
 43    uptime: number
 44    components: {
 45      daemon: { status: 'healthy' | 'stopped' | 'degraded' }
 46      connectors: { healthy: number; errored: number; total: number }
 47      providers: { healthy: number; cooldown: number; total: number }
 48      gateways: { healthy: number; degraded: number; total: number }
 49    }
 50    estop: boolean
 51    nextScheduledTask: number | null
 52  }
 53  
 54  export interface PersistedDaemonStatusRecord {
 55    pid: number | null
 56    adminPort: number | null
 57    desiredState: 'running' | 'stopped'
 58    manualStopRequested: boolean
 59    startedAt: number | null
 60    stoppedAt: number | null
 61    lastHeartbeatAt: number | null
 62    updatedAt: number
 63    lastLaunchSource: string | null
 64    lastStopSource: string | null
 65    lastError: string | null
 66    lastStatus: DaemonStatusPayload | null
 67    lastHealthSummary: DaemonHealthSummaryPayload | null
 68  }
 69  
 70  export interface DaemonAdminMetadata {
 71    pid: number
 72    port: number
 73    token: string
 74    launchedAt: number
 75    source: string | null
 76  }
 77  
 78  export interface DaemonConnectorRuntimeState {
 79    status: 'running' | 'stopped' | 'error'
 80    authenticated?: boolean
 81    hasCredentials?: boolean
 82    qrDataUrl?: string | null
 83    reconnectAttempts?: number
 84    nextRetryAt?: number
 85    reconnectError?: string | null
 86    reconnectExhausted?: boolean
 87    presence?: {
 88      lastMessageAt: number | null
 89      channelId: string | null
 90    } | null
 91  }
 92  
 93  export interface DaemonRunningConnectorInfo {
 94    id: string
 95    name: string
 96    platform: string
 97    agentId: string | null
 98    supportsSend: boolean
 99    configuredTargets: string[]
100    recentChannelId: string | null
101  }