/** List delimiters the execution-side path parser splits a root on. */ export declare const APPROVAL_ROOT_DELIMITERS: RegExp; /** * Roots to key for one raw entry: the entry itself plus its list parts. Execution fans `a;b`, `a,b` * and whitespace lists out, so a key minted only from the unsplit string would miss every path the * search really walks — and a search that reports no keys is auto-allowed. Parts that do not resolve * are dropped below, so naming them here can only add keys that really exist. */ export declare function approvalRootCandidates(rawRoot: string): string[]; /** * Approval-cache keys for one search call, or `undefined` when no root resolves * to anything rememberable. * * `splitBase` is the calling tool's own root parser ({@link parseSearchPath} for * `grep`, {@link parseFindPattern} for `glob`), so a glob root reports the * folder the tool actually walks instead of the pattern. `isRecursive` says * whether that root is walked below its subfolders (`grep` always is; a `glob` * pattern only with `**`); such a root reports a tree key instead of the folder * key. Nothing here expands a glob, materializes an archive member, or walks a * directory: each root costs at most one `statSync`. An omitted `path` makes the * tool search the session cwd, so that folder is reported too; a supplied root * that resolves to nothing — a public web URL (whose contents are public * already, the contract `read` follows), an unreadable target, or a missing path * — contributes no key. */ export declare function searchApprovalCacheTargets(roots: readonly string[], cwd: string, splitBase: (root: string) => string, isRecursive?: (root: string) => boolean, skipCandidate?: (candidate: string, wholeList: boolean) => boolean): readonly string[] | undefined;