import type { AgentId } from '../types.js';
import { type RotateCandidate } from './rotate.js';
import { type RegistryAccountRecord } from './account-pool.js';
/** Inputs to {@link foldRegistryCandidates} — injectable so the fold is unit-tested. */
export interface RunCandidateInputs {
    native: RotateCandidate[];
    records: RegistryAccountRecord[];
    runVersion: string | undefined;
}
/**
 * PURE: fold provider-account candidates into the native version-home list.
 *
 * A registry account runs in `runVersion` (the agent's default installed home);
 * the token/key overrides that home's own login at exec, so any home works. It
 * carries `providerAccount` so the run path routes it through the existing
 * `--account` injection (`resolveSpawnAccount` → `accountEnv`). An account already
 * covered by a native login is skipped by accountKey. With no installed version
 * there is nowhere to execute a registry account, so the native list passes
 * through unchanged.
 */
export declare function foldRegistryCandidates(agent: AgentId, inputs: RunCandidateInputs): RotateCandidate[];
/**
 * Candidate list for the `agents run` strategy pick, account-centric: the usual
 * native version-home candidates PLUS one candidate per provider account whose
 * provider can authenticate `agent` and whose credential is present locally
 * (RUSH-3182). This is what makes a setup-token / API-key account balance-eligible.
 *
 * Passed as the `collect` argument to {@link resolveRunVersion} on the RUN path,
 * and used by session recovery (`resolveSessionRecovery`, PHNX-3626) so an
 * origin-account limit can rotate to a healthy provider account and stay NATIVE.
 * The other consumers of {@link collectRunCandidates} (watchdog, teams
 * placement) keep calling it directly and are unaffected. The existing
 * {@link pickBalancedCandidate} selects over the combined list, so the
 * revoked / rate-limit / exhausted logic is unchanged.
 */
export declare function collectRunCandidatesForRun(agent: AgentId): Promise<RotateCandidate[]>;
