export type AssistantMessageContent = TextContent | ToolUse export { parseAssistantMessage } from "./parse-assistant-message" export interface TextContent { type: "text" content: string partial: boolean } export const toolUseNames = [ "execute_command", "read_file", "write_to_file", "apply_diff", "insert_code_block", "search_and_replace", "search_files", "list_files", "list_code_definition_names", "browser_action", "use_mcp_tool", "access_mcp_resource", "ask_followup_question", "attempt_completion", "switch_mode", ] as const // Converts array of tool call names into a union type ("execute_command" | "read_file" | ...) export type ToolUseName = (typeof toolUseNames)[number] export const toolParamNames = [ "command", "path", "content", "line_count", "regex", "file_pattern", "recursive", "action", "url", "coordinate", "text", "server_name", "tool_name", "arguments", "uri", "question", "result", "diff", "start_line", "end_line", "mode_slug", "reason", "operations", ] as const export type ToolParamName = (typeof toolParamNames)[number] export interface ToolUse { type: "tool_use" name: ToolUseName // params is a partial record, allowing only some or none of the possible parameters to be used params: Partial> partial: boolean } export interface ExecuteCommandToolUse extends ToolUse { name: "execute_command" // Pick, "command"> makes "command" required, but Partial<> makes it optional params: Partial, "command">> } export interface ReadFileToolUse extends ToolUse { name: "read_file" params: Partial, "path">> } export interface WriteToFileToolUse extends ToolUse { name: "write_to_file" params: Partial, "path" | "content" | "line_count">> } export interface InsertCodeBlockToolUse extends ToolUse { name: "insert_code_block" params: Partial, "path" | "operations">> } export interface SearchFilesToolUse extends ToolUse { name: "search_files" params: Partial, "path" | "regex" | "file_pattern">> } export interface ListFilesToolUse extends ToolUse { name: "list_files" params: Partial, "path" | "recursive">> } export interface ListCodeDefinitionNamesToolUse extends ToolUse { name: "list_code_definition_names" params: Partial, "path">> } export interface BrowserActionToolUse extends ToolUse { name: "browser_action" params: Partial, "action" | "url" | "coordinate" | "text">> } export interface UseMcpToolToolUse extends ToolUse { name: "use_mcp_tool" params: Partial, "server_name" | "tool_name" | "arguments">> } export interface AccessMcpResourceToolUse extends ToolUse { name: "access_mcp_resource" params: Partial, "server_name" | "uri">> } export interface AskFollowupQuestionToolUse extends ToolUse { name: "ask_followup_question" params: Partial, "question">> } export interface AttemptCompletionToolUse extends ToolUse { name: "attempt_completion" params: Partial, "result" | "command">> } export interface SwitchModeToolUse extends ToolUse { name: "switch_mode" params: Partial, "mode_slug" | "reason">> }