@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 docsPt = {
2
+ index: `# Git Page Docs
3
+
4
+ Git Page Docs e um runtime de documentacao multi-idioma para repositorios que possuem a pasta \`gitpagedocs/\`.
5
+
6
+ ## O que este projeto entrega
7
+
8
+ - Renderizacao markdown em varios idiomas (\`en\`, \`pt\`, \`es\`)
9
+ - Roteamento por versao (\`/v/:versao\`)
10
+ - Sistema de temas por templates JSON
11
+ - Execucao local e em GitHub Pages
12
+ - Busca de repositorio + renderizacao remota opcional
13
+
14
+ ## Contrato de pastas
15
+
16
+ O runtime espera esta estrutura:
17
+
18
+ - \`gitpagedocs/config.json\`
19
+ - \`gitpagedocs/docs/<lang>/*.md\`
20
+ - \`gitpagedocs/docs/versions/<versao>/config.json\`
21
+ - \`gitpagedocs/docs/versions/<versao>/<lang>/*.md\`
22
+ - \`gitpagelayouts/layoutsConfig.json\`
23
+ - \`gitpagelayouts/templates/*.json\`
24
+
25
+ ## Navegacao rapida
26
+
27
+ - Abra **Primeiros passos** para setup local.
28
+ - Abra **Configuracao** para detalhes completos do \`config.json\`.
29
+ - Abra **Publicacao** para comportamento local/producao/GitHub Pages.
30
+ - Abra **Arquitetura** para mapa de codigo e fluxo de dados.
31
+ - Abra **Temas e layouts** para autoria de templates.
32
+ - Abra **Rotas autorizadas** para configurar chave, papeis e autenticacao externa.
33
+ - Abra **FAQ** para troubleshooting.
34
+ `,
35
+ gettingStarted: `# Primeiros passos
36
+
37
+ Este guia leva o projeto do zero ate docs rodando.
38
+
39
+ ## Pre-requisitos
40
+
41
+ - Node.js 20+
42
+ - npm 10+ (ou pnpm)
43
+
44
+ ## Setup local
45
+
46
+ 1. Instale dependencias:
47
+ - \`npm install\`
48
+ 2. Gere/atualize os artefatos de docs:
49
+ - \`npm run gitpagedocs\`
50
+ 3. Inicie o desenvolvimento:
51
+ - \`npm run dev\`
52
+ 4. Build e execucao local de producao:
53
+ - \`npm run build\`
54
+ - \`npm start\`
55
+
56
+ ## Comportamento da CLI
57
+
58
+ \`npx @gitpagedocs/cli\` (ou \`npm run gitpagedocs\`) gera os artefatos na pasta oficial \`gitpagedocs/\`.
59
+
60
+ - Gera somente markdown/json
61
+ - Nao gera \`index.html\`
62
+ - Nao gera \`index.js\`
63
+ - Nao executa comandos de instalacao
64
+
65
+ ## Modo de busca por repositorio
66
+
67
+ No ambiente local, o controle e por variavel:
68
+
69
+ - \`GITPAGEDOCS_REPOSITORY_SEARCH=true\`
70
+ - \`GITPAGEDOCS_REPOSITORY_SEARCH=false\`
71
+
72
+ Em build de GitHub Pages (\`GITHUB_ACTIONS=true\`), a busca de repositorio fica sempre ativa.
73
+ `,
74
+ projectOverview: `# Visao geral do projeto
75
+
76
+ Git Page Docs e um monorepo pnpm + turborepo que transforma a pasta \`gitpagedocs/\` de um repositorio em um site de documentacao multilinguagem e versionado — com assistente de IA integrado e um servidor MCP (Model Context Protocol).
77
+
78
+ ## Pacotes do monorepo
79
+
80
+ - **frontend/** — visualizador Next.js 15 (App Router, React 19), exportado estaticamente para o GitHub Pages.
81
+ - **cli/** — o pacote npm publicado \`@gitpagedocs/cli\` (\`npm install -g @gitpagedocs/cli\`): gera a estrutura de docs, documenta com IA, configura o Pages e roda o servidor MCP.
82
+ - **tools/** — \`@gitpagedocs/tools\`, o nucleo de logica compartilhado: sistema de IA com 14 provedores, cofre de credenciais criptografado, loader de config, caches e logger.
83
+ - **mcp/** — \`@gitpagedocs/mcp\`, servidor Model Context Protocol (20 ferramentas + 7 recursos).
84
+ - **gitpagedocs/** — o contrato do usuario: \`config.json\`, docs versionados e layouts.
85
+
86
+ ## Stack
87
+
88
+ - Next.js 15 (App Router) + React 19 + TypeScript; exportacao estatica para GitHub Pages
89
+ - gray-matter + marked para Markdown; react-icons
90
+ - pnpm workspaces + turborepo; Vitest + Playwright; ESLint
91
+
92
+ ## Destaques
93
+
94
+ - Multilinguagem (\`en\`, \`pt\`, \`es\`) e rotas por versao (\`/v/:version\`)
95
+ - Sistema de IA com 14 provedores (OpenAI, Anthropic, Gemini, Ollama, Mistral, DeepSeek, Cohere, Groq, xAI e mais) com streaming
96
+ - Chaves de IA **criptografadas em repouso** (AES-256-GCM) atras de uma senha local — nunca em texto puro
97
+ - **Drawer de chat de IA** nos docs + um **console \`/ai\`** dedicado
98
+ - Sistema de 36 temas; execucao local e no GitHub Pages
99
+ `,
100
+ functionalities: `# Funcionalidades
101
+
102
+ Referencia completa de opcoes da CLI, chaves de configuracao e recursos do runtime.
103
+
104
+ ## Comandos da CLI
105
+
106
+ | Comando | Descricao |
107
+ |---------|------------|
108
+ | \`npx @gitpagedocs/cli\` | Gera config e docs em \`gitpagedocs/\` |
109
+ | \`npx @gitpagedocs/cli --layoutconfig\` | Tambem gera layouts/templates locais em \`gitpagelayouts/\` |
110
+ | \`npx @gitpagedocs/cli --home\` | Distribuicao standalone (\`gitpagedocshome/\`) |
111
+ | \`npx @gitpagedocs/cli --push --owner X --repo Y\` | Configura workflow, commit, push |
112
+ | \`npx @gitpagedocs/cli --interactive\` / \`-i\` | Modo interativo com prompts (padrao em um terminal) |
113
+ | \`npx @gitpagedocs/cli --no-interactive\` / \`-y\` | Nunca pergunta; usa flags e padroes |
114
+
115
+ ## Opcoes da CLI
116
+
117
+ | Opcao | Descricao |
118
+ |-------|-----------|
119
+ | \`--owner <user>\` | Owner do GitHub |
120
+ | \`--repo <repo>\` | Repositorio GitHub |
121
+ | \`--path <subpath>\` | Subcaminho dos docs (ex: \`docs\`); sem ele, base path = nome do repo para CSS/JS em project sites |
122
+ | \`--output <dir>\` | Diretorio de saida (padrao: \`gitpagedocs\`) |
123
+ | \`--search true|false\` | Habilita/desabilita busca de repositorio (\`--home\`) |
124
+ | \`--layoutconfig\` | Gera layouts locais em \`gitpagelayouts/\` |
125
+ | \`--layouts-dir <dir>\` | Pasta dos layouts locais (padrao: \`gitpagelayouts\`) |
126
+ | \`--push\` | Cria workflow, commit de artefatos, push |
127
+ | \`--home\` | Gera \`gitpagedocshome/\` (estatico + .env + Dockerfile) |
128
+
129
+ ## Saida gerada
130
+
131
+ - \`gitpagedocs/config.json\` – config raiz
132
+ - \`gitpagedocs/icon.svg\` – icone padrao
133
+ - \`gitpagedocs/docs/versions/<ver>/config.json\` – rotas por versao
134
+ - \`gitpagedocs/docs/versions/<ver>/{en,pt,es}/*.md\` – docs em markdown
135
+ - \`gitpagelayouts/\` – apenas com \`--layoutconfig\` (pasta configuravel com \`--layouts-dir\`)
136
+
137
+ ## Tipos de conteudo
138
+
139
+ | Tipo | Chave config | Descricao |
140
+ |------|--------------|-----------|
141
+ | Markdown | \`routes-md\` | Arquivos .md com \`path\` por idioma |
142
+ | HTML | \`routes-html\` | \`path\` local ou \`url\` externa |
143
+ | Video | \`routes-video\` | \`video.pathVideo\`, \`video.videoType\` |
144
+ | Audio | \`routes-audio\` | \`audio.pathAudio\`, \`audio.audioType\` |
145
+
146
+ ## Visualizador de codigo fonte
147
+
148
+ O config da versao pode renderizar um container **Codigo fonte** via \`routes-source-viewer\` e \`menus-header-source-viewer\`. O viewer le a arvore do repositorio no GitHub em tempo de execucao e aplica o tema atual da documentacao.
149
+
150
+ - Arvore do repositorio a partir de \`source-viewer-path\`; a branch padrao e \`main\`
151
+ - Navegacao por pastas e filtro de arquivos
152
+ - Listagem de diretorios no estilo GitHub
153
+ - Renderizacao de codigo com numeros de linha
154
+ - Alternancia preview/codigo para Markdown, incluindo \`README.md\`
155
+ - Pastas recolhiveis na lateral
156
+
157
+ ## Chaves de config (site)
158
+
159
+ - \`name\`, \`defaultLanguage\`
160
+ - \`docsVersion\`, \`rendering\`, \`ThemeDefault\`, \`ThemeModeDefault\`
161
+ - \`ProjectLink\`, \`layoutsConfigPathOficial\`, \`layoutsConfigPath\`
162
+ - Idiomas: \`site.languages\` (liga/desliga cada um); textos da UI: \`gitpagedocs/langs/<lang>.json\`
163
+
164
+ ## Variaveis de ambiente
165
+
166
+ - \`GITPAGEDOCS_REPOSITORY_SEARCH\` – busca de repositorio (local)
167
+ - \`GITHUB_ACTIONS\` – modo build GitHub Pages
168
+ `,
169
+ configuration: `# Configuracao
170
+
171
+ A configuracao de runtime fica em \`gitpagedocs/config.json\`. Os textos da UI ficam ao lado, um arquivo por idioma.
172
+
173
+ ## Idiomas (\`site.languages\` + \`langs/\`)
174
+
175
+ - \`site.languages\` em \`gitpagedocs/config.json\` liga (\`true\`) ou desliga (\`false\`) cada idioma, na ordem do menu: \`{ "languages": { "en": true, "pt": true, "es": false } }\`. Um idioma em \`false\` some do seletor de idiomas e seus textos nao sao carregados, mesmo que os docs existam.
176
+ - \`gitpagedocs/langs/<lang>.json\` guarda os textos daquele idioma: \`langmenu\` (cabecalho, busca, visualizador de codigo, player de audio, chat de IA e acesso aos docs) e \`translations\` (\`notFound\`, \`navigation\`, \`footer\`).
177
+ - Para adicionar um idioma, crie \`langs/<lang>.json\` e inclua \`"<lang>": true\` em \`site.languages\`. Nao existe mais \`langs.json\`: um manifesto deixado pela versao 1.1.68 ainda e lido por configs antigos sem \`site.languages\`, e o gerador o remove.
178
+ - Arquivos \`config.json\` antigos que ainda trazem \`site.langmenu\` / \`translations\` inline continuam funcionando; quando os dois existem, os arquivos de \`langs/\` prevalecem e qualquer chave ausente e preenchida a partir da versao atual.
179
+
180
+ ## Secao \`site\`
181
+
182
+ Principais chaves:
183
+
184
+ - \`name\`: titulo do projeto no UI
185
+ - \`defaultLanguage\`: idioma padrao
186
+ - \`HideThemeSelector\`: esconde/mostra seletor de tema
187
+ - \`ThemeDefault\`: id do tema inicial
188
+ - \`ThemeModeDefault\`: modo inicial (\`light\` ou \`dark\`)
189
+ - \`ProjectLink\`: URL de repositorio para acoes no cabecalho
190
+ - \`docsVersion\`: versao inicial selecionada
191
+ - \`ActiveNavigation\`: habilita comportamento de anterior/proximo
192
+ - \`FocusMode\`: habilita modo foco/leitura
193
+ - \`IconImageMenuHeaderImgWidth\`, \`IconImageMenuHeaderImgHeight\`: tamanho do icone principal
194
+ - \`IconImageMenuHeaderLightImg\`, \`IconImageMenuHeaderDarkImg\`: icone principal (light/dark)
195
+ - \`IconProjectLinkImgWidth\`, \`IconProjectLinkImgHeight\`: tamanho do icone link do projeto
196
+ - \`IconProjectLinkLightImg\`, \`IconProjectLinkDarkImg\`: icone link do projeto
197
+ - \`IconVersionLinksImgWidth\`, \`IconVersionLinksImgHeight\`: tamanho do icone links de versao
198
+ - \`IconVersionLinksLightImg\`, \`IconVersionLinksDarkImg\`: icone links de versao
199
+ - \`IconInfoHeaderMenuImgWidth\`, \`IconInfoHeaderMenuImgHeight\`: tamanho do icone info
200
+ - \`IconInfoHeaderMenuLightImg\`, \`IconInfoHeaderMenuDarkImg\`: icone info
201
+ - \`IconPreviewProjectLinkImgWidth\`, \`IconPreviewProjectLinkImgHeight\`: tamanho do icone preview
202
+ - \`IconPreviewProjectLinkLightImg\`, \`IconPreviewProjectLinkDarkImg\`: icone preview
203
+ - \`layoutsConfigPath\`: fallback remoto para layouts
204
+ - \`rendering\`: URL canonica publicada
205
+
206
+ ## Secao \`VersionControl\`
207
+
208
+ \`VersionControl.versions\` define:
209
+
210
+ - \`id\`: identificador da versao
211
+ - \`path\`: caminho do config da versao
212
+ - links opcionais (\`ProjectLink\`, \`branch\`, \`release\`, \`commit\`)
213
+ - metadados opcionais do source viewer (\`source-viewer\`, \`source-viewer-path\`)
214
+
215
+ ## Navegacao e rotas
216
+
217
+ - \`routes\`: caminhos markdown por idioma (legado)
218
+ - \`menus-header\`: menu hierarquico
219
+ - \`translations\`: labels de UI para not-found e navegacao
220
+
221
+ ## Autorizacao (config de versao)
222
+
223
+ - \`auth\`: configuracoes globais de autorizacao para a versao
224
+ - \`auth.accessKeys\`: mapa de chaves usado por \`authorization.accessKeyId\`
225
+ - \`auth.rolesStorageKey\`: chave de localStorage para bootstrap de papeis
226
+ - \`auth.providers\`: adaptadores de provedor (\`authjs\`, \`clerk\`, \`firebase\`, \`jwt\`)
227
+
228
+ ## Tipos de conteudo (config de versao)
229
+
230
+ Configs de versao suportam multiplos tipos:
231
+
232
+ - \`routes-md\`: Rotas markdown com \`title\`, \`description\` (centralizados via \`titlePosition\`, \`descriptionPosition\`)
233
+ - \`routes-source-viewer\`: Containers de codigo fonte com \`source-viewer: true\` e \`source-viewer-path\`
234
+ - \`routes-html\`: Caminhos de paginas HTML por idioma
235
+ - \`routes-video\`: Config de video com \`video.videoType\` (youtube, vimeo, mp4, etc.) e \`video.pathVideo\`
236
+ - \`routes-audio\`: Config de audio com \`audio.audioType\` (youtube, mp3, etc.) e \`audio.pathAudio\`
237
+ - \`authorization\` (md/html/video): guarda de acesso por chave, papeis e autenticacao externa
238
+ - \`menus-header-md\`, \`menus-header-source-viewer\`, \`menus-header-html\`, \`menus-header-video\`, \`menus-header-audio\`: menus por tipo
239
+ - \`hierarchyPage\`: ordem dos containers na pagina \`{ md: 0, "source-viewer": 1, html: 2, video: 3, audio: 4 }\`
240
+ - \`hierarchyMenu\`: ordem das secoes do menu \`{ md: 0, "source-viewer": 1, html: 2, video: 3, audio: 4 }\`
241
+
242
+ Cada rota pode incluir \`title\`, \`description\` (por idioma), \`titleCss\`, \`titlePosition: "center"\`, \`descriptionPosition: "center"\`, \`titleIsVisible\`, \`descriptionIsVisible\`.
243
+
244
+ ## Variaveis por rota (blockLink, container, url, browseAll)
245
+
246
+ Opcoes por rota em \`routes-md\`, \`routes-html\` e \`routes-video\`:
247
+
248
+ - **\`blockLink\`** (padrao: true) – Para HTML: se true, links abrem em nova aba (\`target="_blank"\`); se false, no proprio contexto.
249
+ - **\`container\`** – \`"full"\` = altura automatica; numero (ex: \`500\`) = altura fixa em px com overflow auto. Aplica-se a md, html e video.
250
+ - **\`url\`** – Apenas em \`routes-html\`: \`Record<LanguageCode, string>\` com URLs externas. Quando definido, o iframe usa \`src={url}\` em vez de HTML local via \`srcDoc\`. Rotas com \`url\` nao geram arquivos HTML locais.
251
+ - **\`browseAll\`** (padrao: false) – Se true, o container mostra botoes Anterior/Proximo para navegar entre todos os itens daquele tipo.
252
+
253
+ ## Tipos de conteudo: path vs url (HTML)
254
+
255
+ - **Markdown (\`routes-md\`)**: usa \`path\` apontando para arquivos \`.md\` locais.
256
+ - **HTML (\`routes-html\`)**: usa \`path\` para arquivos HTML locais (sem extensao .html no config) ou \`url\` para URLs externas. Com \`url\`, o iframe carrega a pagina externa; nenhum arquivo local e gerado.
257
+ - **Video (\`routes-video\`)**: usa \`video.pathVideo\` e \`video.videoType\` (youtube, vimeo, mp4, etc.).
258
+
259
+ ## Variaveis de ambiente
260
+
261
+ - \`GITPAGEDOCS_REPOSITORY_SEARCH\`: ativa/desativa busca remota localmente
262
+ - \`GITHUB_ACTIONS\`: ativa comportamento especifico de GitHub Pages
263
+ `,
264
+ deployment: `# Publicacao
265
+
266
+ Git Page Docs roda como app Next.js com dois alvos: servidor local e GitHub Pages.
267
+
268
+ ## Publicacao local
269
+
270
+ Use:
271
+
272
+ 1. \`npm run build\`
273
+ 2. \`npm start\`
274
+
275
+ Isso sobe runtime Node + Next.js usando a pasta local \`gitpagedocs/\`.
276
+
277
+ ## Publicacao em GitHub Pages
278
+
279
+ Em build de GitHub Actions:
280
+
281
+ - \`GITHUB_ACTIONS=true\`
282
+ - comportamento de export estatico e habilitado pela configuracao
283
+ - pagina inicial de busca de repositorio fica ativa
284
+
285
+ ## Fluxo de publish do pacote
286
+
287
+ Para publicar no npm:
288
+
289
+ - atualize versao no \`package.json\`
290
+ - execute \`npm publish --access public\`
291
+ - valide autenticacao com \`npm whoami\`
292
+
293
+ Se \`build:prebuilt\` for pulado no Windows, use CI para gerar artefatos prebuilt.
294
+ `,
295
+ architecture: `# Arquitetura
296
+
297
+ O projeto e organizado por fronteiras de feature e responsabilidades do runtime.
298
+
299
+ ## Pacotes
300
+
301
+ - **frontend/** — visualizador Next.js (Feature-Sliced: app / widgets / features / entities / shared); export estatico.
302
+ - **cli/** — o bin publicado \`gitpagedocs\` (hexagonal) + \`cli/ai/\` (CLI de documentacao com IA).
303
+ - **tools/** — \`@gitpagedocs/tools\`: ai/ security/ crypto/ cache/ config/ logger/ errors/ filesystem/ documentation/ i18n/ ports/.
304
+ - **mcp/** — \`@gitpagedocs/mcp\`: ferramentas + recursos MCP que delegam ao tools/.
305
+
306
+ ## Modulos principais (frontend)
307
+
308
+ - \`frontend/src/app/[[...repo]]/page.tsx\` — parser de rota, generateStaticParams, selecao de shell.
309
+ - \`frontend/src/entities/docs/api/load-docs-data.ts\` — config local/remota, versao, parse markdown, layouts + temas.
310
+ - \`frontend/src/widgets/docs-shell/docs-shell.tsx\` — UI, estado idioma/versao/tema, sync de URL, montagem do chat de IA.
311
+
312
+ ## Seguranca: credenciais de IA criptografadas
313
+
314
+ O console \`/ai\` e o chat drawer exigem uma senha local que deriva (PBKDF2) uma chave AES-256-GCM; as chaves ficam criptografadas no \`localStorage\` e so sao descriptografadas durante a sessao (\`@gitpagedocs/tools/security\`).
315
+
316
+ ## Fluxo de dados
317
+
318
+ 1. A rota chega (\`/owner/repo/v/x.y.z\` ou equivalente local)
319
+ 2. O config e resolvido (local ou remoto)
320
+ 3. Config de versao sobrescreve rotas/menus base
321
+ 4. Markdown e carregado e convertido para HTML
322
+ 5. Template de layout e resolvido e aplicado em CSS vars
323
+ 6. Shell renderiza conteudo e controles
324
+
325
+ ## Pontos de resiliencia
326
+
327
+ - fallback de carga para layouts/templates
328
+ - carregamento de markdown por idioma com fallback de erro
329
+ - sincronizacao de linguagem/versao/tema via localStorage
330
+ `,
331
+ githubIssuesProjects: `# GitHub Issues e Projects
332
+
333
+ Aprenda a usar GitHub Issues e Projects para gerenciar seu trabalho.
334
+
335
+ ## Conceitos
336
+
337
+ - Issues para rastrear tarefas e bugs
338
+ - Projects para visualizar e organizar o trabalho
339
+ - Workflows recomendados para equipes
340
+ `,
341
+ gitIntroduction: `# Introducao ao Git
342
+
343
+ Conceitos basicos de Git para iniciantes.
344
+
345
+ ## Comandos essenciais
346
+
347
+ - \`git init\` - iniciar repositorio
348
+ - \`git add\` - preparar alteracoes
349
+ - \`git commit\` - registrar commit
350
+ - \`git push\` - enviar para remoto
351
+ `,
352
+ authorizedRoutes: `# Rotas autorizadas
353
+
354
+ Proteja rotas por chave de acesso, papeis obrigatorios e provedores externos.
355
+
356
+ ## Local do config de versao
357
+
358
+ Configure em:
359
+
360
+ - \`gitpagedocs/docs/versions/<versao>/config.json\`
361
+
362
+ ## Secao global auth
363
+
364
+ Use \`auth\` no topo do config de versao:
365
+
366
+ - \`accessKeys\`: mapa de ids de chave para segredo esperado
367
+ - \`rolesStorageKey\`: chave de localStorage para bootstrap de papeis
368
+ - \`providers\`: lista de provedores externos (\`authjs\`, \`clerk\`, \`firebase\`, \`jwt\`)
369
+
370
+ ## Autorizacao por rota
371
+
372
+ Dentro de cada rota (\`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 - Chave de acesso
382
+
383
+ Defina \`authorization.accessKeyId\` e a chave correspondente em \`auth.accessKeys\`.
384
+
385
+ ### Fase B - Papeis
386
+
387
+ Defina \`authorization.requiredRoles\` com um ou mais papeis.
388
+
389
+ Os papeis podem vir de:
390
+
391
+ - query param \`?authRoles=admin,maintainer\`
392
+ - localStorage (\`rolesStorageKey\`)
393
+ - claims de provedores externos
394
+
395
+ ### Fase C - Provedores externos
396
+
397
+ Defina \`authorization.requireExternalAuth=true\` e opcionalmente \`allowedProviders\`.
398
+
399
+ Adaptadores suportados:
400
+
401
+ - Auth.js (\`type: "authjs"\`)
402
+ - Clerk (\`type: "clerk"\`)
403
+ - Firebase Auth (\`type: "firebase"\`)
404
+ - JWT custom (\`type: "jwt"\`)
405
+ `,
406
+ themes: `# Temas e layouts
407
+
408
+ Temas sao templates JSON mapeados por \`layoutsConfig.json\`.
409
+
410
+ ## Arquivos
411
+
412
+ - \`gitpagelayouts/layoutsConfig.json\`
413
+ - \`gitpagelayouts/layoutsFallbackConfig.json\`
414
+ - \`gitpagelayouts/templates/*.json\`
415
+
416
+ ## Modelo de template
417
+
418
+ Cada template normalmente contem:
419
+
420
+ - \`id\`, \`name\`, \`author\`, \`version\`
421
+ - \`mode\` e metadados de par dark/light
422
+ - \`colors\`
423
+ - \`typography\`
424
+ - tokens de \`components\`
425
+ - \`animations\`
426
+
427
+ ## Comportamento em runtime
428
+
429
+ - tema ativo vem de config/usuario
430
+ - toggle light/dark resolve o tema pareado por referencia
431
+ - variaveis CSS sao geradas dos tokens do template
432
+
433
+ ## Boas praticas
434
+
435
+ - mantenha contraste acessivel
436
+ - padronize escala de espaco e borda
437
+ - ofereca variantes dark e light quando possivel
438
+ `,
439
+ faq: `# FAQ
440
+
441
+ ## Por que repositorios remotos nao abrem localmente?
442
+
443
+ Verifique:
444
+
445
+ - \`GITPAGEDOCS_REPOSITORY_SEARCH=true\` no \`.env\`
446
+ - repositorio alvo contem \`gitpagedocs/config.json\`
447
+ - paths markdown do repositorio batem com seu config de rotas
448
+
449
+ ## Por que rota de versao mostra conteudo errado?
450
+
451
+ Verifique:
452
+
453
+ - \`VersionControl.versions[*].path\` em \`gitpagedocs/config.json\`
454
+ - config da versao possui \`routes\` e \`menus-header\` validos
455
+ - markdown existe para cada idioma
456
+
457
+ ## Por que tema nao aplica corretamente?
458
+
459
+ Verifique:
460
+
461
+ - \`layoutsConfig.json\` referencia templates validos
462
+ - ids de template sao unicos
463
+ - tema selecionado existe no mapa de temas carregados
464
+
465
+ ## Por que GitHub Pages pode se comportar diferente do local?
466
+
467
+ Porque o build de GitHub Pages habilita pagina inicial de busca e comportamento especifico de exportacao.
468
+ `,
469
+ };
@@ -0,0 +1,9 @@
1
+ import { docsEn } from "./docs-en.mjs";
2
+ import { docsPt } from "./docs-pt.mjs";
3
+ import { docsEs } from "./docs-es.mjs";
4
+
5
+ export const DOCS = {
6
+ en: docsEn,
7
+ pt: docsPt,
8
+ es: docsEs
9
+ };
@@ -0,0 +1,3 @@
1
+ export const PACKAGE_VERSION = "0.0.1";
2
+
3
+ export const DOC_VERSIONS = [PACKAGE_VERSION];
@@ -0,0 +1,11 @@
1
+ export { DOC_VERSIONS } from "./doc-versions.mjs";
2
+ export {
3
+ DEFAULT_LAYOUTS_DIR,
4
+ LAYOUTS_CONFIG_FILENAME,
5
+ LAYOUTS_FALLBACK_CONFIG_FILENAME,
6
+ LAYOUTS_TEMPLATES_DIRNAME,
7
+ LEGACY_LAYOUTS_SUBDIR,
8
+ normalizeLayoutsDir,
9
+ legacyLayoutsDir,
10
+ layoutsArtifactPaths,
11
+ } from "./layouts-paths.mjs";
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Canonical locations for the language artifacts inside the docs output dir:
3
+ *
4
+ * <outputDir>/config.json `site.languages` — enable (true) / disable (false) each language
5
+ * <outputDir>/langs/<lang>.json UI strings (langmenu + translations) of one language
6
+ *
7
+ * `<outputDir>/langs.json` was the 1.1.68 manifest; `site.languages` replaced
8
+ * it, so the generator deletes a stale copy. The file names come from
9
+ * @gitpagedocs/tools so the generator and the viewer never disagree about where
10
+ * the bundles live.
11
+ */
12
+ import { LANGS_DIRNAME, LANGS_MANIFEST_FILENAME } from "@gitpagedocs/tools/i18n";
13
+
14
+ /**
15
+ * Repo-relative POSIX paths of the language artifacts for a docs output dir.
16
+ *
17
+ * @param {string} outputDir Docs output dir (e.g. `gitpagedocs`).
18
+ * @returns {{ config: string, legacyManifest: string, dir: string, bundle: (language: string) => string }}
19
+ */
20
+ export function languageArtifactPaths(outputDir) {
21
+ const dir = `${outputDir}/${LANGS_DIRNAME}`;
22
+ return {
23
+ config: `${outputDir}/config.json`,
24
+ legacyManifest: `${outputDir}/${LANGS_MANIFEST_FILENAME}`,
25
+ dir,
26
+ bundle: (language) => `${dir}/${language}.json`,
27
+ };
28
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Languages the generator ships UI strings and docs for, in menu order. This
3
+ * is the list written to `gitpagedocs/langs.json`; every entry must have a
4
+ * `langs/<lang>.json` bundle and a docs content module.
5
+ */
6
+ export const SUPPORTED_LANGUAGES = Object.freeze(["en", "pt", "es"]);
@@ -0,0 +1,17 @@
1
+ /** Repo-relative paths owned by a layouts folder. */
2
+ export interface LayoutsArtifactPaths {
3
+ root: string;
4
+ config: string;
5
+ fallbackConfig: string;
6
+ templates: string;
7
+ }
8
+
9
+ export declare const DEFAULT_LAYOUTS_DIR: string;
10
+ export declare const LAYOUTS_CONFIG_FILENAME: string;
11
+ export declare const LAYOUTS_FALLBACK_CONFIG_FILENAME: string;
12
+ export declare const LAYOUTS_TEMPLATES_DIRNAME: string;
13
+ export declare const LEGACY_LAYOUTS_SUBDIR: string;
14
+
15
+ export declare function normalizeLayoutsDir(dir: string): string;
16
+ export declare function legacyLayoutsDir(outputDir: string): string;
17
+ export declare function layoutsArtifactPaths(layoutsDir: string): LayoutsArtifactPaths;
@@ -0,0 +1,68 @@
1
+ import { trimSlashes } from "./path-segments.mjs";
2
+
3
+ /**
4
+ * Canonical locations for layout artifacts.
5
+ *
6
+ * Local layouts are generated into the standalone `gitpagelayouts/` home at the
7
+ * project root. `<outputDir>/layouts/` is the legacy location that earlier
8
+ * versions wrote: the viewer still reads it, and the CLI offers to migrate it,
9
+ * but nothing is generated there any more.
10
+ *
11
+ * Every consumer derives its paths from here so the folder name exists in one
12
+ * place only.
13
+ */
14
+
15
+ /** Standalone layouts home, relative to the project root. */
16
+ export const DEFAULT_LAYOUTS_DIR = "gitpagelayouts";
17
+
18
+ /** Index file listing every layout, inside a layouts folder. */
19
+ export const LAYOUTS_CONFIG_FILENAME = "layoutsConfig.json";
20
+
21
+ /** Fallback index used when a layout id cannot be resolved. */
22
+ export const LAYOUTS_FALLBACK_CONFIG_FILENAME = "layoutsFallbackConfig.json";
23
+
24
+ /** Folder holding one JSON template per layout, inside a layouts folder. */
25
+ export const LAYOUTS_TEMPLATES_DIRNAME = "templates";
26
+
27
+ /** Sub-folder of the docs output dir that older versions generated into. */
28
+ export const LEGACY_LAYOUTS_SUBDIR = "layouts";
29
+
30
+ /**
31
+ * Normalize a user-supplied folder name to a repo-relative POSIX path with no
32
+ * leading/trailing separators, so it can be joined and stored in config.json
33
+ * identically on every platform.
34
+ *
35
+ * @param {string} dir Raw folder name (may use either separator).
36
+ * @returns {string} Normalized path, or `DEFAULT_LAYOUTS_DIR` when empty.
37
+ */
38
+ export function normalizeLayoutsDir(dir) {
39
+ const collapsed = String(dir ?? "").replace(/[\\/]+/g, "/");
40
+ const normalized = trimSlashes(collapsed).trim();
41
+ return normalized || DEFAULT_LAYOUTS_DIR;
42
+ }
43
+
44
+ /**
45
+ * Legacy layouts folder for a given docs output dir.
46
+ *
47
+ * @param {string} outputDir Docs output dir (e.g. `gitpagedocs`).
48
+ * @returns {string} Repo-relative POSIX path (e.g. `gitpagedocs/layouts`).
49
+ */
50
+ export function legacyLayoutsDir(outputDir) {
51
+ return `${normalizeLayoutsDir(outputDir)}/${LEGACY_LAYOUTS_SUBDIR}`;
52
+ }
53
+
54
+ /**
55
+ * Repo-relative paths of every artifact a layouts folder owns.
56
+ *
57
+ * @param {string} layoutsDir Layouts folder, repo-relative.
58
+ * @returns {{ root: string, config: string, fallbackConfig: string, templates: string }}
59
+ */
60
+ export function layoutsArtifactPaths(layoutsDir) {
61
+ const root = normalizeLayoutsDir(layoutsDir);
62
+ return {
63
+ root,
64
+ config: `${root}/${LAYOUTS_CONFIG_FILENAME}`,
65
+ fallbackConfig: `${root}/${LAYOUTS_FALLBACK_CONFIG_FILENAME}`,
66
+ templates: `${root}/${LAYOUTS_TEMPLATES_DIRNAME}`,
67
+ };
68
+ }
@@ -0,0 +1,2 @@
1
+ /** Strip every leading and trailing `/` from a path segment. */
2
+ export function trimSlashes(value: string): string;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Strip every leading and trailing `/` from a user-supplied path segment in a
3
+ * single forward/backward scan. Same result as `.replace(/^\/+|\/+$/g, "")`
4
+ * without the super-linear backtracking that regex incurs on long slash runs.
5
+ *
6
+ * @param {string} value Raw segment such as "/docs/" or "///".
7
+ * @returns {string} The segment without surrounding slashes ("" when only slashes).
8
+ */
9
+ export function trimSlashes(value) {
10
+ let start = 0;
11
+ let end = value.length;
12
+ while (start < end && value[start] === "/") start += 1;
13
+ while (end > start && value[end - 1] === "/") end -= 1;
14
+ return value.slice(start, end);
15
+ }