/** The fields of a hook payload this cares about. Everything else passes through. */ export interface HookPayload { tool_name?: string; tool_input?: Record; /** The agent's working directory, as the client reports it. */ cwd?: string; /** Some clients name the project root directly. */ project_dir?: string; projectDir?: string; [key: string]: unknown; } export interface HookProject { /** Directory to look for a ue-mcp.yml above, or null when nothing named one. */ dir: string | null; /** Where that came from, for the diagnostic log. */ source: string; } /** * The directory a hook payload is about. * * Order is most specific first: a project path the call itself carried, then an * editor the call addressed by name, then the client's reported cwd, then this * process's cwd. Every step is best-effort; a step that cannot answer hands on * to the next rather than failing the hook. */ export declare function hookProjectDir(payload: HookPayload, processCwd?: string, resolveEditor?: (name: string) => Promise): Promise; /** * Walk up from `dir` looking for a ue-mcp.yml, and report whether the feedback * hook should stay silent. * * True means silent, and it is the answer for three different situations, all * of which want the same behaviour: the config disables feedback, the config is * malformed, or there is no ue-mcp project above this directory at all. The * last is the one that matters here and it is deliberate: a hook that fires in * an unrelated repo is a stale install talking, and it is preserved unchanged * from before hooks knew about sessions. */ export declare function feedbackDisabledForDir(dir: string | null): Promise;