Commit Graph
49 Commits
Author SHA1 Message Date
Lizandro GuarnizoandClaude Sonnet 5 da0bffe661 feat: orquestador uMind (SPA Vue) + tools custom + canales Telegram/WhatsApp
SPA nueva en /orchestrator (Vue 3 + Vite, servida por el mismo binario Go
bajo /orchestrator para que la cookie de sesión funcione sin tocar CORS),
reemplaza al panel Alpine.js como punto de entrada del menú.

Backend, todo aditivo sobre el motor de uMind ya existente:
- UmindHerramienta: tools custom por tenant que llaman un webhook HTTP,
  integradas al loop de function-calling existente. Cliente HTTP con
  guardas SSRF (bloqueo de IPs privadas/loopback/link-local resuelto en el
  momento de conectar, no antes, para cerrar la ventana de DNS rebinding)
  que no existían en el proyecto.
- UmindCanal: Telegram y WhatsApp Business Cloud API como canales
  adicionales del mismo agente que ya atiende el widget web, ambos
  reusando ProcessWidgetMessage. WhatsApp valida X-Hub-Signature-256.
  Credenciales cifradas en reposo con el mismo AES-GCM+APP_KEY que ya usa
  el proyecto para la contraseña SMTP (primer uso para secretos de uMind).
- Se conecta middlewares.Limit() (rate limiter que existía pero no se
  usaba en ningún lado) al widget público y a los webhooks nuevos.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 22:16:20 -05:00
Lizandro GD 5ee5880dc2 Agrega uMind: chat con IA embebible por tenant (F1 — widget web + RAG)
Multi-tenant dentro de soft_usite, reutilizando la infraestructura ya
existente (AiConfig, motor de function-calling del agente de Telegram)
en vez de un servicio nuevo aparte:

- UmindTenant: sitio/cliente con dominios permitidos, config de IA para
  el chat y personalidad/tono.
- Ingesta: crawler simple (mismo dominio, N páginas) + chunking +
  embeddings (config global con módulo "umind_embeddings", pensada
  para OpenAI ya que Claude no ofrece embeddings) guardados como JSON,
  con búsqueda por similitud coseno en memoria (sin pgvector todavía).
- Agente acotado: única herramienta buscar_conocimiento, sin acceso a
  nada interno — si no encuentra la respuesta, lo dice en vez de
  inventar.
