import type { ToolResultBlockParam } from '@anthropic-ai/sdk/resources/index.mjs'; import * as React from 'react'; import type { Message, ProgressMessage } from 'src/types/message.js'; import { extractTag } from 'src/utils/messages.js'; import type { ThemeName } from 'src/utils/theme.js'; import type { z } from 'zod/v4'; import { FallbackToolUseErrorMessage } from 'src/components/FallbackToolUseErrorMessage.js'; import { HighlightedCode } from 'src/components/HighlightedCode.js'; import { MessageResponse } from 'src/components/MessageResponse.js'; import { NotebookEditToolUseRejectedMessage } from 'src/components/NotebookEditToolUseRejectedMessage.js'; import { Box, Text } from '@anthropic/ink'; import { FilePathLink } from 'src/components/FilePathLink.js'; import type { Tools } from 'src/Tool.js'; import { getDisplayPath } from 'src/utils/file.js'; import type { inputSchema, Output } from './NotebookEditTool.js'; export function getToolUseSummary(input: Partial>> | undefined): string | null { if (!input?.notebook_path) { return null; } return getDisplayPath(input.notebook_path); } export function renderToolUseMessage( { notebook_path, cell_id, new_source, cell_type, edit_mode }: Partial>>, { verbose }: { verbose: boolean }, ): React.ReactNode { if (!notebook_path || !new_source || !cell_type) { return null; } const displayPath = verbose ? notebook_path : getDisplayPath(notebook_path); if (verbose) { return ( <> {displayPath} {`@${cell_id}, content: ${new_source.slice(0, 30)}…, cell_type: ${cell_type}, edit_mode: ${edit_mode ?? 'replace'}`} ); } return ( <> {displayPath} {`@${cell_id}`} ); } export function renderToolUseRejectedMessage( input: z.infer>, { verbose, }: { columns?: number; messages?: Message[]; progressMessagesForMessage?: ProgressMessage[]; theme?: ThemeName; tools?: Tools; verbose: boolean; }, ): React.ReactNode { return ( ); } export function renderToolUseErrorMessage( result: ToolResultBlockParam['content'], { verbose }: { verbose: boolean }, ): React.ReactNode { if (!verbose && typeof result === 'string' && extractTag(result, 'tool_use_error')) { return ( Error editing notebook ); } return ; } export function renderToolResultMessage({ cell_id, new_source, error }: Output): React.ReactNode { if (error) { return ( {error} ); } return ( Updated cell {cell_id}: ); }