import type { ModelMessage, ToolSet, TypedToolCall } from "ai"; import type { RuntimeActionRequest, RuntimeActionResult } from "#runtime/actions/types.js"; import { type JsonObject } from "#shared/json.js"; import type { HarnessEmitFn, HarnessSession, HarnessToolMap, SessionStateMap, StepInput } from "#harness/types.js"; /** * Serializable event coordinates for one pending runtime-action batch. * * Runtime action results are projected back onto the parent stream using the * same turn and step identity as the originating `actions.requested` batch. */ interface PendingRuntimeActionEventMetadata { readonly sequence: number; readonly stepIndex: number; readonly turnId: string; } /** * Serializable pending runtime-action batch stored on `session.state`. * * `childContinuationTokens` maps each `subagent-call` action's * `callId` to the deterministic child token minted by dispatch, so * the harness can clear proxy-input entries on result resolution * without re-deriving the token (keeps `harness/` runtime-agnostic). */ interface PendingRuntimeActionBatch { readonly actions: readonly RuntimeActionRequest[]; readonly childContinuationTokens?: Readonly>; readonly event: PendingRuntimeActionEventMetadata; readonly responseMessages: readonly ModelMessage[]; } /** * Outcome of resolving a pending runtime-action batch. */ interface ResolvePendingRuntimeActionsResult { readonly messages: ModelMessage[]; readonly outcome: "continue" | "resolved" | "unresolved"; readonly session: HarnessSession; } /** Returns the pending runtime-action batch stored on the session, if any. */ export declare function getPendingRuntimeActionBatch(state: SessionStateMap | undefined): PendingRuntimeActionBatch | undefined; /** * Returns true when the session is parked on a pending runtime-action batch. */ export declare function hasPendingRuntimeActionBatch(state: SessionStateMap | undefined): boolean; export declare function clearPendingRuntimeActionBatch(session: HarnessSession): HarnessSession; /** * Stores one pending runtime-action batch on the session. */ export declare function setPendingRuntimeActionBatch(input: { readonly actions: readonly RuntimeActionRequest[]; readonly event: PendingRuntimeActionEventMetadata; readonly responseMessages: readonly ModelMessage[]; readonly session: HarnessSession; }): HarnessSession; /** * Records the child continuation token for a dispatched subagent-call * so {@link resolvePendingRuntimeActions} can clear proxy-input * entries when the child finishes. */ export declare function recordPendingSubagentChildToken(input: { readonly callId: string; readonly childContinuationToken: string; readonly session: HarnessSession; }): HarnessSession; /** * Discriminated item consumed by {@link accumulateRuntimeActionResults} * so the loop can process interleaved deliveries and results without * coupling to a concrete `HookPayload` shape. */ type RuntimeActionAccumulatorItem = { readonly kind: "deliver"; readonly value: TDeliver; } | { readonly kind: "runtime-action-result"; readonly results: readonly RuntimeActionResult[]; }; /** * Accumulates runtime-action results until every pending key has a * matching result. The caller passes the ordered key list so the * workflow runtime can drive the loop without hydrating a session. */ export declare function accumulateRuntimeActionResults(input: { readonly bufferedDeliveries: TDeliver[]; readonly getNext: () => Promise | null>; readonly initialResults?: readonly RuntimeActionResult[]; readonly pendingActionKeys: readonly string[] | undefined; }): Promise; /** * Resolves one pending runtime-action batch back into model history. * * When all expected runtime action results are present, this appends the * stored assistant tool-call messages plus synthesized tool-result messages to * history, clears the pending batch, and emits `subagent.completed` and * `action.result` events back onto the parent stream. */ export declare function resolvePendingRuntimeActions(input: { readonly emit?: HarnessEmitFn; readonly session: HarnessSession; readonly stepInput?: StepInput; }): Promise; /** * Projects one AI SDK tool call into the eve runtime-action contract. */ export declare function createRuntimeActionRequestFromToolCall(input: { readonly toolCall: TypedToolCall; readonly tools: HarnessToolMap; }): RuntimeActionRequest; /** * Coerces an AI SDK tool-call `input` into the runtime-action `JsonObject` * contract, throwing a `TypeError` (with the original as `cause`) that names * the offending tool when the payload is not a JSON object. */ export declare function resolveToolCallInputObject(value: unknown, context: { readonly callId: string; readonly toolName: string; }): JsonObject; export {};