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 de titleAppend y esquemas estructurados JSON-LD automáticos (Organization, WebSite, BreadcrumbList y ldJson).
  • Formato de Conocimiento Abierto (OKF): Descripciones de conceptos en okf.yaml y unificación automática de etiquetas (tags y keywords).
  • 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-zip y protobufjs, 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.json ni sufrir podas de dependencias en npm.
  • Mejoras en el Parser y Live Editor: Soporte para la bandera open en ::: 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:
    1. Imprimir Página (icono printer, activando window.print() con una hoja de estilos de impresión limpia y optimizada).
    2. Alternar Modo Claro / Oscuro (permitiendo cambiar de tema sin salir del modo de enfoque).
    3. Salir del Modo de Enfoque (icono minimize-2 o presionando Esc / Alt+F).
  • Botón de Impresión en Widgets de Copia de Documentos: Cuando la impresión está habilitada (layout.print: true, layout.optionsMenu.components.print: true o layout.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 print integradas 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/ui como en el diseño @docmd/template-summer.
  • Menú de Opciones Configurable: optionsMenu.components.focusMode y optionsMenu.components.print se pueden configurar directamente en docmd.config.json bajo layout.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-bottom y footer.
  • 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 con dismissible: true o dismissable: true.
  • Soporte de Alias de Cierre: Reconocimiento de las propiedades dismissable y closable junto a dismissible.
  • 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.ts para 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: false en frontmatter o layout.titleAppend: false evita adjuntar el título del sitio, ideal para páginas de inicio y marketing.
  • Esquemas JSON-LD Estructurados:
    • Inyección automática del esquema Organization en la página principal.
    • Generación de esquema WebSite con acción de búsqueda.
    • Generación de esquemas BreadcrumbList jerárquicos.
    • Inyección de esquemas JSON-LD personalizados mediante la propiedad ldJson en frontmatter.
  • Coherencia en Redes Sociales: Títulos idénticos y sincronizados entre <title>, Open Graph og:title y Twitter twitter:title.

Mejoras en el Formato de Conocimiento Abierto (@docmd/plugin-okf)

  • Descripciones de Conceptos: Los conceptos en okf.yaml extraen automáticamente el campo description del frontmatter o del resumen inicial de la página.
  • Unificación de Etiquetas: El generador OKF combina transparentemente las propiedades tags y keywords, 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.exclude para omitir borradores y notas internas.
  • Cumplimiento Automático de .gitignore: Analizador integrado de .gitignore que 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 open en ::: details equivalente a ::: collapsible open.
  • Mapeo de Propiedades: Soporte para propiedades title, text y label en badges, botones, tooltips y changelogs.
  • Actualización de Iconos: Actualización de lucide-static a ^1.47.0.

Live Editor en el Navegador (@docmd/live)

  • Navegación Fluida: Enlace de regreso directo a https://docmd.io en 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 en libheif (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+K y /, y cierre con Escape.
  • 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: 0 al 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 a package.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 en node_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-summer al instalar docmd-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 ETARGET durante 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).