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}: ) }