import { parseAcsCommand, resolverComandoAcs } from "./acsCommand.js"; import { parseCtoCommand, resolverComandoCto } from "./ctoCommand.js"; import { parseLoginCommand, resolverComandoLogin } from "./loginCommand.js"; // comandos explícitos, à parte dos 3 modos do roteador por LLM — cada um intercepta // a mensagem antes de classificarModoChat pra resolver via consulta estruturada // direto no ERP, sem gastar chamada de LLM nem arriscar alucinação em dado técnico. // login fica por último: "/" (uma palavra, sem espaço) é o fallback genérico, // então precisa vir depois de qualquer comando mais específico como "/cto " // (que sempre tem espaço e por isso nunca colide com o parser de login). "/acs" sozinho // (sem espaço) cairia no fallback de login, então o /acs também vem antes dele. const COMMANDS = [ { parse: parseAcsCommand, resolve: resolverComandoAcs }, { parse: parseCtoCommand, resolve: resolverComandoCto }, { parse: parseLoginCommand, resolve: resolverComandoLogin } ]; // mesmo dado (cliente, contratos, faturas, OS) que o modo "atendimentos" já restringe // a administradores — os comandos consultam o ERP direto, então precisam da mesma checagem. const COMANDO_RESTRITO_TEXTO = "Esse comando consulta dados de cliente no ERP e é restrito a administradores — não é possível usá-lo " + "com o seu nível de acesso atual. Peça para um administrador verificar, se precisar dessa informação."; export async function resolverComandoChat(message, { isAdmin = false } = {}) { for (const { parse, resolve } of COMMANDS) { const termo = parse(message); if (termo === null || termo === undefined) continue; if (!isAdmin) return { answer: COMANDO_RESTRITO_TEXTO, sources: [] }; return resolve(termo); } return null; }