/** * Helper central para determinar el rol efectivo del MCP y bloquear tools * peligrosas cuando el user es "editor" o "auditor". * * El rol se recibe principalmente via env var ACAI_ROLE_OVERRIDE inyectada * por el backend Python (agentic.py y cronjobs.py). Hay autoderivacion * defensiva en caso de que alguien lance el MCP sin el override: * - Si ACAI_MODE(_OVERRIDE) = "production" → rol editor por defecto. * - Si no → rol developer. * * Roles y permisos: * - "developer": todo (codigo + contenido). * - "editor": contenido si, codigo no. * - "auditor": SOLO LECTURA TOTAL — ni codigo, ni contenido, ni estructura * de BD, ni media. Se usa para evaluar incidencias en produccion sin * tocar nada. */ export function getEffectiveRole() { if (process.env.ACAI_ROLE_OVERRIDE) return process.env.ACAI_ROLE_OVERRIDE; if (process.env.ACAI_MODE_OVERRIDE === "production") return "editor"; if (process.env.ACAI_MODE === "production") return "editor"; return "developer"; } /** * True si el rol efectivo es "auditor" (solo lectura total). */ export function isAuditor() { return getEffectiveRole() === "auditor"; } /** * True si el rol efectivo puede editar archivos de codigo. * Los roles permitidos son todo lo que NO sea "editor" ni "auditor". */ export function canEditCode() { const role = getEffectiveRole(); return role !== "editor" && role !== "auditor"; } /** * True si el rol efectivo puede editar contenido (registros, tablas, media, * traducciones). "editor" y "developer" pueden; "auditor" no. */ export function canEditContent() { return !isAuditor(); }