Conectores en la nube

connector-cloud es un plugin de arquitectura de OHarness, no MCP. Cloud guarda la clave del proyecto de Composio y la configuración aprobada de apps y herramientas. Los clientes usan su inicio de sesión de OHarness; las credenciales OAuth de Gmail se quedan en Composio, limitadas al ID de usuario de OHarness verificado por el servidor. No hacen falta tablas nuevas de Supabase.

Configuración

  • Secreto de runtime del sitio web de Cloud: COMPOSIO_API_KEY. Nunca NEXT_PUBLIC_ y nunca en el config.json, el plugins.json, el bundle del navegador ni el contexto del modelo del usuario.
  • Las apps habilitadas se derivan de las Auth Configs del proyecto de Composio, no de un archivo. Una Auth Config con una restricción de herramientas es una app habilitada, y esa restricción es su lista de permitidas, así que una integración nueva es una acción en el panel y no un despliegue. La derivación rechaza en lugar de suponer: una configuración que no restringe ninguna herramienta se omite (Composio interpreta la ausencia de restricción como todas las herramientas del toolkit), dos configuraciones habilitadas para un mismo toolkit no habilitan ninguna, y las configuraciones deshabilitadas, los ids inutilizables o los nombres de herramienta mal formados descartan esa app. Los topes de 20 apps y 40 herramientas no cambian. El conjunto se resuelve una vez por proceso, así que reinicia Cloud después de un cambio en el panel.
  • El website/connectors.json de Cloud ahora es opcional y solo puede restringir: {"disabled": ["slug"]} retira una app sin tocar Composio. Un archivo que todavía lleve toolkits mantiene el comportamiento explícito anterior. El despliegue puede apuntar OHARNESS_CONNECTORS_FILE a una ruta absoluta montada. Está en gitignore a propósito, así que inclúyelo o móntalo solo si lo usas.
  • El entorno de Supabase existente del sitio web valida los tokens de inicio de sesión de OHarness.
  • cloud.json del cliente: { "siteUrl": "http://localhost:4000" } opcional para desarrollo local; el predeterminado es la dirección pública de Cloud. Cambiar el origen de Cloud puede requerir volver a iniciar sesión. OHARNESS_SITE_URL es una alternativa para anularlo.
  • plugins.json del cliente: el plugin predeterminado no necesita ninguna entrada. Para desactivarlo: { "runtimePlugins": [{ "id": "connector-cloud", "enabled": false }] }.

Crea la Auth Config OAuth de Gmail en el panel de Composio, en el mismo proyecto que la clave API. Revisa sus scopes y usa acceso de solo lectura a Gmail para tareas de lectura; la lista de ejecución permitida no sustituye a unos scopes OAuth de mínimo privilegio. La configuración de ejemplo contiene marcadores, no credenciales que funcionen.

Al usar OHarness_Cloud/dev.sh, define las variables de Cloud en el proceso website (Next carga website/.env.development.local). El harness no necesita la clave de Composio. Apúntalo al sitio web local antes de iniciarlo, por ejemplo OHARNESS_SITE_URL=http://localhost:4000 ./dev.sh up harness. up no reinicia los procesos en marcha; usa restart website harness después de guardar el trabajo. Una edición de Cloud en localhost no despliega la API en el sitio público.

Flujo de la conversación

  1. El agente llama a cloud_app_tools para listar apps o descubrir los esquemas y la versión exactos de las herramientas de una app. Está disponible incluso antes de conectar una cuenta de la app.
  2. Primero se aplica la política de permisos normal de OHarness. Si se aprueba y no hay vinculación, la herramienta actual espera y el chat web muestra Connect / Cancel.
  3. Solo el clic del usuario en Connect solicita un enlace alojado de Composio. Cloud fija user_id a partir del inicio de sesión validado, nunca a partir de la entrada del modelo.
  4. La interfaz abre la página de autorización. El broker local consulta a Cloud periódicamente; Cloud comprueba en Composio el propietario de la cuenta, la Auth Config, el toolkit y el estado activo/no deshabilitado.
  5. Un éxito verificado resuelve la herramienta en espera en el mismo turno del agente. Descubre el esquema y luego invoca cloud_app_execute a través de la barrera de permisos normal. No se crea ninguna petición duplicada al usuario ni ninguna tarea autónoma nueva.

