import figures from 'figures'; import React from 'react'; import { Box, Text } from '@anthropic/ink'; import type { AdvisorBlock } from '../../utils/advisor.js'; import { renderModelName } from '../../utils/model/model.js'; import { jsonStringify } from '../../utils/slowOperations.js'; import { CtrlOToExpand } from '../CtrlOToExpand.js'; import { MessageResponse } from '../MessageResponse.js'; import { ToolUseLoader } from '../ToolUseLoader.js'; type Props = { block: AdvisorBlock; addMargin: boolean; resolvedToolUseIDs: Set; erroredToolUseIDs: Set; shouldAnimate: boolean; verbose: boolean; advisorModel?: string; }; export function AdvisorMessage({ block, addMargin, resolvedToolUseIDs, erroredToolUseIDs, shouldAnimate, verbose, advisorModel, }: Props): React.ReactNode { if (block.type === 'server_tool_use') { const input = block.input && Object.keys(block.input).length > 0 ? jsonStringify(block.input) : null; return ( Advising {advisorModel ? using {renderModelName(advisorModel)} : null} {input ? ยท {input} : null} ); } let body: React.ReactNode; switch (block.content.type) { case 'advisor_tool_result_error': body = Advisor unavailable ({block.content.error_code}); break; case 'advisor_result': body = verbose ? ( {block.content.text} ) : ( {figures.tick} Advisor has reviewed the conversation and will apply the feedback ); break; case 'advisor_redacted_result': body = {figures.tick} Advisor has reviewed the conversation and will apply the feedback; break; } return ( {body} ); }