Tool Calls
Muestra lo que hace un agente, una línea por paso. Las lecturas y búsquedas se pliegan en un resumen breve, mientras que las ediciones, comandos, aprobaciones y errores permanecen a la vista. Cada paso se abre en una vista real: el archivo, el diff, la terminal o los resultados. Cubre todos los estados de herramienta de AI SDK, incluidas las aprobaciones con un motivo para dar otra indicación.
Los agentes pueden dar docenas de pequeños pasos antes de responder. Mostrarlos todos entierra la respuesta, y ocultarlos hace que el agente parezca una caja negra. Tool Calls da a cada paso una línea discreta que se lee como una frase, como «Read components/search.tsx» o «Searched for useResults, 3 results».
Las lecturas, búsquedas y consultas que se ejecutan una tras otra se pliegan en un único resumen como «Explored 6 files». Todo lo que cambia algo, necesita una decisión o falla permanece en su propia línea, con un temporizador en vivo mientras se ejecuta. Abre cualquier paso para ver el trabajo real: el archivo, el diff, la terminal o los resultados.
Cada estado de herramienta de AI SDK tiene su propio aspecto y redacción, incluidas las aprobaciones. Aprobar ofrece Allow, Deny, Always allow y «Tell it what to do instead», que devuelve tus palabras como motivo, con ⌘↵ y ⌘⌫ desde el teclado. getToolPartStatus asigna las partes de herramienta por ti, y hay vistas listas para resultados de búsqueda, listas de archivos, preguntas de opción múltiple y JSON sin procesar.
Añade el registro Pro a components.json
components.json Añade tu token
Crea un token en tu página de cuenta y colócalo en
.env.localcomoHEXTAUI_PRO_TOKEN.Añade el bloque
pnpm dlx shadcn@latest add @hextaui-pro/tool-calls
Con AI SDK
Convierte las partes de herramienta en pasos con getToolPartStatus y elige un kind y una vista por herramienta. Pasa stopped cuando el chat deja de transmitir, para que una llamada cortada a medias muestre Cancelled en lugar de girar para siempre.
Aprobación de comandos
Marca una herramienta con needsApproval en el servidor y responde con addToolApprovalResponse. Always allow recuerda el programa, y una denegación puede llevar como motivo qué hacer en su lugar. ⌘↵ y ⌘⌫ funcionan mientras el paso tiene el foco.
Preguntar al usuario
Una herramienta de cliente sin función execute espera una respuesta. Muestra las opciones con AskUser y envía la elegida de vuelta con addToolOutput.
Anatomía
Las partes que compones, de fuera hacia dentro.
| Parte | Descripción |
|---|---|
ToolCalls | La lista. Agrupa las ejecuciones silenciosas y comparte los tiempos entre pasos. |
ToolCall | Un paso: icono, frase, meta, temporizador y su contenido al abrirse. |
ToolGroup | Una tanda plegada de pasos discretos con una línea de resumen. |
ToolApproval | La tarjeta de aprobar, denegar y redirigir, que se muestra dentro de un paso a la espera de aprobación. |
SearchResults, FileList, AskUser, ToolJson | Vistas para pasar como contenido de un paso. |
ToolCalls
También acepta todas las props de ol excepto children.
| Prop | Tipo | Predeterminado |
|---|---|---|
callsLos pasos en el orden en que se ejecutaron. | ToolCallProps[] | – |
groupPliega las tandas de pasos discretos. Establécelo en false para mostrar todos los pasos. | boolean | true |
| Prop | Tipo | Predeterminado |
|---|---|---|
idId estable, normalmente el toolCallId. El tiempo se guarda por id. | string | – |
statusstreaming, running, waiting, approval, done, error, denied o cancelled. | ToolStatus | – |
kindread, search, list, edit, write, run, web, fetch, ask u other. Elige el icono y el verbo. | ToolKind | "other" |
subjectSobre qué actuó: una ruta, consulta, URL o comando. | string | – |
nameNombre de la herramienta, usado en la frase cuando kind es other. | string | – |
titleSustituye por completo la frase generada. | string | – |
metaResultado breve tras la frase, como «3 results» o «+12 −3». | ReactNode | – |
contentSe muestra cuando se abre el paso. | ReactNode | – |
exitCodePara pasos de ejecución. Un valor distinto de cero marca el paso como fallido y lo abre. | number | – |
errorMensaje mostrado para el estado de error. | string | – |
durationDuración almacenada en segundos, para el historial. | number | – |
approvalMotivo, resultado y etiqueta de siempre permitir para las aprobaciones. | ToolCallApproval | – |
defaultOpenSustituye si el paso empieza abierto. | boolean | – |
onApproveSe llama desde Allow o Always allow. | (options: { always: boolean }) => void | – |
onDenySe llama desde Deny, o con el texto de «Tell it what to do instead». | (reason?: string) => void | – |
| Prop | Tipo | Predeterminado |
|---|---|---|
reasonPor qué se necesita aprobación, que se muestra sobre los botones. | string | – |
approvedLa respuesta, una vez dada. | boolean | – |
automaticAprobado por una regla, así que no se muestra ninguna tarjeta. | boolean | – |
denialReasonLo que la persona pidió en su lugar, que se muestra en los pasos denegados. | string | – |
alwaysLabelMuestra «Always allow …» con esta etiqueta, por ejemplo el nombre del programa. | string | – |
getToolPartStatus(part, options)
Asigna una parte de herramienta de AI SDK a un ToolStatus.
| Prop | Tipo | Predeterminado |
|---|---|---|
partLa parte de message.parts. | ToolUIPart | DynamicToolUIPart | – |
options.stoppedEl chat se detuvo, así que las llamadas sin terminar muestran Cancelled en lugar de seguir girando. | boolean | false |
options.waitingUna herramienta de cliente está esperando a la persona, por ejemplo AskUser. | boolean | false |
| Prop | Tipo | Predeterminado |
|---|---|---|
questionLa pregunta. | string | – |
optionsLas opciones. | { value, label, description? }[] | – |
answerEl valor elegido, una vez respondido. | string | – |
onAnswerDevuélvelo con addToolOutput. | (value: string) => void | – |
| Prop | Tipo | Predeterminado |
|---|---|---|
queryResaltado dentro de cada coincidencia. | string | – |
matchesLas coincidencias. | { path, line, text }[] | – |
limitSe muestra antes de «Show all». | number | 6 |
| Key | Acción |
|---|---|
| EnterSpace | Abre o cierra un paso o un grupo plegado. |
| ⌘↵ | Permite un paso que espera aprobación mientras el foco está dentro de él. |
| ⌘⌫ | Deniega un paso que espera aprobación mientras el foco está dentro de él. |
| Esc | Sale de «Tell it what to do instead» sin enviar. |
- Los pasos son una lista ordenada, así que los lectores de pantalla anuncian cuántos pasos hay y en cuál estás.
- Los pasos que requieren a la persona se anuncian mediante una región activa polite, como “Approval needed: Run pnpm test”, igual que las preguntas y los errores. Los pasos rutinarios permanecen en silencio para no saturar a los lectores de pantalla.
- El estado nunca depende solo del color: cada estado tiene su propio icono y redacción.
- Los atajos de aprobación se ignoran mientras se escribe en un campo, y el campo de redirección se enfoca solo al abrirse y devuelve el foco al cerrarse.
Construido con
Los componentes gratuitos de HextaUI con los que está hecho Tool Calls. Cada uno se instala por separado.
Código
8 archivos, añadidos a components/blocks/tool-calls.