Al implementar el asistente de programación con inteligencia artificial Sourcegraph Cody en entornos corporativos, los responsables de ingeniería y los equipos de seguridad y cumplimiento normativo enfrentan un desafío crítico de gobernanza: ¿cómo garantizar que el código propietario crítico, los algoritmos patentados o los repositorios sujetos a normativas estrictas (como PCI-DSS, HIPAA o ITAR) nunca se incluyan como contexto en las solicitudes enviadas a modelos de lenguaje grande (LLM) externos?
Sourcegraph Cody ofrece un mecanismo administrativo centralizado y obligatorio a nivel de servidor denominado filtros de contexto (cody.contextFilters). Configurado directamente en la configuración del sitio (Site Configuration) de Sourcegraph, permite a los administradores definir políticas de inclusión y exclusión basadas en expresiones regulares RE2, controlando con precisión qué repositorios puede examinar Cody para generar sugerencias de autocompletado, respuestas de chat y comandos.
Esta guía explica en detalle cómo configurar cody.contextFilters, desglosa la lógica de evaluación y la sintaxis de expresiones regulares, y expone las mejores prácticas para establecer una defensa en profundidad en la privacidad del código.
Requisitos previos y compatibilidad
Antes de habilitar los filtros de contexto, confirme que su infraestructura y los entornos de desarrollo cumplan con los siguientes requisitos:
- Instancia de Sourcegraph: Versión Sourcegraph Enterprise
5.4.0o superior con una licencia activa de Cody Enterprise. - Indicador de funcionalidad (Feature Flag): El parámetro
cody-context-filters-enableddebe estar establecido entrue. - Clientes IDE compatibles:
- Extensión para VS Code: versión
>= 1.20.0. - Complemento para JetBrains: versión
>= 6.0.0. - Cliente web de Sourcegraph.
- Extensión para VS Code: versión
Compatibilidad de clientes y cumplimiento normativo
Para evitar que los desarrolladores eludan las restricciones de seguridad utilizando versiones antiguas de los complementos de IDE, Sourcegraph aplica políticas estrictas de compatibilidad:
| Cliente | Versión de extensión | Comportamiento en Sourcegraph v5.4.0 | Comportamiento en Sourcegraph v5.4.12303+ |
|---|---|---|---|
| VS Code | < 1.16.x | Cody no compatible | Respeta la política; solicita actualizar la extensión |
| VS Code | 1.18.0 a < 1.20.0 | Cody no compatible | Respeta la política; solicita actualizar la extensión |
| VS Code | >= 1.20.0 | Respeta la política plenamente | Respeta la política plenamente |
| JetBrains | <= 5.5.9 | Cody no compatible | Respeta la política; solicita actualizar la extensión |
| JetBrains | 5.5.10 a < 6.0.0 | Cody no compatible | Respeta la política; solicita actualizar la extensión |
| JetBrains | >= 6.0.0 | Respeta la política plenamente | Respeta la política plenamente |
En las instancias modernas de Sourcegraph, los clientes heredados que no pueden procesar los filtros de contexto ven bloqueado el acceso a cualquier contexto y reciben instrucciones inmediatas para actualizar su extensión.
Estructura de configuración y sintaxis RE2
Los filtros de contexto se definen en el archivo JSON de configuración del sitio bajo la clave principal cody.contextFilters. Este objeto admite dos matrices opcionales: include (repositorios permitidos) y exclude (repositorios bloqueados).
{
"cody.contextFilters": {
"include": [
{
"repoNamePattern": "^github\\.com\\/example-corp\\/.*"
}
],
"exclude": [
{
"repoNamePattern": ".*-sensitive$"
},
{
"repoNamePattern": "^github\\.com\\/example-corp\\/core-payments.*"
}
]
}
}
Reglas clave de la estructura:
- Si se declara
cody.contextFilters, debe contener al menos uno de los dos campos (includeoexclude). - Cada elemento de la lista debe contener el atributo obligatorio
repoNamePattern. repoNamePatternutiliza la sintaxis de expresiones regulares RE2 (motor desarrollado por Google e integrado en Go).- En el formato JSON, las barras invertidas deben escaparse doblemente (
\\). Por ejemplo, un punto literal debe escribirse como\\.y una barra diagonal como\\/o directamente/. - El patrón se evalúa contra el nombre canónico completo del repositorio tal como está registrado en Sourcegraph (por ejemplo,
github.com/organizacion/nombre-repositorioo rutas internas de GitLab).
Lógica de evaluación y precedencia de reglas
El comportamiento de Cody varía según cómo se combinen las listas de inclusión y exclusión:
1. Sin filtros configurados (comportamiento predeterminado)
Si no se define la clave cody.contextFilters, Cody tiene acceso sin restricciones de filtrado a todos los repositorios en los que el usuario tenga permisos de lectura en Sourcegraph.
2. Solo se especifica include (Lista blanca estricta)
Cody solo puede utilizar código de aquellos repositorios cuyo nombre coincida con al menos un patrón de la lista include. Cualquier otro repositorio queda excluido por defecto.
- Ideal para organizaciones con una política de Confianza Cero (Zero-Trust) en IA, permitiendo únicamente repositorios aprobados previamente por los equipos jurídicos o de seguridad.
- Una sola coincidencia en la matriz
includebasta para autorizar el repositorio.
{
"cody.contextFilters": {
"include": [
{
"repoNamePattern": "^github\\.com\\/example-corp\\/frontend-.*"
},
{
"repoNamePattern": "^github\\.com\\/example-corp\\/public-docs$"
}
]
}
}
3. Solo se especifica exclude (Lista de denegación)
Cody puede utilizar como contexto cualquier repositorio excepto aquellos cuyos nombres coincidan con al menos un patrón definido en exclude.
- Ideal para organizaciones que desean impulsar la productividad general de los desarrolladores pero necesitan blindar repositorios de alto riesgo (como motores de trading, bóvedas criptográficas o bases de datos de pago).
- El uso de un patrón comodín total como
.*enexcludeactúa como un interruptor de emergencia (kill-switch), bloqueando el acceso a contexto en toda la instancia.
{
"cody.contextFilters": {
"exclude": [
{
"repoNamePattern": "^github\\.com\\/example-corp\\/crypto-vault$"
},
{
"repoNamePattern": ".*payment-processing.*"
},
{
"repoNamePattern": ".*-restricted$"
}
]
}
}
4. Se especifican tanto include como exclude (Filtrado combinado)
Cuando se declaran ambas listas, un repositorio debe cumplir dos requisitos de manera simultánea:
- Coincidir con al menos un patrón de
include. - No coincidir con ningún patrón de
exclude.
Las reglas de exclusión siempre prevalecen sobre las de inclusión. En el siguiente ejemplo, se autorizan todos los repositorios bajo example-corp, pero se bloquea cualquier repositorio cuyo nombre contenga compliance o termine en -secret:
{
"cody.contextFilters": {
"include": [
{
"repoNamePattern": "^github\\.com\\/example-corp\\/.+"
}
],
"exclude": [
{
"repoNamePattern": ".*compliance.*"
},
{
"repoNamePattern": ".*-secret$"
}
]
}
}
Guía de configuración paso a paso para administradores
Siga este procedimiento para implementar y verificar los filtros de contexto en su entorno empresarial:
Paso 1: Auditar las convenciones de nombres de repositorios
Cody evalúa la expresión regular frente al nombre completo indexado en Sourcegraph.
- En la interfaz web de Sourcegraph, navegue a Site Admin > Repositories.
- Revise los prefijos de sus hosts de código (por ejemplo,
github.com/su-empresa/...). - Confeccione el inventario de repositorios confidenciales que deben quedar aislados del modelo de IA.
Paso 2: Abrir el editor de configuración del sitio
- Inicie sesión en Sourcegraph con una cuenta con privilegios de administrador de sitio.
- Haga clic en su avatar de usuario en la esquina superior derecha y seleccione Site Admin.
- En el menú de navegación lateral izquierdo, seleccione Configuration (ubicado en
/site-admin/configuration).
Paso 3: Introducir el bloque cody.contextFilters
Agregue la propiedad correspondiente en el objeto JSON raíz:
{
// ... otras configuraciones del sitio ...
"cody-context-filters-enabled": true,
"cody.contextFilters": {
"include": [
{
"repoNamePattern": "^github\\.com\\/su-empresa\\/.*"
}
],
"exclude": [
{
"repoNamePattern": "^github\\.com\\/su-empresa\\/algoritmo-central$"
},
{
"repoNamePattern": ".*proprietary.*"
},
{
"repoNamePattern": ".*sec-tools.*"
}
]
}
}
Paso 4: Guardar y aplicar los cambios
Haga clic en Save changes al final de la página. Sourcegraph aplicará la nueva configuración en caliente, sin requerir el reinicio de la instancia ni de los clústeres.
Paso 5: Validar la política en los entornos de desarrollo
Compruebe el correcto funcionamiento de las restricciones en los clientes IDE:
- Abra un proyecto perteneciente a un repositorio excluido en VS Code o JetBrains IDE.
- Ejecute un comando de edición en línea (Edit) o intente generar código. La extensión detendrá la acción y mostrará el siguiente error:
Edit failed to run: file is ignored (due to cody.contextFilters Enterprise configuration setting) - En el panel de chat de Cody, intente hacer una mención con
@-mentionde archivos o funciones del repositorio excluido. Verifique que no aparezcan en las sugerencias y que Cody no recupere fragmentos de código del repositorio.
Experiencia del desarrollador y funciones afectadas
Comprender el impacto operativo en los desarrolladores facilita una adopción corporativa fluida:
- Disponibilidad del chat general: Aunque un desarrollador trabaje dentro de un repositorio excluido, el chat de Cody permanece activo para consultas conceptuales, explicaciones de algoritmos y código genérico. Sin embargo, el archivo local no se inyecta como contexto.
- Restricción de instrucciones avanzadas: Ciertas funciones de chat complejas, como las plantillas de indicaciones personalizadas (Prompts) que requieren contexto global del repositorio, pueden quedar deshabilitadas o generar advertencias en repositorios bloqueados.
- Supresión de autocompletado: El autocompletado en tiempo real respeta de inmediato los filtros de contexto. Si el documento activo pertenece a un repositorio excluido, ningún fragmento de dicho código se transmite hacia los endpoints del LLM.
Arquitectura de gobernanza en capas: Comparativa de controles
Un marco sólido de seguridad de código no depende de un único control. La siguiente tabla compara cody.contextFilters con otros mecanismos de seguridad del ecosistema Sourcegraph:
| Capa de gobernanza | Dónde se configura | Alcance y granularidad | Administrado por | ¿Puede el desarrollador eludirlo? |
|---|---|---|---|---|
| Filtros de contexto corporativos | Configuración del sitio (cody.contextFilters) | Repositorio completo mediante expresiones regulares RE2 | Administradores del sitio / Seguridad | No (Control forzado en el servidor) |
| Reglas de exclusión de repositorio | Archivo .cody/ignore en la raíz del repositorio | Archivos específicos, subcarpetas o extensiones | Responsables del repositorio / Devs | Confirmado en Git; aplica a todos los colaboradores |
| Exclusiones locales de IDE | Ajustes de la extensión (settings.json) | Rutas locales o temporales en la máquina | Desarrollador individual | Sí (Afecta únicamente al equipo local) |
| Control de acceso a repositorios | RBAC de Sourcegraph, sincronización OAuth | Permisos de lectura del repositorio | Equipos de IAM corporativo | No (Cody jamás accede a repositorios no legibles) |
| Garantías contractuales del LLM | Acuerdos Zero-Retention de Cody Gateway | Todas las transmisiones de API con el LLM | Proveedores de nube y contratos legales | No (No se almacenan datos ni se usan para entrenamiento) |
Al combinar cody.contextFilters a nivel de servidor con exclusiones puntuales mediante .cody/ignore para credenciales locales y acuerdos de cero retención en Cody Gateway, las empresas pueden maximizar la productividad de la inteligencia artificial protegiendo plenamente sus activos de código más valiosos.