/** * A turn that ends on narration has decided nothing: nothing submitted, no * terminal claim, no block reported. Both surfaces that own tracked work — the * workflow attempt and the delegated child — answer it the same way, with a * bounded, counted nudge sent at that turn's own end. Each nudge is itself a * turn, so the count is what closes the loop; after MAX_STOP_NUDGES the caller * falls back to whatever it did before. * * What counts as narration differs by surface, because the evidence differs. A * workflow attempt owns a submit tool and a fenced output block, so a turn that * used neither has objectively delivered nothing and the text only has to fail * to claim otherwise. A delegated child has no such tool — its reply IS the * deliverable — so there the classifier keeps the delegation contract's * fail-safe bias and fires only on an explicit continuation assertion. Both * surfaces share the suppressors, the wording, and the budget. */ /** Two, so a model that narrates twice still gets one more chance to submit * before the surface stops talking and lets its own timeout logic run. */ export declare const MAX_STOP_NUDGES = 2; export declare const STOP_NUDGE_TEXT: string; /** Whether this final text is a progress note and nothing more. */ export declare function isNonTerminalNarration(text: string): boolean; /** * Whether this turn end earns a stop nudge, given how many it has already had. * * The caller has already established that the turn submitted nothing, so the * text cannot be asked to prove the work is unfinished — ordinary progress talk * ("I am reviewing the remaining files now") is the whole case this exists for. * It only has to leave the two claims a nudge would contradict unmade: that the * work is done, and that the turn is waiting on an answer. An empty final text * asserts neither but narrates nothing either, so it stays with the ladder. */ export declare function planStopNudge(input: { finalText: string; stopNudgesSent: number; }): boolean; //# sourceMappingURL=stop-nudge.d.ts.map