@gitpagedocs/cli 0.0.9 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,14 @@
1
+ import { practicalEs } from "./practical-es.mjs";
2
+ import { operationsEs } from "./operations-es.mjs";
3
+ import { overviewsEs } from "./overviews-es.mjs";
4
+ import { CONTENT_BLOCKS_DOCS } from "./content-blocks.mjs";
5
+ import { PARENT_MENU_JSON } from "./configuration-examples.mjs";
6
+
1
7
  export const docsEs = {
8
+ ...practicalEs,
9
+ ...operationsEs,
10
+ ...overviewsEs,
11
+ contentBlocks: CONTENT_BLOCKS_DOCS.es,
2
12
  pdf: `# Documentos PDF
3
13
 
4
14
  PDF es un tipo de contenido propio junto con Markdown, HTML, código fuente, vídeo y audio. La vista previa utiliza el visor nativo de PDF del navegador. Las acciones de descarga y apertura en una pestaña nueva se configuran de forma independiente.
@@ -24,13 +34,15 @@ Añade este bloque dentro de \`site\` en \`gitpagedocs/config.json\`:
24
34
  }
25
35
  \`\`\`
26
36
 
27
- \`enabled\` es el interruptor general del contenido PDF. Los demás campos controlan la vista previa, el botón de descarga y el enlace de nueva pestaña. Cada campo omitido toma el valor \`true\`, también en configuraciones antiguas.
37
+ \`enabled\` es el interruptor general del contenido PDF. Los demás campos controlan la vista previa, el botón de descarga y el botón de nueva pestaña. Cada campo omitido toma el valor \`true\`, también en configuraciones antiguas.
28
38
 
29
39
  La precedencia de las acciones es \`ruta.pdf.<flag>\` > \`site.pdf.<flag>\` > \`true\`. Un \`true\` explícito en la ruta activa esa acción aunque el valor del sitio sea \`false\`; \`site.pdf.enabled: false\` sigue desactivando todos los PDFs. Si falta la ruta del idioma seleccionado, el PDF no está disponible; no hay cambio automático de idioma.
30
40
 
41
+ Las acciones PDF usan iconos por defecto. Configura \`site.icons.PdfDownload\` (\`LuDownload\`) y \`site.icons.PdfOpenInNewTab\` (\`LuExternalLink\`) por separado con \`reactIcon\`, \`tag\`, \`size\`, \`colorDark\` y \`colorLight\`. Por ejemplo, \`"PdfDownload": { "reactIcon": false }\` muestra texto en descarga mientras la nueva pestaña conserva su icono. La apariencia no cambia las opciones de activación anteriores.
42
+
31
43
  ## Ejemplo de ruta y menú
32
44
 
33
- En \`gitpagedocs/docs/versions/0.0.9/config.json\`, conserva las listas de rutas y menús en el nivel principal:
45
+ En \`gitpagedocs/docs/versions/0.0.11/config.json\`, conserva las listas de rutas y menús en el nivel principal:
34
46
 
35
47
  \`\`\`json
36
48
  {
@@ -39,9 +51,9 @@ En \`gitpagedocs/docs/versions/0.0.9/config.json\`, conserva las listas de rutas
39
51
  "title": { "en": "Project guide (English)", "pt": "Guia do projeto (inglês)", "es": "Guía del proyecto (inglés)" },
40
52
  "pdf": {
41
53
  "pathPdf": {
42
- "en": "gitpagedocs/docs/versions/0.0.9/en/gitpagedocs-project-guide.pdf",
43
- "pt": "gitpagedocs/docs/versions/0.0.9/en/gitpagedocs-project-guide.pdf",
44
- "es": "gitpagedocs/docs/versions/0.0.9/en/gitpagedocs-project-guide.pdf"
54
+ "en": "gitpagedocs/docs/versions/0.0.11/en/gitpagedocs-project-guide.pdf",
55
+ "pt": "gitpagedocs/docs/versions/0.0.11/en/gitpagedocs-project-guide.pdf",
56
+ "es": "gitpagedocs/docs/versions/0.0.11/en/gitpagedocs-project-guide.pdf"
45
57
  },
46
58
  "previewEnabled": true,
47
59
  "downloadEnabled": true,
@@ -65,9 +77,9 @@ Las opciones de la ruta se colocan dentro de \`pdf\`. La presentación compartid
65
77
 
66
78
  Las rutas relativas a la raíz del repositorio que empiezan por \`gitpagedocs/\` se copian a los assets públicos del visor al iniciar o compilar Next.js. La URL respeta el subdirectorio de publicación de GitHub Pages. Incluye el PDF en Git y publícalo junto con la documentación generada. Los archivos fuera de \`gitpagedocs/\` deben estar en \`frontend/public/\` del visor o ser accesibles mediante una URL HTTP(S).
67
79
 
68
- Usa la URL del PDF binario, no una página HTML de vista previa del repositorio. Para repositorios remotos, la ruta se resuelve dentro de ese repositorio. Tanto la vista previa como la descarga obtienen los bytes del archivo, por lo que un servidor externo debe permitir CORS en ambas operaciones. El visor valida la firma PDF y crea una URL Blob temporal de tipo \`application/pdf\` para la vista previa nativa; libera esa URL al cambiar o cerrar el documento. La política de incorporación y las cabeceras de tipo/disposición del servidor de origen no controlan esta vista previa Blob.
80
+ Usa la URL del PDF binario, no una página HTML de vista previa del repositorio. Para repositorios remotos, la ruta se resuelve dentro de ese repositorio. La vista previa, la descarga y la apertura en una nueva pestaña obtienen los bytes del archivo, por lo que un servidor externo debe permitir CORS para las tres acciones. El visor valida la firma PDF y crea una URL Blob temporal de tipo \`application/pdf\`. La vista previa y la nueva pestaña utilizan el visor PDF nativo del navegador; la política de incorporación y las cabeceras de tipo/disposición del servidor de origen no controlan esta vista Blob.
69
81
 
70
- El enlace de nueva pestaña abre directamente la URL original. Su comportamiento depende del navegador y de las cabeceras \`Content-Type\` y \`Content-Disposition\`; una URL raw puede descargar el archivo en vez de mostrarlo. El enlace directo sigue disponible si falla la vista previa o la descarga, salvo cuando esa acción está desactivada.
82
+ El botón de nueva pestaña abre el Blob PDF validado en lugar de navegar a la URL raw del repositorio. También funciona con la vista previa desactivada: la carga comienza cuando el lector descarga o abre el documento. Los bytes cargados se reutilizan para el PDF actual. Los fallos de red/CORS, los PDFs inválidos y el bloqueo de nuevas pestañas muestran un error; no hay fallback automático a la URL raw. El soporte PDF nativo y las preferencias de descarga del navegador siguen determinando cómo se muestra el archivo en la nueva pestaña.
71
83
 
72
84
  ## Lectura y diagnóstico
73
85
 
@@ -75,19 +87,19 @@ El enlace de nueva pestaña abre directamente la URL original. Su comportamiento
75
87
  - La vista previa no convierte PDF en Markdown. El modo foco, la navegación por secciones, la copia de Markdown y la narración actúan sobre documentos Markdown, no sobre el PDF incorporado.
76
88
  - Desactivar la vista previa puede conservar la descarga y la nueva pestaña. Desactivar todas las acciones deja el PDF sin controles interactivos.
77
89
  - Ocultar un botón no controla el acceso. Los PDFs alojados públicamente siguen disponibles mediante su URL. Los documentos confidenciales necesitan alojamiento protegido.
78
- - Si la vista previa está vacía, abre una pestaña nueva, comprueba que la ruta devuelve un PDF y revisa las cabeceras del servidor. Los fallos de descarga se muestran en la página.
90
+ - Si la vista previa está vacía, confirma que la ruta devuelve un PDF y permite acceso mediante CORS; después prueba la nueva pestaña. Permite ventanas emergentes para el sitio si el navegador bloquea esa acción. Los fallos de descarga y apertura se muestran en la página.
79
91
  `,
80
92
  index: `# Git Page Docs
81
93
 
82
- Git Page Docs es un runtime de documentacion multilenguaje para repositorios que incluyen la carpeta \`gitpagedocs/\`.
94
+ Git Page Docs es un runtime de documentación multilenguaje para repositorios que incluyen la carpeta \`gitpagedocs/\`.
83
95
 
84
- ## Que entrega este proyecto
96
+ ## Qué ofrece este proyecto
85
97
 
86
98
  - Renderizado markdown multilenguaje (\`en\`, \`pt\`, \`es\`)
87
- - Ruteo por version (\`/v/:version\`)
99
+ - Ruteo por versión (\`/v/:version\`)
88
100
  - Sistema de temas con templates JSON
89
- - Ejecucion local y en GitHub Pages
90
- - Busqueda de repositorio + render remoto opcional
101
+ - Ejecución local y en GitHub Pages
102
+ - Búsqueda de repositorio + render remoto opcional
91
103
 
92
104
  ## Contrato de carpetas
93
105
 
@@ -100,14 +112,14 @@ El runtime espera esta estructura:
100
112
  - \`gitpagelayouts/layoutsConfig.json\`
101
113
  - \`gitpagelayouts/templates/*.json\`
102
114
 
103
- ## Navegacion rapida
115
+ ## Navegación rápida
104
116
 
105
117
  - Abre **Primeros pasos** para setup local.
106
- - Abre **Configuracion** para detalle completo de \`config.json\`.
107
- - Abre **Publicacion** para comportamiento local/produccion/GitHub Pages.
108
- - Abre **Arquitectura** para mapa de codigo y flujo de datos.
109
- - Abre **Temas y layouts** para creacion de templates.
110
- - Abre **Rutas autorizadas** para configurar clave, roles y autenticacion externa.
118
+ - Abre **Configuración** para detalle completo de \`config.json\`.
119
+ - Abre **Publicación** para comportamiento local/producción/GitHub Pages.
120
+ - Abre **Arquitectura** para mapa de código y flujo de datos.
121
+ - Abre **Temas y layouts** para creación de templates.
122
+ - Abre **Rutas autorizadas** para configurar clave, roles y autenticación externa.
111
123
  - Abre **FAQ** para troubleshooting.
112
124
 
113
125
  ## Referencias detalladas
@@ -115,9 +127,17 @@ El runtime espera esta estructura:
115
127
  - **Referencia de la CLI**: instalación, todos los comandos y flags de compatibilidad.
116
128
  - **Servidor MCP**: cliente, 20 tools, 7 resources y configuración de proveedores.
117
129
  - **Navegación y submenús**: árboles recursivos, URLs y prioridad de breadcrumbs.
130
+ - **Bloques de contenido ordenados**: repite y ordena Markdown, HTML, vídeo, audio y PDF en una página; posiciona títulos y descripciones configurados de forma independiente.
118
131
  - **Modo foco**: copiar/descargar Markdown y navegar por sección/documento.
119
132
  - **Accesibilidad y narración**: voces del navegador, controles e interacción con medios.
120
133
  - **Documentos PDF**: vista previa nativa, descarga/nueva pestaña y la guía incluida en inglés.
134
+ - **Recetas de configuración**: un sitio multilingüe completo y un menú con secciones dentro de secciones.
135
+ - **Migración y compatibilidad**: actualizar configuraciones desde la versión 0.0.1 conservando tu contenido.
136
+ - **Solución de problemas**: UTF-8, rutas locales y de Pages, carga de PDF, voces e inicio de MCP.
137
+ - **Contribución y validación**: archivos fuente, generación, contratos públicos y comprobaciónes de publicación.
138
+ - **Contenedores HTML**: páginas locales y externas, configuración de rutas/menús y el ejemplo interactivo DOOM.
139
+
140
+ El menú generado mantiene Primeros pasos y la descripción general del proyecto al principio. Guías contiene Configura tu sitio, Lee y explora y Automatiza e integra; cada categoría contiene sus páginas relacionadas. Operación y desarrollo agrupa publicación, mantenimiento y contribución. Git y GitHub contiene los ejemplos del repositorio. Las categorías pueden contener otras categorías sin un límite fijo de niveles.
121
141
  `,
122
142
  gettingStarted: `# Primeros pasos
123
143
 
@@ -167,35 +187,35 @@ El repositorio fija pnpm en \`packageManager\`. \`pnpm dev\` activa la búsqueda
167
187
 
168
188
  Usa Configuración para idiomas, iconos, navegación, foco y narración; Funcionalidades para CLI y MCP; Temas y diseños para tokens visuales; Preguntas frecuentes para diagnóstico.
169
189
  `,
170
- projectOverview: `# Vision general del proyecto
190
+ projectOverview: `# Visión general del proyecto
171
191
 
172
- Git Page Docs es un monorepo pnpm + turborepo que convierte la carpeta \`gitpagedocs/\` de un repositorio en un sitio de documentacion multilingue y versionado — con un asistente de IA integrado y un servidor MCP (Model Context Protocol).
192
+ Git Page Docs es un monorepo pnpm + turborepo que convierte la carpeta \`gitpagedocs/\` de un repositorio en un sitio de documentación multilingüe y versionado — con un asistente de IA integrado y un servidor MCP (Model Context Protocol).
173
193
 
174
194
  ## Paquetes del monorepo
175
195
 
176
- - **frontend/** — visor Next.js 15 (App Router, React 19), exportado estaticamente para GitHub Pages.
196
+ - **frontend/** — visor Next.js 15 (App Router, React 19), exportado estáticamente para GitHub Pages.
177
197
  - **cli/** — el paquete npm publicado \`@gitpagedocs/cli\` (\`npm install -g @gitpagedocs/cli\`): genera la estructura de docs, documenta con IA, configura Pages y ejecuta el servidor MCP.
178
- - **tools/** — \`@gitpagedocs/tools\`, el nucleo de logica compartido: sistema de IA con 14 proveedores, boveda de credenciales cifrada, cargador de config, caches y logger.
198
+ - **tools/** — \`@gitpagedocs/tools\`, el núcleo de lógica compartido: sistema de IA con 14 proveedores, bóveda de credenciales cifrada, cargador de config, caches y logger.
179
199
  - **mcp/** — \`@gitpagedocs/mcp\`, servidor Model Context Protocol (20 herramientas + 7 recursos).
180
200
  - **gitpagedocs/** — el contrato del usuario: \`config.json\`, docs versionados y layouts.
181
201
 
182
202
  ## Stack
183
203
 
184
- - Next.js 15 (App Router) + React 19 + TypeScript; exportacion estatica para GitHub Pages
204
+ - Next.js 15 (App Router) + React 19 + TypeScript; exportación estática para GitHub Pages
185
205
  - gray-matter + marked para Markdown; react-icons
186
206
  - pnpm workspaces + turborepo; Vitest + Playwright; ESLint
187
207
 
188
208
  ## Destacados
189
209
 
190
- - Multilingue (\`en\`, \`pt\`, \`es\`) y rutas por version (\`/v/:version\`)
191
- - Sistema de IA con 14 proveedores (OpenAI, Anthropic, Gemini, Ollama, Mistral, DeepSeek, Cohere, Groq, xAI y mas) con streaming
192
- - Claves de IA **cifradas en reposo** (AES-256-GCM) detras de una contrasena local — nunca en texto plano
210
+ - Multilingüe (\`en\`, \`pt\`, \`es\`) y rutas por versión (\`/v/:version\`)
211
+ - Sistema de IA con 14 proveedores (OpenAI, Anthropic, Gemini, Ollama, Mistral, DeepSeek, Cohere, Groq, xAI y más) con streaming
212
+ - Claves de IA **cifradas en reposo** (AES-256-GCM) detrás de una contraseña local — nunca en texto plano
193
213
  - **Panel de chat de IA** en los docs + una **consola \`/ai\`** dedicada
194
- - Sistema de 64 temas (variantes oscuras y claras); ejecucion local y en GitHub Pages
214
+ - Sistema de 64 temas (variantes oscuras y claras); ejecución local y en GitHub Pages
195
215
  `,
196
216
  functionalities: `# Funcionalidades
197
217
 
198
- Referencia completa de opciones CLI, claves de configuracion y funciones del runtime.
218
+ Referencia completa de opciones CLI, claves de configuración y funciones del runtime.
199
219
 
200
220
  ## Línea de comandos
201
221
 
@@ -203,23 +223,23 @@ Consulta **Referencia de la CLI** para comandos, flags, ejemplos y compatibilida
203
223
 
204
224
  ## Tipos de contenido
205
225
 
206
- | Tipo | Clave config | Descripcion |
226
+ | Tipo | Clave config | Descripción |
207
227
  |------|--------------|-------------|
208
228
  | Markdown | \`routes-md\` | Archivos .md con \`path\` por idioma |
209
229
  | HTML | \`routes-html\` | \`path\` local o \`url\` externa |
210
- | Video | \`routes-video\` | \`video.pathVideo\`, \`video.videoType\` |
230
+ | Vídeo | \`routes-video\` | \`video.pathVideo\`, \`video.videoType\` |
211
231
  | Audio | \`routes-audio\` | \`audio.pathAudio\`, \`audio.audioType\` |
212
232
  | PDF | \`routes-pdf\` | \`pdf.pathPdf\` por idioma; vista previa nativa y descarga |
213
233
 
214
- ## Visor de codigo fuente
234
+ ## Visor de código fuente
215
235
 
216
- El config de version puede renderizar un contenedor **Codigo fuente** via \`routes-source-viewer\` y \`menus-header-source-viewer\`. El viewer lee el arbol del repositorio en GitHub en tiempo de ejecucion y aplica el tema actual de la documentacion.
236
+ El config de versión puede renderizar un contenedor **Código fuente** vía \`routes-source-viewer\` y \`menus-header-source-viewer\`. El viewer lee el árbol del repositorio en GitHub en tiempo de ejecución y aplica el tema actual de la documentación.
217
237
 
218
- - Arbol del repositorio desde \`source-viewer-path\`; la branch por defecto es \`main\`
219
- - Navegacion por carpetas y filtro de archivos
238
+ - Árbol del repositorio desde \`source-viewer-path\`; la branch por defecto es \`main\`
239
+ - Navegación por carpetas y filtro de archivos
220
240
  - Listado de directorios estilo GitHub
221
- - Renderizado de codigo con numeros de linea
222
- - Alternancia vista previa/codigo para Markdown, incluido \`README.md\`
241
+ - Renderizado de código con números de línea
242
+ - Alternancia vista previa/código para Markdown, incluido \`README.md\`
223
243
  - Carpetas colapsables en la barra lateral
224
244
 
225
245
  ## Claves de config (site)
@@ -229,92 +249,108 @@ El config de version puede renderizar un contenedor **Codigo fuente** via \`rout
229
249
  - \`ProjectLink\`, \`layoutsConfigPathOficial\`, \`layoutsConfigPath\`
230
250
  - Idiomas: \`site.languages\` (activa/desactiva cada uno); textos de la UI: \`gitpagedocs/langs/<lang>.json\`
231
251
 
232
- ## Reproduccion de medios (un sonido a la vez)
252
+ ## Reproducción de medios (un sonido a la vez)
233
253
 
234
- \`site.mediaExclusivePlayback\` (por defecto \`true\`): reproducir un video de ruta pausa la radio y las pistas de audio, y reproducir la radio o una pista de audio pausa el video. Funciona con YouTube y Vimeo (mediante las APIs de sus reproductores), archivos nativos (\`mp4\`, \`webm\`, …) y cualquier otro embed.
254
+ \`site.mediaExclusivePlayback\` (por defecto \`true\`): reproducir un vídeo de ruta pausa la radio y las pistas de audio, y reproducir la radio o una pista de audio pausa el vídeo. Funciona con YouTube y Vimeo (mediante las APIs de sus reproductores), archivos nativos (\`mp4\`, \`webm\`, …) y cualquier otro embed.
235
255
 
236
- Para mostrar un video sin sonido mientras la radio o una pista de audio lo explica, usa \`"muted": true\` en el objeto \`video\` de la ruta: el video reproduce solo la imagen y queda fuera de la regla. \`"mediaExclusivePlayback": false\` desactiva la regla en todo el sitio.
256
+ Para mostrar un vídeo sin sonido mientras la radio o una pista de audio lo explica, usa \`"muted": true\` en el objeto \`video\` de la ruta: el vídeo reproduce solo la imagen y queda fuera de la regla. \`"mediaExclusivePlayback": false\` desactiva la regla en todo el sitio.
237
257
 
238
258
  ## Variables de entorno
239
259
 
240
- - \`GITPAGEDOCS_REPOSITORY_SEARCH\` – busqueda de repositorio (local)
260
+ - \`GITPAGEDOCS_REPOSITORY_SEARCH\` – búsqueda de repositorio (local)
241
261
  - \`GITHUB_ACTIONS\` – modo build GitHub Pages
242
262
 
243
263
  ## Asistente de IA
244
264
 
245
- Los docs traen un asistente de IA en dos superficies: un **panel de chat** dentro de los docs (boton de chat de IA en la barra lateral, activado por \`site.AiChatEnabled\`) y una pagina **consola \`/ai\`** dedicada.
265
+ Los docs traen un asistente de IA en dos superficies: un **panel de chat** dentro de los docs (botón de chat de IA en la barra lateral, activado por \`site.AiChatEnabled\`) y una página **consola \`/ai\`** dedicada.
246
266
 
247
- - **14 proveedores** en un unico core compartido: OpenAI, Anthropic, Gemini, OpenRouter, Ollama, Azure OpenAI, Mistral, DeepSeek, Cohere, Groq, xAI, Together, Fireworks, Perplexity.
248
- - **Eleccion de modelo** — desde el catalogo de cada proveedor (\`gitpagedocs models <proveedor>\`); un id de modelo guardado que el proveedor retiro se reemplaza por el predeterminado del proveedor automaticamente.
249
- - **Cifrado en reposo** — tu clave de API se sella con AES-256-GCM detras de una **contrasena local** y nunca queda en texto plano ni en logs.
250
- - **Bloqueo por inactividad** — el panel de chat se bloquea solo tras \`site.AiChatAutoLockSeconds\` segundos sin uso (por defecto 30, \`0\` lo desactiva): un modal centrado con cuenta regresiva, en tu idioma, permite cancelar o bloquear ahora, y desbloquear pide la contrasena de nuevo.
267
+ - **14 proveedores** en un único core compartido: OpenAI, Anthropic, Gemini, OpenRouter, Ollama, Azure OpenAI, Mistral, DeepSeek, Cohere, Groq, xAI, Together, Fireworks, Perplexity.
268
+ - **Elección de modelo** — desde el catálogo de cada proveedor (\`gitpagedocs models <proveedor>\`); un id de modelo guardado que el proveedor retiró se reemplaza por el predeterminado del proveedor automáticamente.
269
+ - **Cifrado en reposo** — tu clave de API se sella con AES-256-GCM detrás de una **contraseña local** y nunca queda en texto plano ni en logs.
270
+ - **Bloqueo por inactividad** — el panel de chat se bloquea solo tras \`site.AiChatAutoLockSeconds\` segundos sin uso (por defecto 30, \`0\` lo desactiva): un modal centrado con cuenta regresiva, en tu idioma, permite cancelar o bloquear ahora, y desbloquear pide la contraseña de nuevo.
251
271
  - **Proveedores resilientes** — los errores transitorios del proveedor se reintentan (3 intentos) y un fallo final es un mensaje simple que termina en "¡Inténtalo de nuevo!".
252
- - **Generacion de documentacion con IA** — \`gitpagedocs ai\` recorre las rutas elegidas y escribe markdown multilingue (pt/en/es); reutilizable via \`.gitpagedocsconfig\`, cuya clave de API queda sellada en la boveda cifrada \`.gitpagedocsvault\` (la contrasena de la boveda se pide en cada ejecucion). \`gitpagedocs chat\` lleva el mismo asistente a la terminal.
272
+ - **Generación de documentación con IA** — \`gitpagedocs ai\` recorre las rutas elegidas y escribe markdown multilingüe (pt/en/es); reutilizable vía \`.gitpagedocsconfig\`, cuya clave de API queda sellada en la bóveda cifrada \`.gitpagedocsvault\` (la contraseña de la bóveda se pide en cada ejecución). \`gitpagedocs chat\` lleva el mismo asistente a la terminal.
253
273
 
254
274
  ## Servidor MCP
255
275
 
256
- \`gitpagedocs mcp start\` levanta un servidor Model Context Protocol (stdio) que expone **20 tools** (sistema de archivos, IA, generacion/analisis de docs) y **7 resources** (\`project://structure|docs|config|repository|readme|ai/providers|ai/models\`) para editores y agentes de IA.
276
+ \`gitpagedocs mcp start\` levanta un servidor Model Context Protocol (stdio) que expone **20 tools** (sistema de archivos, IA, generación/análisis de docs) y **7 resources** (\`project://structure|docs|config|repository|readme|ai/providers|ai/models\`) para editores y agentes de IA.
257
277
  `,
258
- configuration: `# Configuracion
278
+ configuration: `# Configuración
259
279
 
260
- La configuracion de runtime esta en \`gitpagedocs/config.json\`. Los textos de la UI viven al lado, un archivo por idioma.
280
+ La configuración de runtime está en \`gitpagedocs/config.json\`. Los textos de la UI viven al lado, un archivo por idioma.
261
281
 
262
282
  ## Idiomas (\`site.languages\` + \`langs/\`)
263
283
 
264
- - \`site.languages\` en \`gitpagedocs/config.json\` activa (\`true\`) o desactiva (\`false\`) cada idioma, en el orden del menu: \`{ "languages": { "en": true, "pt": true, "es": false } }\`. Un idioma en \`false\` desaparece del selector de idiomas y sus textos no se cargan, aunque existan sus docs.
265
- - \`gitpagedocs/langs/<lang>.json\` guarda los textos de ese idioma: \`langmenu\` (cabecera, busqueda, visor de codigo, reproductor de audio, chat de IA y acceso a los docs) y \`translations\` (\`notFound\`, \`navigation\`, \`footer\`).
284
+ - \`site.languages\` en \`gitpagedocs/config.json\` activa (\`true\`) o desactiva (\`false\`) cada idioma, en el orden del menú: \`{ "languages": { "en": true, "pt": true, "es": false } }\`. Un idioma en \`false\` desaparece del selector de idiomas y sus textos no se cargan, aunque existan sus docs.
285
+ - \`gitpagedocs/langs/<lang>.json\` guarda los textos de ese idioma: \`langmenu\` (cabecera, búsqueda, visor de código, reproductor de audio, chat de IA y acceso a los docs) y \`translations\` (\`notFound\`, \`navigation\`, \`footer\`).
266
286
  - Para agregar un idioma, crea \`langs/<lang>.json\` y agrega \`"<lang>": true\` en \`site.languages\`.
267
- - Los \`config.json\` antiguos que aun traen \`site.langmenu\` / \`translations\` inline siguen funcionando; cuando existen ambos, los archivos de \`langs/\` prevalecen y cualquier clave ausente se completa desde la version actual.
287
+ - Los \`config.json\` antiguos que aún traen \`site.langmenu\` / \`translations\` inline siguen funcionando; cuando existen ambos, los archivos de \`langs/\` prevalecen y cualquier clave ausente se completa desde la versión actual.
268
288
 
269
- ## Seccion \`site\`
289
+ ## Sección \`site\`
270
290
 
271
291
  Claves principales:
272
292
 
273
- - \`name\`: titulo del proyecto en UI
293
+ - \`name\`: título del proyecto en UI
274
294
  - \`defaultLanguage\`: idioma por defecto
275
295
  - \`HideThemeSelector\`: ocultar/mostrar selector de tema
276
296
  - \`ThemeDefault\`: id del tema inicial
277
297
  - \`ThemeModeDefault\`: modo inicial (\`light\` o \`dark\`)
278
298
  - \`ProjectLink\`: URL de repositorio para acciones de cabecera
279
- - \`docsVersion\`: version seleccionada por defecto
280
- - \`ActiveNavigation\`: habilita anterior/siguiente
299
+ - \`docsVersion\`: versión seleccionada por defecto
300
+ - \`ActiveNavigation\`: habilita la navegación rápida y el atajo Ctrl+K
281
301
  - \`FocusMode\`: habilita modo foco/lectura
282
302
  - \`icons\`: iconos de la cabecera. \`icons.defaults\` guarda lo que todos comparten (\`reactIcon\`, \`colorDark\`, \`colorLight\`, \`size\`, \`imgDark\`, \`imgLight\`, \`imgWidth\`, \`imgHeight\`) y cada icono define su \`tag\` y lo que cambia (\`null\` quita un campo). Las claves planas de abajo siguen valiendo y ganan cuando existen ambas formas.
283
- - \`IconImageMenuHeaderImgWidth\`, \`IconImageMenuHeaderImgHeight\`: tamano del icono principal
303
+ - \`IconImageMenuHeaderImgWidth\`, \`IconImageMenuHeaderImgHeight\`: tamaño del icono principal
284
304
  - \`IconImageMenuHeaderLightImg\`, \`IconImageMenuHeaderDarkImg\`: icono principal (light/dark)
285
- - \`IconProjectLinkImgWidth\`, \`IconProjectLinkImgHeight\`: tamano del icono enlace del proyecto
305
+ - \`IconProjectLinkImgWidth\`, \`IconProjectLinkImgHeight\`: tamaño del icono enlace del proyecto
286
306
  - \`IconProjectLinkLightImg\`, \`IconProjectLinkDarkImg\`: icono enlace del proyecto
287
- - \`IconVersionLinksImgWidth\`, \`IconVersionLinksImgHeight\`: tamano del icono enlaces de version
288
- - \`IconVersionLinksLightImg\`, \`IconVersionLinksDarkImg\`: icono enlaces de version
289
- - \`IconInfoHeaderMenuImgWidth\`, \`IconInfoHeaderMenuImgHeight\`: tamano del icono info
307
+ - \`IconVersionLinksImgWidth\`, \`IconVersionLinksImgHeight\`: tamaño del icono enlaces de versión
308
+ - \`IconVersionLinksLightImg\`, \`IconVersionLinksDarkImg\`: icono enlaces de versión
309
+ - \`IconInfoHeaderMenuImgWidth\`, \`IconInfoHeaderMenuImgHeight\`: tamaño del icono info
290
310
  - \`IconInfoHeaderMenuLightImg\`, \`IconInfoHeaderMenuDarkImg\`: icono info
291
- - \`IconPreviewProjectLinkImgWidth\`, \`IconPreviewProjectLinkImgHeight\`: tamano del icono preview
311
+ - \`IconPreviewProjectLinkImgWidth\`, \`IconPreviewProjectLinkImgHeight\`: tamaño del icono preview
292
312
  - \`IconPreviewProjectLinkLightImg\`, \`IconPreviewProjectLinkDarkImg\`: icono preview
293
313
  - \`layoutsConfigPath\`: fallback remoto de layouts
294
- - \`rendering\`: URL canonica publicada
314
+ - \`rendering\`: URL canónica publicada
295
315
 
296
- ## Controles de idioma, tema y foco
316
+ ## Controles de idioma, tema, foco, navegación rápida, PDF y documentos
297
317
 
298
- En \`gitpagedocs/config.json\`, agrega estas entradas a \`site.icons\` para usar React Icons en el selector de idioma, el selector de tema y el boton de foco:
318
+ En \`gitpagedocs/config.json\`, estas entradas de \`site.icons\` configuran idioma, tema, foco, navegación Ctrl+K, acciones PDF y navegación al pie de los documentos. Los ocho controles utilizan React Icons por defecto:
299
319
 
300
320
  \`\`\`json
301
321
  {
302
322
  "site": {
303
323
  "icons": {
304
324
  "LanguageSelector": {
305
- "reactIcon": true, "tag": "FiGlobe", "size": "22px",
325
+ "reactIcon": true, "tag": "SiGoogletranslate", "size": "22px",
306
326
  "colorDark": "currentColor", "colorLight": "currentColor"
307
327
  },
308
328
  "ThemeSelector": {
309
- "reactIcon": true, "tag": "BsSunFill", "size": "22px",
329
+ "reactIcon": true, "tag": "LuPencil", "size": "22px",
310
330
  "colorDark": "currentColor", "colorLight": "currentColor"
311
331
  },
312
332
  "FocusMode": {
313
- "reactIcon": true, "tag": "MdFullscreen", "size": "22px",
333
+ "reactIcon": true, "tag": "LuBookOpen", "size": "22px",
314
334
  "colorDark": "currentColor", "colorLight": "currentColor"
315
335
  },
316
336
  "QuickNavigation": {
317
- "reactIcon": true, "tag": "FiSearch", "size": "22px",
337
+ "reactIcon": true, "tag": "LuSearch", "size": "22px",
338
+ "colorDark": "currentColor", "colorLight": "currentColor"
339
+ },
340
+ "PdfDownload": {
341
+ "reactIcon": true, "tag": "LuDownload", "size": "22px",
342
+ "colorDark": "currentColor", "colorLight": "currentColor"
343
+ },
344
+ "PdfOpenInNewTab": {
345
+ "reactIcon": true, "tag": "LuExternalLink", "size": "22px",
346
+ "colorDark": "currentColor", "colorLight": "currentColor"
347
+ },
348
+ "DocumentPrevious": {
349
+ "reactIcon": true, "tag": "LuChevronLeft", "size": "22px",
350
+ "colorDark": "currentColor", "colorLight": "currentColor"
351
+ },
352
+ "DocumentNext": {
353
+ "reactIcon": true, "tag": "LuChevronRight", "size": "22px",
318
354
  "colorDark": "currentColor", "colorLight": "currentColor"
319
355
  }
320
356
  }
@@ -322,74 +358,76 @@ En \`gitpagedocs/config.json\`, agrega estas entradas a \`site.icons\` para usar
322
358
  }
323
359
  \`\`\`
324
360
 
325
- Cada control es independiente: \`reactIcon: false\` conserva la apariencia actual con texto (por defecto); \`true\` muestra el icono. Personaliza \`tag\`, \`size\`, \`colorDark\` y \`colorLight\` por control; \`currentColor\` sigue el tema activo. Los selectores con iconos mantienen sus menus y nombres accesibles. \`site.FocusMode\` sigue controlando si el modo foco esta habilitado; \`site.icons.FocusMode\` solo cambia la apariencia del boton.
361
+ Cada control es independiente: \`reactIcon: true\` muestra el icono (por defecto); \`false\` muestra texto. Personaliza \`tag\`, \`size\`, \`colorDark\` y \`colorLight\` por control; \`currentColor\` sigue el tema activo. Los controles con iconos conservan sus nombres accesibles, y los selectores conservan sus menús. El atajo Ctrl+K sigue disponible. \`site.FocusMode\` habilita el modo foco; \`site.icons.FocusMode\` solo cambia la apariencia del botón. \`site.icons.PdfDownload\` y \`site.icons.PdfOpenInNewTab\` seleccionan texto o iconos independientemente; las opciones correspondientes de \`site.pdf\` y del \`pdf\` de la ruta controlan la disponibilidad de cada acción.
362
+
363
+ Las configuraciones compactas pueden mover valores comunes a \`site.icons.defaults\`; los campos omitidos heredan esos valores. Define \`reactIcon: false\` en una entrada concreta para sustituir el icono predeterminado por texto.
326
364
 
327
- ## Seccion \`VersionControl\`
365
+ ## Sección \`VersionControl\`
328
366
 
329
367
  \`VersionControl.versions\` define:
330
368
 
331
- - \`id\`: identificador de version
332
- - \`path\`: ruta de config de version
369
+ - \`id\`: identificador de versión
370
+ - \`path\`: ruta de config de versión
333
371
  - links opcionales (\`ProjectLink\`, \`branch\`, \`release\`, \`commit\`)
334
372
  - metadatos opcionales del source viewer (\`source-viewer\`, \`source-viewer-path\`)
335
373
 
336
- ## Navegacion y rutas
374
+ ## Navegación y rutas
337
375
 
338
376
  - \`routes\`: rutas markdown por idioma (legado)
339
- - \`menus-header\`: menu jerarquico
340
- - \`translations\`: etiquetas UI para not-found y navegacion
377
+ - \`menus-header\`: menú jerarquico
378
+ - \`translations\`: etiquetas UI para not-found y navegación
341
379
 
342
- ## Autorizacion (config de version)
380
+ ## Autorización (config de versión)
343
381
 
344
- - \`auth\`: configuraciones globales de autorizacion para esa version
382
+ - \`auth\`: configuraciones globales de autorización para esa versión
345
383
  - \`auth.accessKeys\`: mapa de claves usado por \`authorization.accessKeyId\`
346
384
  - \`auth.rolesStorageKey\`: clave de localStorage para bootstrap de roles
347
385
  - \`auth.providers\`: adaptadores de proveedor (\`authjs\`, \`clerk\`, \`firebase\`, \`jwt\`)
348
386
 
349
- ## Tipos de contenido (config de version)
387
+ ## Tipos de contenido (config de versión)
350
388
 
351
- Los configs de version soportan multiples tipos:
389
+ Los configs de versión soportan múltiples tipos:
352
390
 
353
- - \`routes-md\`: Rutas markdown con \`title\`, \`description\` (centrados via \`titlePosition\`, \`descriptionPosition\`)
354
- - \`routes-source-viewer\`: Contenedores de codigo fuente con \`source-viewer: true\` y \`source-viewer-path\`
355
- - \`routes-html\`: Rutas de paginas HTML por idioma
356
- - \`routes-video\`: Config de video con \`video.videoType\` (youtube, vimeo, mp4, etc.) y \`video.pathVideo\`
391
+ - \`routes-md\`: Rutas markdown con \`title\`, \`description\` (centrados vía \`titlePosition\`, \`descriptionPosition\`)
392
+ - \`routes-source-viewer\`: Contenedores de código fuente con \`source-viewer: true\` y \`source-viewer-path\`
393
+ - \`routes-html\`: Rutas de páginas HTML por idioma
394
+ - \`routes-video\`: Config de vídeo con \`video.videoType\` (youtube, vimeo, mp4, etc.) y \`video.pathVideo\`
357
395
  - \`routes-audio\`: Config de audio con \`audio.audioType\` (youtube, mp3, etc.) y \`audio.pathAudio\`
358
396
  - \`routes-pdf\`: PDF con \`pdf.pathPdf\` por idioma; consulta Documentos PDF.
359
- - \`authorization\` (md/html/video): guardia de acceso por clave, roles y autenticacion externa
360
- - \`menus-header-md\`, \`menus-header-source-viewer\`, \`menus-header-html\`, \`menus-header-video\`, \`menus-header-audio\`, \`menus-header-pdf\`: menus por tipo
361
- - \`hierarchyPage\`: orden de contenedores en la pagina \`{ md: 0, "source-viewer": 1, html: 2, video: 3, audio: 4, pdf: 5 }\`
362
- - \`hierarchyMenu\`: orden de secciones del menu \`{ md: 0, "source-viewer": 1, html: 2, video: 3, audio: 4, pdf: 5 }\`
397
+ - \`authorization\` (md/html/vídeo): guardia de acceso por clave, roles y autenticación externa
398
+ - \`menus-header-md\`, \`menus-header-source-viewer\`, \`menus-header-html\`, \`menus-header-video\`, \`menus-header-audio\`, \`menus-header-pdf\`: menús por tipo
399
+ - \`hierarchyPage\`: orden de contenedores en la página \`{ md: 0, "source-viewer": 1, html: 2, video: 3, audio: 4, pdf: 5 }\`
400
+ - \`hierarchyMenu\`: orden de secciones del menú \`{ md: 0, "source-viewer": 1, html: 2, video: 3, audio: 4, pdf: 5 }\`
363
401
 
364
402
  Cada ruta puede incluir \`title\`, \`description\` (por idioma), \`titleCss\`, \`titlePosition: "center"\`, \`descriptionPosition: "center"\`, \`titleIsVisible\`, \`descriptionIsVisible\`.
365
403
 
366
- Los ajustes que comparten todas las rutas se escriben una sola vez en \`routeDefaults\`, al inicio del config de la version; cada ruta guarda solo sus propios valores, y un valor escrito en la ruta gana sobre \`routeDefaults\`.
404
+ Los ajustes que comparten todas las rutas se escriben una sola vez en \`routeDefaults\`, al inicio del config de la versión; cada ruta guarda solo sus propios valores, y un valor escrito en la ruta gana sobre \`routeDefaults\`.
367
405
 
368
406
  ## Variables por ruta (blockLink, container, url, browseAll)
369
407
 
370
408
  Opciones por ruta en \`routes-md\`, \`routes-html\` y \`routes-video\`:
371
409
 
372
410
  - **\`blockLink\`** (defecto: true) – Para HTML: si true, los enlaces abren en nueva pestaña (\`target="_blank"\`); si false, en el mismo contexto.
373
- - **\`container\`** – \`"full"\` = altura automatica; numero (ej: \`500\`) = altura fija en px con overflow auto. Se aplica a md, html y video.
374
- - **\`url\`** – Solo en \`routes-html\`: \`Record<LanguageCode, string>\` con URLs externas. Al definirse, el iframe usa \`src={url}\` en vez de HTML local via \`srcDoc\`. Las rutas con \`url\` no generan archivos HTML locales.
411
+ - **\`container\`** – \`"full"\` = altura automática; numero (ej: \`500\`) = altura fija en px con overflow auto. Se aplica a md, html y vídeo.
412
+ - **\`url\`** – Solo en \`routes-html\`: \`Record<LanguageCode, string>\` con URLs externas. Al definirse, el iframe usa \`src={url}\` en vez de HTML local vía \`srcDoc\`. Las rutas con \`url\` no generan archivos HTML locales.
375
413
  - **\`browseAll\`** (defecto: false) – Si true, el contenedor muestra botones Anterior/Siguiente para navegar entre todos los items de ese tipo.
376
414
 
377
415
  ## Tipos de contenido: path vs url (HTML)
378
416
 
379
417
  - **Markdown (\`routes-md\`)**: usa \`path\` apuntando a archivos \`.md\` locales.
380
- - **HTML (\`routes-html\`)**: usa \`path\` para archivos HTML locales (sin extension .html en config) o \`url\` para URLs externas. Con \`url\`, el iframe carga la pagina externa; no se genera archivo local.
381
- - **Video (\`routes-video\`)**: usa \`video.pathVideo\` y \`video.videoType\` (youtube, vimeo, mp4, etc.).
418
+ - **HTML (\`routes-html\`)**: usa \`path\` para archivos HTML locales (sin extensión .html en config) o \`url\` para URLs externas. Con \`url\`, el iframe carga la página externa; no se genera archivo local.
419
+ - **Vídeo (\`routes-video\`)**: usa \`video.pathVideo\` y \`video.videoType\` (youtube, vimeo, mp4, etc.).
382
420
 
383
421
  ## Variables de entorno
384
422
 
385
- - \`GITPAGEDOCS_REPOSITORY_SEARCH\`: activa/desactiva busqueda remota en local
386
- - \`GITHUB_ACTIONS\`: habilita comportamiento especifico de GitHub Pages
423
+ - \`GITPAGEDOCS_REPOSITORY_SEARCH\`: activa/desactiva búsqueda remota en local
424
+ - \`GITHUB_ACTIONS\`: habilita comportamiento específico de GitHub Pages
387
425
 
388
426
  ## Comportamiento del sitio y valores predeterminados
389
427
 
390
428
  | Clave | Valor / finalidad |
391
429
  | --- | --- |
392
- | \`ActiveNavigation\` | true; controles habituales anterior/siguiente |
430
+ | \`ActiveNavigation\` | true; navegación rápida y atajo Ctrl+K |
393
431
  | \`FocusMode / focusMode\` | Activación general (true) y controles independientes de copia, descarga, sección y documento; consulta Modo foco |
394
432
  | \`pdf\` | Activación general, vista previa, descarga y nueva pestaña; todos true |
395
433
  | \`nestedMenusEnabled\` | true; árbol recursivo, o destinos planos con false |
@@ -423,7 +461,7 @@ La entrada \`QuickNavigation\` controla la apariencia de icono/texto del botón
423
461
  `,
424
462
  deployment: `# Publicación
425
463
 
426
- Elige el visor oficial para un repositorio público, publica tu propio GitHub Pages o aloja un export estático compilado desde el runtime.
464
+ Elige el visor oficial para un repositorio público, pública tu propio GitHub Pages o aloja un export estático compilado desde el runtime.
427
465
 
428
466
  ## Visor oficial
429
467
 
@@ -459,36 +497,36 @@ En un checkout del runtime con dependencias instaladas, \`node cli/index.mjs --h
459
497
 
460
498
  ## Releases npm para mantenedores
461
499
 
462
- El monorepo publica \`@gitpagedocs/tools\`, \`@gitpagedocs/mcp\` y \`@gitpagedocs/cli\`; raíz y frontend son privados. El \`npm-publish.yml\` actual se ejecuta en pushes a \`main\` y omite una versión de CLI ya publicada. Utiliza el secret \`NPM_TOKEN\` del repositorio y publica workspaces en orden de dependencia. Crear solo una release de GitHub no es su disparador.
500
+ El monorepo pública \`@gitpagedocs/tools\`, \`@gitpagedocs/mcp\` y \`@gitpagedocs/cli\`; raíz y frontend son privados. El \`npm-publish.yml\` actual se ejecuta en pushes a \`main\` y omite una versión de CLI ya publicada. Utiliza el secret \`NPM_TOKEN\` del repositorio y pública workspaces en orden de dependencia. Crear solo una release de GitHub no es su disparador.
463
501
 
464
502
  Sincroniza versiones y dependencias internas, regenera docs/baselines, ejecuta typecheck, lint, pruebas, smoke, build y Playwright y revisa antes del push. Confirma las tres versiones en npm y el resultado de Pages. La CLI de configuración ignora \`prebuilt/\`; el workflow de publicación no requiere esa carpeta.
465
503
  `,
466
504
  architecture: `# Arquitectura
467
505
 
468
- El proyecto esta organizado por fronteras de feature y responsabilidades de runtime.
506
+ El proyecto está organizado por fronteras de feature y responsabilidades de runtime.
469
507
 
470
508
  ## Paquetes
471
509
 
472
510
  - **frontend/** — visor Next.js (Feature-Sliced: app / widgets / features / entities / shared); export estatico.
473
- - **cli/** — el bin publicado \`gitpagedocs\` (hexagonal) + \`cli/ai/\` (CLI de documentacion con IA).
511
+ - **cli/** — el bin publicado \`gitpagedocs\` (hexagonal) + \`cli/ai/\` (CLI de documentación con IA).
474
512
  - **tools/** — \`@gitpagedocs/tools\`: ai/ security/ crypto/ cache/ config/ logger/ errors/ filesystem/ documentation/ i18n/ ports/.
475
513
  - **mcp/** — \`@gitpagedocs/mcp\`: herramientas + recursos MCP que delegan a tools/.
476
514
 
477
515
  ## Modulos principales (frontend)
478
516
 
479
- - \`frontend/src/app/[[...repo]]/page.tsx\` — parser de rutas, generateStaticParams, seleccion de shell.
480
- - \`frontend/src/entities/docs/api/load-docs-data.ts\` — config local/remota, version, parse markdown, layouts + temas.
481
- - \`frontend/src/widgets/docs-shell/docs-shell.tsx\` — UI, estado idioma/version/tema, sync de URL, montaje del chat de IA.
517
+ - \`frontend/src/app/[[...repo]]/page.tsx\` — parser de rutas, generateStaticParams, selección de shell.
518
+ - \`frontend/src/entities/docs/api/load-docs-data.ts\` — config local/remota, versión, parse markdown, layouts + temas.
519
+ - \`frontend/src/widgets/docs-shell/docs-shell.tsx\` — UI, estado idioma/versión/tema, sync de URL, montaje del chat de IA.
482
520
 
483
521
  ## Seguridad: credenciales de IA cifradas
484
522
 
485
- La consola \`/ai\` y el panel de chat exigen una contrasena local que deriva (PBKDF2) una clave AES-256-GCM; las claves quedan cifradas en \`localStorage\` y solo se descifran durante la sesion (\`@gitpagedocs/tools/security\`). El panel se bloquea solo tras \`site.AiChatAutoLockSeconds\` segundos sin uso (por defecto 30; \`0\` lo desactiva): un modal centrado con cuenta regresiva, en el idioma seleccionado, permite cancelar o bloquear ahora, y volver exige la contrasena de nuevo. En la CLI, la clave de \`.gitpagedocsconfig\` queda sellada en la boveda cifrada \`.gitpagedocsvault\` y la contrasena de la boveda se pide en cada ejecucion.
523
+ La consola \`/ai\` y el panel de chat exigen una contraseña local que deriva (PBKDF2) una clave AES-256-GCM; las claves quedan cifradas en \`localStorage\` y solo se descifran durante la sesión (\`@gitpagedocs/tools/security\`). El panel se bloquea solo tras \`site.AiChatAutoLockSeconds\` segundos sin uso (por defecto 30; \`0\` lo desactiva): un modal centrado con cuenta regresiva, en el idioma seleccionado, permite cancelar o bloquear ahora, y volver exige la contraseña de nuevo. En la CLI, la clave de \`.gitpagedocsconfig\` queda sellada en la bóveda cifrada \`.gitpagedocsvault\` y la contraseña de la bóveda se pide en cada ejecución.
486
524
 
487
525
  ## Flujo de datos
488
526
 
489
527
  1. Llega la ruta (\`/owner/repo/v/x.y.z\` o equivalente local)
490
528
  2. Se resuelve config (local o remoto)
491
- 3. Config de version sobreescribe rutas/menus base
529
+ 3. Config de versión sobreescribe rutas/menús base
492
530
  4. Markdown se carga y convierte a HTML
493
531
  5. Template de layout se resuelve y aplica en CSS vars
494
532
  6. Shell renderiza contenido y controles
@@ -497,7 +535,7 @@ La consola \`/ai\` y el panel de chat exigen una contrasena local que deriva (PB
497
535
 
498
536
  - fallback de carga para layouts/templates
499
537
  - carga de markdown por idioma con fallback de error
500
- - sincronizacion de idioma/version/tema via localStorage
538
+ - sincronización de idioma/versión/tema vía localStorage
501
539
  `,
502
540
  githubIssuesProjects: `# GitHub Issues y Projects
503
541
 
@@ -524,21 +562,21 @@ Conceptos basicos de Git para principiantes.
524
562
 
525
563
  Protege rutas por clave de acceso, roles requeridos y proveedores externos.
526
564
 
527
- ## Ubicacion del config de version
565
+ ## Ubicacion del config de versión
528
566
 
529
567
  Configura en:
530
568
 
531
569
  - \`gitpagedocs/docs/versions/<version>/config.json\`
532
570
 
533
- ## Seccion global auth
571
+ ## Sección global auth
534
572
 
535
- Usa \`auth\` en la raiz del config de version:
573
+ Usa \`auth\` en la raiz del config de versión:
536
574
 
537
575
  - \`accessKeys\`: mapa de ids de clave al secreto esperado
538
576
  - \`rolesStorageKey\`: clave de localStorage para bootstrap de roles
539
577
  - \`providers\`: lista de proveedores externos (\`authjs\`, \`clerk\`, \`firebase\`, \`jwt\`)
540
578
 
541
- ## Autorizacion por ruta
579
+ ## Autorización por ruta
542
580
 
543
581
  Dentro de cada ruta (\`routes-md\`, \`routes-html\`, \`routes-video\`):
544
582
 
@@ -555,7 +593,7 @@ Define \`authorization.accessKeyId\` y la clave correspondiente en \`auth.access
555
593
 
556
594
  ### Fase B - Roles
557
595
 
558
- Define \`authorization.requiredRoles\` con uno o mas roles.
596
+ Define \`authorization.requiredRoles\` con uno o más roles.
559
597
 
560
598
  Los roles pueden venir de:
561
599
 
@@ -597,7 +635,7 @@ Cada template normalmente incluye:
597
635
 
598
636
  ## Comportamiento en runtime
599
637
 
600
- - tema activo viene de config/seleccion de usuario
638
+ - tema activo viene de config/selección de usuario
601
639
  - toggle light/dark resuelve tema pareado por referencia
602
640
  - variables CSS se generan desde tokens del template
603
641
 
@@ -740,7 +778,7 @@ La generación envía el contenido seleccionado del proyecto al proveedor config
740
778
 
741
779
  ## Comandos CLI
742
780
 
743
- | Comando | Descripcion |
781
+ | Comando | Descripción |
744
782
  |---------|-------------|
745
783
  | \`npx @gitpagedocs/cli\` | Genera config y docs en \`gitpagedocs/\` |
746
784
  | \`npx @gitpagedocs/cli --layoutconfig\` | Tambien genera layouts/templates locales en \`gitpagelayouts/\` |
@@ -748,28 +786,28 @@ La generación envía el contenido seleccionado del proyecto al proveedor config
748
786
  | \`npx @gitpagedocs/cli --push --owner X --repo Y\` | Configura workflow, commit, push |
749
787
  | \`npx @gitpagedocs/cli --interactive\` / \`-i\` | Modo interactivo con prompts (por defecto en una terminal) |
750
788
  | \`npx @gitpagedocs/cli --no-interactive\` / \`--yes\` / \`-y\` | Nunca pregunta; usa flags y valores por defecto |
751
- | \`gitpagedocs ai\` | Generador interactivo de documentacion con IA |
752
- | \`gitpagedocs chat [pregunta]\` | Chat de IA con streaming en la terminal (REPL en TTY; respuesta unica con pregunta o stdin) |
753
- | \`gitpagedocs provider [id]\` / \`models [provider]\` | Lista proveedores de IA / modelos del catalogo |
754
- | \`gitpagedocs document[:repo\\|:file\\|:folder]\` | Genera documentacion con IA |
755
- | \`gitpagedocs deploy\` / \`pages [actions\\|deploy]\` | Configura GitHub Pages via Actions + push |
789
+ | \`gitpagedocs ai\` | Generador interactivo de documentación con IA |
790
+ | \`gitpagedocs chat [pregunta]\` | Chat de IA con streaming en la terminal (REPL en TTY; respuesta única con pregunta o stdin) |
791
+ | \`gitpagedocs provider [id]\` / \`models [provider]\` | Lista proveedores de IA / modelos del catálogo |
792
+ | \`gitpagedocs document[:repo\\|:file\\|:folder]\` | Genera documentación con IA |
793
+ | \`gitpagedocs deploy\` / \`pages [actions\\|deploy]\` | Configura GitHub Pages vía Actions + push |
756
794
  | \`gitpagedocs docs\` | Actualiza las regiones gestionadas de README/CONTRIBUTING/SECURITY |
757
- | \`gitpagedocs password\` | Define la contrasena de acceso a la documentacion (clave publica en \`site.docsAccess\`) |
758
- | \`gitpagedocs config\` / \`config clear\` | Muestra la config resuelta / borra la config guardada y la boveda de claves |
759
- | \`gitpagedocs doctor\` / \`version\` / \`update\` | Diagnostico / version / comprobacion de actualizacion en el registro |
795
+ | \`gitpagedocs password\` | Define la contraseña de acceso a la documentación (clave pública en \`site.docsAccess\`) |
796
+ | \`gitpagedocs config\` / \`config clear\` | Muestra la config resuelta / borra la config guardada y la bóveda de claves |
797
+ | \`gitpagedocs doctor\` / \`version\` / \`update\` | Diagnóstico / versión / comprobación de actualización en el registro |
760
798
  | \`gitpagedocs mcp start\` | Inicia el servidor MCP por stdio |
761
799
 
762
800
  Instala globalmente con \`npm install -g @gitpagedocs/cli\` o ejecuta sin instalar con \`npx @gitpagedocs/cli\`.
763
801
 
764
802
  ## Opciones CLI
765
803
 
766
- | Opcion | Descripcion |
804
+ | Opcion | Descripción |
767
805
  |--------|-------------|
768
806
  | \`--owner <user>\` | Owner de GitHub |
769
807
  | \`--repo <repo>\` | Repositorio GitHub |
770
808
  | \`--path <subpath>\` | Subruta de docs (ej: \`docs\`); sin ella, base path = nombre del repo para CSS/JS en project sites |
771
809
  | \`--output <dir>\` | Directorio de salida (default: \`gitpagedocs\`) |
772
- | \`--search <true-or-false>\` | Habilita/deshabilita busqueda de repositorio (\`--home\`) |
810
+ | \`--search <true-or-false>\` | Habilita/deshabilita búsqueda de repositorio (\`--home\`) |
773
811
  | \`--layoutconfig\` | Genera layouts locales en \`gitpagelayouts/\` |
774
812
  | \`--layouts-dir <dir>\` | Carpeta de layouts locales (por defecto: \`gitpagelayouts\`) |
775
813
  | \`--push\` | Crea workflow, commit de artefactos, push |
@@ -780,7 +818,7 @@ Instala globalmente con \`npm install -g @gitpagedocs/cli\` o ejecuta sin instal
780
818
 
781
819
  - \`gitpagedocs/config.json\` – config raiz
782
820
  - \`gitpagedocs/icon.svg\` – icono por defecto
783
- - \`gitpagedocs/docs/versions/<ver>/config.json\` – rutas por version
821
+ - \`gitpagedocs/docs/versions/<ver>/config.json\` – rutas por versión
784
822
  - \`gitpagedocs/docs/versions/<ver>/{en,pt,es}/*.md\` – docs en markdown
785
823
  - \`gitpagelayouts/\` – solo con \`--layoutconfig\` (carpeta configurable con \`--layouts-dir\`)
786
824
 
@@ -825,7 +863,7 @@ Las rutas definen el contenido; los menús definen cómo encontrarlo. Configúra
825
863
 
826
864
  Cada entrada de \`menus-header-md\` tiene \`id\` y objetos \`pt\`, \`en\`, \`es\` con \`title\` y \`path-click\` opcional. Añade \`submenus\` con nuevas entradas para anidar el árbol. El objeto de un idioma también acepta \`submenus\` localizados con título/ruta. Utiliza una forma de manera consistente para no listar el mismo hijo dos veces.
827
865
 
828
- Los grupos sin \`path-click\` organizan sus hijos. Para un destino Markdown, utiliza su ruta localizada real de \`routes-md[].path\`. El alias \`page:<id>\` lo registran rutas source-viewer, vídeo, audio y PDF; no lo uses en una página que solo contiene Markdown. El ejemplo utiliza la versión \`0.0.8\`: sustituye ese segmento por la versión editada y crea los tres archivos chapter.
866
+ Los grupos sin \`path-click\` organizan sus hijos. Para el destino de una ruta Markdown, utiliza su ruta localizada real de \`routes-md[].path\`. Las rutas source-viewer, vídeo, audio, PDF y las composiciones explícitas de \`pages\` registran \`page:<id>\`; una ruta Markdown simple utiliza la ruta del archivo. El ejemplo utiliza la versión \`0.0.8\`: sustituye ese segmento por la versión editada y crea los tres archivos chapter.
829
867
 
830
868
  \`\`\`json
831
869
  {
@@ -893,6 +931,14 @@ Los grupos sin \`path-click\` organizan sus hijos. Para un destino Markdown, uti
893
931
 
894
932
  ## Comportamiento del anidamiento
895
933
 
934
+ Un padre puede ser documento y grupo a la vez. Conserva su \`path-click\` localizado junto con \`submenus\`: el título abre su página Markdown y la flecha separada expande o contrae los hijos. El scaffold incluye resúmenes útiles para los ocho grupos padres. Los antecesores de los breadcrumbs enlazan a esos documentos; el destino actual sigue marcado como actual. Un grupo sin ruta puede organizar hijos, pero no tiene un destino para abrir.
935
+
936
+ El siguiente fragmento utiliza las rutas Markdown 31, 32 y 13 incluidas en el scaffold. Combínalo con \`menus-header-md\` y conserva las definiciones correspondientes en \`routes-md\` y sus archivos:
937
+
938
+ \`\`\`json
939
+ ${PARENT_MENU_JSON}
940
+ \`\`\`
941
+
896
942
  \`site.nestedMenusEnabled: true\` muestra menús recursivos expandibles. Puedes añadir \`submenus\` en cualquier nodo: no existe un límite fijo de profundidad en la aplicación. La configuración debe ser finita y adecuada para la memoria del navegador y la usabilidad. Con \`false\`, los destinos aparecen en una lista plana; las páginas anidadas no se eliminan.
897
943
 
898
944
  El árbol sirve para navegación lateral, etiquetas de búsqueda, expansión de padres y rutas de navegación. Mantén IDs estables y sin ambigüedad; los destinos protegidos siguen las reglas de autorización de su página. La misma estructura se aplica a \`menus-header-source-viewer\`, \`menus-header-html\`, \`menus-header-video\`, \`menus-header-audio\` y \`menus-header-pdf\`. \`hierarchyMenu\` ordena las secciones por tipo; \`hierarchyPage\` ordena los contenedores que comparten el ID de página.
@@ -905,7 +951,9 @@ El árbol sirve para navegación lateral, etiquetas de búsqueda, expansión de
905
951
 
906
952
  ## URLs y anterior/siguiente
907
953
 
908
- Las URLs versionadas utilizan \`/v/<version>/\`; \`?lang=pt\` elige el idioma y \`?id=101\` elige la página. \`?name=chapter\` selecciona el slug del documento. Mantén \`VersionControl.versions[].path\` apuntando al config de la versión correspondiente. \`site.ActiveNavigation\` activa anterior/siguiente habitual; la navegación entre documentos en modo foco tiene su propia opción. Consulta Modo foco para controles de sección y documento.
954
+ Las URLs versionadas utilizan \`/v/<version>/\`; \`?lang=pt\` elige el idioma y \`?id=101\` elige la página. \`?name=chapter\` selecciona el slug del documento. Mantén \`VersionControl.versions[].path\` apuntando al config de la versión correspondiente. \`site.ActiveNavigation\` activa la navegación rápida y su atajo Ctrl+K. Los controles anterior/siguiente del pie siguen los destinos disponibles en el menú; la navegación entre documentos en modo foco tiene su propia opción. Consulta Modo foco para controles de sección y documento.
955
+
956
+ Los botones anterior/siguiente del pie usan \`site.icons.DocumentPrevious\` (\`LuChevronLeft\`) y \`site.icons.DocumentNext\` (\`LuChevronRight\`) por defecto. Define \`reactIcon: false\` en cualquier entrada para mostrar su texto traducido; cada entrada también acepta \`tag\`, \`size\`, \`colorDark\` y \`colorLight\`. La apariencia no cambia la navegación: el pie aparece cuando hay más de un destino disponible en el menú, y la dirección no disponible permanece desactivada en los extremos.
909
957
 
910
958
  Prueba un menú nuevo desde la barra lateral, por URL directa y en cada idioma habilitado; confirma que el destino existe y está permitido para el lector actual.
911
959
  `,
@@ -931,18 +979,21 @@ Combina este fragmento con \`gitpagedocs/config.json\`:
931
979
  }
932
980
  \`\`\`
933
981
 
934
- Cada opción tiene valor predeterminado \`true\`; \`false\` oculta su control correspondiente. Con \`sectionNavigationEnabled: false\`, el modo foco muestra el documento completo sin paginación por secciones. Las configuraciones existentes sin el nuevo objeto \`focusMode\` mantienen los controles activados.
982
+ Cada opción tiene valor predeterminado \`true\`; \`false\` oculta la acción o el grupo de navegación correspondiente. Con \`sectionNavigationEnabled: false\`, el modo foco muestra el documento completo sin paginación por secciones. Las configuraciones existentes sin el nuevo objeto \`focusMode\` mantienen los controles activados.
935
983
 
936
984
  ## Secciones y documentos
937
985
 
938
- - Los controles anterior/siguiente de flecha simple cambian de sección en el mismo documento.
939
- - Los controles anterior/siguiente de flecha doble cambian de documento Markdown en orden de menú, incluidos los submenús.
986
+ - La navegación por secciones tiene cuatro botones: primera sección, sección anterior, sección siguiente y última sección del documento actual.
987
+ - La navegación por documentos tiene cuatro botones: primer documento, documento anterior, documento siguiente y último documento en el orden del menú, incluidos los submenús.
988
+ - \`sectionNavigationEnabled\` controla los cuatro botones de sección; \`documentNavigationEnabled\` controla los cuatro botones de documento. Las direcciones no disponibles quedan desactivadas en los extremos.
940
989
  - Se omiten documentos sin traducción en el idioma activo, destinos que no son Markdown y páginas sin permiso.
941
990
  - Cambiar de documento mantiene abierto el diálogo y vuelve a la primera sección. Los contadores de sección/documento muestran la posición actual.
942
- - \`site.ActiveNavigation\` controla la navegación habitual de la página; no desactiva la navegación de documentos en modo foco.
991
+ - \`site.ActiveNavigation\` controla la navegación rápida; no desactiva la navegación de documentos en modo foco.
943
992
 
944
993
  ## Copiar y descargar
945
994
 
995
+ En una página compuesta, foco lee los bloques Markdown autorizados en orden, incluidas las repeticiones. Copiar/descargar une esas fuentes y utiliza \`page-<id>.md\`; las acciones individuales de los bloques conservan sus nombres originales. Consulta Bloques de contenido ordenados para el contrato completo.
996
+
946
997
  Copiar y descargar utilizan el **Markdown original completo en el idioma seleccionado**, incluidas las secciones que no están visibles. No exportan el HTML renderizado ni solo la sección actual.
947
998
 
948
999
  La descarga conserva el nombre base Markdown del \`path\` localizado de la ruta; si no está disponible, el nombre del archivo es \`document.md\`. El portapapeles sigue las reglas de permisos y contexto seguro del navegador. Si la copia falla, utiliza la descarga y consulta el error mostrado.
@@ -1014,7 +1065,7 @@ Consulta la [referencia de Web Speech API](https://developer.mozilla.org/en-US/d
1014
1065
  `,
1015
1066
  faq: `# FAQ
1016
1067
 
1017
- ## Por que repositorios remotos no abren en local?
1068
+ ## ¿Por qué repositorios remotos no abren en local?
1018
1069
 
1019
1070
  Verifica:
1020
1071
 
@@ -1022,29 +1073,29 @@ Verifica:
1022
1073
  - repositorio objetivo contiene \`gitpagedocs/config.json\`
1023
1074
  - paths markdown del repositorio coinciden con su config de rutas
1024
1075
 
1025
- ## Por que una ruta de version muestra contenido incorrecto?
1076
+ ## ¿Por qué una ruta de versión muestra contenido incorrecto?
1026
1077
 
1027
1078
  Verifica:
1028
1079
 
1029
1080
  - \`VersionControl.versions[*].path\` en \`gitpagedocs/config.json\`
1030
- - config de version tiene \`routes\` y \`menus-header\` validos
1081
+ - config de versión tiene \`routes\` y \`menus-header\` válidos
1031
1082
  - markdown existe para cada idioma
1032
1083
 
1033
- ## Por que tema no se aplica correctamente?
1084
+ ## ¿Por qué tema no se aplica correctamente?
1034
1085
 
1035
1086
  Verifica:
1036
1087
 
1037
- - \`layoutsConfig.json\` referencia templates validos
1038
- - ids de template son unicos
1088
+ - \`layoutsConfig.json\` referencia templates válidos
1089
+ - ids de template son únicos
1039
1090
  - tema seleccionado existe en el mapa de temas cargados
1040
1091
 
1041
- ## Por que GitHub Pages puede comportarse distinto a local?
1092
+ ## ¿Por qué GitHub Pages puede comportarse distinto a local?
1042
1093
 
1043
- Porque el build de GitHub Pages habilita la pagina inicial de busqueda y comportamiento especifico de exportacion.
1094
+ Porque el build de GitHub Pages habilita la página inicial de búsqueda y comportamiento específico de exportación.
1044
1095
 
1045
1096
  ## ¿Por qué el icono sigue mostrando texto?
1046
1097
 
1047
- Define \`site.icons.<Control>.reactIcon\` como booleano \`true\`, con el nombre exacto exportado por React Icons en \`tag\`. Los controles incluyen LanguageSelector, ThemeSelector, FocusMode y QuickNavigation. Los campos planos \`Icon*ReactIcones\` tienen prioridad si existen ambos formatos. Comprueba si la propia función está desactivada mediante \`HideThemeSelector\` o \`FocusMode\`.
1098
+ Define \`site.icons.<Control>.reactIcon\` como booleano \`true\`, con el nombre exacto exportado por React Icons en \`tag\`. LanguageSelector, ThemeSelector, FocusMode, QuickNavigation, PdfDownload, PdfOpenInNewTab, DocumentPrevious y DocumentNext usan iconos por defecto; cambia cualquier entrada a \`false\` para mostrar texto. Los campos planos \`Icon*ReactIcones\` tienen prioridad si existen ambos formatos. Comprueba si la propia función está desactivada mediante \`HideThemeSelector\`, \`FocusMode\` o las acciones PDF.
1048
1099
 
1049
1100
  ## ¿Por qué los hijos del menú o breadcrumbs son diferentes?
1050
1101