// Package witness provides the polecat monitoring agent. package witness import ( "time" ) // State represents the witness's running state. type State string const ( // StateStopped means the witness is not running. StateStopped State = "stopped" // StateRunning means the witness is actively monitoring. StateRunning State = "running" // StatePaused means the witness is paused (not monitoring). StatePaused State = "paused" ) // Witness represents a rig's polecat monitoring agent. type Witness struct { // RigName is the rig this witness monitors. RigName string `json:"rig_name"` // State is the current running state. State State `json:"state"` // PID is the process ID if running in background. PID int `json:"pid,omitempty"` // StartedAt is when the witness was started. StartedAt *time.Time `json:"started_at,omitempty"` // MonitoredPolecats tracks polecats being monitored. MonitoredPolecats []string `json:"monitored_polecats,omitempty"` // LastCheckAt is when the last health check was performed. LastCheckAt *time.Time `json:"last_check_at,omitempty"` // Stats contains cumulative statistics. Stats WitnessStats `json:"stats"` // Config contains auto-spawn configuration. Config WitnessConfig `json:"config"` // SpawnedIssues tracks which issues have been spawned (to avoid duplicates). SpawnedIssues []string `json:"spawned_issues,omitempty"` } // WitnessConfig contains configuration for the witness. type WitnessConfig struct { // MaxWorkers is the maximum number of concurrent polecats (default: 4). MaxWorkers int `json:"max_workers"` // SpawnDelayMs is the delay between spawns in milliseconds (default: 5000). SpawnDelayMs int `json:"spawn_delay_ms"` // AutoSpawn enables automatic spawning for ready issues (default: true). AutoSpawn bool `json:"auto_spawn"` // EpicID limits spawning to children of this epic (optional). EpicID string `json:"epic_id,omitempty"` // IssuePrefix limits spawning to issues with this prefix (optional). IssuePrefix string `json:"issue_prefix,omitempty"` } // WitnessStats contains cumulative witness statistics. type WitnessStats struct { // TotalChecks is the total number of health checks performed. TotalChecks int `json:"total_checks"` // TotalNudges is the total number of nudges sent to polecats. TotalNudges int `json:"total_nudges"` // TotalEscalations is the total number of escalations to mayor. TotalEscalations int `json:"total_escalations"` // TodayChecks is the number of checks today. TodayChecks int `json:"today_checks"` // TodayNudges is the number of nudges today. TodayNudges int `json:"today_nudges"` }