Skip to content

Instantly share code, notes, and snippets.

@pazteddy
Created May 14, 2026 18:14
Show Gist options
  • Select an option

  • Save pazteddy/ae0efe1988bf9481feb9b77832c63a35 to your computer and use it in GitHub Desktop.

Select an option

Save pazteddy/ae0efe1988bf9481feb9b77832c63a35 to your computer and use it in GitHub Desktop.
Demo automatizado
import { DevAssistantAgent } from "./agent.js";
// === Utilidades de presentaciΓ³n ===
function logSeparator(): void {
console.log("\n" + "═".repeat(60) + "\n");
}
function printScenarioDetails(
scenarioNumber: number,
title: string,
description: string,
): void {
console.log(`ESCENARIO ${scenarioNumber}: ${title}`);
console.log(` ${description}`);
console.log("");
}
function printStats(devAssistant: DevAssistantAgent): void {
const stats = devAssistant.getStats();
console.log(
`\nStats: ${stats.inputTokens} tokens entrada | ` +
`${stats.outputTokens} tokens salida | ` +
`Tools usadas: ${stats.toolCallsLastTurn}`,
);
}
// Pausa pequeΓ±a entre escenarios para evitar rate limiting
async function pauseExecution(ms: number = 800): Promise<void> {
await new Promise((resolve) => setTimeout(resolve, ms));
}
// === Escenarios de demostraciΓ³n ===
/**
* Escenario 1: ExploraciΓ³n de cΓ³digo
* Demuestra cΓ³mo el agente usa read_file o search_code para inspeccionar el codebase.
*/
async function exploreCode(
devAssistantAgent: DevAssistantAgent,
): Promise<void> {
printScenarioDetails(
1,
"ExploraciΓ³n de cΓ³digo",
"El agente lee un archivo del proyecto para responder sobre sus exports",
);
const question =
"ΒΏQuΓ© funciones y valores exporta el archivo src/rag/retriever.ts?";
console.log(`Usuario: ${question}\n`);
console.log("DevAssistant: ");
const response = await devAssistantAgent.chat(question, (fragment) => {
process.stdout.write(fragment);
});
process.stdout.write("\n");
if (response.toolsUsed.length > 0) {
console.log(`\nπŸ”§ Tools usadas: ${response.toolsUsed.join(", ")}`);
}
printStats(devAssistantAgent);
}
/**
* Escenario 2: BΓΊsqueda en documentaciΓ³n (RAG como tool)
* Demuestra search_docs. Si no hay docs, el agente lo indica gracefully.
*/
async function searchDocumentation(
devAssistantAgent: DevAssistantAgent,
): Promise<void> {
printScenarioDetails(
2,
"BΓΊsqueda en documentaciΓ³n",
"El agente usa search_docs para encontrar informaciΓ³n en los docs ingestados",
);
const question =
"ΒΏCΓ³mo se autentican las peticiones a la API segΓΊn la documentaciΓ³n?";
console.log(`Usuario: ${question}\n`);
console.log("DevAssistant: ");
const response = await devAssistantAgent.chat(question, (fragment) => {
process.stdout.write(fragment);
});
process.stdout.write("\n");
if (response.toolsUsed.length > 0) {
console.log(`\nTools usadas: ${response.toolsUsed.join(", ")}`);
} else {
console.log(
"\nTip: Ejecuta npm run ingest para cargar documentaciΓ³n y probar search_docs",
);
}
printStats(devAssistantAgent);
}
/**
* Escenario 3: Tarea multi-tool
* Demuestra que el agente puede encadenar mΓΊltiples tools en una sola respuesta.
*/
async function executeMultiToolTask(
devAssistantAgent: DevAssistantAgent,
): Promise<void> {
printScenarioDetails(
3,
"Tarea multi-tool",
"El agente encadena list_files + read_file para completar una tarea",
);
const question =
"Lista los archivos que hay en src/agent y luego lee el contenido del system prompt del agente.";
console.log(`Usuario: ${question}\n`);
console.log("DevAssistant: ");
const chatResponse = await devAssistantAgent.chat(question, (fragment) => {
process.stdout.write(fragment);
});
process.stdout.write("\n");
if (chatResponse.toolsUsed.length > 0) {
console.log(`\nπŸ”§ Tools usadas: ${chatResponse.toolsUsed.join(", ")}`);
}
printStats(devAssistantAgent);
}
/**
* Escenario 4: Crear un issue
* Demuestra create_issue β€” una tool con efecto de lado real (escribe a disco).
*/
async function registerBugIssue(
devAssistantAgent: DevAssistantAgent,
): Promise<void> {
printScenarioDetails(
4,
"Crear un issue",
"El agente usa create_issue para registrar una tarea en ./issues/",
);
const question =
"Crea un issue de tipo bug: el vector store falla silenciosamente cuando " +
"DB_PATH apunta a un directorio que no existe. DeberΓ­a lanzar un error claro " +
"en lugar de crear la base de datos en una ubicaciΓ³n inesperada. " +
"Etiquetas: bug, rag. Prioridad: high.";
console.log(`Usuario: ${question}\n`);
console.log("DevAssistant: ");
const response = await devAssistantAgent.chat(question, (fragment) => {
process.stdout.write(fragment);
});
process.stdout.write("\n");
if (response.toolsUsed.length > 0) {
console.log(`\nπŸ”§ Tools usadas: ${response.toolsUsed.join(", ")}`);
}
printStats(devAssistantAgent);
}
// === FunciΓ³n principal ===
async function runDemo(): Promise<void> {
console.log("");
console.log("╔════════════════════════════════════════════════════════════╗");
console.log("β•‘ DevAssistant β€” Demo Automatizada β•‘");
console.log("β•‘ SecciΓ³n 6: Agente Completo β•‘");
console.log("β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•");
console.log("");
console.log("Esta demo ejecuta 4 escenarios para mostrar las capacidades");
console.log("del DevAssistantAgent sin necesidad de input del usuario.");
const devAssistant = new DevAssistantAgent();
// Escenario 1
logSeparator();
await exploreCode(devAssistant);
devAssistant.clearHistory();
await pauseExecution();
// Escenario 2
logSeparator();
await searchDocumentation(devAssistant);
devAssistant.clearHistory();
await pauseExecution();
// Escenario 3
logSeparator();
await executeMultiToolTask(devAssistant);
devAssistant.clearHistory();
await pauseExecution();
// Escenario 4
logSeparator();
await registerBugIssue(devAssistant);
devAssistant.clearHistory();
await pauseExecution();
// Resumen final
logSeparator();
console.log("Demo completada exitosamente");
console.log("");
console.log("PrΓ³ximos pasos:");
console.log(" npm run dev β€” Prueba el agente de forma interactiva");
console.log(
" npm run ingest β€” Carga documentaciΓ³n para usar search_docs",
);
console.log(" ls ./issues/ β€” Revisa el issue creado en el escenario 4");
console.log("");
}
// Entry point
runDemo().catch((error: Error) => {
console.error("Error en la demo:", error.message);
process.exit(1);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment