iachat/app/javascript/dashboard/api/captain/hermesBuilder.js
Rodribm10 28e880d7b6 feat(captain/hermes-builder): aba Verificação com 22+ checks + reparo automático
UI nova dentro do Construtor (Hermes) — TabBar com Chat e Verificação.
Verificação roda HermesBuilder::Validator (DB+runtime) e exibe resultado
agrupado por categoria, com botão Refazer inline em FAIL/WARN reparáveis.

Backend (porta dos checks DB do CLI bin/hermes-validate):
- HermesBuilder::Validator com 22+ checks: engine, profile, port,
  secret, parent, unit, Brand, CaptainInbox sync (o bug que travou
  Juliana), pricing dry-run, Inter creds, typing/response_delay,
  registry MCP completo.
- HermesBuilder::Repairer com 4 handlers automáticos: set_engine_hermes,
  sync_captain_inbox_unit, set_default_typing_delay,
  set_default_response_delay.
- Endpoints novos: GET assistants, GET validate?slug=, POST repair.

Frontend:
- builder/Index.vue: wrapper com TabBar.
- builder/BuilderChat.vue: extraído do Index original.
- builder/BuilderVerification.vue: dropdown + Conferir agora + lista
  agrupada por categoria com badges + botão Refazer inline.

i18n: keys em pt_BR e en sob CAPTAIN_HERMES_BUILDER.VERIFY.*.

Filesystem/systemd checks ficam pro CLI hermes-validate (Rails container
não enxerga /root/.hermes/profiles do host).

Validado HTTP: GET /validate?slug=juliana_qnn1 → 28 PASS / 0 FAIL / 1 WARN.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 15:27:40 -03:00

39 lines
747 B
JavaScript

/* global axios */
import ApiClient from '../ApiClient';
class HermesBuilder extends ApiClient {
constructor() {
super('captain/hermes_builder', { accountScoped: true });
}
fetchMessages() {
return axios.get(this.url);
}
sendMessage(text) {
return axios.post(this.url, { text });
}
start() {
return axios.post(`${this.url}/start`);
}
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();