Created
May 14, 2026 18:14
-
-
Save pazteddy/ae0efe1988bf9481feb9b77832c63a35 to your computer and use it in GitHub Desktop.
Demo automatizado
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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