/**
 * heuristicExtractor — zero-dep, zero-cost beat extractor.
 *
 * Produces one beat per non-system message with a simple
 * `"{role} said: {text}"` summary. Importance defaults to 0.5 except
 * for messages that trip obvious salience signals (questions from the
 * user, assistant tool-use, etc.) where a higher score fires.
 *
 * Why ship this as a default?
 *   Users who enable `narrativePipeline()` without configuring an
 *   extractor still get sensible behavior — compressed per-turn beats
 *   with provenance — without paying for an LLM call. The beats are
 *   less semantic than an LLM extractor's but still useful for recall.
 *   Users who want higher-quality beats opt into `llmExtractor()`.
 *
 * Heuristic rules (intentionally simple — this is a baseline, not
 * state-of-the-art):
 *   - User messages → importance 0.6 (users are generally salient)
 *   - User questions (ending in '?') → importance 0.75
 *   - Messages containing "my name is" / "i am" → importance 0.9
 *     (identity beats are high-value for recall)
 *   - Assistant tool-use → importance 0.5 (process step)
 *   - Assistant final answers → importance 0.5
 *   - Tool results → importance 0.3 (noise for recall most of the time)
 *
 * Category hints:
 *   - `"identity"` for name / role assertions
 *   - `"question"` for user questions
 *   - `"tool-result"` for tool outputs
 *   - undefined otherwise (category is optional)
 *
 * This is heuristic. It will miss nuances the LLM extractor catches.
 * Swap for `llmExtractor({ provider })` when quality matters.
 */
import type { BeatExtractor } from './extractor.js';
/** Default heuristic. Takes no config; factory function for consistency. */
export declare function heuristicExtractor(): BeatExtractor;
