@gitpagedocs/cli 0.0.1

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.
Files changed (91) hide show
  1. package/README.md +193 -0
  2. package/ai/application/ai-command.ts +24 -0
  3. package/ai/application/ai-provider-factory.ts +22 -0
  4. package/ai/application/docs-pattern.ts +72 -0
  5. package/ai/application/resolve-chat-credentials.ts +69 -0
  6. package/ai/application/run-ai-cli-command.ts +167 -0
  7. package/ai/config.ts +50 -0
  8. package/ai/core/chat-session.ts +44 -0
  9. package/ai/core/models/ai-cli-config.ts +33 -0
  10. package/ai/core/models/parse-ai-cli-config.ts +76 -0
  11. package/ai/core/ports/illm-provider.ts +32 -0
  12. package/ai/infrastructure/ai-config-file.ts +101 -0
  13. package/ai/infrastructure/file-system-adapter.ts +85 -0
  14. package/ai/infrastructure/llm/tools-llm-provider.ts +54 -0
  15. package/ai/infrastructure/version-docs-writer.ts +143 -0
  16. package/ai/presentation/ai-prompts.ts +239 -0
  17. package/application/config-only/handler.mjs +57 -0
  18. package/application/home/handler.mjs +87 -0
  19. package/application/ports/cli-runtime-ports.ts +93 -0
  20. package/application/report/config-only-reporter.mjs +68 -0
  21. package/application/use-cases/dispatch-mode.ts +18 -0
  22. package/builders/config-orchestrator.mjs +35 -0
  23. package/builders/language-bundles-builder.mjs +24 -0
  24. package/builders/project-links.mjs +50 -0
  25. package/builders/root-config-builder.d.mts +16 -0
  26. package/builders/root-config-builder.mjs +56 -0
  27. package/builders/route-builders.mjs +136 -0
  28. package/builders/theme-template.mjs +76 -0
  29. package/builders/version-config-builder.mjs +186 -0
  30. package/content/docs-en.mjs +556 -0
  31. package/content/docs-es.mjs +469 -0
  32. package/content/docs-pt.mjs +469 -0
  33. package/content/docs.mjs +9 -0
  34. package/contracts/doc-versions.mjs +3 -0
  35. package/contracts/index.mjs +11 -0
  36. package/contracts/langs-paths.mjs +28 -0
  37. package/contracts/languages.mjs +6 -0
  38. package/contracts/layouts-paths.d.mts +17 -0
  39. package/contracts/layouts-paths.mjs +68 -0
  40. package/contracts/path-segments.d.mts +2 -0
  41. package/contracts/path-segments.mjs +15 -0
  42. package/data/default-site-config.mjs +328 -0
  43. package/data/i18n-langmenu.mjs +350 -0
  44. package/data/i18n-translations.mjs +20 -0
  45. package/data/layouts.mjs +437 -0
  46. package/data/path-mappings.mjs +26 -0
  47. package/data/route-metas.mjs +93 -0
  48. package/data/theme-colors.mjs +444 -0
  49. package/data/urls.mjs +12 -0
  50. package/data/version-constants.mjs +3 -0
  51. package/domain/models/cli-options.ts +33 -0
  52. package/domain/services/layouts-migration.d.mts +15 -0
  53. package/domain/services/layouts-migration.mjs +74 -0
  54. package/domain/services/sanitize-segment.mjs +7 -0
  55. package/home/constants.mjs +4 -0
  56. package/home/home-file-writer.mjs +19 -0
  57. package/home/templates.mjs +51 -0
  58. package/index.mjs +38 -0
  59. package/infrastructure/config-only/runtime.mjs +17 -0
  60. package/infrastructure/gitpagedocs-config-file.ts +47 -0
  61. package/infrastructure/home/runtime.mjs +37 -0
  62. package/package.json +60 -0
  63. package/presentation/commands/ai-info.ts +57 -0
  64. package/presentation/commands/chat.ts +259 -0
  65. package/presentation/commands/config-clear.ts +23 -0
  66. package/presentation/commands/config-info.ts +72 -0
  67. package/presentation/commands/diagnostics.ts +174 -0
  68. package/presentation/commands/docs.ts +42 -0
  69. package/presentation/commands/mcp.ts +20 -0
  70. package/presentation/commands/pages.ts +103 -0
  71. package/presentation/commands/password.ts +62 -0
  72. package/presentation/commands/run-command.ts +72 -0
  73. package/presentation/index.ts +125 -0
  74. package/presentation/options/parser.ts +120 -0
  75. package/presentation/options/resolver.ts +46 -0
  76. package/presentation/options/schema.ts +14 -0
  77. package/presentation/ui/banner.ts +13 -0
  78. package/presentation/ui/clack.ts +91 -0
  79. package/presentation/ui/layouts-prompts.ts +124 -0
  80. package/presentation/ui/prompts.ts +147 -0
  81. package/presentation/ui/terminal-stream.ts +97 -0
  82. package/presentation/ui/tty.ts +37 -0
  83. package/runtime/doc-path-resolver.mjs +59 -0
  84. package/runtime/exec.mjs +168 -0
  85. package/runtime/git-ops.mjs +112 -0
  86. package/runtime/layouts-migrator.d.mts +11 -0
  87. package/runtime/layouts-migrator.mjs +117 -0
  88. package/runtime/output.mjs +201 -0
  89. package/runtime/workflow.mjs +131 -0
  90. package/start.mjs +14 -0
  91. package/ui/logger.mjs +9 -0
