arcadiasuite/server/manus/tools.ts

747 lines
36 KiB
TypeScript

export interface ToolResult {
success: boolean;
output: string;
error?: string;
}
export interface ManusToolDef {
name: string;
description: string;
parameters: Record<string, { type: string; description: string; required?: boolean }>;
}
export const MANUS_TOOLS: ManusToolDef[] = [
{
name: "web_search",
description: "Pesquisa informações na web usando um termo de busca. Retorna resultados relevantes.",
parameters: {
query: { type: "string", description: "O termo de busca", required: true }
}
},
{
name: "knowledge_query",
description: "Consulta a base de conhecimento interna da empresa para encontrar documentos e informações relevantes.",
parameters: {
query: { type: "string", description: "A pergunta ou termo para buscar na base de conhecimento", required: true }
}
},
{
name: "erp_query",
description: "Consulta dados do sistema ERP conectado (clientes, pedidos, estoque, financeiro).",
parameters: {
entity: { type: "string", description: "Entidade a consultar: customers, orders, inventory, financial", required: true },
filter: { type: "string", description: "Filtro opcional (ex: 'status=active')", required: false }
}
},
{
name: "calculate",
description: "Executa cálculos matemáticos e análises numéricas.",
parameters: {
expression: { type: "string", description: "Expressão matemática ou descrição do cálculo", required: true }
}
},
{
name: "send_message",
description: "Envia uma mensagem para um usuário ou grupo no chat interno.",
parameters: {
to: { type: "string", description: "Nome ou ID do destinatário", required: true },
message: { type: "string", description: "Conteúdo da mensagem", required: true }
}
},
{
name: "generate_report",
description: "Gera um relatório estruturado com base nos dados coletados.",
parameters: {
title: { type: "string", description: "Título do relatório", required: true },
type: { type: "string", description: "Tipo: summary, detailed, chart", required: true },
data: { type: "string", description: "Dados ou descrição do conteúdo do relatório", required: true }
}
},
{
name: "schedule_task",
description: "Agenda uma tarefa para execução futura.",
parameters: {
task: { type: "string", description: "Descrição da tarefa", required: true },
when: { type: "string", description: "Quando executar (ex: 'tomorrow 9am', 'in 2 hours')", required: true }
}
},
{
name: "web_browse",
description: "Acessa e extrai informações de uma página web. Use para consultar sites, ler artigos, ou obter dados online.",
parameters: {
url: { type: "string", description: "URL completa da página a acessar (ex: https://example.com)", required: true },
extract: { type: "string", description: "O que extrair: 'text' (todo texto), 'summary' (resumo), 'links' (lista de links)", required: false }
}
},
{
name: "analyze_file",
description: "Analisa o conteúdo de um arquivo anexado pelo usuário.",
parameters: {
filename: { type: "string", description: "Nome do arquivo anexado a analisar", required: true },
question: { type: "string", description: "Pergunta específica sobre o conteúdo do arquivo", required: false }
}
},
{
name: "crm_query",
description: "Consulta dados do CRM (parceiros, contratos, comissões, conversas). Use para buscar informações de relacionamento com clientes.",
parameters: {
entity: { type: "string", description: "Entidade a consultar: partners, contracts, threads, events, commissions, stats", required: true },
filter: { type: "string", description: "Filtro opcional (ex: 'status=active', 'tier=gold')", required: false }
}
},
{
name: "crm_create_event",
description: "Cria um evento no calendário CRM. Use para agendar reuniões, ligações ou lembretes.",
parameters: {
title: { type: "string", description: "Título do evento", required: true },
type: { type: "string", description: "Tipo: meeting, call, task, reminder", required: true },
startAt: { type: "string", description: "Data/hora de início (ISO 8601 ou descrição como 'amanhã às 14h')", required: true },
description: { type: "string", description: "Descrição do evento", required: false }
}
},
{
name: "crm_send_whatsapp",
description: "Envia uma mensagem WhatsApp para um contato através do canal CRM conectado.",
parameters: {
phone: { type: "string", description: "Número de telefone do destinatário (com DDD)", required: true },
message: { type: "string", description: "Conteúdo da mensagem", required: true }
}
},
{
name: "generate_chart",
description: "Gera um gráfico visual a partir de dados estruturados. O gráfico será renderizado na interface. Use esta ferramenta quando o usuário pedir um gráfico ou visualização.",
parameters: {
type: { type: "string", description: "Tipo do gráfico: 'bar' (barras), 'line' (linha), 'pie' (pizza), 'area' (área)", required: true },
title: { type: "string", description: "Título do gráfico", required: true },
data: { type: "string", description: "JSON array com os dados. Ex: [{\"name\":\"2023\",\"valor\":1000},{\"name\":\"2024\",\"valor\":1500}]", required: true },
xKey: { type: "string", description: "Nome do campo para o eixo X (ex: 'name', 'ano', 'mes')", required: true },
yKeys: { type: "string", description: "Nomes dos campos para o eixo Y separados por vírgula (ex: 'ativo,passivo' ou 'valor')", required: true },
colors: { type: "string", description: "Cores para cada série separadas por vírgula (ex: '#4caf50,#f44336')", required: false }
}
},
{
name: "finish",
description: "Finaliza a execução do agente com uma resposta final para o usuário.",
parameters: {
answer: { type: "string", description: "Resposta final para o usuário", required: true },
chart: { type: "string", description: "JSON opcional com dados de gráfico gerado anteriormente", required: false }
}
},
{
name: "python_execute",
description: "Executa código Python em um ambiente seguro. Use para cálculos complexos, análise de dados ou automações.",
parameters: {
code: { type: "string", description: "O código Python a ser executado", required: true },
timeout: { type: "number", description: "Tempo limite em segundos (padrão: 30)", required: false }
}
},
{
name: "semantic_search",
description: "Busca informações no grafo de conhecimento por significado semântico. Use para encontrar documentos, mensagens ou dados relacionados.",
parameters: {
query: { type: "string", description: "A pergunta ou termo para buscar semanticamente", required: true },
n_results: { type: "number", description: "Número de resultados (padrão: 5)", required: false }
}
},
{
name: "read_file",
description: "Lê o conteúdo de um arquivo do sistema.",
parameters: {
path: { type: "string", description: "Caminho do arquivo a ser lido", required: true }
}
},
{
name: "write_file",
description: "Escreve conteúdo em um arquivo. Cria o arquivo se não existir.",
parameters: {
path: { type: "string", description: "Caminho do arquivo a ser escrito", required: true },
content: { type: "string", description: "Conteúdo a ser escrito no arquivo", required: true }
}
},
{
name: "list_files",
description: "Lista arquivos e diretórios em um caminho.",
parameters: {
path: { type: "string", description: "Caminho do diretório a listar", required: true }
}
},
{
name: "shell",
description: "Executa um comando no terminal. Use com cuidado para comandos seguros.",
parameters: {
command: { type: "string", description: "Comando a ser executado", required: true }
}
},
{
name: "ask_human",
description: "Pede aprovação do usuário para uma ação crítica antes de prosseguir.",
parameters: {
prompt: { type: "string", description: "Pergunta ou descrição da ação que precisa de aprovação", required: true },
options: { type: "string", description: "Opções de resposta separadas por vírgula (ex: 'sim,não')", required: false }
}
},
{
name: "analyze_data",
description: "Analisa um conjunto de dados usando o Módulo Cientista. Detecta padrões, gera insights e estatísticas.",
parameters: {
data: { type: "string", description: "Dados em formato JSON para análise", required: true }
}
},
{
name: "add_to_knowledge",
description: "Adiciona um documento ao grafo de conhecimento para futuras buscas semânticas.",
parameters: {
doc_id: { type: "string", description: "ID único do documento", required: true },
content: { type: "string", description: "Conteúdo do documento", required: true },
type: { type: "string", description: "Tipo do documento: email, message, project, note, etc", required: true }
}
},
{
name: "run_workflow",
description: "Executa um workflow BPMN automatizado. Use para processos com múltiplos passos, decisões e ações.",
parameters: {
workflow_type: { type: "string", description: "Tipo: approval, data_processing, notification ou spec JSON customizado", required: true },
data: { type: "string", description: "Dados de entrada para o workflow em formato JSON", required: false }
}
},
{
name: "rpa_execute",
description: "Executa automação RPA (robotic process automation) em navegador. Use para preencher formulários, extrair dados de sites, ou automatizar tarefas web.",
parameters: {
template: { type: "string", description: "Template: login, scrape_table, form_fill, download_report, nfe_consulta, ou script JSON customizado", required: true },
params: { type: "string", description: "Parâmetros para o script RPA em formato JSON (ex: {\"url\": \"...\", \"username\": \"...\"})", required: false }
}
},
{
name: "fiscal_emit",
description: "Emite documento fiscal (NFe, NFCe) através do Arcadia Plus ERP.",
parameters: {
type: { type: "string", description: "Tipo de documento: nfe (nota fiscal) ou nfce (cupom fiscal)", required: true },
data: { type: "string", description: "Dados da nota fiscal em formato JSON (emitente, destinatario, itens, pagamento)", required: true }
}
},
{
name: "fiscal_query",
description: "Consulta situação de documento fiscal no SEFAZ.",
parameters: {
chave: { type: "string", description: "Chave de acesso da NFe/NFCe (44 dígitos)", required: true }
}
},
{
name: "plus_clientes",
description: "Consulta clientes cadastrados no Arcádia Plus ERP. Use para buscar informações de clientes, contatos, histórico.",
parameters: {
filtro: { type: "string", description: "Filtro de busca: nome, CPF/CNPJ, telefone ou email", required: false }
}
},
{
name: "plus_produtos",
description: "Consulta produtos cadastrados no Arcádia Plus ERP. Use para verificar estoque, preços, códigos.",
parameters: {
filtro: { type: "string", description: "Filtro de busca: nome, código, categoria ou marca", required: false }
}
},
{
name: "plus_vendas",
description: "Consulta vendas realizadas no Arcádia Plus ERP. Use para verificar pedidos, faturamento, histórico de vendas.",
parameters: {
filtro: { type: "string", description: "Filtro: periodo (hoje, semana, mes), cliente, status", required: false }
}
},
{
name: "plus_estoque",
description: "Consulta situação do estoque no Arcádia Plus ERP. Use para verificar quantidades, produtos em falta, movimentações.",
parameters: {}
},
{
name: "plus_financeiro",
description: "Consulta dados financeiros do Arcádia Plus ERP: contas a pagar, contas a receber, fluxo de caixa.",
parameters: {
tipo: { type: "string", description: "Tipo: pagar, receber, todos", required: false }
}
},
{
name: "plus_fornecedores",
description: "Consulta fornecedores cadastrados no Arcádia Plus ERP.",
parameters: {
filtro: { type: "string", description: "Filtro de busca: nome, CNPJ, cidade", required: false }
}
},
{
name: "plus_dashboard",
description: "Obtém dados do dashboard do Arcádia Plus ERP: resumo de vendas, estoque, financeiro.",
parameters: {}
},
{
name: "learn_url",
description: "Aprende o conteúdo de uma URL e adiciona ao grafo de conhecimento. Use para absorver informações de artigos, documentações, notícias, etc.",
parameters: {
url: { type: "string", description: "A URL para aprender (ex: https://exemplo.com/artigo)", required: true },
priority: { type: "string", description: "Prioridade do aprendizado: low, normal, high", required: false }
}
},
{
name: "deep_research",
description: "Pesquisa profunda sobre um tema: busca na web, extrai conteúdo dos melhores resultados, analisa e sintetiza. Use quando precisar de informações completas sobre um assunto.",
parameters: {
topic: { type: "string", description: "O tema ou pergunta para pesquisar em profundidade", required: true },
depth: { type: "number", description: "Quantidade de fontes para analisar (1-5). Padrão: 3", required: false }
}
},
{
name: "detect_opportunities",
description: "Analisa o grafo de conhecimento para detectar padrões e oportunidades de negócio.",
parameters: {
domain: { type: "string", description: "Domínio de análise (ex: vendas, produto, suporte, clientes)", required: true },
min_confidence: { type: "number", description: "Confiança mínima (0-1). Padrão: 0.7", required: false }
}
},
{
name: "scientist_generate_code",
description: "Usa o Módulo Cientista para gerar código Python automaticamente baseado em um objetivo. Use para criar análises, transformações ou processamentos de dados.",
parameters: {
goal: { type: "string", description: "Objetivo do código (ex: 'agregar vendas por mês', 'filtrar clientes inativos', 'gerar relatório')", required: true },
data_description: { type: "string", description: "Descrição dos dados de entrada (colunas, tipos)", required: false }
}
},
{
name: "scientist_generate_automation",
description: "Gera código de automação para tarefas repetitivas como enviar emails, fazer requisições API, processar arquivos ou agendar tarefas.",
parameters: {
task: { type: "string", description: "Descrição da tarefa de automação (ex: 'enviar email de lembrete', 'buscar dados de API')", required: true }
}
},
{
name: "scientist_detect_patterns",
description: "Detecta padrões, correlações e tendências em um conjunto de dados.",
parameters: {
data: { type: "string", description: "Dados em formato JSON para análise de padrões", required: true }
}
},
{
name: "scientist_suggest_improvements",
description: "Analisa dados e sugere melhorias de qualidade, otimizações e correções automáticas.",
parameters: {
data: { type: "string", description: "Dados em formato JSON para análise de melhorias", required: true }
}
},
{
name: "bi_stats",
description: "Obtém estatísticas do módulo de Business Intelligence (fontes de dados, datasets, gráficos, dashboards, backups).",
parameters: {}
},
{
name: "bi_list_data_sources",
description: "Lista todas as fontes de dados configuradas no BI (PostgreSQL, MySQL, MongoDB).",
parameters: {}
},
{
name: "bi_create_data_source",
description: "Cria uma nova fonte de dados para conectar o BI a um banco de dados externo.",
parameters: {
name: { type: "string", description: "Nome da fonte de dados", required: true },
type: { type: "string", description: "Tipo: postgresql, mysql ou mongodb", required: true },
host: { type: "string", description: "Host do servidor de banco de dados", required: true },
port: { type: "number", description: "Porta do servidor", required: true },
database: { type: "string", description: "Nome do banco de dados", required: true },
username: { type: "string", description: "Usuário de acesso", required: true },
password: { type: "string", description: "Senha de acesso", required: true }
}
},
{
name: "bi_list_datasets",
description: "Lista todos os datasets (consultas salvas) configurados no BI.",
parameters: {}
},
{
name: "bi_create_dataset",
description: "Cria um novo dataset (consulta SQL ou seleção de tabela) no BI.",
parameters: {
name: { type: "string", description: "Nome do dataset", required: true },
type: { type: "string", description: "Tipo: sql (consulta SQL) ou table (tabela inteira)", required: true },
dataSourceId: { type: "number", description: "ID da fonte de dados (use bi_list_data_sources para obter)", required: false },
query: { type: "string", description: "Consulta SQL (para type=sql)", required: false },
tableName: { type: "string", description: "Nome da tabela (para type=table)", required: false }
}
},
{
name: "bi_execute_query",
description: "Executa um dataset e retorna os dados resultantes.",
parameters: {
datasetId: { type: "number", description: "ID do dataset a executar", required: true }
}
},
{
name: "bi_list_charts",
description: "Lista todos os gráficos criados no BI.",
parameters: {}
},
{
name: "bi_create_chart",
description: "Cria um novo gráfico no módulo de BI baseado em um dataset existente.",
parameters: {
name: { type: "string", description: "Nome do gráfico", required: true },
type: { type: "string", description: "Tipo: bar, line, pie, area, scatter, table", required: true },
datasetId: { type: "number", description: "ID do dataset fonte dos dados", required: true },
config: { type: "string", description: "Configuração JSON: {xAxis, yAxis, groupBy, aggregation, colors}", required: true }
}
},
{
name: "bi_list_dashboards",
description: "Lista todos os dashboards do BI.",
parameters: {}
},
{
name: "bi_create_dashboard",
description: "Cria um novo dashboard no BI para organizar gráficos.",
parameters: {
name: { type: "string", description: "Nome do dashboard", required: true },
description: { type: "string", description: "Descrição do dashboard", required: false }
}
},
{
name: "bi_add_chart_to_dashboard",
description: "Adiciona um gráfico existente a um dashboard.",
parameters: {
dashboardId: { type: "number", description: "ID do dashboard", required: true },
chartId: { type: "number", description: "ID do gráfico a adicionar", required: true },
position: { type: "string", description: "Posição JSON: {x, y, width, height}", required: false }
}
},
{
name: "bi_list_tables",
description: "Lista todas as tabelas disponíveis no banco de dados interno.",
parameters: {}
},
{
name: "bi_get_table_columns",
description: "Obtém as colunas de uma tabela específica.",
parameters: {
tableName: { type: "string", description: "Nome da tabela", required: true }
}
},
{
name: "bi_analyze_with_pandas",
description: "Analisa dados de um dataset usando Python/Pandas. Retorna estatísticas avançadas: média, mediana, desvio padrão, correlações, outliers, e sugestões de gráficos. Use para análises profundas de dados.",
parameters: {
datasetId: { type: "number", description: "ID do dataset a analisar (use bi_list_datasets para obter)", required: true },
question: { type: "string", description: "Pergunta específica sobre os dados (opcional)", required: false }
}
},
{
name: "metaset_query",
description: "Executa uma consulta SQL via motor de BI (MetaSet). Motor robusto para análises complexas, gráficos e dashboards. Retorna dados estruturados.",
parameters: {
query: { type: "string", description: "Consulta SQL (apenas SELECT)", required: true },
limit: { type: "number", description: "Limite de linhas (padrão: 100)", required: false }
}
},
{
name: "metaset_create_question",
description: "Cria uma pergunta/consulta persistente no motor de BI (MetaSet). A pergunta fica salva e pode ser adicionada a dashboards e visualizada como gráfico.",
parameters: {
name: { type: "string", description: "Nome da pergunta/consulta", required: true },
query: { type: "string", description: "Consulta SQL da pergunta", required: true },
chartType: { type: "string", description: "Tipo de visualização: table, bar, line, pie, area, scatter, row, scalar", required: false },
description: { type: "string", description: "Descrição da pergunta", required: false }
}
},
{
name: "metaset_list_questions",
description: "Lista todas as perguntas/consultas salvas no motor de BI (MetaSet).",
parameters: {}
},
{
name: "metaset_run_question",
description: "Executa uma pergunta salva no motor de BI e retorna dados atualizados.",
parameters: {
questionId: { type: "number", description: "ID da pergunta a executar", required: true }
}
},
{
name: "metaset_create_dashboard",
description: "Cria um novo dashboard no motor de BI (MetaSet) para organizar consultas e gráficos.",
parameters: {
name: { type: "string", description: "Nome do dashboard", required: true },
description: { type: "string", description: "Descrição do dashboard", required: false }
}
},
{
name: "metaset_list_dashboards",
description: "Lista todos os dashboards do motor de BI (MetaSet).",
parameters: {}
},
{
name: "metaset_add_to_dashboard",
description: "Adiciona uma pergunta/gráfico a um dashboard no motor de BI.",
parameters: {
dashboardId: { type: "number", description: "ID do dashboard", required: true },
questionId: { type: "number", description: "ID da pergunta a adicionar", required: true }
}
},
{
name: "metaset_suggest_analysis",
description: "Sugere consultas e tipos de gráfico para uma tabela. Útil para descoberta automática de insights.",
parameters: {
tableName: { type: "string", description: "Nome da tabela para analisar", required: true }
}
},
{
name: "fin_query_payables",
description: "Consulta contas a pagar do módulo Financeiro. Retorna lista de títulos com vencimentos, valores e status.",
parameters: {
status: { type: "string", description: "Filtro por status: pending, paid, overdue, cancelled (opcional)", required: false },
supplier_id: { type: "number", description: "Filtro por ID do fornecedor (opcional)", required: false }
}
},
{
name: "fin_query_receivables",
description: "Consulta contas a receber do módulo Financeiro. Retorna lista de títulos com vencimentos, valores e status.",
parameters: {
status: { type: "string", description: "Filtro por status: pending, received, overdue, cancelled (opcional)", required: false },
customer_id: { type: "number", description: "Filtro por ID do cliente (opcional)", required: false }
}
},
{
name: "fin_query_bank_accounts",
description: "Consulta contas bancárias e saldos do módulo Financeiro.",
parameters: {
active_only: { type: "boolean", description: "Retornar apenas contas ativas (padrão: true)", required: false }
}
},
{
name: "fin_query_cashflow",
description: "Consulta fluxo de caixa (transações) do módulo Financeiro em um período.",
parameters: {
start_date: { type: "string", description: "Data inicial no formato YYYY-MM-DD", required: false },
end_date: { type: "string", description: "Data final no formato YYYY-MM-DD", required: false },
account_id: { type: "number", description: "Filtro por conta bancária (opcional)", required: false }
}
},
{
name: "fin_summary",
description: "Obtém resumo financeiro: total a pagar, total a receber, saldo em contas, vencimentos próximos.",
parameters: {}
},
{
name: "fin_register_payable",
description: "Registra uma nova conta a pagar no módulo Financeiro.",
parameters: {
supplier_id: { type: "number", description: "ID do fornecedor", required: true },
description: { type: "string", description: "Descrição do título", required: true },
amount: { type: "number", description: "Valor do título", required: true },
due_date: { type: "string", description: "Data de vencimento (YYYY-MM-DD)", required: true },
category_id: { type: "number", description: "ID da categoria de fluxo de caixa (opcional)", required: false }
}
},
{
name: "fin_register_receivable",
description: "Registra uma nova conta a receber no módulo Financeiro.",
parameters: {
customer_id: { type: "number", description: "ID do cliente", required: true },
description: { type: "string", description: "Descrição do título", required: true },
amount: { type: "number", description: "Valor do título", required: true },
due_date: { type: "string", description: "Data de vencimento (YYYY-MM-DD)", required: true },
category_id: { type: "number", description: "ID da categoria de fluxo de caixa (opcional)", required: false }
}
},
{
name: "fin_pay_account",
description: "Registra o pagamento de uma conta a pagar.",
parameters: {
payable_id: { type: "number", description: "ID da conta a pagar", required: true },
bank_account_id: { type: "number", description: "ID da conta bancária de saída", required: true },
payment_date: { type: "string", description: "Data do pagamento (YYYY-MM-DD)", required: false },
amount_paid: { type: "number", description: "Valor pago (se diferente do valor original)", required: false }
}
},
{
name: "fin_receive_account",
description: "Registra o recebimento de uma conta a receber.",
parameters: {
receivable_id: { type: "number", description: "ID da conta a receber", required: true },
bank_account_id: { type: "number", description: "ID da conta bancária de entrada", required: true },
receive_date: { type: "string", description: "Data do recebimento (YYYY-MM-DD)", required: false },
amount_received: { type: "number", description: "Valor recebido (se diferente do valor original)", required: false }
}
},
{
name: "call_agent",
description: "Envia uma mensagem para outro agente de IA externo via protocolo A2A. Use para delegar tarefas especializadas, consultar agentes especializados ou orquestrar múltiplos agentes.",
parameters: {
agent_id: { type: "string", description: "ID do agente a chamar (use list_agents para ver disponíveis)", required: true },
message: { type: "string", description: "Mensagem/pergunta a enviar ao agente", required: true },
wait_response: { type: "boolean", description: "Aguardar resposta completa (padrão: true)", required: false }
}
},
{
name: "list_agents",
description: "Lista todos os agentes de IA externos registrados e disponíveis para comunicação via A2A.",
parameters: {}
},
{
name: "register_agent",
description: "Registra um novo agente externo para comunicação. Descobre automaticamente o Agent Card do agente.",
parameters: {
name: { type: "string", description: "Nome amigável para o agente", required: true },
url: { type: "string", description: "URL base do agente (ex: https://agent.exemplo.com)", required: true },
api_key: { type: "string", description: "API Key para autenticação (se necessário)", required: false }
}
},
{
name: "discover_agent",
description: "Descobre as capacidades de um agente externo lendo seu Agent Card. Use para saber o que um agente pode fazer antes de chamá-lo.",
parameters: {
url: { type: "string", description: "URL base do agente para descoberta", required: true }
}
},
{
name: "export_to_excel",
description: "Exporta dados para um arquivo Excel (.xlsx). Retorna o caminho do arquivo gerado para download. Use quando o usuário pedir para exportar dados, gerar planilha ou criar Excel.",
parameters: {
data: { type: "string", description: "Dados em formato JSON array para exportar (ex: [{\"coluna1\":\"valor1\"}])", required: true },
filename: { type: "string", description: "Nome do arquivo sem extensão (ex: 'relatorio-vendas')", required: true },
sheet_name: { type: "string", description: "Nome da aba/planilha (padrão: 'Dados')", required: false }
}
},
{
name: "send_to_bi_dataset",
description: "Envia dados para criar ou atualizar um dataset no módulo de BI (Arcádia Insights). Os dados ficam disponíveis para criar gráficos e dashboards.",
parameters: {
name: { type: "string", description: "Nome do dataset no BI", required: true },
data: { type: "string", description: "Dados em formato JSON array para o dataset", required: true },
description: { type: "string", description: "Descrição do dataset (opcional)", required: false },
update_if_exists: { type: "boolean", description: "Atualizar se já existir (padrão: true)", required: false }
}
},
{
name: "market_research",
description: "Faz pesquisa de mercado sobre um setor, concorrentes ou tendências. Busca dados comparativos, benchmarks do setor e informações competitivas.",
parameters: {
topic: { type: "string", description: "O tema da pesquisa (ex: 'concorrentes no setor de logística', 'benchmarks de margem de lucro varejo')", required: true },
company_context: { type: "string", description: "Contexto da empresa para comparação (setor, tamanho, região)", required: false },
focus: { type: "string", description: "Foco da pesquisa: competitors, benchmarks, trends, all (padrão: all)", required: false }
}
},
{
name: "compare_with_market",
description: "Compara dados financeiros ou operacionais da empresa com benchmarks de mercado. Útil para análise de desempenho relativo.",
parameters: {
metric: { type: "string", description: "Métrica a comparar (ex: 'margem_lucro', 'ticket_medio', 'crescimento_receita')", required: true },
value: { type: "number", description: "Valor atual da empresa para a métrica", required: true },
sector: { type: "string", description: "Setor de atuação para benchmark", required: true },
period: { type: "string", description: "Período de referência (ex: '2024', 'Q1 2024')", required: false }
}
},
// ERPNext Integration Tools
{
name: "erpnext_status",
description: "Verifica o status da conexão com o ERPNext. Retorna se está conectado e o usuário autenticado.",
parameters: {}
},
{
name: "erpnext_list_doctypes",
description: "Lista todos os DocTypes (entidades) disponíveis no ERPNext. Use para descobrir quais dados podem ser consultados.",
parameters: {
limit: { type: "number", description: "Número máximo de DocTypes a retornar (padrão: 50)", required: false }
}
},
{
name: "erpnext_get_documents",
description: "Busca documentos de um DocType específico no ERPNext. Use para consultar clientes, vendas, produtos, etc.",
parameters: {
doctype: { type: "string", description: "Nome do DocType (ex: 'Customer', 'Sales Invoice', 'Item')", required: true },
filters: { type: "string", description: "Filtros em formato JSON (ex: '{\"status\":\"Active\"}')", required: false },
fields: { type: "string", description: "Campos a retornar separados por vírgula (ex: 'name,customer_name,status')", required: false },
limit: { type: "number", description: "Número máximo de registros (padrão: 20)", required: false }
}
},
{
name: "erpnext_get_document",
description: "Busca um documento específico do ERPNext pelo nome/ID.",
parameters: {
doctype: { type: "string", description: "Nome do DocType (ex: 'Customer', 'Sales Invoice')", required: true },
name: { type: "string", description: "Nome/ID do documento", required: true }
}
},
{
name: "erpnext_create_document",
description: "Cria um novo documento no ERPNext.",
parameters: {
doctype: { type: "string", description: "Nome do DocType (ex: 'Customer', 'Item')", required: true },
data: { type: "string", description: "Dados do documento em formato JSON", required: true }
}
},
{
name: "erpnext_update_document",
description: "Atualiza um documento existente no ERPNext.",
parameters: {
doctype: { type: "string", description: "Nome do DocType", required: true },
name: { type: "string", description: "Nome/ID do documento a atualizar", required: true },
data: { type: "string", description: "Dados a atualizar em formato JSON", required: true }
}
},
{
name: "erpnext_search",
description: "Pesquisa documentos no ERPNext por texto. Busca em campos de texto do DocType.",
parameters: {
doctype: { type: "string", description: "Nome do DocType para pesquisar", required: true },
search_term: { type: "string", description: "Termo de busca", required: true },
limit: { type: "number", description: "Número máximo de resultados (padrão: 20)", required: false }
}
},
{
name: "erpnext_run_report",
description: "Executa um relatório do ERPNext. Use para obter dados agregados e análises.",
parameters: {
report_name: { type: "string", description: "Nome do relatório (ex: 'Accounts Receivable', 'Stock Balance')", required: true },
filters: { type: "string", description: "Filtros do relatório em formato JSON", required: false }
}
},
{
name: "erpnext_call_method",
description: "Chama um método/API customizado do ERPNext/Frappe.",
parameters: {
method: { type: "string", description: "Nome do método (ex: 'frappe.client.get_count')", required: true },
args: { type: "string", description: "Argumentos em formato JSON", required: false }
}
},
// ========== ARCÁDIA RETAIL TOOLS ==========
{
name: "retail_query",
description: "Consulta dados do módulo Arcádia Retail (vendas PDV, dispositivos/celulares, avaliações Trade-In, ordens de serviço, comissões, créditos de clientes).",
parameters: {
entity: { type: "string", description: "Entidade: sales, devices, evaluations, service_orders, commissions, credits, sellers, stores", required: true },
filter: { type: "string", description: "Filtro opcional (ex: 'status=completed', 'date=today', 'customer_id=4')", required: false },
limit: { type: "number", description: "Limite de resultados (padrão: 20)", required: false }
}
},
{
name: "retail_stats",
description: "Obtém estatísticas e KPIs do Retail em tempo real: vendas do dia, estoque, O.S. abertas, avaliações pendentes.",
parameters: {
period: { type: "string", description: "Período: today, week, month, year (padrão: today)", required: false },
storeId: { type: "number", description: "ID da loja para filtrar (opcional)", required: false }
}
},
{
name: "retail_report",
description: "Gera relatórios analíticos do Retail com insights e recomendações.",
parameters: {
type: { type: "string", description: "Tipo: sales_summary, inventory_status, commission_report, trade_in_analysis, service_orders_pending", required: true },
dateFrom: { type: "string", description: "Data inicial (YYYY-MM-DD)", required: false },
dateTo: { type: "string", description: "Data final (YYYY-MM-DD)", required: false },
storeId: { type: "number", description: "ID da loja para filtrar", required: false }
}
}
];
export function getToolsDescription(): string {
return MANUS_TOOLS.map(tool => {
const params = Object.entries(tool.parameters)
.map(([name, p]) => ` - ${name} (${p.type}${p.required ? ', obrigatório' : ', opcional'}): ${p.description}`)
.join('\n');
return `${tool.name}: ${tool.description}\n${params}`;
}).join('\n\n');
}