Saltar al contenido principal
Versión: 0.25.0

Vista de progreso

Una ejecución única (un trabajo que hace una tarea y termina) no tiene prompt, pero una persona que la esté observando sigue queriendo ver qué pasa y responder a los puntos de control. createProgressView() es la pantalla del chat sin el prompt: la respuesta en vivo, las llamadas a herramientas, el spinner, los paneles de aprobación y la barra de estado.

import { buildSessionOptions, createProgressView, runQuery } from "@falkenslab/agent-kit";

const { options } = await buildSessionOptions(config, runDir, spec);
const view = createProgressView({ mode: config.mode, agentLabel: "Scout>" });

const run = runQuery("Update the knowledge base with the new files in sources/", options);
for await (const event of run.events) view.render(event);

await view.close(); // removes the live area and restores the interaction port
console.log("Done.");

Sin TTY, o con plain: true, es createConsoleRenderer() (líneas planas), con un close() que no hace nada.

Opciones​

OpciónDescripción
formatActionEtiquetas de las llamadas a herramientas. Consulta Etiquetas de herramientas; withToolLabels() añade las de las extensiones (Las etiquetas de una extensión).
toolPhraseCómo cuentan tus herramientas en un resumen plegado.
toolDetailCuánto se muestra de las llamadas a herramientas: "full" (por defecto), "calls" o "summary". Consulta Etiquetas de herramientas.
formatResultTu propia línea de resultado por herramienta, o ninguna. Consulta Etiquetas de herramientas.
agentLabelLa etiqueta antes de la respuesta en la salida plana.
onWriteSe llama con todo lo que escribe el renderizador de consola (texto plano), p. ej. para replicarlo en un fichero de log.
renderApprovalTu propia vista previa en los paneles de aprobación.
modeSe muestra en la barra de estado.
theme, languageConsulta Temas e Idiomas.
plainSalida de consola plana incluso en un TTY.

La vista es un renderizador​

ProgressView tiene los mismos métodos que el renderizador de consola, así que el código que imprime eventos funciona con cualquiera de los dos:

MétodoQué hace
render(event)Dibuja un AgentEvent.
write(text), writeLine(text)Escribe tu propio texto encima del área en vivo, y en onWrite. writeLine escribe una línea propia; la vista dibuja líneas completas, así que el texto de write aparece cuando su línea termina (un \n en él, un writeLine(), endLine() o el siguiente evento).
endLine()Termina la línea actual si hace falta.
startTurn()Marca un turno nuevo (la vista empieza uno al crearse).
close()Termina la vista. Espérala con await antes de imprimir nada más.

Ctrl+C durante un punto de control responde Stop y lanza SIGINT, de modo que tu propio manejador puede detener la ejecución y avisar a la persona con writeLine():

let interrupting = false;
process.on("SIGINT", () => {
if (interrupting) process.exit(130);
interrupting = true;
view.writeLine("Interrupting… (Ctrl+C again to exit without waiting)");
void run.interrupt();
});

El renderizador de consola plano​

createConsoleRenderer() imprime los eventos como líneas planas: el texto del agente según llega en streaming, [action] <label> por cada llamada a herramienta, los avisos y los errores. Lo usa runChatTui(), y también el log de la sesión.

import { createConsoleRenderer, runQuery } from "@falkenslab/agent-kit";

const renderer = createConsoleRenderer({ agentLabel: "Scout>", onWrite: (text) => log.write(text) });
const run = runQuery("Summarize the notes", options);
for await (const event of run.events) renderer.render(event);
renderer.endLine();

output cambia adónde va el texto (la salida estándar por defecto). No se imprimen las acciones de los subagentes, los resultados de las herramientas ni las sugerencias de prompt.