Una cuenta gratuita puede conectar y usar dos apps; cualquier plan de pago —Plus incluido, personal o de un equipo, leído del claim ent del token de sesión— no tiene límite. La asignación se aplica a las apps conectadas primero: vincular una tercera, o ejecutar una herramienta en una app más allá de las dos primeras (por ejemplo, tras vencer un plan), se rechaza con 402 plan_required, que el harness convierte en un mensaje que menciona la página de precios. Listar apps y comprobar una conexión nunca tienen límite. El sitio fija el número con OHARNESS_FREE_CONNECTOR_APPS; un sitio autoalojado define OHARNESS_CONNECTORS_FREE=1 para eliminarlo en todas las cuentas con sesión iniciada.

Si se revoca una cuenta conectada anteriormente, execute devuelve un rechazo explícito connection_required previo a la ejecución, lo que activa este mismo flujo. Los tiempos de espera agotados, los errores del proveedor o los fallos de ejecución inciertos nunca se repiten automáticamente. Al recargar la página web se restaura el estado de las tarjetas pendientes mientras el proceso siga vivo.

Seguridad y límites de la V1

  • Solo cuatro endpoints POST para clientes nativos: catalog, status, link y execute. Los enlaces de autorización se quedan en las respuestas de la interfaz, fuera de la salida del modelo y del almacenamiento de transcripciones.
  • Las interacciones pendientes fijan el usuario verificado y el origen de Cloud. Cambiar de sesión no puede reanudar la tarea de autorización de un usuario anterior contra otra cuenta.
  • Los metadatos y la ejecución usan la misma versión concreta de la herramienta. Si latest se resuelve de otra forma tras reiniciar el servidor, vuelve a descubrir en lugar de ejecutar un esquema obsoleto. Usa versiones con fecha para despliegues reproducibles.
  • Cancelar, abortar el agente, el tiempo de espera de diez minutos y el apagado detienen la llamada en espera. Una tarea cancelada no deshace una concesión OAuth completada de forma independiente.
  • No hay continuación tras reiniciar el proceso ni repetición de trabajos en segundo plano. Tras reiniciar, empieza un turno nuevo; una vinculación de Composio ya completada sigue siendo detectable.
  • La V1 supone una cuenta activa por app/Auth Config/usuario. Varias cuentas activas fallan en cerrado a la espera de que un administrador elija. No hay cuentas compartidas ni interfaz de ACL.
  • Por ahora las tarjetas se muestran en el chat web (incluida la superficie web de la aplicación de escritorio), no en interfaces de terminal ni en modo headless. Esas no tienen interfaz de tarjetas; usa la web para la primera vinculación, o desactiva este plugin para ejecuciones desatendidas o headless.
  • Cada proceso tiene una limitación de tasa básica. En producción hay que añadir límites compartidos en el edge, una política de auditoría y retención, y configurar Auth Configs OAuth con scopes adecuados.

Verificación

npm run test:cloud-connectors cubre la cancelación del broker, la concurrencia, el tiempo de espera, la denegación de permisos y un agente real que continúa tras una autorización simulada. npm run test:composio de Cloud cubre la propiedad, la lista de permitidas, la versión, la revocación y el comportamiento sin reintentos. node --conditions=oharness-source script/cloud-connector-ui-demo.ts inicia una demo web aislada y sin conexión; nunca accede a Gmail real. El OAuth real sigue requiriendo el consentimiento del usuario en el navegador.