/** * Message utilities */ import type { Message, ContentBlock, TextBlock, ToolUseBlock, ToolResultBlock } from '../providers/types.js'; /** * Create a user message */ export declare function userMessage(content: string): Message; /** * Create an assistant message */ export declare function assistantMessage(content: string | ContentBlock[]): Message; /** * Create a system message */ export declare function systemMessage(content: string): Message; /** * Create a text content block */ export declare function textBlock(text: string): TextBlock; /** * Create a tool use content block */ export declare function toolUseBlock(id: string, name: string, input: Record): ToolUseBlock; /** * Create a tool result content block */ export declare function toolResultBlock(toolUseId: string, content: string, isError?: boolean): ToolResultBlock; /** * Extract text content from a message */ export declare function getTextContent(message: Message): string; /** * Extract tool uses from a message */ export declare function getToolUses(message: Message): ToolUseBlock[]; /** * Check if a message contains tool uses */ export declare function hasToolUses(message: Message): boolean; /** * Extract tool results from a message */ export declare function getToolResults(message: Message): ToolResultBlock[]; /** * Validation result for tool use/result pairing */ export interface ToolPairingValidation { valid: boolean; errors: string[]; orphanedResults: string[]; missingResults: string[]; } /** * Validate that tool_result blocks have matching tool_use blocks. * This prevents API errors like "Tool result block missing corresponding tool_use block" * * @param messages - Array of messages to validate * @returns Validation result with details about any mismatches */ export declare function validateToolUseResultPairing(messages: Message[]): ToolPairingValidation; /** * Ensure a message has content field (even if empty). * Some APIs (like xAI) require content to be present even when tool_calls exist. * * This function handles messages from external sources that might not strictly * conform to our Message type (e.g., API responses with missing content). * * @param message - Message to normalize (may have missing content from external APIs) * @returns Message with guaranteed content field */ export declare function ensureMessageContent(message: Message | { role: string; content?: string | ContentBlock[] | null; }): Message; /** * Normalize all messages to ensure content fields are present. * * @param messages - Array of messages to normalize * @returns Normalized messages */ export declare function normalizeMessages(messages: Message[]): Message[]; /** * Repair tool use/result pairing issues in a message array. * * This function handles BOTH types of orphans with POSITIONAL requirements: * 1. Orphaned tool_result blocks (those without a matching tool_use BEFORE them) * - Causes: "function_response.name: Name cannot be empty" in Gemini * 2. Orphaned tool_use blocks (those without tool_result in IMMEDIATELY NEXT message) * - Causes: "tool_use ids were found without tool_result blocks" in Claude * * CRITICAL: Claude API requires tool_result to be in the IMMEDIATELY NEXT message * after the assistant message containing tool_use. This function validates that * positional requirement, not just existence anywhere in the array. * * This is particularly useful after context compaction/summarization, which may * remove messages and break tool_use/tool_result pairing. * * @param messages - Array of messages to repair * @returns New array with orphaned tool_use and tool_result blocks removed */ export declare function repairToolPairing(messages: Message[]): Message[];