/** * The dispatcher's vocabulary, in one place. `cli.ts` receives `process.argv[2]` raw — which is * whatever the builder typed, a mistyped flag or a whole absolute path — and the trail must * never carry that: an unrecognised word is reported as `unknown`. It also keeps the issue * tracker honest, since a typo per machine would otherwise be its own `command` value. * * `known.test.ts` pins this list against the `switch` in `cli.ts`, so a new subcommand cannot * be dispatched without joining the set (V11: one rule, one scan). */ export declare const KNOWN_COMMANDS: readonly ["agents", "deploy", "destroy", "explain", "identity", "init", "keys", "logout", "login", "logs", "mcp", "publish", "run", "secrets", "status", "test", "unlist"]; /** What the trail calls a command it does not recognise. Never the raw word. */ export declare const UNKNOWN_COMMAND = "unknown"; export declare function commandForTrail(sub: string | undefined): string; /** * The closest known command to a typo, or null when nothing is close enough. * * One builder produced fifteen `unknown command` failures in a session (production 2026-09-19). * We cannot see what they typed — the word is theirs and the trail redacts it — so a suggestion at * the moment of the mistake is the only lever we have. * * Plain Levenshtein with a distance ceiling that scales with the word: a two-edit guess at * `deploy` is worth offering, the same two edits against `mcp` is noise. A prefix match wins * outright, which is what a half-typed or tab-truncated word looks like. */ export declare function nearestCommand(word: string): string | null;