import type { Enablement } from "../dx/enablement.js"; export interface VersionReport { cliVersion: string; nodeVersion: string; apiUrl: string; /** Where apiUrl came from, in creator-facing words. */ apiSource: string; /** Set when a binding names a different API that was NOT used. */ ignoredBindingApiUrl?: string; /** True when the resolved host is the built-in fallback (nothing configured). */ isDefault: boolean; /** True when this machine may send DX reports unattended. */ dxSendEnabled: boolean; /** ISO8601 UTC of the grant. Present only when enabled. */ dxSendEnabledAt?: string; /** The instant the age is computed against, so renderVersion stays pure. */ dxAgeAsOf: number; } export interface VersionEnv { envApiUrl?: string; machineApiUrl?: string; bindingApiUrl?: string; allowCustomApi?: boolean; nodeVersion: string; cliVersion: string; /** Durable unattended-send state, already read. Absent reads as not enabled. */ enablement?: Enablement; /** Injected so the age is testable without waiting a day. */ now?: number; } /** * Decide what to report. Pure, so the transcript is testable without a home * directory, an env var, or a built package. */ export declare function buildVersionReport(env: VersionEnv): VersionReport; /** * The transcript. Two aligned columns so the host and its provenance read as one * fact, not two. */ export declare function renderVersion(r: VersionReport): string[]; /** * Read the machine's real state and produce the report. * * Every read here is wrapped. This is the command people run WHEN THINGS ARE * ALREADY BROKEN, and a truncated config.json — the state that most needs * diagnosing — makes `loadMachineConfig` throw, since readJsonIfExists rethrows * everything that is not ENOENT. A diagnostic that dies on the fault it exists to * report is worse than one that reports less. */ export declare function versionReport(cwd: string, opts: { cliVersion: string; allowCustomApi?: boolean; }): Promise;