import { z } from "zod"; /** * The single typed source of truth for per-CLI facts the harness acts on: * detection signals, the native bootloader file(s), and MCP config location. * * Before this, the same 11-CLI key space was hand-maintained across three * parallel `Record` tables (`SIGNALS` in cli-detect.ts, `CLI_BOOTLOADERS` * + the data half of `CLI_META` in bootstrap-ai/canon.ts) — three places to edit * when adding a tool. They now derive from this one validated table. * * Data model adapted from the @canonical/harnesses registry (LGPL-3.0 — shape and * the objective per-tool MCP facts only; no code copied) and the three-state * support vocabulary from RevealUI's DEGRADATION_TABLE (FSL-1.1-MIT — concept only). * * Scope note: aih is NOT an agent runtime, so runtime-orchestration fields * (dispatch / workboard / lifecycleEvents / memory backend) are deliberately * excluded — nothing here would consume them. Capability fields (hooks/sandbox * granularity, context window) are likewise omitted until a command reads them, * to avoid shipping researched-but-unverified numbers. */ /** Does the tool support a capability natively, can aih emit a fallback, or is it unavailable. */ export declare const SUPPORT_LEVELS: readonly ["native", "fallback", "absent"]; declare const CliEntry: z.ZodObject<{ id: z.ZodString; label: z.ZodString; configDirs: z.ZodArray; binaries: z.ZodArray; bootloaders: z.ZodArray; readsAgentsMd: z.ZodOptional; loadsDirectory: z.ZodOptional; machineSkillDir: z.ZodOptional; mcp: z.ZodObject<{ support: z.ZodEnum<{ absent: "absent"; fallback: "fallback"; native: "native"; }>; configPath: z.ZodOptional; configKey: z.ZodOptional>; configFormat: z.ZodOptional>; }, z.core.$strip>; settings: z.ZodOptional>; dryRunProbe: z.ZodDiscriminatedUnion<[z.ZodObject<{ kind: z.ZodLiteral<"command">; argv: z.ZodArray; output: z.ZodOptional>; timeoutMs: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ kind: z.ZodLiteral<"manual">; detail: z.ZodString; }, z.core.$strip>], "kind">; activation: z.ZodOptional>; contextCap: z.ZodOptional; tlsOrigins: z.ZodOptional>; }, z.core.$strip>; export type CliEntry = z.infer; /** The registry, validated once at load — a malformed future edit fails the suite, not prod. */ export declare const CLI_REGISTRY: Record; /** The CLI ids in canonical order (the single source `SUPPORTED_CLIS` derives from). */ export declare const REGISTRY_IDS: string[]; /** One CLI's full registry entry. */ export declare function entry(cli: string): CliEntry; /** * The registered CLI whose config dir owns `path`, or `undefined` when no target does. * * Lets a check that inspects a tool-specific artifact scope itself to the repo's target * set instead of hardcoding a tool name — a finding about an untargeted tool's file * cannot be repaired by a command that writes nothing for that tool (issue #554). */ export declare function owningCli(path: string): string | undefined; /** The deduped, order-stable set of bootloader files for a CLI selection. */ export declare function bootloadersFor(clis: readonly string[]): string[]; /** * The deduped, order-stable set of directories whose whole tree loads as agent context * for a CLI selection. File-only targets contribute nothing. Consumers derive their * walk set from this instead of hardcoding tool paths, so a newly registered target is * measured without editing them (the hand-kept-list failure of issue #553). */ export declare function loadedDirsFor(clis: readonly string[]): string[]; export {};