import type { Writable } from 'node:stream'; export interface SpawnOutcome { status: number | null; error?: Error | undefined; } export interface RunTazeOptions { /** Resolves the absolute path of taze's CLI entry. Injected by tests. */ resolveCliPath?: () => string; /** Runs the CLI and reports how it exited. Injected by tests. */ spawn?: (nodePath: string, argv: string[]) => SpawnOutcome; /** Stream that error output is written to. Defaults to `process.stderr`. */ stderr?: Writable; } /** * Runs taze from nmr's own dependency tree, forwarding `args`, and returns its exit code. * * Consumers depend on nmr, not on taze, so taze is transitive and its bin is absent from the consumer's * root `node_modules/.bin`. This launcher is what bridges that gap: pnpm links nmr's own bins into the * consumer root, and nmr resolves taze from the tree it does control. * * A request timeout is the one argument added, and only where `args` carries none. Neither other site can hold * it: an invocation's trailing arguments are appended to the resolved command string, so the same flag in the * `upgrade` script would be doubled by `nmr upgrade --request-timeout ...`, and taze's parser collects the pair * into an array it reads as a near-zero deadline; a `taze.config.ts` setting lands in the object taze's own CLI * defaults overwrite. Every other argument is forwarded untouched, so invocation policy (`--recursive`) stays in * the script registry, visible in `nmr` help output and overridable per repo, and upgrade policy in `taze.ts`. */ export declare function runTaze(args: string[], options?: RunTazeOptions): number; /** Resolves the absolute path of taze's CLI entry from nmr's own dependency tree. */ export declare function resolveTazeCliPath(): string;