/** Pending approval transport (08-ui §3). */ import type { ApprovalDecision, ApprovalId, ApprovalRequest } from "../../core/index.js"; import { type RunResult } from "../chrome/run-activity.js"; import { type PollOptions } from "./use-resource.js"; export declare function useApprovals(options?: PollOptions): { pending: ApprovalRequest[]; error: Error | undefined; isLoading: boolean; refresh(): Promise; decide(ids: ApprovalId | ApprovalId[], decision: ApprovalDecision, decideOptions?: { grantSetId?: string; }): Promise; }; /** * The ONE attention source. Everything that asks for the user's attention * counts from here: the launcher's numbered badge, the approvals queue, and the * quiet dot for a run that finished while they were elsewhere. Two surfaces * reading two counts * could disagree in front of the user; this is the same hook, so they can't. * * Everything `useApprovals` returns (rows, `decide`, `refresh`) comes through * unchanged, so a surface that shows the count AND the cards needs one hook. */ export declare function useAttention(options?: PollOptions): ReturnType & { /** Asks waiting on the user right now (the badge number, the queue count). */ askCount: number; /** Alias for the rows behind that count, in the strip's own words. */ asks: ApprovalRequest[]; /** Something arrived that nobody has looked at yet (the quiet dot): a * finished run's result, or an app that has never rendered for this person. */ unseenResults: boolean; /** How many of those are apps — the arrival half of the dot. */ unseenApps: number; /** The finished run itself — headline + the thread to deep-link into. */ lastResult: RunResult | undefined; /** The user looked: clears the dot (and any completion toast). */ markResultsSeen(): void; };