feat: rol auditor (solo lectura total) en el MCP + agente soporte
- roleCheck.js: isAuditor()/canEditContent(); canEditCode() tambien excluye auditor. Superficie editor/developer intacta (verificado contra el codigo pre-cambio en el test). - records/tables/media/languages: tools de escritura gateadas con canEditContent(), orden de registro original preservado. - agents/soporte: agente de evaluacion de incidencias en produccion, allowed_tools allowlist namespaceada (23 acai_code + 18 playwright, cero fetch), system.md con formato de informe obligatorio y trato del texto del cliente como dato no confiable. - test/auditor-role.test.js: 22 tests de superficie exacta por rol.
This commit is contained in:
@@ -3,13 +3,29 @@ import { registerUploadImageToAssetsTool } from './uploadImageToAssets.js';
|
||||
import { registerGenerateImageTool } from './generateImage.js';
|
||||
import { registerAnalyzeImageTool } from './analyze_image.js';
|
||||
import { registerSetUploadInfoTool } from './setUploadInfo.js';
|
||||
import { canEditContent } from '../helpers/roleCheck.js';
|
||||
|
||||
/**
|
||||
* Tools de media.
|
||||
*
|
||||
* Solo `analyze_image` es de lectura, asi que es la unica que ve el rol
|
||||
* "auditor". El resto (subidas, generacion y metadatos de uploads) va tras
|
||||
* canEditContent(). El orden de registro se mantiene igual que antes del gate
|
||||
* para no alterar el listado de tools de los roles existentes.
|
||||
*/
|
||||
export function registerMediaTools(server) {
|
||||
registerUploadRecordImageTool(server);
|
||||
registerUploadImageToAssetsTool(server);
|
||||
registerGenerateImageTool(server);
|
||||
const canWriteContent = canEditContent();
|
||||
|
||||
if (canWriteContent) {
|
||||
registerUploadRecordImageTool(server);
|
||||
registerUploadImageToAssetsTool(server);
|
||||
registerGenerateImageTool(server);
|
||||
}
|
||||
registerAnalyzeImageTool(server);
|
||||
// Metadatos info1..info5 de uploads: son datos de contenido, no codigo,
|
||||
// asi que va sin gate de canEditCode() como el resto de tools de media.
|
||||
registerSetUploadInfoTool(server);
|
||||
if (canWriteContent) {
|
||||
// Metadatos info1..info5 de uploads: son datos de contenido, no codigo,
|
||||
// asi que sigue sin gate de canEditCode() — pero si pasa por
|
||||
// canEditContent(), porque el auditor no escribe nada.
|
||||
registerSetUploadInfoTool(server);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user