diff --git a/app/javascript/dashboard/api/captain/hermesBuilder.js b/app/javascript/dashboard/api/captain/hermesBuilder.js index cea68963f..47853be2b 100644 --- a/app/javascript/dashboard/api/captain/hermesBuilder.js +++ b/app/javascript/dashboard/api/captain/hermesBuilder.js @@ -21,6 +21,18 @@ class HermesBuilder extends ApiClient { reset() { return axios.delete(`${this.url}/reset`); } + + fetchAssistants() { + return axios.get(`${this.url}/assistants`); + } + + validate(slug) { + return axios.get(`${this.url}/validate`, { params: { slug } }); + } + + repair(slug, repairId) { + return axios.post(`${this.url}/repair`, { slug, repair_id: repairId }); + } } export default new HermesBuilder(); diff --git a/app/javascript/dashboard/i18n/locale/en/captain.json b/app/javascript/dashboard/i18n/locale/en/captain.json index 08b88f46a..0704405d8 100644 --- a/app/javascript/dashboard/i18n/locale/en/captain.json +++ b/app/javascript/dashboard/i18n/locale/en/captain.json @@ -905,6 +905,35 @@ "SESSION_LABEL": "Session:", "SEND_FAILED": "Send failed: {message}", "RESET_FAILED": "Failed to clear session.", - "START": "Start creation" + "START": "Start creation", + "TAB_CHAT": "Chat (Builder)", + "TAB_VERIFY": "Verification", + "VERIFY": { + "TITLE": "Agent verification", + "DESCRIPTION": "Runs health checks (database, routing, pricing, MCP) for a Hermes agent. For each failure with a Repair button, the UI attempts an automatic fix. Other failures need hermes-provision on the VPS.", + "NO_ASSISTANTS": "No Hermes agents registered", + "RUN": "Run check", + "RUNNING": "Checking...", + "REPAIR": "Repair", + "REPAIRING": "Repairing...", + "OK_LABEL": "OK", + "FAILS_LABEL": "failures", + "WARN_LABEL": "warnings", + "OF_TOTAL": "of {total} checks", + "VERDICT_PASS": "Ready to ship", + "VERDICT_FAIL": "Critical failures — fix first", + "EMPTY": "Select an agent and click Run check to start verification.", + "EMPTY_RESULTS": "No checks returned — agent removed?", + "REPAIR_FAILED": "Failed: {message}", + "REPAIR_OK": "Repaired: {message}", + "FETCH_FAILED": "Error loading assistants: {message}", + "VALIDATE_FAILED": "Validation failed: {message}", + "CATEGORY_DB": "Database", + "CATEGORY_PRICING": "Pricing", + "CATEGORY_ROUTING": "Captain → Hermes routing", + "CATEGORY_HUMANIZATION": "Humanization (typing/delay/gallery)", + "CATEGORY_MCP": "Registered MCP tools", + "CATEGORY_OTHER": "Other" + } } } \ No newline at end of file diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/captain.json b/app/javascript/dashboard/i18n/locale/pt_BR/captain.json index cbbc6c9a2..abc7825e6 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/captain.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/captain.json @@ -906,6 +906,35 @@ "SESSION_LABEL": "Sessão:", "SEND_FAILED": "Erro ao enviar: {message}", "RESET_FAILED": "Falha ao limpar sessão.", - "START": "Iniciar criação" + "START": "Iniciar criação", + "TAB_CHAT": "Chat (Construtor)", + "TAB_VERIFY": "Verificação", + "VERIFY": { + "TITLE": "Verificação de agente", + "DESCRIPTION": "Roda os checks de saúde (banco, roteamento, preços, MCP) de um agente Hermes. Para cada falha com botão Refazer, a UI tenta corrigir automaticamente. Demais falhas precisam de hermes-provision na VPS.", + "NO_ASSISTANTS": "Nenhum agente Hermes cadastrado", + "RUN": "Conferir agora", + "RUNNING": "Conferindo...", + "REPAIR": "Refazer", + "REPAIRING": "Reparando...", + "OK_LABEL": "OK", + "FAILS_LABEL": "falhas", + "WARN_LABEL": "atenção", + "OF_TOTAL": "de {total} checks", + "VERDICT_PASS": "Pode soltar", + "VERDICT_FAIL": "Há falhas críticas — corrija antes", + "EMPTY": "Selecione um agente e clique em Conferir agora pra rodar a verificação.", + "EMPTY_RESULTS": "Sem checks retornados — o agente foi removido?", + "REPAIR_FAILED": "Falha: {message}", + "REPAIR_OK": "Reparado: {message}", + "FETCH_FAILED": "Erro carregando assistentes: {message}", + "VALIDATE_FAILED": "Falha ao validar: {message}", + "CATEGORY_DB": "Banco de dados", + "CATEGORY_PRICING": "Preços", + "CATEGORY_ROUTING": "Roteamento Captain → Hermes", + "CATEGORY_HUMANIZATION": "Humanização (typing/delay/galeria)", + "CATEGORY_MCP": "Tools MCP registradas", + "CATEGORY_OTHER": "Outros" + } } } \ No newline at end of file diff --git a/app/javascript/dashboard/routes/dashboard/captain/builder/BuilderChat.vue b/app/javascript/dashboard/routes/dashboard/captain/builder/BuilderChat.vue new file mode 100644 index 000000000..c830741f9 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/captain/builder/BuilderChat.vue @@ -0,0 +1,362 @@ + + +