@@ -0,0 +1,469 @@
1
+ export const docsEs = {
2
+ index: `# Git Page Docs
3
+
4
+ Git Page Docs es un runtime de documentacion multilenguaje para repositorios que incluyen la carpeta \`gitpagedocs/\`.
5
+
6
+ ## Que entrega este proyecto
7
+
8
+ - Renderizado markdown multilenguaje (\`en\`, \`pt\`, \`es\`)
9
+ - Ruteo por version (\`/v/:version\`)
10
+ - Sistema de temas con templates JSON
11
+ - Ejecucion local y en GitHub Pages
12
+ - Busqueda de repositorio + render remoto opcional
13
+
14
+ ## Contrato de carpetas
15
+
16
+ El runtime espera esta estructura:
17
+
18
+ - \`gitpagedocs/config.json\`
19
+ - \`gitpagedocs/docs/<lang>/*.md\`
20
+ - \`gitpagedocs/docs/versions/<version>/config.json\`
21
+ - \`gitpagedocs/docs/versions/<version>/<lang>/*.md\`
22
+ - \`gitpagelayouts/layoutsConfig.json\`
23
+ - \`gitpagelayouts/templates/*.json\`
24
+
25
+ ## Navegacion rapida
26
+
27
+ - Abre **Primeros pasos** para setup local.
28
+ - Abre **Configuracion** para detalle completo de \`config.json\`.
29
+ - Abre **Publicacion** para comportamiento local/produccion/GitHub Pages.
30
+ - Abre **Arquitectura** para mapa de codigo y flujo de datos.
31
+ - Abre **Temas y layouts** para creacion de templates.
32
+ - Abre **Rutas autorizadas** para configurar clave, roles y autenticacion externa.
33
+ - Abre **FAQ** para troubleshooting.
34
+ `,
35
+ gettingStarted: `# Primeros pasos
36
+
37
+ Esta guia lleva el proyecto desde cero hasta docs corriendo.
38
+
39
+ ## Requisitos
40
+
41
+ - Node.js 20+
42
+ - npm 10+ (o pnpm)
43
+
44
+ ## Setup local
45
+
46
+ 1. Instala dependencias:
47
+ - \`npm install\`
48
+ 2. Genera/actualiza artefactos de docs:
49
+ - \`npm run gitpagedocs\`
50
+ 3. Inicia desarrollo:
51
+ - \`npm run dev\`
52
+ 4. Build + ejecucion local de produccion:
53
+ - \`npm run build\`
54
+ - \`npm start\`
55
+
56
+ ## Comportamiento de la CLI
57
+
58
+ \`npx @gitpagedocs/cli\` (o \`npm run gitpagedocs\`) genera artefactos en la carpeta oficial \`gitpagedocs/\`.
59
+
60
+ - Genera solo markdown/json
61
+ - No genera \`index.html\`
62
+ - No genera \`index.js\`
63
+ - No ejecuta comandos de instalacion
64
+
65
+ ## Modo de busqueda por repositorio
66
+
67
+ En local, se controla por variable:
68
+
69
+ - \`GITPAGEDOCS_REPOSITORY_SEARCH=true\`
70
+ - \`GITPAGEDOCS_REPOSITORY_SEARCH=false\`
71
+
72
+ En build de GitHub Pages (\`GITHUB_ACTIONS=true\`), la busqueda de repositorio siempre esta activa.
73
+ `,
74
+ projectOverview: `# Vision general del proyecto
75
+
76
+ 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).
77
+
78
+ ## Paquetes del monorepo
79
+
80
+ - **frontend/** — visor Next.js 15 (App Router, React 19), exportado estaticamente para GitHub Pages.
81
+ - **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.
82
+ - **tools/** — \`@gitpagedocs/tools\`, el nucleo de logica compartido: sistema de IA con 14 proveedores, boveda de credenciales cifrada, cargador de config, caches y logger.
83
+ - **mcp/** — \`@gitpagedocs/mcp\`, servidor Model Context Protocol (20 herramientas + 7 recursos).
84
+ - **gitpagedocs/** — el contrato del usuario: \`config.json\`, docs versionados y layouts.
85
+
86
+ ## Stack
87
+
88
+ - Next.js 15 (App Router) + React 19 + TypeScript; exportacion estatica para GitHub Pages
89
+ - gray-matter + marked para Markdown; react-icons
90
+ - pnpm workspaces + turborepo; Vitest + Playwright; ESLint
91
+
92
+ ## Destacados
93
+
94
+ - Multilingue (\`en\`, \`pt\`, \`es\`) y rutas por version (\`/v/:version\`)
95
+ - Sistema de IA con 14 proveedores (OpenAI, Anthropic, Gemini, Ollama, Mistral, DeepSeek, Cohere, Groq, xAI y mas) con streaming
96
+ - Claves de IA **cifradas en reposo** (AES-256-GCM) detras de una contrasena local — nunca en texto plano
97
+ - **Panel de chat de IA** en los docs + una **consola \`/ai\`** dedicada
98
+ - Sistema de 36 temas; ejecucion local y en GitHub Pages
99
+ `,
100
+ functionalities: `# Funcionalidades
101
+
102
+ Referencia completa de opciones CLI, claves de configuracion y funciones del runtime.
103
+
104
+ ## Comandos CLI
105
+
106
+ | Comando | Descripcion |
107
+ |---------|-------------|
108
+ | \`npx @gitpagedocs/cli\` | Genera config y docs en \`gitpagedocs/\` |
109
+ | \`npx @gitpagedocs/cli --layoutconfig\` | Tambien genera layouts/templates locales en \`gitpagelayouts/\` |
110
+ | \`npx @gitpagedocs/cli --home\` | Distribucion standalone (\`gitpagedocshome/\`) |
111
+ | \`npx @gitpagedocs/cli --push --owner X --repo Y\` | Configura workflow, commit, push |
112
+ | \`npx @gitpagedocs/cli --interactive\` / \`-i\` | Modo interactivo con prompts (por defecto en una terminal) |
113
+ | \`npx @gitpagedocs/cli --no-interactive\` / \`-y\` | Nunca pregunta; usa flags y valores por defecto |
114
+
115
+ ## Opciones CLI
116
+
117
+ | Opcion | Descripcion |
118
+ |--------|-------------|
119
+ | \`--owner <user>\` | Owner de GitHub |
120
+ | \`--repo <repo>\` | Repositorio GitHub |
121
+ | \`--path <subpath>\` | Subruta de docs (ej: \`docs\`); sin ella, base path = nombre del repo para CSS/JS en project sites |
122
+ | \`--output <dir>\` | Directorio de salida (default: \`gitpagedocs\`) |
123
+ | \`--search true|false\` | Habilita/deshabilita busqueda de repositorio (\`--home\`) |
124
+ | \`--layoutconfig\` | Genera layouts locales en \`gitpagelayouts/\` |
125
+ | \`--layouts-dir <dir>\` | Carpeta de layouts locales (por defecto: \`gitpagelayouts\`) |
126
+ | \`--push\` | Crea workflow, commit de artefactos, push |
127
+ | \`--home\` | Genera \`gitpagedocshome/\` (estatico + .env + Dockerfile) |
128
+
129
+ ## Salida generada
130
+
131
+ - \`gitpagedocs/config.json\` – config raiz
132
+ - \`gitpagedocs/icon.svg\` – icono por defecto
133
+ - \`gitpagedocs/docs/versions/<ver>/config.json\` – rutas por version
134
+ - \`gitpagedocs/docs/versions/<ver>/{en,pt,es}/*.md\` – docs en markdown
135
+ - \`gitpagelayouts/\` – solo con \`--layoutconfig\` (carpeta configurable con \`--layouts-dir\`)
136
+
137
+ ## Tipos de contenido
138
+
139
+ | Tipo | Clave config | Descripcion |
140
+ |------|--------------|-------------|
141
+ | Markdown | \`routes-md\` | Archivos .md con \`path\` por idioma |
142
+ | HTML | \`routes-html\` | \`path\` local o \`url\` externa |
143
+ | Video | \`routes-video\` | \`video.pathVideo\`, \`video.videoType\` |
144
+ | Audio | \`routes-audio\` | \`audio.pathAudio\`, \`audio.audioType\` |
145
+
146
+ ## Visor de codigo fuente
147
+
148
+ 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.
149
+
150
+ - Arbol del repositorio desde \`source-viewer-path\`; la branch por defecto es \`main\`
151
+ - Navegacion por carpetas y filtro de archivos
152
+ - Listado de directorios estilo GitHub
153
+ - Renderizado de codigo con numeros de linea
154
+ - Alternancia vista previa/codigo para Markdown, incluido \`README.md\`
155
+ - Carpetas colapsables en la barra lateral
156
+
157
+ ## Claves de config (site)
158
+
159
+ - \`name\`, \`defaultLanguage\`
160
+ - \`docsVersion\`, \`rendering\`, \`ThemeDefault\`, \`ThemeModeDefault\`
161
+ - \`ProjectLink\`, \`layoutsConfigPathOficial\`, \`layoutsConfigPath\`
162
+ - Idiomas: \`site.languages\` (activa/desactiva cada uno); textos de la UI: \`gitpagedocs/langs/<lang>.json\`
163
+
164
+ ## Variables de entorno
165
+
166
+ - \`GITPAGEDOCS_REPOSITORY_SEARCH\` – busqueda de repositorio (local)
167
+ - \`GITHUB_ACTIONS\` – modo build GitHub Pages
168
+ `,
169
+ configuration: `# Configuracion
170
+
171
+ La configuracion de runtime esta en \`gitpagedocs/config.json\`. Los textos de la UI viven al lado, un archivo por idioma.
172
+
173
+ ## Idiomas (\`site.languages\` + \`langs/\`)
174
+
175
+ - \`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.
176
+ - \`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\`).
177
+ - Para agregar un idioma, crea \`langs/<lang>.json\` y agrega \`"<lang>": true\` en \`site.languages\`. Ya no existe \`langs.json\`: un manifiesto dejado por la version 1.1.68 aun se lee en configs antiguos sin \`site.languages\`, y el generador lo elimina.
178
+ - 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.
179
+
180
+ ## Seccion \`site\`
181
+
182
+ Claves principales:
183
+
184
+ - \`name\`: titulo del proyecto en UI
185
+ - \`defaultLanguage\`: idioma por defecto
186
+ - \`HideThemeSelector\`: ocultar/mostrar selector de tema
187
+ - \`ThemeDefault\`: id del tema inicial
188
+ - \`ThemeModeDefault\`: modo inicial (\`light\` o \`dark\`)
189
+ - \`ProjectLink\`: URL de repositorio para acciones de cabecera
190
+ - \`docsVersion\`: version seleccionada por defecto
191
+ - \`ActiveNavigation\`: habilita anterior/siguiente
192
+ - \`FocusMode\`: habilita modo foco/lectura
193
+ - \`IconImageMenuHeaderImgWidth\`, \`IconImageMenuHeaderImgHeight\`: tamano del icono principal
194
+ - \`IconImageMenuHeaderLightImg\`, \`IconImageMenuHeaderDarkImg\`: icono principal (light/dark)
195
+ - \`IconProjectLinkImgWidth\`, \`IconProjectLinkImgHeight\`: tamano del icono enlace del proyecto
196
+ - \`IconProjectLinkLightImg\`, \`IconProjectLinkDarkImg\`: icono enlace del proyecto
197
+ - \`IconVersionLinksImgWidth\`, \`IconVersionLinksImgHeight\`: tamano del icono enlaces de version
198
+ - \`IconVersionLinksLightImg\`, \`IconVersionLinksDarkImg\`: icono enlaces de version
199
+ - \`IconInfoHeaderMenuImgWidth\`, \`IconInfoHeaderMenuImgHeight\`: tamano del icono info
200
+ - \`IconInfoHeaderMenuLightImg\`, \`IconInfoHeaderMenuDarkImg\`: icono info
201
+ - \`IconPreviewProjectLinkImgWidth\`, \`IconPreviewProjectLinkImgHeight\`: tamano del icono preview
202
+ - \`IconPreviewProjectLinkLightImg\`, \`IconPreviewProjectLinkDarkImg\`: icono preview
203
+ - \`layoutsConfigPath\`: fallback remoto de layouts
204
+ - \`rendering\`: URL canonica publicada
205
+
206
+ ## Seccion \`VersionControl\`
207
+
208
+ \`VersionControl.versions\` define:
209
+
210
+ - \`id\`: identificador de version
211
+ - \`path\`: ruta de config de version
212
+ - links opcionales (\`ProjectLink\`, \`branch\`, \`release\`, \`commit\`)
213
+ - metadatos opcionales del source viewer (\`source-viewer\`, \`source-viewer-path\`)
214
+
215
+ ## Navegacion y rutas
216
+
217
+ - \`routes\`: rutas markdown por idioma (legado)
218
+ - \`menus-header\`: menu jerarquico
219
+ - \`translations\`: etiquetas UI para not-found y navegacion
220
+
221
+ ## Autorizacion (config de version)
222
+
223
+ - \`auth\`: configuraciones globales de autorizacion para esa version
224
+ - \`auth.accessKeys\`: mapa de claves usado por \`authorization.accessKeyId\`
225
+ - \`auth.rolesStorageKey\`: clave de localStorage para bootstrap de roles
226
+ - \`auth.providers\`: adaptadores de proveedor (\`authjs\`, \`clerk\`, \`firebase\`, \`jwt\`)
227
+
228
+ ## Tipos de contenido (config de version)
229
+
230
+ Los configs de version soportan multiples tipos:
231
+
232
+ - \`routes-md\`: Rutas markdown con \`title\`, \`description\` (centrados via \`titlePosition\`, \`descriptionPosition\`)
233
+ - \`routes-source-viewer\`: Contenedores de codigo fuente con \`source-viewer: true\` y \`source-viewer-path\`
234
+ - \`routes-html\`: Rutas de paginas HTML por idioma
235
+ - \`routes-video\`: Config de video con \`video.videoType\` (youtube, vimeo, mp4, etc.) y \`video.pathVideo\`
236
+ - \`routes-audio\`: Config de audio con \`audio.audioType\` (youtube, mp3, etc.) y \`audio.pathAudio\`
237
+ - \`authorization\` (md/html/video): guardia de acceso por clave, roles y autenticacion externa
238
+ - \`menus-header-md\`, \`menus-header-source-viewer\`, \`menus-header-html\`, \`menus-header-video\`, \`menus-header-audio\`: menus por tipo
239
+ - \`hierarchyPage\`: orden de contenedores en la pagina \`{ md: 0, "source-viewer": 1, html: 2, video: 3, audio: 4 }\`
240
+ - \`hierarchyMenu\`: orden de secciones del menu \`{ md: 0, "source-viewer": 1, html: 2, video: 3, audio: 4 }\`
241
+
242
+ Cada ruta puede incluir \`title\`, \`description\` (por idioma), \`titleCss\`, \`titlePosition: "center"\`, \`descriptionPosition: "center"\`, \`titleIsVisible\`, \`descriptionIsVisible\`.
243
+
244
+ ## Variables por ruta (blockLink, container, url, browseAll)
245
+
246
+ Opciones por ruta en \`routes-md\`, \`routes-html\` y \`routes-video\`:
247
+
248
+ - **\`blockLink\`** (defecto: true) – Para HTML: si true, los enlaces abren en nueva pestaña (\`target="_blank"\`); si false, en el mismo contexto.
249
+ - **\`container\`** – \`"full"\` = altura automatica; numero (ej: \`500\`) = altura fija en px con overflow auto. Se aplica a md, html y video.
250
+ - **\`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.
251
+ - **\`browseAll\`** (defecto: false) – Si true, el contenedor muestra botones Anterior/Siguiente para navegar entre todos los items de ese tipo.
252
+
253
+ ## Tipos de contenido: path vs url (HTML)
254
+
255
+ - **Markdown (\`routes-md\`)**: usa \`path\` apuntando a archivos \`.md\` locales.
256
+ - **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.
257
+ - **Video (\`routes-video\`)**: usa \`video.pathVideo\` y \`video.videoType\` (youtube, vimeo, mp4, etc.).
258
+
259
+ ## Variables de entorno
260
+
261
+ - \`GITPAGEDOCS_REPOSITORY_SEARCH\`: activa/desactiva busqueda remota en local
262
+ - \`GITHUB_ACTIONS\`: habilita comportamiento especifico de GitHub Pages
263
+ `,
264
+ deployment: `# Publicacion
265
+
266
+ Git Page Docs corre como app Next.js con dos objetivos: servidor local y GitHub Pages.
267
+
268
+ ## Publicacion local
269
+
270
+ Usa:
271
+
272
+ 1. \`npm run build\`
273
+ 2. \`npm start\`
274
+
275
+ Esto inicia runtime Node + Next.js usando \`gitpagedocs/\` local.
276
+
277
+ ## Publicacion en GitHub Pages
278
+
279
+ En build de GitHub Actions:
280
+
281
+ - \`GITHUB_ACTIONS=true\`
282
+ - el comportamiento de export estatico se habilita por configuracion
283
+ - la pagina inicial de busqueda de repositorios queda activa
284
+
285
+ ## Flujo de publish del paquete
286
+
287
+ Para publicar en npm:
288
+
289
+ - actualiza version en \`package.json\`
290
+ - ejecuta \`npm publish --access public\`
291
+ - valida autenticacion con \`npm whoami\`
292
+
293
+ Si \`build:prebuilt\` se omite en Windows, usa CI para generar artefactos prebuilt.
294
+ `,
295
+ architecture: `# Arquitectura
296
+
297
+ El proyecto esta organizado por fronteras de feature y responsabilidades de runtime.
298
+
299
+ ## Paquetes
300
+
301
+ - **frontend/** — visor Next.js (Feature-Sliced: app / widgets / features / entities / shared); export estatico.
302
+ - **cli/** — el bin publicado \`gitpagedocs\` (hexagonal) + \`cli/ai/\` (CLI de documentacion con IA).
303
+ - **tools/** — \`@gitpagedocs/tools\`: ai/ security/ crypto/ cache/ config/ logger/ errors/ filesystem/ documentation/ i18n/ ports/.
304
+ - **mcp/** — \`@gitpagedocs/mcp\`: herramientas + recursos MCP que delegan a tools/.
305
+
306
+ ## Modulos principales (frontend)
307
+
308
+ - \`frontend/src/app/[[...repo]]/page.tsx\` — parser de rutas, generateStaticParams, seleccion de shell.
309
+ - \`frontend/src/entities/docs/api/load-docs-data.ts\` — config local/remota, version, parse markdown, layouts + temas.
310
+ - \`frontend/src/widgets/docs-shell/docs-shell.tsx\` — UI, estado idioma/version/tema, sync de URL, montaje del chat de IA.
311
+
312
+ ## Seguridad: credenciales de IA cifradas
313
+
314
+ 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\`).
315
+
316
+ ## Flujo de datos
317
+
318
+ 1. Llega la ruta (\`/owner/repo/v/x.y.z\` o equivalente local)
319
+ 2. Se resuelve config (local o remoto)
320
+ 3. Config de version sobreescribe rutas/menus base
321
+ 4. Markdown se carga y convierte a HTML
322
+ 5. Template de layout se resuelve y aplica en CSS vars
323
+ 6. Shell renderiza contenido y controles
324
+
325
+ ## Puntos de resiliencia
326
+
327
+ - fallback de carga para layouts/templates
328
+ - carga de markdown por idioma con fallback de error
329
+ - sincronizacion de idioma/version/tema via localStorage
330
+ `,
331
+ githubIssuesProjects: `# GitHub Issues y Projects
332
+
333
+ Aprende a usar GitHub Issues y Projects para gestionar tu trabajo.
334
+
335
+ ## Conceptos
336
+
337
+ - Issues para rastrear tareas y bugs
338
+ - Projects para visualizar y organizar el trabajo
339
+ - Flujos recomendados para equipos
340
+ `,
341
+ gitIntroduction: `# Introduccion a Git
342
+
343
+ Conceptos basicos de Git para principiantes.
344
+
345
+ ## Comandos esenciales
346
+
347
+ - \`git init\` - iniciar repositorio
348
+ - \`git add\` - preparar cambios
349
+ - \`git commit\` - registrar commit
350
+ - \`git push\` - enviar a remoto
351
+ `,
352
+ authorizedRoutes: `# Rutas autorizadas
353
+
354
+ Protege rutas por clave de acceso, roles requeridos y proveedores externos.
355
+
356
+ ## Ubicacion del config de version
357
+
358
+ Configura en:
359
+
360
+ - \`gitpagedocs/docs/versions/<version>/config.json\`
361
+
362
+ ## Seccion global auth
363
+
364
+ Usa \`auth\` en la raiz del config de version:
365
+
366
+ - \`accessKeys\`: mapa de ids de clave al secreto esperado
367
+ - \`rolesStorageKey\`: clave de localStorage para bootstrap de roles
368
+ - \`providers\`: lista de proveedores externos (\`authjs\`, \`clerk\`, \`firebase\`, \`jwt\`)
369
+
370
+ ## Autorizacion por ruta
371
+
372
+ Dentro de cada ruta (\`routes-md\`, \`routes-html\`, \`routes-video\`):
373
+
374
+ - \`authorization.accessKeyId\`
375
+ - \`authorization.requiredRoles\`
376
+ - \`authorization.requireExternalAuth\`
377
+ - \`authorization.allowedProviders\`
378
+
379
+ ## Fases
380
+
381
+ ### Fase A - Clave de acceso
382
+
383
+ Define \`authorization.accessKeyId\` y la clave correspondiente en \`auth.accessKeys\`.
384
+
385
+ ### Fase B - Roles
386
+
387
+ Define \`authorization.requiredRoles\` con uno o mas roles.
388
+
389
+ Los roles pueden venir de:
390
+
391
+ - query param \`?authRoles=admin,maintainer\`
392
+ - localStorage (\`rolesStorageKey\`)
393
+ - claims de proveedores externos
394
+
395
+ ### Fase C - Proveedores externos
396
+
397
+ Define \`authorization.requireExternalAuth=true\` y opcionalmente \`allowedProviders\`.
398
+
399
+ Adaptadores soportados:
400
+
401
+ - Auth.js (\`type: "authjs"\`)
402
+ - Clerk (\`type: "clerk"\`)
403
+ - Firebase Auth (\`type: "firebase"\`)
404
+ - JWT custom (\`type: "jwt"\`)
405
+ `,
406
+ themes: `# Temas y layouts
407
+
408
+ Los temas son templates JSON mapeados por \`layoutsConfig.json\`.
409
+
410
+ ## Archivos
411
+
412
+ - \`gitpagelayouts/layoutsConfig.json\`
413
+ - \`gitpagelayouts/layoutsFallbackConfig.json\`
414
+ - \`gitpagelayouts/templates/*.json\`
415
+
416
+ ## Modelo de template
417
+
418
+ Cada template normalmente incluye:
419
+
420
+ - \`id\`, \`name\`, \`author\`, \`version\`
421
+ - \`mode\` y metadatos de par dark/light
422
+ - \`colors\`
423
+ - \`typography\`
424
+ - tokens de \`components\`
425
+ - \`animations\`
426
+
427
+ ## Comportamiento en runtime
428
+
429
+ - tema activo viene de config/seleccion de usuario
430
+ - toggle light/dark resuelve tema pareado por referencia
431
+ - variables CSS se generan desde tokens del template
432
+
433
+ ## Buenas practicas
434
+
435
+ - mantener contraste accesible
436
+ - mantener escala consistente de espacios y bordes
437
+ - ofrecer variantes dark y light cuando sea posible
438
+ `,
439
+ faq: `# FAQ
440
+
441
+ ## Por que repositorios remotos no abren en local?
442
+
443
+ Verifica:
444
+
445
+ - \`GITPAGEDOCS_REPOSITORY_SEARCH=true\` en \`.env\`
446
+ - repositorio objetivo contiene \`gitpagedocs/config.json\`
447
+ - paths markdown del repositorio coinciden con su config de rutas
448
+
449
+ ## Por que una ruta de version muestra contenido incorrecto?
450
+
451
+ Verifica:
452
+
453
+ - \`VersionControl.versions[*].path\` en \`gitpagedocs/config.json\`
454
+ - config de version tiene \`routes\` y \`menus-header\` validos
455
+ - markdown existe para cada idioma
456
+
457
+ ## Por que tema no se aplica correctamente?
458
+
459
+ Verifica:
460
+
461
+ - \`layoutsConfig.json\` referencia templates validos
462
+ - ids de template son unicos
463
+ - tema seleccionado existe en el mapa de temas cargados
464
+
465
+ ## Por que GitHub Pages puede comportarse distinto a local?
466
+
467
+ Porque el build de GitHub Pages habilita la pagina inicial de busqueda y comportamiento especifico de exportacion.
468
+ `,
469
+ };