/** * `r.doctor()` — local health and configuration diagnostics, owned by the * Node SDK: config directory, wallet, local project keys, API reachability, * tier and organization lifecycle, account health, function runtime * staleness, recovery posture, the vault, and the scoped source scan. * * The report is `{ ok, blocking[], warnings[], checks[] }`. `ok` answers ONE * question — can this agent ship from here — and is true exactly when * `blocking[]` is empty. Every check carries a `severity`: * blocking would stop a deploy * advisory a gap worth surfacing that never stops a deploy (`warnings[]`) * info nothing to act on * A status outside the known vocabulary fails closed as blocking. * * `run402 doctor` is a shim over this; the checks that belong to the calling * program itself (whether the installed CLI is current, its resident vault * helper) are hooks the caller supplies. */ import type { Run402 } from "../index.js"; /** * The stable, complete registry of ordinary-mode check names, in the order * each normally runs: the one list `only` validates against. */ export declare const DOCTOR_CHECK_NAMES: readonly ["config_dir", "cli_update", "wallet", "projects", "api_reachable", "tier", "account_health", "runtime_staleness", "retiring_routes", "recovery_posture", "vault", "source_scan"]; export type DoctorCheckName = (typeof DOCTOR_CHECK_NAMES)[number]; export type DoctorSeverity = "blocking" | "advisory" | "info"; /** One check as a check function produces it; `severity` is derived when absent. */ export interface DoctorCheck { name: string; status: string; severity?: DoctorSeverity; value?: unknown; hint?: string; message?: string; code?: string; [key: string]: unknown; } export interface DoctorReportCheck extends DoctorCheck { severity: DoctorSeverity; } export interface DoctorReport { ok: boolean; blocking: Array<{ check: string; status: string; message: string; hint?: string; }>; warnings: Array<{ check: string; code?: string; message: string; hint?: string; }>; checks: DoctorReportCheck[]; } export interface DoctorOptions { /** Include extra detail (timing, wallet details without secrets). */ verbose?: boolean; /** Force a live update check in the `cliUpdate` hook. */ refresh?: boolean; /** Skip the source-tree scan. */ noScan?: boolean; /** Advanced arbitrary scan directory; does not claim deployment readiness. */ scanDir?: string | null; /** Application directory for deployment diagnostics. */ dir?: string | null; /** Explicit manifest for deployment diagnostics. */ manifest?: string | null; /** Target THIS project's vault check (scoped to the vault check only). */ project?: string | null; /** Run only these checks; every other check's work is skipped entirely. */ only?: string[]; /** Directory the vault targeting and application scope start from. Default `process.cwd()`. */ cwd?: string; /** * The calling program's own update check, producing the `cli_update` * check. Absent: `cli_update` reports `skipped`. */ cliUpdate?: (opts: { refresh: boolean; }) => Promise; /** * The calling program's resident vault helper, reported inside the vault * check's `value.daemon`. Absent: no `daemon` field. */ daemonStatus?: () => Promise>; /** Receives the one-line warning when `project` disagrees with the repository's own remote. */ warn?: (line: string) => void; } /** * Fold per-check results into `{ ok, blocking[], warnings[], checks[] }`: * one warning per gap string of every advisory check (one for an advisory * check with no gaps), one blocking entry per blocking check. Pure. */ export declare function buildDoctorReport(rawChecks: DoctorCheck[]): DoctorReport; /** Refuse an `only` name outside {@link DOCTOR_CHECK_NAMES} (`BAD_USAGE`, listing the valid names). */ export declare function assertDoctorCheckNames(names: readonly string[]): void; /** Run the ordinary-mode checks against `r` and fold them into the report. */ export declare function runDoctor(r: Run402, opts?: DoctorOptions): Promise; //# sourceMappingURL=doctor.d.ts.map