import type { TypingMode } from "../../config/types.js"; import type { TemplateContext } from "../templating.js"; import type { GetReplyOptions, ReplyPayload } from "../types.js"; import type { TypingController } from "./typing.js"; import { type SessionEntry } from "../../config/sessions.js"; import { type VerboseLevel } from "../thinking.js"; import { type FollowupRun, type QueueSettings } from "./queue.js"; /** * Executes a full koi reply turn: memory flush → koi LLM call (with model * fallback) → heartbeat productivity enforcement → block-streaming pipeline * flush → reply payload assembly → usage diagnostics. * * Handles session resets on compaction/role-ordering failures and queues * follow-up runs when the session is already active. * * @returns One or more reply payloads to send, or `undefined` if the run was * queued, aborted, or produced no renderable output. */ export declare function runReplyKoi(params: { commandBody: string; followupRun: FollowupRun; queueKey: string; resolvedQueue: QueueSettings; shouldSteer: boolean; shouldFollowup: boolean; isActive: boolean; isStreaming: boolean; opts?: GetReplyOptions; typing: TypingController; sessionEntry?: SessionEntry; sessionStore?: Record; sessionKey?: string; storePath?: string; defaultModel: string; koiCfgContextTokens?: number; resolvedVerboseLevel: VerboseLevel; isNewSession: boolean; blockStreamingEnabled: boolean; blockReplyChunking?: { minChars: number; maxChars: number; breakPreference: "paragraph" | "newline" | "sentence"; flushOnParagraph?: boolean; }; resolvedBlockStreamingBreak: "text_end" | "message_end"; sessionCtx: TemplateContext; shouldInjectGroupIntro: boolean; typingMode: TypingMode; }): Promise;