import type { ModelMessage, ToolSet, TypedToolCall } from "ai"; import type { RuntimeToolCallActionRequest, RuntimeToolResultActionResult } from "#runtime/actions/types.js"; import type { InputRequest } from "#runtime/input/types.js"; import type { HarnessSession, SessionStateMap, StepInput } from "#harness/types.js"; /** * Stream-emit coordinates carried so a parked batch's resolution can attribute * its events to the turn and step that requested the input. */ interface PendingInputBatchEvent { readonly sequence: number; readonly stepIndex: number; readonly turnId: string; } /** * Denied tool-call approvals from one resolved batch, ready for the caller to * emit as `rejected` `action.result` events against the originating turn. */ export interface RejectedActionBatch { readonly event: PendingInputBatchEvent; readonly results: readonly RuntimeToolResultActionResult[]; } /** * Returns true when the step input carries user-facing turn input. */ export declare function hasStepInput(input?: StepInput): boolean; /** * Merges any queued follow-up input into the current step input and clears it * from session state. * * Used when the harness has to process a pending tool-approval response first * and defer the user's new message to the next internal model step. */ export declare function consumeDeferredStepInput(input: { readonly input?: StepInput; readonly session: HarnessSession; }): { readonly input?: StepInput; readonly session: HarnessSession; }; /** * Returns true when the session carries queued follow-up input for the next * internal harness step. */ export declare function hasDeferredStepInput(session: HarnessSession): boolean; /** * Resolves pending input at the start of a harness step. * * When the pending batch contains tool-approval requests and the step input * also carries a follow-up user message, the message is deferred to the next * internal harness step rather than appended to the current turn. This is * necessary because AI SDK cannot process tool-approval responses and a new * user message in the same request -- the approval must be resolved in * isolation first, and the user message replayed on the subsequent step via * {@link consumeDeferredStepInput}. */ export declare function resolvePendingInput(input: { readonly history?: readonly ModelMessage[]; readonly resolveApprovalKey?: (request: InputRequest) => string | undefined; readonly session: HarnessSession; readonly stepInput?: StepInput; }): ResolvePendingInputResult; type ResolvePendingInputResult = { readonly deferredMessage?: boolean; readonly outcome: "resolved" | "continue" | "unresolved"; readonly messages: ModelMessage[]; readonly rejectedActions?: RejectedActionBatch; readonly session: HarnessSession; }; /** * Returns true when the session is parked on a pending HITL batch * (tool approvals or `ask_question` prompts). */ export declare function hasPendingInputBatch(state: SessionStateMap | undefined): boolean; /** * Stores one pending HITL batch on the session until the user responds. */ export declare function setPendingInputBatch(input: { readonly event?: PendingInputBatchEvent; readonly requests: readonly InputRequest[]; readonly responseMessages: readonly ModelMessage[]; readonly session: HarnessSession; }): HarnessSession; /** * Returns the set of tool names that have been approved at least once * during this session. */ export declare function getApprovedTools(session: HarnessSession): ReadonlySet; /** * Creates a runtime tool-call action shape from an AI SDK tool call. */ export declare function createRuntimeToolCallActionFromToolCall(input: { readonly toolCall: TypedToolCall; }): RuntimeToolCallActionRequest; export {};