v0.9.6 - Modo de Enfoque, Banners Multi-Posición, Enlaces de Anclaje, Mejoras de UI, Arquitectura SEO y Seguridad
Puntos Destacados
docmd v0.9.6 presenta un conjunto integral de mejoras arquitectónicas y nuevas funciones:
- Modo de Enfoque (Modo Zen): Lectura inmersiva sin distracciones con controles dedicados de Impresión y cambio de Modo Claro/Oscuro en la esquina superior derecha.
- Banners Multi-Posición: 7 posiciones de banner (
top,header,sidebar-top,sidebar-bottom,toc-top,toc-bottom,footer) con herencia jerárquica y persistencia predeterminada en tarjetas. - Copia de Enlaces de Anclaje: Copia instantánea de la URL completa al hacer clic en el ancla (
#) con animación de confirmación. - Revinculación y Estilo del Visor de Imágenes (Lightbox): Delegación de eventos en transiciones SPA, subtítulos con efecto vidrio esmerilado y botón de cierre integrado.
- Arquitectura de Título y SEO: Configuración granular de
layout.titleSeparator, control detitleAppendy esquemas estructurados JSON-LD automáticos (Organization,WebSite,BreadcrumbListyldJson). - Formato de Conocimiento Abierto (OKF): Descripciones de conceptos en
okf.yamly unificación automática de etiquetas (tagsykeywords). - Hook de Recursos Post-Compilación: Instantánea inmutable y congelada de recursos resueltos disponible para hooks post-compilación.
- Transmisión Multi-Turno de IA: Protocolo de reemplazo de flujo (
meta.replace: true) y síntesis de respaldo en razonamiento multi-turno. - Seguridad en Dependencias: Corrección de CVEs en
sharp,adm-zipyprotobufjs, junto con auditorías de seguridad automáticas en el pipeline. - Auto-Instalación en Lote Previa al Build: Instalación unificada y automática en lote de plantillas, plugins y dependencias de búsqueda semántica sin necesidad de declararlos manualmente en
package.jsonni sufrir podas de dependencias en npm. - Mejoras en el Parser y Live Editor: Soporte para la bandera
openen::: details, atributos ampliados de contenedores y navegación fluida en el Live Editor.
Modo de Enfoque y Controles de Impresión (@docmd/ui & @docmd/template-summer)
- Lectura Zen sin Distracciones: Con un solo clic en el menú de opciones o mediante el atajo de teclado (
Alt+F/Option+F), todas las barras laterales de navegación, encabezados, tabla de contenidos, migas de pan, pies de página y herramientas flotantes pasan a un segundo plano. El contenido se centra con una longitud de línea óptima para una lectura técnica inmersiva. - Controles Dedicados en la Esquina Superior Derecha: En el Modo de Enfoque, solo permanecen visibles las tres herramientas esenciales en la barra flotante superior derecha:
- Imprimir Página (icono
printer, activandowindow.print()con una hoja de estilos de impresión limpia y optimizada). - Alternar Modo Claro / Oscuro (permitiendo cambiar de tema sin salir del modo de enfoque).
- Salir del Modo de Enfoque (icono
minimize-2o presionandoEsc/Alt+F).
- Imprimir Página (icono
- Botón de Impresión en Widgets de Copia de Documentos: Cuando la impresión está habilitada (
layout.print: true,layout.optionsMenu.components.print: trueolayout.copyWidgets.print: true), se muestra un botón dedicado de Impresión directamente junto a los botones Copiar Markdown y Copiar Contexto en el encabezado del documento. - Hoja de Estilos de Impresión Completa: Reglas
@media printintegradas garantizan que las exportaciones a PDF o papel eliminen la interfaz web y produzcan documentos nítidos listos para su publicación. - Compatibilidad Multiplantilla: Totalmente compatible de forma nativa tanto en la plantilla estándar
@docmd/uicomo en el diseño@docmd/template-summer. - Menú de Opciones Configurable:
optionsMenu.components.focusModeyoptionsMenu.components.printse pueden configurar directamente endocmd.config.jsonbajolayout.optionsMenu.components.
Banners Multi-Posición y Herencia (layout.banners)
- 7 Posiciones Dedicadas: Configure anuncios y llamadas contextuales en
top,header,sidebar-top,sidebar-bottom,toc-top,toc-bottomyfooter. - Persistencia Predeterminada en Tarjetas: Los banners de tarjeta en la barra lateral y en la tabla de contenidos (
sidebar-top,sidebar-bottom,toc-top,toc-bottom) son persistentes por defecto (dismissible: false), manteniéndose visibles al navegar. Se puede activar el cierre manualmente condismissible: trueodismissable: true. - Soporte de Alias de Cierre: Reconocimiento de las propiedades
dismissableyclosablejunto adismissible. - Herencia Jerárquica y Sobrescritura: Los sitios versionados pueden heredar banners globales del workspace mientras permiten que versiones específicas (ej.
v09) sobrescriban avisos sin perder los anuncios de la barra lateral. - Contenido Enriquecido y Persistencia: Soporte para markdown, iconos Lucide, enlaces, variantes visuales (
info,tip,warning,announcement) y almacenamiento de estado en sessionStorage.
Mejoras de UI, Enlaces y Navegación
- Copia de URL de Anclajes de Sección: Al hacer clic en el icono de ancla (
#) de cualquier encabezado, se copia instantáneamente el enlace directo al portapapeles, acompañado de una animación temporal con un icono de marca de verificación verde. - Revinculación del Visor de Imágenes (Lightbox): El visor de imágenes modal ahora reengancha automáticamente sus manejadores al navegar entre páginas SPA (
docmd:page-mounted). Presenta un nuevo diseño con subtítulo difuminado (backdrop-filter) y botón de cierre circular integrado. - Cálculo Preciso de Tiempo de Lectura: Ajustes en el conteo de palabras y estimación de tiempo de lectura para documentos con bloques de código y elementos multimedia.
- Enrutador de Cliente Reforzado: Detección limpia de
target="_blank",rel="noopener", eliminación de comillas en enlaces SPA y preservación de rutas raíz. - Atributos de Navegación sin Escapar: Corrección del escape EJS en plantillas (
<%-en lugar de<%=) para atributos personalizados y enlaces. - Recarga de Plugins en Vivo: Sincronización de módulos en
packages/api/src/hooks.tspara que los cambios en plugins se apliquen inmediatamente.
Arquitectura de Títulos, Navegación y SEO (@docmd/plugin-seo & @docmd/core)
- Separadores de Título Configurables: Personalice el separador entre el título de la página y el sitio mediante
layout.titleSeparator(ej." - "," | "," / "), con soporte de sobrescritura por página. - Control de Inclusión de Título:
titleAppend: falseen frontmatter olayout.titleAppend: falseevita adjuntar el título del sitio, ideal para páginas de inicio y marketing. - Esquemas JSON-LD Estructurados:
- Inyección automática del esquema
Organizationen la página principal. - Generación de esquema
WebSitecon acción de búsqueda. - Generación de esquemas
BreadcrumbListjerárquicos. - Inyección de esquemas JSON-LD personalizados mediante la propiedad
ldJsonen frontmatter.
- Inyección automática del esquema
- Coherencia en Redes Sociales: Títulos idénticos y sincronizados entre
<title>, Open Graphog:titley Twittertwitter:title.
Mejoras en el Formato de Conocimiento Abierto (@docmd/plugin-okf)
- Descripciones de Conceptos: Los conceptos en
okf.yamlextraen automáticamente el campodescriptiondel frontmatter o del resumen inicial de la página. - Unificación de Etiquetas: El generador OKF combina transparentemente las propiedades
tagsykeywords, ya sea en formato de lista o cadenas separadas por comas.
Hook de Declaración de Recursos Post-Compilación (@docmd/api & @docmd/core)
- Instantáneas Inmutables: El pipeline de hooks de plugins recibe ahora una instantánea declarativa inmutable de todos los recursos resueltos (
report.resolvedAssets), permitiendo que herramientas externas analicen la salida sin mutar el manifiesto.
Transmisión Multi-Turno y Reemplazo de Flujo de IA (@docmd/plugin-ai & docmd-assistant)
- Presupuesto Extendido de Razonamiento: Ampliación del límite conversacional interno hasta 6 turnos para garantizar búsquedas completas antes de sintetizar respuestas.
- Protocolo de Reemplazo en Tiempo Real: Protocolo de reemplazo (
meta.replace: true) que transmite tokens SSE en vivo sin filtrar marcadores crudos de herramientas. - Síntesis Arquitectónica de Respaldo: Sintetizador de contexto multinivel ante consultas sobre conceptos no mapeados directamente en navegación.
- Acciones de Mensaje Configurables: Controles de acción (Copiar Respuesta, Reintentar y Editar) activables mediante
config.plugins.ai.messageActions: true.
Exclusión de Archivos y Filtrado Git Ignore
- Exclusiones a Nivel de Proyecto: Soporte para patrones glob en
config.excludepara omitir borradores y notas internas. - Cumplimiento Automático de
.gitignore: Analizador integrado de.gitignoreque excluye archivos y carpetas ignorados de la compilación e indexación vectorial.
Mejoras en el Parser y Contenedores (@docmd/parser)
- Bandera Open en Detalles: Soporte para
openen::: detailsequivalente a::: collapsible open. - Mapeo de Propiedades: Soporte para propiedades
title,textylabelen badges, botones, tooltips y changelogs. - Actualización de Iconos: Actualización de
lucide-statica^1.47.0.
Live Editor en el Navegador (@docmd/live)
- Navegación Fluida: Enlace de regreso directo a
https://docmd.ioen el botón de retroceso y en el logo. - Fórmulas Matemáticas KaTeX: Corrección en el reemplazo de cadenas para evitar escapar signos de dólar doble (
$$).
Auditoría de Seguridad y Corrección de CVEs
- Parches Críticos de CVE:
sharp(^0.35.4): Mitigación de vulnerabilidades enlibheif(GHSA-rgj7-g3m4-5g8c).adm-zip(>=0.6.0): Mitigación de directory traversal (GHSA-955c-w567-g4pw).protobufjs(^7.6.5): Mitigación de contaminación de prototipos (CVE-2023-36665).onnxruntime-node(^1.27.0): Precompilaciones nativas modernas para Apple Silicon y Linux.
- Auditoría Automatizada: Comprobación estricta de vulnerabilidades en
tools/prep.js(pnpm audit --audit-level=high). - Bloqueo de Dependencias: Overrides y peer dependencies definidos para proteger al consumidor final.
Optimizaciones en la Plantilla Summer y Móvil (@docmd/template-summer & @docmd/plugin-ai)
- Puente de Variables a la Paleta Summer: Las variables CSS globales y de plugins (
--docmd-*,--bg-color,--sidebar-bg, etc.) ahora se enlazan directamente a los tokens de Summer, permitiendo que la interfaz de plugins (Asistente de IA, Git, OpenAPI) se integre a la perfección. - Búsqueda Móvil en Barra Superior: Botón de apertura de búsqueda adaptable para pantallas de menos de 900px, con atajos
Cmd/Ctrl+Ky/, y cierre conEscape. - Responsive Git Popover: Ajuste de posición del popover de commits bajo 900px para que se adapte al ancho de la pantalla sin desbordar el viewport horizontalmente.
- Flexibilidad del Input de IA: Adición de
min-width: 0al campo de entrada del Asistente de IA para que no desborde en dispositivos móviles estrechos.
Instalación en Lote Previa de Dependencias en Tiempo de Ejecución (@docmd/api & @docmd/core)
- Cero Instalación Manual para Plantillas, Plugins y Búsqueda Semántica: Los proyectos de documentación ahora pueden especificar plantillas oficiales (ej.
theme.template: 'summer'), plugins (ej.plugins: ['math', 'mermaid']), motores de búsqueda (plugins.search.semantic: true) o motores de renderizado (engine: 'rust') directamente en la configuración sin necesidad de añadirlos manualmente apackage.json. - Detección Previa e Instalación Atómica en Lote: Antes de iniciar la compilación, tanto en espacios de trabajo multiproyecto (
buildWorkspace) como en sitios individuales (buildSite), docmd ejecuta un escaneo previo de todos los requisitos configurados. Si falta alguna dependencia ennode_modules(docmd-search,@huggingface/transformers,onnxruntime-node,sharp), docmd resuelve sus versiones e instala todas juntas en un único comando en lote con--no-save. - Eliminación de Podas por Reconciliación de npm: Anteriormente, instalar paquetes de forma secuencial durante diferentes fases del build provocaba que npm moderno (v7+) considerara extraños los paquetes instalados previamente y los borrara de
node_modules(ej. eliminando@docmd/template-summeral instalardocmd-search). Instalar todo en un único comando garantiza que las plantillas y recursos permanezcan intactos. - Resolución Dinámica de Versiones: Las instalaciones consultan dinámicamente el registro de npm para descargar las versiones publicadas más recientes, evitando fallos de
ETARGETdurante versiones preliminares. - Validación Estricta de Registro y Seguridad: Los nombres de paquetes que no correspondan a
@docmd/*o no existan en el catálogo oficial de docmd son rechazados estrictamente con advertencias claras, protegiendo contra ejecuciones arbitrarias.
Agradecimientos a la Comunidad y Contribuidores
Agradecemos sinceramente a los miembros de la comunidad cuyas contribuciones y correcciones enriquecen este lanzamiento:
@MSOB7YY: Búsqueda móvil en Summer, popover de Git responsivo, enlace de tokens CSS y corrección de desbordamiento en IA (#238), además de corrección de enlaces rotos y rutas (#229).@w666: Revinculación del visor de imágenes en SPA y mejoras de UI (#234), y copia de enlaces de anclaje de encabezados (#236).@justinTM: Corrección en la precisión del cálculo de tiempo de lectura (#231).