/**
 * "Does this message describe something someone has to do?"
 *
 * A deliberately small, explainable heuristic rather than a model call: it
 * runs on every rendered message, has to be instant, and a false positive
 * only ever costs one ignorable chip. The shape follows what shipping
 * products converge on for action-item detection (Slack's action items,
 * Gmail's suggested tasks, Todoist/Things quick-add parsing):
 *
 *  1. Explicit markers win outright ("TODO:", "action item", "[ ]").
 *  2. Otherwise accumulate weak signals — a request phrase, an imperative
 *     opening verb, a deadline cue, a directed @mention — and fire on two.
 *     One signal alone is too loose ("thanks, please" / any verb-initial
 *     sentence), two is where precision gets usable.
 *  3. Veto anything that reads as already-done, or as chatter.
 *
 * Exported separately from the component so it can be unit-tested against a
 * corpus of real-looking messages (see task-detect.test.ts) — the thresholds
 * are the kind of thing that regress silently when edited by feel.
 */
export interface TaskIntent {
    isTask: boolean;
    /** Why it fired — surfaced in the chip's tooltip so the guess is legible. */
    reason: string;
    score: number;
    /** ISO instant at local midnight when the text names a date, else null. */
    dueAt: string | null;
}
/**
 * Pull a due date out of chat-style deadline phrasing ("by tomorrow",
 * "do this by Sunday", "next Friday"). Returns an ISO instant at local
 * midnight so the task modal's date input shows the calendar day the
 * speaker meant, not the UTC day.
 */
export declare function parseTaskDueAt(text: string | null | undefined, now?: Date): string | null;
export declare function detectTaskIntent(text: string | null | undefined): TaskIntent;
//# sourceMappingURL=task-detect.d.ts.map