Saltar al contenido principal
Versión: 0.25.0

Temas

Los colores de la interfaz de terminal salen de un único tema de roles: para qué sirve un color, no dónde se dibuja. Un agente cambia solo los roles que quiere; todo lo demás conserva los valores por defecto del kit.

await runChatInk(opener, {
runsDir,
theme: { toolResult: "yellow", selection: "#00ff00" },
});

Roles​

RolSe usa paraPor defecto
agentla etiqueta del agente (ui.agent())cyanBright
userla etiqueta del prompt (ui.user())white
userBarel fondo de las líneas de la persona en el chat Ink#373737
accentel borde de los paneles de aprobación y de intervención manual#d77757
workingel spinner con lo que está haciendo el agente, y el modo en la barra de estado#89b4fa
codeel código en línea y los bloques de código de las respuestas#b1b9f9
toolBulletel ● antes de cada llamada a herramientagreen
toolLabella etiqueta de una llamada a herramientaatenuado
toolResultel resultado de una línea bajo una llamada a herramienta (los errores usan error)atenuado
selectionla opción enfocada de las listas de elección (paneles de aprobación, /resume, el asistente), en negrita#d77757
borderel marco alrededor del prompt y de la lista de /resumegray
dimtexto secundario: avisos, resúmenes, pistasatenuado
headingtítulos (puntos de control, el asistente)negrita
actionlas líneas [action] de la consola planamagenta
success, warn, errorresultados, advertencias, erroresgreen, yellow, red

Valores​

Cada rol admite uno de estos:

  • un nombre de color: "red", "gray", "cyanBright", "magentaBright"… (los nombres de picocolors y de Ink);
  • un hexadecimal: "#ff8800" (color de 24 bits);
  • una función (text) => string, para cualquier otra cosa: negrita, subrayado, un fondo, un degradado…
import pc from "picocolors";

theme: {
agent: (text) => pc.bold(pc.cyan(text)),
toolResult: "gray",
error: (text) => pc.bgRed(pc.white(` ${text} `)),
},

Los roles que dibuja el propio Ink (accent para el borde de los paneles, border, selection) admiten solo un nombre o un hexadecimal: una función ahí recurre al color por defecto. userBar es un fondo: usa un nombre o un hexadecimal.

Dónde configurarlo​

  • La opción theme de runChatInk(), runChatTui(), createProgressView() y runWizard().
  • setTheme(overrides) una vez, para un host que lo configura antes que nada.

Hay un tema por proceso. Cada llamada a setTheme() (o a un punto de entrada con theme) vuelve a partir de los valores por defecto con sus cambios; un punto de entrada sin theme conserva el actual. getTheme() lo devuelve y DEFAULT_THEME es el del kit.

import { DEFAULT_THEME, getTheme, setTheme } from "@falkenslab/agent-kit";

setTheme({ accent: "#e5b53a", selection: "#e5b53a" });
getTheme().agent === DEFAULT_THEME.agent; // true

Tus propios textos siguen el tema​

Las funciones de la paleta ui dibujan su rol en el tema actual, así que los textos que un agente dibuja con ellas cambian con él:

import { ui } from "@falkenslab/agent-kit";

promptLabel: `${ui.user("you>")} `,
agentLabel: ui.agent("Scout>"),
welcomeMessage: ui.dim("Ask me anything. /exit to leave."),
FunciónRol
ui.agent, ui.user, ui.action, ui.heading, ui.success, ui.warn, ui.error, ui.dimel rol del mismo nombre
ui.accent, ui.working, ui.code, ui.toolBullet, ui.toolLabel, ui.toolResultel rol del mismo nombre
ui.userBaruserBar, como fondo
ui.bold, ui.italic, ui.strikeestilos, sin tema

Sin color​

Cuando la terminal no admite color (o está definida NO_COLOR), los nombres y los hexadecimales dibujan texto plano; las funciones se siguen llamando, así que una función debería usar una librería de colores que lo respete (picocolors lo hace). Los anchos se miden siempre sin códigos de escape, así que un tema nunca cambia la maquetación, y el log de la sesión es siempre texto plano.