import type { DaemonSession } from './types.js'; /** Bound on the per-turn reply-target map — reuses reply-target.ts's shared * pruneReplyTargets so eviction updates the SAME prune watermark the * --mention-back ambiguity gate reads (a synthetic trigger folding in must not * silently prune a participant-bearing sibling without raising the watermark). */ /** * Give a synthetic trigger turn the session's CURRENT fold-back anchor. * * `turnId` here is a daemon-minted `trg_`, not an accepted Lark message * id, but the daemon's chat-scope send chokepoint (daemon.ts sessionReply → * `resolveSessionReplyTarget(ds, fallbackTurnId(ds, turnId))`) treats ANY * explicit turnId as "this caller knows its own turn" and therefore skips the * fallback to `currentReplyTarget`. Without an entry of its own, a loud trigger * that folds into a `shared`-mode chat-scope session would resolve to * `mode:'plain'` and post this turn's streaming card / notices at the group top * level instead of inside the shared topic — the exact leak reply-target.ts * documents (and e619250d already fixed once) for turn-less daemon sends. * * Inheriting the anchor keeps the suppression key turn-exact while making the * routing answer identical to what the same turn got before it carried an id. * No anchor (flat chat session, or a thread-scope session that never uses this * map) → nothing registered, so behavior is unchanged. */ export declare function inheritTriggerReplyAnchor(ds: DaemonSession, turnId: string, nowIso?: string): void; export declare function armTriggerFinalSuppression(ds: DaemonSession, turnId: string, now?: number): void; export declare function isTriggerFinalSuppressed(ds: DaemonSession, turnId?: string, now?: number): boolean; export declare function disarmTriggerFinalSuppression(ds: DaemonSession, turnId: string): void; //# sourceMappingURL=trigger-final-suppression.d.ts.map