plazbot-cli
Version:
CLI para Plazbot SDK
93 lines (92 loc) • 4.3 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.chatCommand = void 0;
const commander_1 = require("commander");
const plazbot_1 = require("plazbot");
const credentials_1 = require("../../utils/credentials");
const crypto_1 = __importDefault(require("crypto"));
const readline_1 = __importDefault(require("readline"));
exports.chatCommand = new commander_1.Command('chat')
.description('Inicia una sesión de chat interactiva con un agente')
.requiredOption('-a, --agent-id <id>', 'ID del agente')
.option('-s, --session-id <id>', 'ID de sesión (opcional)')
.option('-m, --multiple-answers', 'Permitir múltiples respuestas', false)
.option('--dev', 'Usar ambiente de desarrollo', false)
.action(async (options) => {
try {
// Obtener credenciales guardadas
const credentials = await (0, credentials_1.getStoredCredentials)();
const agent = new plazbot_1.Agent({
workspaceId: credentials.workspace,
apiKey: credentials.apiKey,
zone: credentials.zone,
...(options.dev && { customUrl: "http://localhost:5090" })
});
// Generar un sessionId si no se proporcionó uno
const sessionId = options.sessionId || crypto_1.default.randomUUID();
// Crear interfaz de readline
const rl = readline_1.default.createInterface({
input: process.stdin,
output: process.stdout
});
// Limpiar la pantalla
console.clear();
// Mostrar encabezado
console.log('Chat session initialized\n');
console.log('┌' + '─'.repeat(60) + '┐');
console.log('│' + ' Plazbot Agent Chat'.padEnd(59) + '│');
console.log('│' + ''.padEnd(59) + '│');
console.log('│' + ' Type your messages and press Enter to send.'.padEnd(59) + '│');
console.log('│' + ' Type "/exit" or press Ctrl+C to end the conversation.'.padEnd(59) + '│');
console.log('└' + '─'.repeat(60) + '┘\n');
console.log('Session ID:', sessionId, '\n');
// Función para preguntar
const askQuestion = () => {
rl.question('You: ', async (question) => {
if (question.toLowerCase() === '/exit') {
console.log('\nChat session ended.');
rl.close();
return;
}
try {
console.log('⋮ Waiting for response...');
const response = await agent.onMessage({
agentId: options.agentId,
question,
sessionId,
multipleAnswers: options.multipleAnswers
});
console.log('\nAssistant:');
console.log(' ' + response.answer);
console.log(); // Línea en blanco para separar mensajes
// Si hay fuentes, mostrarlas
if (response.sources && response.sources.length > 0) {
console.log('Sources:');
response.sources.forEach((source) => {
console.log(` - ${source.title || 'Untitled'}`);
if (source.url)
console.log(` ${source.url}`);
});
console.log(); // Línea en blanco después de las fuentes
}
askQuestion(); // Continuar el ciclo de preguntas
}
catch (error) {
const message = error instanceof Error ? error.message : 'Error desconocido';
console.error('\n❌ Error:', message);
askQuestion(); // Continuar a pesar del error
}
});
};
// Iniciar el ciclo de preguntas
askQuestion();
}
catch (error) {
const message = error instanceof Error ? error.message : 'Error desconocido';
console.error('\n❌ Error:', message);
process.exit(1);
}
});