--- title: "Tabla de decisión — qué tool usar para qué" tags: [reference, decision, planner, tools] load_priority: 90 load_when: [cheatsheet, planner_only] summary: "Tabla decisional 'intención del usuario → tool MCP'. Es la guía rápida para enrutar peticiones sin leer toda la doc." --- # Tabla de decisión — qué tool usar Tabla decisional para mapear la intención del usuario a la herramienta correcta. Si tu petición encaja con varias filas, la primera que matchee es la canónica. ## Módulos (componentes visuales) | Intención | Tool / workflow | |---|---| | Crear módulo nuevo | `acai-write` `index-base.tpl` (compila auto) → `add_module_to_record` → `set_module_config_vars` | | Editar template de un módulo | `acai-view` → `acai-line-replace` (compila auto) | | Ver datos actuales de un módulo en una página | `get_module_config_vars({ tableName, recordNum, sectionId })` | | Cambiar valores de un módulo | `set_module_config_vars` | | Reordenar módulos en una página | `reorder_module({ tableName, recordNum, sectionId, fromPosition, toPosition })` | | Ocultar/mostrar un módulo | `toggle_module_visibility({ sectionId, visible })` | | Eliminar instancia de módulo de una página | `remove_module_from_record({ sectionId })` | | Borrar definición de módulo (carpeta entera) | `delete_module({ moduleId, inUse })` — destructivo, confirma con user | | Comprobar dónde se usa un módulo | `check_module_usage({ moduleId })` | | Preview de un módulo con datos de prueba | `check_module({ moduleId, vars })` | | Datos de ejemplo persistentes para preview | `set_module_example_data({ moduleId, data })` | ## Registros / contenido | Intención | Tool / workflow | |---|---| | Listar registros de una tabla | `list_table_records({ tableName, limit, where, orderBy, fields })` | | Leer un registro concreto | `get_record({ tableName, recordNum })` | | Crear/actualizar un registro | `create_or_update_record({ tableName, recordNum?, fields })` | | Borrar registros | `delete_table_records({ tableName, where })` (destructivo, confirma) | | Listar módulos en una página Builder | `list_page_modules({ tableName, recordNum })` | ## Imágenes y uploads | Intención | Tool / workflow | |---|---| | Generar imagen con IA | `generate_image({ prompt, size? })` → recibe `uploadUrl`/`fullUrl` | | Añadir imagen NUEVA a un campo upload | `upload_record_image({ tableName, recordNum, fieldName, imageUrl })` | | Listar imágenes existentes de un campo upload | `list_record_uploads({ tableName, recordNum, fieldName })` → uploadId por imagen | | Reemplazar imagen existente | `list_record_uploads` → `replace_record_image({ uploadId, imageUrl })` | | Borrar una imagen | `list_record_uploads` → `delete_record_upload({ uploadId })` | | Reordenar galería | `list_record_uploads` → `reorder_record_uploads({ uploadIds: [...] })` | | Subir imagen a `/images/` (assets globales del template) | `upload_image_to_assets({ imageUrl, fileName })` | ## Tablas y campos (schema) | Intención | Tool / workflow | |---|---| | Ver schema de una tabla | `get_table_schema({ tableName, minimal? })` | | Listar todas las tablas del proyecto | `list_tables` | | Crear tabla | `create_table({ tableName, displayName, menuType, enlace?, seoMetas? })` | | Actualizar metadata de tabla | `update_table_metadata({ tableName, ... })` | | Borrar tabla | `delete_table({ tableName, dropTable: true|false })` (destructivo) | | Reordenar tablas en el menú admin | `reorder_tables({ order: [...] })` | | Crear campo | `create_field({ tableName, fieldName, type, label, ... })` | | Modificar campo (renombrar, cambiar tipo) | `update_field({ tableName, fieldName, newFieldName?, type?, ... })` | | Borrar campo | `delete_field({ tableName, fieldName, dropColumn })` (destructivo) | | Reordenar campos | `reorder_fields({ tableName, order: [...] })` | | Regenerar enlaces (URLs) | `regenerate_enlaces({ tableName, generateAlias? })` (destructivo si no aliases) | ## Layout y librerías globales | Intención | Tool / workflow | |---|---| | Ver header/footer/javascript/style/lo del layout | `get_layout_field({ field })` | | Modificar header/footer/scripts globales | `set_layout_field({ field, value })` (destructivo, confirma) | | Listar librerías cargadas | `list_global_libraries` | | Añadir librería (CDN, npm) | `add_global_library({ url, position: "top"|"bottom" })` | | Quitar librería | `remove_global_library({ url })` | | Reescribir todo el array de librerías | `set_global_libraries({ libraries: [...] })` (destructivo) | ## Hooks PHP | Intención | Tool / workflow | |---|---| | Crear hook global | `acai-write hooks/hooks.X.php` (auto-registra en layout.json) | | Crear hook de módulo | `acai-write template/estandar/modulos/X/hook.php` | | Borrar hook global | `acai-delete hooks/hooks.X.php` (auto-quita de layout.json) | | Renombrar hook global | `acai-rename` o `acai-write` con nuevo nombre + `acai-delete` del viejo | | Hook que se ejecuta antes de cada página | `set_hook_middleware({ hookEndPoint, middleWare: ["allurls"] })` | | Hook que se ejecuta solo en una página | `set_hook_middleware({ hookEndPoint, middleWare: ["cms_apartados-87"] })` | | Ver middleware de un hook | `get_hook_middleware({ hookEndPoint })` | ## Archivos y filesystem | Intención | Tool / workflow | |---|---| | Buscar archivos por glob | `acai-glob({ pattern })` | | Buscar texto en archivos | `acai-grep({ query, path?, type? })` | | Leer un archivo | `acai-view({ file_path, start_line?, end_line? })` | | Crear/sobrescribir un archivo | `acai-write({ file_path, content })` | | Reemplazar líneas en un archivo | `acai-line-replace({ file_path, oldText, newText })` | | Borrar un archivo | `acai-delete({ file_path })` (destructivo) | ## Proyecto y debugging | Intención | Tool / workflow | |---|---| | URL del sitio (preview en desarrollo) | `get_web_url` (añade `?pruebas=1` siempre) | | Navegar al browser preview del usuario | `navigate_browser({ enlace })` | | Token JWT expirado (errores 403) | `refresh_acai_token` | | Volver a una versión anterior | `list_git_log` → `recover_git({ id })` o `recover_previous_git` (destructivos, confirma) | | Guardar estilos del proyecto en doc | `save_project_styles` | | Necesito un doc no cargado | `read_doc({ name: "..." })` | | Listado de docs disponibles | `list_docs` |