/** * Data-dependent follow-up hints (change: add-conclusion-followup-hints). * * A conclusion payload often already holds the field that makes one specific next call warranted: * a search hit that is a hub, dead-code candidates at low confidence, a blast radius naming specs * that will go stale. {@link FOLLOWUP_HINT_RULES} is a CLOSED, source-declared table: each rule * names its tool, a predicate over a field already in that tool's payload, the tool it suggests, * and a message. A rule reads existing classifier outputs (`isHub`, `confidence`, a count) and * never introduces a threshold of its own. * * Hints are receipts, not advice: `{ tool, trigger: { field, value }, message }`, at most * {@link MAX_FOLLOWUP_HINTS} per response, in table order. They are attached at dispatch, the one * point every transport passes through, so no handler carries hint logic. */ export interface FollowupHint { /** The tool the hint suggests calling next. */ tool: string; /** The payload field and value that fired the hint. */ trigger: { field: string; value: unknown; }; message: string; } export interface FollowupHintRule { /** The tool whose response the rule reads. */ forTool: string; /** The suggested tool. */ tool: string; /** The payload field the rule reads, as written in the trigger. */ field: string; /** The trigger value when the rule fires, else undefined. */ fire(payload: Record): unknown; message(value: unknown, payload: Record): string; } export declare const MAX_FOLLOWUP_HINTS = 2; export declare const FOLLOWUP_HINT_RULES: readonly FollowupHintRule[]; /** The hints `toolName`'s payload fires, in table order, at most {@link MAX_FOLLOWUP_HINTS}. */ export declare function followupHints(toolName: string, payload: unknown): FollowupHint[]; /** `payload` with a `followUp` array when a rule fires; otherwise `payload` unchanged. */ export declare function withFollowupHints(toolName: string, payload: unknown): unknown; //# sourceMappingURL=followup-hints.d.ts.map