/** * The external (Rust) binaries hoocode can use, and what each one is worth. * * hoocode is self-sufficient without any of them: `SearchCodebase` and @-file * autocomplete fall back to pure-JS implementations, and the features that have * no fallback (web, voice) are off or inert rather than broken. These binaries are an * *expansion* layer, which is exactly why they were invisible - nothing failed * loudly enough to tell anyone they existed. * * This module is the single description of that layer. The `/settings` pane * renders it; the same table says which settings rows are gated on a binary, so * a row that cannot do anything today can say so instead of lying. */ import { type ManagedTool, type ManagedToolStatus } from "../utils/tools-manager.js"; /** How hoocode gets a binary it does not already have. */ export type Acquisition = /** Fetched in the background at startup. */ "startup" /** Fetched the first time the feature is actually used. */ | "on-demand" /** Never fetched implicitly; install it yourself or point the env var at it. */ | "manual"; export interface ExternalToolDoc { tool: ManagedTool; /** Row label in the pane. */ label: string; /** What the binary does for hoocode, in one line. */ summary: string; /** What it turns on, feature by feature. */ enables: string[]; /** What hoocode does instead when it is missing. Never "nothing works". */ fallback: string; acquisition: Acquisition; /** Env vars that change how this binary is resolved or driven. */ env: string[]; /** * `/settings` row ids whose effect depends on this binary. A row listed here * is annotated (not hidden) while the binary is missing: hiding it would * recreate the discoverability hole this whole surface exists to close. */ dependentRows: string[]; /** settings.json keys this binary gates, for docs and search. */ settingsKeys: string[]; } /** * Ordered so the two that silently make everything faster come first, then the * three that add capability hoocode does not otherwise have. */ export declare const EXTERNAL_TOOLS: readonly ExternalToolDoc[]; export interface ExternalToolStatus extends ExternalToolDoc, ManagedToolStatus { installed: boolean; /** * Whether hoocode would fetch it if the feature were used right now. False in * offline mode, and on Android where the published Linux builds do not run. */ downloadable: boolean; } /** Short, fixed-width-ish status word for the pane's value column. */ export declare function statusLabel(status: ExternalToolStatus): string; /** * Resolve every external tool. Never downloads: this is what the pane shows * *before* the user opts into anything. */ export declare function describeExternalTools(): ExternalToolStatus[]; /** Index of pane-row id -> the tool it needs, for annotating gated rows. */ export declare function buildRowGates(statuses: readonly ExternalToolStatus[]): Map; //# sourceMappingURL=external-tools.d.ts.map