Skip to content

v1.1.0 — Seguridad, multi-LLM (incl. chinos), WC tools y auditoría

Latest

Choose a tag to compare

@jgcastanedas jgcastanedas released this 03 Jun 14:30

Release mayor con correcciones críticas, hardening de seguridad, nuevos proveedores LLM (incluidos chinos) e integración transaccional con WooCommerce.

🔴 Bloqueantes resueltos

  • Plugin no arrancaba: AI_Agent_Index movida a su propio archivo.
  • Menú admin no aparecía: Settings/Admin/Dashboard ahora se instancian correctamente.
  • Doble llamada al LLM por mensaje (handler AJAX duplicado).
  • AI_Agent_Agent ahora se invoca de verdad (intent, role, business hours, campaigns).
  • Flujo de carrito ?ai_agent_cart= se intercepta y reconstruye en WooCommerce.
  • Eliminada cabecera duplicada de plugin en index.php.

🔒 Seguridad

  • Verificación HMAC de webhook reescrita (la lógica estaba invertida, aceptaba sin verificar).
  • /webhook/test ahora requiere manage_options (antes era público).
  • Firmas oficiales de Twilio (HMAC-SHA1 con URL + params ordenados) y Meta (X-Hub-Signature-256).
  • SQL injection en adapter PostgreSQL corregido con pg_query_params.
  • Conexión PostgreSQL con sslmode=require forzado.
  • Rate limiting 15 req/min por IP en endpoints de chat y stream (filtrable).
  • Validación anti prompt-injection de comandos del LLM (verifica product_id, role, is_purchasable()).
  • ABSPATH guard en todos los archivos PHP.
  • Webhook secret generado en activate(), no en cada render.
  • Soporte de API keys vía constantes de wp-config.php (AI_AGENT_*_KEY).

🇨🇳 Nuevos LLMs chinos (OpenAI-compatible)

Proveedor Endpoint Modelos
DeepSeek api.deepseek.com/v1 deepseek-chat, deepseek-reasoner
Kimi (Moonshot) api.moonshot.ai/v1 moonshot-v1-{8k,32k,128k}, kimi-k2-0905-preview
MiniMax api.minimax.chat/v1 MiniMax-Text-01, abab6.5-chat, abab6.5s-chat

Arquitectura unificada — base_url + model parametrizado. Streaming SSE soportado en los tres.

🛒 WooCommerce — datos en vivo

Nueva capa AI_Agent_WC_Tools con funciones internas (sin API REST). El LLM puede invocar:

  • [ORDER_STATUS:id] / [ORDER_STATUS:id:email] — estado de pedido con verificación opcional.
  • [MY_ORDERS:email:x@y.com] / [MY_ORDERS:phone:+34xxx] — listar pedidos.
  • [CREATE_CUSTOMER:{...json...}] — alta de cliente con dirección de envío.

Toggle en Settings para exigir email al consultar pedido (recomendado en producción).

🌐 Idiomas (8 soportados)

ES, EN, PT, FR, DE, IT, ZH (chino simplificado), JA (japonés por bloques Unicode CJK).

  • Selector multi-idioma en Settings para limitar respuestas del agente.
  • Idioma por defecto como fallback.
  • Si el usuario escribe en idioma no permitido, el agente lo explica amablemente.

⚡ Performance

  • Embeddings persistentes en knowledge_index — ya no se recalculan en cada query.
  • Hooks save_post y woocommerce_update_product para invalidación incremental.
  • Reducción estimada: de ~5.000 llamadas/día a embeddings → ~150/día (KB típica).

📊 Auditoría y privacidad

  • Panel AI Agent → Auditoría con log de invocaciones a WC tools (filtrable, redacción de campos sensibles).
  • Hooks GDPR wp_privacy_personal_data_exporters / _erasers para conversaciones y mensajes.
  • Retención configurable (default 90 días, filtrable).

🎨 UX

  • Streaming SSE (chunked transfer) para los 5 providers remotos.
  • Session ID persistido en sessionStorage para mantener contexto entre recargas.
  • Modelos 2026: Claude Sonnet 4.6 / Opus 4.7 / Haiku 4.5.
  • Anthropic multi-turn arreglado (antes solo mandaba el último mensaje).

🧪 Tooling

  • composer.json + PHPUnit 10.5.
  • 30 tests unitarios, 56 assertions, 100% verde.
  • AI_Agent_Utils 100% testeable sin WP runtime.

Upgrade notes

  1. Reactivar el plugin para crear la tabla ai_agent_tool_audit y generar el webhook secret.
  2. Recomendado: definir las API keys en wp-config.php:
    define('AI_AGENT_OPENAI_KEY',    'sk-...');
    define('AI_AGENT_ANTHROPIC_KEY', 'sk-ant-...');
    define('AI_AGENT_DEEPSEEK_KEY',  'sk-...');
  3. Activar "Exigir email para mostrar estado de pedido" antes de salir a producción.
  4. Para streaming: configurar nginx proxy_buffering off; o respetar X-Accel-Buffering: no.
  5. Forzar re-indexación desde Dashboard → "Forzar Re-index" para sembrar embeddings.

Full Changelog: 12704c8...v1.1.0