- Widget público (/widget/umind.js + /widget/:site_key/*), autenticado
  por site_key + validación de dominio (Origin/Referer), no por
  secreto, ya que la key viaja en el HTML público del sitio instalado.
- Panel /app/umind: tenants, estado de ingesta, historial de
  conversaciones por sesión.
2026-08-07 16:18:16 +00:00
Lizandro GD e5849549a0 Agrega API de pagos externos: tokens por servicio, atados a pasarela e IP
Permite emitir credenciales (token hasheado + IP/CIDR opcional) desde
/app/pagos-externos para que aplicaciones de terceros pidan cobros a
través de Bold/dLocal/PayPal sin acceso a nada más del sistema:

- POST /api/v1/pagos-externos/solicitar genera el link de cobro real
  usando solo las pasarelas habilitadas para ese servicio.
- Los webhooks existentes de Bold/dLocal/PayPal (firma obligatoria,
  idempotentes) ahora también resuelven referencias "extpay-…" sin
  tocar el flujo de contratos ("contrato-{id}").
- Al confirmarse el pago se notifica por webhook firmado (HMAC) y/o
  Telegram, configurable por servicio.
- CRUD de servicios protegido con SoloAdmin; token y callback_secret
  solo se muestran una vez, en DB se guardan hasheados.
2026-08-04 14:16:13 +00:00
Lizandro GDandClaude Opus 5 c8e5afceb2 fix: seguridad de pagos y accesos, integración PayPal y Coolify ampliado
Seguridad (crítico):
- Los webhooks de Bold y dLocal solo validaban la firma si el atacante la
  enviaba: sin cabecera se aceptaba cualquier payload. Ahora es obligatoria.
- GET /pago-exitoso marcaba contratos como pagados leyendo un query param del
  navegador. Ahora solo muestra estado; la confirmación la hace la verificación
  contra la API de la pasarela o el webhook firmado.
- /uploads se servía como estático público: se descargaban RUTs, facturas y
  entregables sabiendo la ruta. Ahora exige sesión.
- Los secretos JWT no se podían sobreescribir por entorno (faltaba el tag env:)
  y su valor estaba en el repo, permitiendo firmarse una sesión de admin. Ahora
  son configurables y el arranque se detiene si siguen con el valor publicado.
- .env y session.db salen del control de versiones.
- Query Runner, gestión de usuarios/roles/módulos y seeds quedan restringidos a
  administradores; antes bastaba con tener sesión.

Pasarelas de pago:
- dLocal generaba enlaces que nunca se reconciliaban: mandaba el ID numérico en
  vez de "contrato-N", la URL de retorno apuntaba a la API de dLocal y nunca se
  enviaba notification_url, así que su webhook jamás se disparaba.
- PayPal solo tenía pantalla de configuración. Se implementa el servicio
  completo (OAuth, orden, captura, verificación de webhook) y queda
  seleccionable como pasarela.
- La moneda estaba fija en COP: un contrato en USD generaba un cobro por esa
  cifra en pesos.

Contratos:
- pago_confirmado nunca volvía a false, así que el segundo ciclo de renovación
  no se cobraba aunque el cliente pagara. Se reinicia al generar enlace nuevo.
- Los contratos vencidos nunca cambiaban de estado y recibían correo a diario
  de forma indefinida; ahora se cierran tras 30 días de gracia.

Otros:
- Coolify: coolifyCall ignoraba el status HTTP y reportaba errores como éxito.
  El agente pasa de 10 a cobertura completa (servicios, bases de datos,
  variables de entorno, proyectos, equipos y recursos de servidor).
- SeedBalanceData ya no corre en cada arranque (recreaba transacciones
  borradas); ahora se invoca con SEED_BALANCE=1.
- Los seeds dejan de devolver permisos revocados en cada despliegue.
- Timeouts en las llamadas HTTP a Telegram y dLocal que podían colgarse.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 03:20:00 +00:00
Lizandro Guarnizo 6a3793a63b feat: soporte Google Gemini en IA controller + UI 2026-07-07 00:22:58 -05:00
Lizandro Guarnizo 38ff9270ab fix: ia controller soporta OpenAI-compatible + native Ollama; TelegramChatID en Users 2026-07-06 23:54:21 -05:00
Lizandro Guarnizo b6522fa850 fix: ia streaming usa json.Decoder en vez de Scanner + loggeo + manejo error interno Ollama 2026-07-06 23:40:56 -05:00
Lizandro Guarnizo 9dfa3afab0 fix: ia controller usa endpoint default si no hay config en BD + valida status HTTP de Ollama 2026-07-06 23:37:26 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 6062f31c70 feat(ai): integrar Ollama en AiConfig para ia_controller, query_runner y landing
- Agrega provider 'ollama' al panel de AiConfig con badge azul y hint de URL
- ia_controller: reemplaza webhook n8n hardcodeado por llamada directa a Ollama vía AiConfig (módulo 'ia')
- query_runner: agrega soporte explícito de ollama (model fallback gemma3:1b, Basic Auth para URL pública)
- HTML: agrega módulo 'IA / vCard' en el selector de módulos

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-06 09:33:22 -05:00
Lizandro Guarnizo c05a2a8137 up 2026-06-03 21:32:50 -05:00
Lizandro Guarnizo 28d0eae715 up 2026-06-02 13:13:29 -05:00
Lizandro Guarnizo f8b352eb03 add logo_url to landing questions; add color/foto_perfil extraction to vcard 2026-05-28 22:44:42 -05:00
Lizandro Guarnizo 52ce8638a8 replace cta with social_media question; add SocialMedia field to landing_session 2026-05-28 20:49:35 -05:00
Lizandro Guarnizo 06d85dc0bf up 2026-05-27 10:16:28 -05:00
Lizandro Guarnizo 498e1d5743 up 2026-05-27 09:34:21 -05:00
Lizandro Guarnizo 7f309186d6 up 2026-05-18 23:50:50 -05:00
Lizandro Guarnizo 67f9466991 up 2026-05-13 22:30:13 -05:00
Lizandro Guarnizo 381425b7e6 ip 2026-05-12 22:34:10 -05:00
Lizandro Guarnizo aead156ba8 up 2026-05-12 22:07:31 -05:00
Lizandro Guarnizo fd8b5d68fa up 2026-05-12 21:41:26 -05:00
Lizandro Guarnizo 9ca202b3bd up 2026-05-12 21:33:54 -05:00
Lizandro Guarnizo fbd75d8cc6 up 2026-05-12 21:22:30 -05:00
Lizandro Guarnizo 217e1b550f up 2026-05-12 20:41:50 -05:00
Lizandro Guarnizo 25e3cd6254 up 2026-05-12 19:41:17 -05:00
Lizandro Guarnizo 1a8cc92a22 up 2026-05-06 15:29:14 -05:00
Lizandro Guarnizo 4913fdf984 up 2026-05-02 11:09:58 -05:00
Lizandro Guarnizo c3b2bbc413 up 2026-05-02 09:41:58 -05:00
Lizandro Guarnizo 560359173b up 2026-05-01 22:55:51 -05:00
Lizandro Guarnizo ddbabea23f up 2026-05-01 17:37:10 -05:00
Lizandro Guarnizo c9024274f0 up 2026-05-01 17:36:17 -05:00
Lizandro Guarnizo 3f6eb7dddc p 2026-05-01 13:44:37 -05:00
Lizandro Guarnizo 5e0b6ae2f0 up 2026-05-01 12:02:21 -05:00
Lizandro Guarnizo 357bdc7397 feat: integracion Bold y pagina unificada de pasarelas de pago 2026-05-01 11:05:54 -05:00
lizandrogd 94d206a469 Update ia_controller.go 2025-09-09 11:24:26 -05:00
lizandrogd 37b99a95e6 Update ia_controller.go 2025-08-11 18:31:52 -05:00
lizandrogd 2aff7953db ia ollama 2025-08-05 14:48:12 -05:00
lizandrogd bf0abc65f1 Update vcard_qr.go 2025-06-11 02:20:17 -05:00
lizandrogd 30dfce6373 Update vcard_qr.go 2025-06-11 02:19:11 -05:00
lizandrogd a34e2b7143 up 2025-06-07 19:00:44 -05:00
lizandrogd 65d6361ea7 update 2025-05-30 19:40:26 -05:00
lizandrogd 31483591f1 dlocal services 2025-05-12 14:36:23 -05:00
lizandrogd 81af8269d6 update 2025-05-08 20:14:58 -05:00
lizandrogd beb50ad892 update 2025-05-03 00:09:03 -05:00
Lizandro Guarnizo 98d77f4b9a vcf 2025-04-28 20:11:04 -05:00
root fd739f8675 Descripción de los cambios 2025-04-24 02:07:47 +00:00
Lizandro Guarnizo ae91566738 Update vcard_qr.go 2025-04-23 21:02:18 -05:00
Lizandro Guarnizo 0de5960974 Update vcard_qr.go 2025-04-19 10:11:05 -05:00
Lizandro Guarnizo 79d6cca94d qr vcard 2025-04-18 07:38:32 -05:00
Lizandro Guarnizo 6d8f1bcd6f Initial commit 2025-02-06 14:22:29 -05:00