@gitpagedocs/cli 1.1.61 → 1.1.63

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 (72) hide show
  1. package/README.md +193 -191
  2. package/ai/application/ai-command.ts +24 -24
  3. package/ai/application/ai-provider-factory.ts +22 -22
  4. package/ai/application/docs-pattern.ts +68 -68
  5. package/ai/application/run-ai-cli-command.ts +167 -167
  6. package/ai/config.ts +50 -50
  7. package/ai/core/models/ai-cli-config.ts +33 -33
  8. package/ai/core/models/parse-ai-cli-config.ts +78 -78
  9. package/ai/core/ports/illm-provider.ts +32 -32
  10. package/ai/infrastructure/ai-config-file.ts +101 -101
  11. package/ai/infrastructure/file-system-adapter.ts +85 -85
  12. package/ai/infrastructure/llm/tools-llm-provider.ts +54 -54
  13. package/ai/infrastructure/version-docs-writer.ts +143 -143
  14. package/ai/presentation/ai-prompts.ts +239 -239
  15. package/application/config-only/handler.mjs +2 -0
  16. package/application/home/handler.mjs +2 -0
  17. package/application/ports/cli-runtime-ports.ts +91 -87
  18. package/application/report/config-only-reporter.mjs +64 -63
  19. package/application/use-cases/dispatch-mode.ts +18 -18
  20. package/builders/config-orchestrator.mjs +34 -34
  21. package/builders/project-links.mjs +50 -26
  22. package/builders/root-config-builder.d.mts +16 -0
  23. package/builders/root-config-builder.mjs +61 -53
  24. package/builders/route-builders.mjs +136 -136
  25. package/builders/theme-template.mjs +76 -76
  26. package/builders/version-config-builder.mjs +186 -186
  27. package/content/docs-en.mjs +549 -545
  28. package/content/docs-es.mjs +462 -460
  29. package/content/docs-pt.mjs +462 -460
  30. package/contracts/doc-versions.mjs +3 -3
  31. package/contracts/index.mjs +10 -0
  32. package/contracts/layouts-paths.d.mts +17 -0
  33. package/contracts/layouts-paths.mjs +68 -0
  34. package/data/default-site-config.mjs +321 -321
  35. package/data/i18n-langmenu.mjs +347 -347
  36. package/data/layouts.mjs +436 -436
  37. package/data/path-mappings.mjs +26 -26
  38. package/data/route-metas.mjs +93 -93
  39. package/data/theme-colors.mjs +443 -443
  40. package/data/urls.mjs +12 -12
  41. package/domain/models/cli-options.ts +33 -18
  42. package/domain/services/layouts-migration.d.mts +15 -0
  43. package/domain/services/layouts-migration.mjs +60 -0
  44. package/home/constants.mjs +4 -4
  45. package/index.mjs +37 -37
  46. package/infrastructure/gitpagedocs-config-file.ts +47 -47
  47. package/infrastructure/home/runtime.mjs +37 -37
  48. package/package.json +3 -3
  49. package/presentation/commands/ai-info.ts +57 -57
  50. package/presentation/commands/config-clear.ts +23 -23
  51. package/presentation/commands/config-info.ts +24 -24
  52. package/presentation/commands/diagnostics.ts +164 -164
  53. package/presentation/commands/docs.ts +37 -37
  54. package/presentation/commands/mcp.ts +20 -20
  55. package/presentation/commands/pages.ts +101 -101
  56. package/presentation/commands/password.ts +62 -62
  57. package/presentation/commands/run-command.ts +70 -70
  58. package/presentation/index.ts +124 -116
  59. package/presentation/options/parser.ts +119 -104
  60. package/presentation/options/resolver.ts +46 -48
  61. package/presentation/options/schema.ts +4 -0
  62. package/presentation/ui/clack.ts +91 -91
  63. package/presentation/ui/layouts-prompts.ts +124 -0
  64. package/presentation/ui/prompts.ts +146 -138
  65. package/presentation/ui/tty.ts +37 -0
  66. package/runtime/git-ops.mjs +110 -110
  67. package/runtime/layouts-migrator.d.mts +11 -0
  68. package/runtime/layouts-migrator.mjs +103 -0
  69. package/runtime/output.mjs +159 -146
  70. package/runtime/workflow.mjs +129 -129
  71. package/start.mjs +12 -12
  72. package/ui/logger.mjs +9 -9
@@ -1,347 +1,347 @@
1
- export const defaultLangMenu = {
2
- pt: {
3
- pt: "Portugues",
4
- en: "Ingles",
5
- es: "Espanhol",
6
- footerLabel: "Projeto",
7
- menuOpen: "Menu",
8
- menuClose: "Fechar",
9
- showMenu: "Abrir menu",
10
- hideMenu: "Fechar menu",
11
- quickNavigation: "Ctrl+K",
12
- searchOwnerLabel: "Usuario (ex: Vidigal-code)",
13
- searchRepoLabel: "Repositorio (ex: git-page-link-create)",
14
- searchButtonLabel: "Buscar",
15
- typeToNavigate: "Digite para navegar...",
16
- noNavigationResults: "Nenhum resultado de navegacao.",
17
- focusMode: "Modo foco",
18
- versionLinksLabel: "Links do repositorio",
19
- titleHeaderMenuMd: "Markdown",
20
- titleHeaderMenuSourceViewer: "Codigo fonte",
21
- titleHeaderMenuVideo: "Vídeo",
22
- titleHeaderMenuAudio: "Áudio",
23
- titleHeaderMenuHtml: "Páginas",
24
- sourceViewerBranchLabel: "Branch",
25
- sourceViewerFilterLabel: "Filtrar arquivos",
26
- sourceViewerClearLabel: "Limpar",
27
- sourceViewerLoadingTree: "Carregando arvore do repositorio...",
28
- sourceViewerLoadingFile: "Carregando arquivo...",
29
- sourceViewerNotFound: "Repositorio, branch ou arvore de codigo nao encontrado.",
30
- sourceViewerFileError: "Nao foi possivel carregar o arquivo.",
31
- sourceViewerEmpty: "Nenhuma entrada encontrada.",
32
- sourceViewerSelectFile: "Selecione um arquivo",
33
- sourceViewerPreview: "Preview",
34
- sourceViewerCode: "Codigo",
35
- sourceViewerEntryHint: "Explore os arquivos de um repositorio sem abrir a documentacao.",
36
- sourceViewerEntryAction: "Abrir o visualizador de codigo",
37
- lastUpdateVersionLabel: "Ultima versao de atualizacao",
38
- darkMode: "Modo escuro",
39
- lightMode: "Modo claro",
40
- blockMenuOnNavActive: "Bloquear menu na navegação",
41
- blockMenuOnNavInactive: "Permitir menu na navegação",
42
- audioPlayLabel: "Reproduzir música de fundo",
43
- audioPauseLabel: "Pausar música de fundo",
44
- audioPlaylistTitle: "Escolher faixa",
45
- audioPlaylistDescription: "Selecione uma faixa para reproduzir da playlist.",
46
- audioPopoverNowPlaying: "Tocando",
47
- audioPopoverRestart: "Reiniciar",
48
- audioPopoverLoopOn: "Ativar loop",
49
- audioPopoverLoopOff: "Desativar loop",
50
- audioPopoverSource: "Arquivo",
51
- audioPopoverStatusPlaying: "Tocando",
52
- audioPopoverStatusPaused: "Pausado",
53
- audioPopoverStatusLoopOn: "Loop ativado",
54
- audioPopoverStatusLoopOff: "Loop desativado",
55
- aiChatTitle: "Assistente de IA",
56
- aiChatPlaceholder: "Pergunte sobre a documentação...",
57
- aiChatConfigTitle: "Configurar IA",
58
- aiChatConfigDesc: "Insira sua chave de API para ativar o chat.",
59
- aiChatClearDataBtn: "Limpar dados locais",
60
- aiChatSendBtn: "Enviar",
61
- aiChatSaveStartBtn: "Salvar e iniciar conversa",
62
- aiChatAttachAriaLabel: "Anexar arquivo de áudio ou imagem",
63
- aiChatAttachedFilesLabel: "arquivo(s) anexado(s)",
64
- aiChatRemoveAttachmentBtn: "Remover",
65
- aiChatCancelResponseLabel: "Cancelar resposta",
66
- aiChatOpenBtnAriaLabel: "Abrir chat de IA",
67
- aiChatCloseBtnAriaLabel: "Fechar chat",
68
- aiChatSystemPrompt: "You are the official AI documentation assistant for the '{headerName}' project. Your primary role is to answer questions strictly related to the project's documentation, configurations (like config.json), and markdown files located in the 'gitpagedocs' directory. Be highly professional and helpful.\n\nIMPORTANT: You MUST address the user and respond EXCLUSIVELY in the following language: {language}.\n\nHere is the raw content of the active page the user is currently looking at:\n[Page ID]: {pageId}\n[Hidden Current Context Content]:\n{rawContent}",
69
- aiChatEmptyStateGreeting: "Olá! Eu sou o assistente de inteligência artificial desta documentação. Você pode me fazer perguntas sobre o conteúdo ou buscar um termo em toda a documentação. Como posso ajudar você hoje?",
70
- aiChatDisclaimer: "A IA pode cometer erros. Sempre verifique as informações.",
71
- aiChatPasswordCreateDesc: "Crie uma senha local para criptografar suas chaves de API.",
72
- aiChatPasswordUnlockDesc: "Digite sua senha local para desbloquear.",
73
- aiChatPasswordPlaceholder: "Senha local",
74
- aiChatCreatePasswordBtn: "Criar senha",
75
- aiChatUnlockBtn: "Desbloquear",
76
- aiChatWrongPassword: "Senha incorreta.",
77
- aiChatLockBtn: "Bloquear",
78
- aiChatResetBtn: "Esqueceu a senha?",
79
- aiChatResetPopupTitle: "Redefinir senha?",
80
- aiChatResetPopupDesc: "Isso apaga todas as chaves de API salvas e a senha local. Você criará uma nova senha na próxima vez.",
81
- aiChatResetConfirmBtn: "Sim, redefinir",
82
- aiChatResetCancelBtn: "Cancelar",
83
- aiChatProviderLabel: "Provedor:",
84
- aiChatApiKeyLabel: "Chave de API (deixe em branco para IA local):",
85
- aiChatProviderOpenAI: "OpenAI (GPT-4o-mini)",
86
- aiChatProviderClaude: "Anthropic Claude (3.5 Sonnet)",
87
- aiChatProviderGemini: "Google Gemini (1.5 Flash)",
88
- aiChatProviderOllama: "Ollama Network (Local LLMs)",
89
- aiChatEmptyPageContent: "Nenhuma página ativa compatível.",
90
- aiChatNoPageId: "Sem página",
91
- aiChatOllamaUrlLabel: "URL da API Ollama (deixe em branco para local)",
92
- aiChatClearChatPopupTitle: "Limpar conversa?",
93
- aiChatClearChatPopupDesc: "Isso apagará todo o histórico atual do chat. Esta ação não pode ser desfeita.",
94
- aiChatClearChatConfirmBtn: "Sim, apagar",
95
- aiChatClearChatCancelBtn: "Cancelar",
96
- aiChatClearDataPopupTitle: "Apagar todos os dados?",
97
- aiChatClearDataPopupDesc: "Isso apagará todos os chats e as chaves de API locais. O chat de IA será fechado.",
98
- aiChatClearDataConfirmBtn: "Sim, apagar tudo",
99
- aiChatClearDataCancelBtn: "Cancelar",
100
- aiChatUserLabel: "Você",
101
- aiChatApiError: "Ocorreu um erro de conexão com a API.",
102
- aiChatError401: "Chave de acesso inválida ou provedor não autorizado.",
103
- aiChatError429: "Limite de requisições excedido. Tente novamente mais tarde.",
104
- aiChatError500: "Ocorreu um erro interno no servidor do modelo de IA.",
105
- aiChatErrorGeneric: "Ocorreu um erro inesperado ao se comunicar com a IA.",
106
- docsAccessGateTitle: "Documentação protegida",
107
- docsAccessGateDescription: "Digite a senha ou a chave privada para acessar a documentação.",
108
- docsAccessInputPlaceholder: "Senha ou chave privada",
109
- docsAccessUnlockBtn: "Desbloquear",
110
- docsAccessWrongCredential: "Senha ou chave incorreta.",
111
- docsAccessLockTooltip: "Bloquear documentação",
112
- docsAccessBlockPopupTitle: "Bloquear a documentação?",
113
- docsAccessBlockPopupDesc: "Você precisará da senha novamente na próxima visita.",
114
- docsAccessBlockConfirmBtn: "Sim, bloquear",
115
- docsAccessBlockCancelBtn: "Cancelar",
116
- },
117
- en: {
118
- pt: "Portuguese",
119
- en: "English",
120
- es: "Spanish",
121
- footerLabel: "Project",
122
- menuOpen: "Menu",
123
- menuClose: "Close",
124
- showMenu: "Show menu",
125
- hideMenu: "Hide menu",
126
- quickNavigation: "Ctrl+K",
127
- searchOwnerLabel: "Owner (ex: Vidigal-code)",
128
- searchRepoLabel: "Repository (ex: git-page-link-create)",
129
- searchButtonLabel: "Search",
130
- typeToNavigate: "Type to navigate...",
131
- noNavigationResults: "No navigation results.",
132
- focusMode: "Focus mode",
133
- versionLinksLabel: "Repository links",
134
- titleHeaderMenuMd: "Markdown",
135
- titleHeaderMenuSourceViewer: "Source code",
136
- titleHeaderMenuVideo: "Video",
137
- titleHeaderMenuAudio: "Audio",
138
- titleHeaderMenuHtml: "Pages",
139
- sourceViewerBranchLabel: "Branch",
140
- sourceViewerFilterLabel: "Filter files",
141
- sourceViewerClearLabel: "Clear",
142
- sourceViewerLoadingTree: "Loading source tree...",
143
- sourceViewerLoadingFile: "Loading file...",
144
- sourceViewerNotFound: "Repository, branch, or source tree was not found.",
145
- sourceViewerFileError: "File could not be loaded.",
146
- sourceViewerEmpty: "No entries found.",
147
- sourceViewerSelectFile: "Select a file",
148
- sourceViewerPreview: "Preview",
149
- sourceViewerCode: "Code",
150
- sourceViewerEntryHint: "Browse a repository's files without opening its documentation.",
151
- sourceViewerEntryAction: "Open the source viewer",
152
- lastUpdateVersionLabel: "Last update version",
153
- darkMode: "Dark mode",
154
- lightMode: "Light mode",
155
- blockMenuOnNavActive: "Block menu on navigation",
156
- blockMenuOnNavInactive: "Allow menu on navigation",
157
- audioPlayLabel: "Play background music",
158
- audioPauseLabel: "Pause background music",
159
- audioPlaylistTitle: "Choose track",
160
- audioPlaylistDescription: "Select a track to play from the playlist.",
161
- audioPopoverNowPlaying: "Now playing",
162
- audioPopoverRestart: "Restart",
163
- audioPopoverLoopOn: "Loop on",
164
- audioPopoverLoopOff: "Loop off",
165
- audioPopoverSource: "File",
166
- audioPopoverStatusPlaying: "Playing",
167
- audioPopoverStatusPaused: "Paused",
168
- audioPopoverStatusLoopOn: "Loop on",
169
- audioPopoverStatusLoopOff: "Loop off",
170
- aiChatTitle: "AI Assistant",
171
- aiChatPlaceholder: "Ask about the documentation...",
172
- aiChatConfigTitle: "Configure AI",
173
- aiChatConfigDesc: "Enter your API key to enable the chat.",
174
- aiChatClearDataBtn: "Clear local data",
175
- aiChatSendBtn: "Send",
176
- aiChatSaveStartBtn: "Save & Start Chatting",
177
- aiChatAttachAriaLabel: "Attach audio or image file",
178
- aiChatAttachedFilesLabel: "file(s) attached",
179
- aiChatRemoveAttachmentBtn: "Remove",
180
- aiChatCancelResponseLabel: "Cancel response",
181
- aiChatOpenBtnAriaLabel: "Open AI Chat",
182
- aiChatCloseBtnAriaLabel: "Close chat",
183
- aiChatSystemPrompt: "You are the official AI documentation assistant for the '{headerName}' project. Your primary role is to answer questions strictly related to the project's documentation, configurations (like config.json), and markdown files located in the 'gitpagedocs' directory. Be highly professional and helpful.\n\nIMPORTANT: You MUST address the user and respond EXCLUSIVELY in the following language: {language}.\n\nHere is the raw content of the active page the user is currently looking at:\n[Page ID]: {pageId}\n[Hidden Current Context Content]:\n{rawContent}",
184
- aiChatEmptyStateGreeting: "Hello! I am the artificial intelligence assistant of this documentation. You can ask me questions about the content or search for a term across the documentation. How can I help you today?",
185
- aiChatDisclaimer: "AI can make mistakes. Always verify the information.",
186
- aiChatPasswordCreateDesc: "Create a local password to encrypt your API keys.",
187
- aiChatPasswordUnlockDesc: "Enter your local password to unlock.",
188
- aiChatPasswordPlaceholder: "Local password",
189
- aiChatCreatePasswordBtn: "Create password",
190
- aiChatUnlockBtn: "Unlock",
191
- aiChatWrongPassword: "Incorrect password.",
192
- aiChatLockBtn: "Lock",
193
- aiChatResetBtn: "Forgot password?",
194
- aiChatResetPopupTitle: "Reset password?",
195
- aiChatResetPopupDesc: "This erases all saved API keys and the local password. You'll create a new password next time.",
196
- aiChatResetConfirmBtn: "Yes, reset",
197
- aiChatResetCancelBtn: "Cancel",
198
- aiChatProviderLabel: "Provider:",
199
- aiChatApiKeyLabel: "API Key (leave blank for Local AI):",
200
- aiChatProviderOpenAI: "OpenAI (GPT-4o-mini)",
201
- aiChatProviderClaude: "Anthropic Claude (3.5 Sonnet)",
202
- aiChatProviderGemini: "Google Gemini (1.5 Flash)",
203
- aiChatProviderOllama: "Ollama Network (Local LLMs)",
204
- aiChatEmptyPageContent: "No compatible active page.",
205
- aiChatNoPageId: "No page",
206
- aiChatOllamaUrlLabel: "Ollama API URL (leave blank for local)",
207
- aiChatClearChatPopupTitle: "Clear conversation?",
208
- aiChatClearChatPopupDesc: "This will delete all current chat history. This action cannot be undone.",
209
- aiChatClearChatConfirmBtn: "Yes, delete",
210
- aiChatClearChatCancelBtn: "Cancel",
211
- aiChatClearDataPopupTitle: "Erase all data?",
212
- aiChatClearDataPopupDesc: "This will delete all chats and local API keys. The AI chat will be closed.",
213
- aiChatClearDataConfirmBtn: "Yes, erase everything",
214
- aiChatClearDataCancelBtn: "Cancel",
215
- aiChatUserLabel: "You",
216
- aiChatApiError: "An API connection error occurred.",
217
- aiChatError401: "Invalid access key or unauthorized provider.",
218
- aiChatError429: "Rate limit exceeded. Please try again later.",
219
- aiChatError500: "An internal server error occurred on the AI model.",
220
- aiChatErrorGeneric: "An unexpected error occurred while communicating with the AI.",
221
- docsAccessGateTitle: "Protected documentation",
222
- docsAccessGateDescription: "Enter the password or private key to view the documentation.",
223
- docsAccessInputPlaceholder: "Password or private key",
224
- docsAccessUnlockBtn: "Unlock",
225
- docsAccessWrongCredential: "Incorrect password or key.",
226
- docsAccessLockTooltip: "Lock documentation",
227
- docsAccessBlockPopupTitle: "Block the documentation?",
228
- docsAccessBlockPopupDesc: "You'll need the password again on your next visit.",
229
- docsAccessBlockConfirmBtn: "Yes, block",
230
- docsAccessBlockCancelBtn: "Cancel",
231
- },
232
- es: {
233
- pt: "Portugues",
234
- en: "Ingles",
235
- es: "Espanol",
236
- footerLabel: "Proyecto",
237
- menuOpen: "Menu",
238
- menuClose: "Cerrar",
239
- showMenu: "Abrir menu",
240
- hideMenu: "Cerrar menu",
241
- quickNavigation: "Ctrl+K",
242
- searchOwnerLabel: "Usuario (ej: Vidigal-code)",
243
- searchRepoLabel: "Repositorio (ej: git-page-link-create)",
244
- searchButtonLabel: "Buscar",
245
- typeToNavigate: "Escribe para navegar...",
246
- noNavigationResults: "Sin resultados de navegacion.",
247
- focusMode: "Modo foco",
248
- versionLinksLabel: "Enlaces del repositorio",
249
- titleHeaderMenuMd: "Markdown",
250
- titleHeaderMenuSourceViewer: "Codigo fuente",
251
- titleHeaderMenuVideo: "Vídeo",
252
- titleHeaderMenuAudio: "Áudio",
253
- titleHeaderMenuHtml: "Páginas",
254
- sourceViewerBranchLabel: "Branch",
255
- sourceViewerFilterLabel: "Filtrar archivos",
256
- sourceViewerClearLabel: "Limpiar",
257
- sourceViewerLoadingTree: "Cargando arbol del repositorio...",
258
- sourceViewerLoadingFile: "Cargando archivo...",
259
- sourceViewerNotFound: "Repositorio, branch o arbol de codigo no encontrado.",
260
- sourceViewerFileError: "No se pudo cargar el archivo.",
261
- sourceViewerEmpty: "No se encontraron entradas.",
262
- sourceViewerSelectFile: "Selecciona un archivo",
263
- sourceViewerPreview: "Preview",
264
- sourceViewerCode: "Codigo",
265
- sourceViewerEntryHint: "Explora los archivos de un repositorio sin abrir la documentacion.",
266
- sourceViewerEntryAction: "Abrir el visor de codigo",
267
- lastUpdateVersionLabel: "Ultima version de actualizacion",
268
- darkMode: "Modo oscuro",
269
- lightMode: "Modo claro",
270
- blockMenuOnNavActive: "Bloquear menú en la navegación",
271
- blockMenuOnNavInactive: "Permitir menú en la navegación",
272
- audioPopoverNowPlaying: "Reproduciendo",
273
- audioPopoverRestart: "Reiniciar",
274
- audioPopoverLoopOn: "Activar loop",
275
- audioPopoverLoopOff: "Desactivar loop",
276
- audioPopoverSource: "Archivo",
277
- audioPopoverStatusPlaying: "Reproduciendo",
278
- audioPopoverStatusPaused: "Pausado",
279
- audioPopoverStatusLoopOn: "Loop activado",
280
- audioPopoverStatusLoopOff: "Loop desactivado",
281
- audioPlayLabel: "Reproducir música de fondo",
282
- audioPauseLabel: "Pausar música de fondo",
283
- audioPlaylistTitle: "Elegir pista",
284
- audioPlaylistDescription: "Seleccione una pista para reproducir de la playlist.",
285
- aiChatTitle: "Asistente de IA",
286
- aiChatPlaceholder: "Pregunta sobre la documentación...",
287
- aiChatConfigTitle: "Configurar IA",
288
- aiChatConfigDesc: "Introduce tu clave de API para activar el chat.",
289
- aiChatClearDataBtn: "Borrar datos locales",
290
- aiChatSendBtn: "Enviar",
291
- aiChatSaveStartBtn: "Guardar y empezar a chatear",
292
- aiChatAttachAriaLabel: "Adjuntar archivo de audio o imagen",
293
- aiChatAttachedFilesLabel: "archivo(s) adjunto(s)",
294
- aiChatRemoveAttachmentBtn: "Quitar",
295
- aiChatCancelResponseLabel: "Cancelar respuesta",
296
- aiChatOpenBtnAriaLabel: "Abrir chat de IA",
297
- aiChatCloseBtnAriaLabel: "Cerrar chat",
298
- aiChatSystemPrompt: "You are the official AI documentation assistant for the '{headerName}' project. Your primary role is to answer questions strictly related to the project's documentation, configurations (like config.json), and markdown files located in the 'gitpagedocs' directory. Be highly professional and helpful.\n\nIMPORTANT: You MUST address the user and respond EXCLUSIVELY in the following language: {language}.\n\nHere is the raw content of the active page the user is currently looking at:\n[Page ID]: {pageId}\n[Hidden Current Context Content]:\n{rawContent}",
299
- aiChatEmptyStateGreeting: "¡Hola! Soy el asistente de inteligencia artificial de esta documentación. Puedes hacerme preguntas sobre el contenido o buscar un término en toda la documentación. ¿Cómo puedo ayudarte hoy?",
300
- aiChatDisclaimer: "La IA puede cometer errores. Verifica siempre la información.",
301
- aiChatPasswordCreateDesc: "Crea una contraseña local para cifrar tus claves de API.",
302
- aiChatPasswordUnlockDesc: "Introduce tu contraseña local para desbloquear.",
303
- aiChatPasswordPlaceholder: "Contraseña local",
304
- aiChatCreatePasswordBtn: "Crear contraseña",
305
- aiChatUnlockBtn: "Desbloquear",
306
- aiChatWrongPassword: "Contraseña incorrecta.",
307
- aiChatLockBtn: "Bloquear",
308
- aiChatResetBtn: "¿Olvidaste la contraseña?",
309
- aiChatResetPopupTitle: "¿Restablecer contraseña?",
310
- aiChatResetPopupDesc: "Esto borra todas las claves de API guardadas y la contraseña local. Crearás una nueva contraseña la próxima vez.",
311
- aiChatResetConfirmBtn: "Sí, restablecer",
312
- aiChatResetCancelBtn: "Cancelar",
313
- aiChatProviderLabel: "Proveedor:",
314
- aiChatApiKeyLabel: "Clave de API (déjalo en blanco para IA local):",
315
- aiChatProviderOpenAI: "OpenAI (GPT-4o-mini)",
316
- aiChatProviderClaude: "Anthropic Claude (3.5 Sonnet)",
317
- aiChatProviderGemini: "Google Gemini (1.5 Flash)",
318
- aiChatProviderOllama: "Ollama Network (Local LLMs)",
319
- aiChatEmptyPageContent: "Ninguna página activa compatible.",
320
- aiChatNoPageId: "Sin página",
321
- aiChatOllamaUrlLabel: "URL de la API de Ollama (déjalo en blanco para local)",
322
- aiChatClearChatPopupTitle: "¿Borrar conversación?",
323
- aiChatClearChatPopupDesc: "Esto eliminará todo el historial de chat actual. Esta acción no se puede deshacer.",
324
- aiChatClearChatConfirmBtn: "Sí, borrar",
325
- aiChatClearChatCancelBtn: "Cancelar",
326
- aiChatClearDataPopupTitle: "¿Borrar todos los datos?",
327
- aiChatClearDataPopupDesc: "Esto eliminará todos los chats y las claves de API locales. El chat de IA se cerrará.",
328
- aiChatClearDataConfirmBtn: "Sí, borrar todo",
329
- aiChatClearDataCancelBtn: "Cancelar",
330
- aiChatUserLabel: "Tú",
331
- aiChatApiError: "Se produjo un error de conexión con la API.",
332
- aiChatError401: "Clave de acceso no válida o proveedor no autorizado.",
333
- aiChatError429: "Límite de solicitudes superado. Inténtalo de nuevo más tarde.",
334
- aiChatError500: "Se produjo un error interno del servidor en el modelo de IA.",
335
- aiChatErrorGeneric: "Se produjo un error inesperado al comunicarse con la IA.",
336
- docsAccessGateTitle: "Documentación protegida",
337
- docsAccessGateDescription: "Introduce la contraseña o la clave privada para ver la documentación.",
338
- docsAccessInputPlaceholder: "Contraseña o clave privada",
339
- docsAccessUnlockBtn: "Desbloquear",
340
- docsAccessWrongCredential: "Contraseña o clave incorrecta.",
341
- docsAccessLockTooltip: "Bloquear documentación",
342
- docsAccessBlockPopupTitle: "¿Bloquear la documentación?",
343
- docsAccessBlockPopupDesc: "Tendrás que introducir la contraseña de nuevo en la próxima visita.",
344
- docsAccessBlockConfirmBtn: "Sí, bloquear",
345
- docsAccessBlockCancelBtn: "Cancelar",
346
- },
347
- };
1
+ export const defaultLangMenu = {
2
+ pt: {
3
+ pt: "Portugues",
4
+ en: "Ingles",
5
+ es: "Espanhol",
6
+ footerLabel: "Projeto",
7
+ menuOpen: "Menu",
8
+ menuClose: "Fechar",
9
+ showMenu: "Abrir menu",
10
+ hideMenu: "Fechar menu",
11
+ quickNavigation: "Ctrl+K",
12
+ searchOwnerLabel: "Usuario (ex: Vidigal-code)",
13
+ searchRepoLabel: "Repositorio (ex: git-page-link-create)",
14
+ searchButtonLabel: "Buscar",
15
+ typeToNavigate: "Digite para navegar...",
16
+ noNavigationResults: "Nenhum resultado de navegacao.",
17
+ focusMode: "Modo foco",
18
+ versionLinksLabel: "Links do repositorio",
19
+ titleHeaderMenuMd: "Markdown",
20
+ titleHeaderMenuSourceViewer: "Codigo fonte",
21
+ titleHeaderMenuVideo: "Vídeo",
22
+ titleHeaderMenuAudio: "Áudio",
23
+ titleHeaderMenuHtml: "Páginas",
24
+ sourceViewerBranchLabel: "Branch",
25
+ sourceViewerFilterLabel: "Filtrar arquivos",
26
+ sourceViewerClearLabel: "Limpar",
27
+ sourceViewerLoadingTree: "Carregando arvore do repositorio...",
28
+ sourceViewerLoadingFile: "Carregando arquivo...",
29
+ sourceViewerNotFound: "Repositorio, branch ou arvore de codigo nao encontrado.",
30
+ sourceViewerFileError: "Nao foi possivel carregar o arquivo.",
31
+ sourceViewerEmpty: "Nenhuma entrada encontrada.",
32
+ sourceViewerSelectFile: "Selecione um arquivo",
33
+ sourceViewerPreview: "Preview",
34
+ sourceViewerCode: "Codigo",
35
+ sourceViewerEntryHint: "Explore os arquivos de um repositorio sem abrir a documentacao.",
36
+ sourceViewerEntryAction: "Abrir o visualizador de codigo",
37
+ lastUpdateVersionLabel: "Ultima versao de atualizacao",
38
+ darkMode: "Modo escuro",
39
+ lightMode: "Modo claro",
40
+ blockMenuOnNavActive: "Bloquear menu na navegação",
41
+ blockMenuOnNavInactive: "Permitir menu na navegação",
42
+ audioPlayLabel: "Reproduzir música de fundo",
43
+ audioPauseLabel: "Pausar música de fundo",
44
+ audioPlaylistTitle: "Escolher faixa",
45
+ audioPlaylistDescription: "Selecione uma faixa para reproduzir da playlist.",
46
+ audioPopoverNowPlaying: "Tocando",
47
+ audioPopoverRestart: "Reiniciar",
48
+ audioPopoverLoopOn: "Ativar loop",
49
+ audioPopoverLoopOff: "Desativar loop",
50
+ audioPopoverSource: "Arquivo",
51
+ audioPopoverStatusPlaying: "Tocando",
52
+ audioPopoverStatusPaused: "Pausado",
53
+ audioPopoverStatusLoopOn: "Loop ativado",
54
+ audioPopoverStatusLoopOff: "Loop desativado",
55
+ aiChatTitle: "Assistente de IA",
56
+ aiChatPlaceholder: "Pergunte sobre a documentação...",
57
+ aiChatConfigTitle: "Configurar IA",
58
+ aiChatConfigDesc: "Insira sua chave de API para ativar o chat.",
59
+ aiChatClearDataBtn: "Limpar dados locais",
60
+ aiChatSendBtn: "Enviar",
61
+ aiChatSaveStartBtn: "Salvar e iniciar conversa",
62
+ aiChatAttachAriaLabel: "Anexar arquivo de áudio ou imagem",
63
+ aiChatAttachedFilesLabel: "arquivo(s) anexado(s)",
64
+ aiChatRemoveAttachmentBtn: "Remover",
65
+ aiChatCancelResponseLabel: "Cancelar resposta",
66
+ aiChatOpenBtnAriaLabel: "Abrir chat de IA",
67
+ aiChatCloseBtnAriaLabel: "Fechar chat",
68
+ aiChatSystemPrompt: "You are the official AI documentation assistant for the '{headerName}' project. Your primary role is to answer questions strictly related to the project's documentation, configurations (like config.json), and markdown files located in the 'gitpagedocs' directory. Be highly professional and helpful.\n\nIMPORTANT: You MUST address the user and respond EXCLUSIVELY in the following language: {language}.\n\nHere is the raw content of the active page the user is currently looking at:\n[Page ID]: {pageId}\n[Hidden Current Context Content]:\n{rawContent}",
69
+ aiChatEmptyStateGreeting: "Olá! Eu sou o assistente de inteligência artificial desta documentação. Você pode me fazer perguntas sobre o conteúdo ou buscar um termo em toda a documentação. Como posso ajudar você hoje?",
70
+ aiChatDisclaimer: "A IA pode cometer erros. Sempre verifique as informações.",
71
+ aiChatPasswordCreateDesc: "Crie uma senha local para criptografar suas chaves de API.",
72
+ aiChatPasswordUnlockDesc: "Digite sua senha local para desbloquear.",
73
+ aiChatPasswordPlaceholder: "Senha local",
74
+ aiChatCreatePasswordBtn: "Criar senha",
75
+ aiChatUnlockBtn: "Desbloquear",
76
+ aiChatWrongPassword: "Senha incorreta.",
77
+ aiChatLockBtn: "Bloquear",
78
+ aiChatResetBtn: "Esqueceu a senha?",
79
+ aiChatResetPopupTitle: "Redefinir senha?",
80
+ aiChatResetPopupDesc: "Isso apaga todas as chaves de API salvas e a senha local. Você criará uma nova senha na próxima vez.",
81
+ aiChatResetConfirmBtn: "Sim, redefinir",
82
+ aiChatResetCancelBtn: "Cancelar",
83
+ aiChatProviderLabel: "Provedor:",
84
+ aiChatApiKeyLabel: "Chave de API (deixe em branco para IA local):",
85
+ aiChatProviderOpenAI: "OpenAI (GPT-4o-mini)",
86
+ aiChatProviderClaude: "Anthropic Claude (3.5 Sonnet)",
87
+ aiChatProviderGemini: "Google Gemini (1.5 Flash)",
88
+ aiChatProviderOllama: "Ollama Network (Local LLMs)",
89
+ aiChatEmptyPageContent: "Nenhuma página ativa compatível.",
90
+ aiChatNoPageId: "Sem página",
91
+ aiChatOllamaUrlLabel: "URL da API Ollama (deixe em branco para local)",
92
+ aiChatClearChatPopupTitle: "Limpar conversa?",
93
+ aiChatClearChatPopupDesc: "Isso apagará todo o histórico atual do chat. Esta ação não pode ser desfeita.",
94
+ aiChatClearChatConfirmBtn: "Sim, apagar",
95
+ aiChatClearChatCancelBtn: "Cancelar",
96
+ aiChatClearDataPopupTitle: "Apagar todos os dados?",
97
+ aiChatClearDataPopupDesc: "Isso apagará todos os chats e as chaves de API locais. O chat de IA será fechado.",
98
+ aiChatClearDataConfirmBtn: "Sim, apagar tudo",
99
+ aiChatClearDataCancelBtn: "Cancelar",
100
+ aiChatUserLabel: "Você",
101
+ aiChatApiError: "Ocorreu um erro de conexão com a API.",
102
+ aiChatError401: "Chave de acesso inválida ou provedor não autorizado.",
103
+ aiChatError429: "Limite de requisições excedido. Tente novamente mais tarde.",
104
+ aiChatError500: "Ocorreu um erro interno no servidor do modelo de IA.",
105
+ aiChatErrorGeneric: "Ocorreu um erro inesperado ao se comunicar com a IA.",
106
+ docsAccessGateTitle: "Documentação protegida",
107
+ docsAccessGateDescription: "Digite a senha ou a chave privada para acessar a documentação.",
108
+ docsAccessInputPlaceholder: "Senha ou chave privada",
109
+ docsAccessUnlockBtn: "Desbloquear",
110
+ docsAccessWrongCredential: "Senha ou chave incorreta.",
111
+ docsAccessLockTooltip: "Bloquear documentação",
112
+ docsAccessBlockPopupTitle: "Bloquear a documentação?",
113
+ docsAccessBlockPopupDesc: "Você precisará da senha novamente na próxima visita.",
114
+ docsAccessBlockConfirmBtn: "Sim, bloquear",
115
+ docsAccessBlockCancelBtn: "Cancelar",
116
+ },
117
+ en: {
118
+ pt: "Portuguese",
119
+ en: "English",
120
+ es: "Spanish",
121
+ footerLabel: "Project",
122
+ menuOpen: "Menu",
123
+ menuClose: "Close",
124
+ showMenu: "Show menu",
125
+ hideMenu: "Hide menu",
126
+ quickNavigation: "Ctrl+K",
127
+ searchOwnerLabel: "Owner (ex: Vidigal-code)",
128
+ searchRepoLabel: "Repository (ex: git-page-link-create)",
129
+ searchButtonLabel: "Search",
130
+ typeToNavigate: "Type to navigate...",
131
+ noNavigationResults: "No navigation results.",
132
+ focusMode: "Focus mode",
133
+ versionLinksLabel: "Repository links",
134
+ titleHeaderMenuMd: "Markdown",
135
+ titleHeaderMenuSourceViewer: "Source code",
136
+ titleHeaderMenuVideo: "Video",
137
+ titleHeaderMenuAudio: "Audio",
138
+ titleHeaderMenuHtml: "Pages",
139
+ sourceViewerBranchLabel: "Branch",
140
+ sourceViewerFilterLabel: "Filter files",
141
+ sourceViewerClearLabel: "Clear",
142
+ sourceViewerLoadingTree: "Loading source tree...",
143
+ sourceViewerLoadingFile: "Loading file...",
144
+ sourceViewerNotFound: "Repository, branch, or source tree was not found.",
145
+ sourceViewerFileError: "File could not be loaded.",
146
+ sourceViewerEmpty: "No entries found.",
147
+ sourceViewerSelectFile: "Select a file",
148
+ sourceViewerPreview: "Preview",
149
+ sourceViewerCode: "Code",
150
+ sourceViewerEntryHint: "Browse a repository's files without opening its documentation.",
151
+ sourceViewerEntryAction: "Open the source viewer",
152
+ lastUpdateVersionLabel: "Last update version",
153
+ darkMode: "Dark mode",
154
+ lightMode: "Light mode",
155
+ blockMenuOnNavActive: "Block menu on navigation",
156
+ blockMenuOnNavInactive: "Allow menu on navigation",
157
+ audioPlayLabel: "Play background music",
158
+ audioPauseLabel: "Pause background music",
159
+ audioPlaylistTitle: "Choose track",
160
+ audioPlaylistDescription: "Select a track to play from the playlist.",
161
+ audioPopoverNowPlaying: "Now playing",
162
+ audioPopoverRestart: "Restart",
163
+ audioPopoverLoopOn: "Loop on",
164
+ audioPopoverLoopOff: "Loop off",
165
+ audioPopoverSource: "File",
166
+ audioPopoverStatusPlaying: "Playing",
167
+ audioPopoverStatusPaused: "Paused",
168
+ audioPopoverStatusLoopOn: "Loop on",
169
+ audioPopoverStatusLoopOff: "Loop off",
170
+ aiChatTitle: "AI Assistant",
171
+ aiChatPlaceholder: "Ask about the documentation...",
172
+ aiChatConfigTitle: "Configure AI",
173
+ aiChatConfigDesc: "Enter your API key to enable the chat.",
174
+ aiChatClearDataBtn: "Clear local data",
175
+ aiChatSendBtn: "Send",
176
+ aiChatSaveStartBtn: "Save & Start Chatting",
177
+ aiChatAttachAriaLabel: "Attach audio or image file",
178
+ aiChatAttachedFilesLabel: "file(s) attached",
179
+ aiChatRemoveAttachmentBtn: "Remove",
180
+ aiChatCancelResponseLabel: "Cancel response",
181
+ aiChatOpenBtnAriaLabel: "Open AI Chat",
182
+ aiChatCloseBtnAriaLabel: "Close chat",
183
+ aiChatSystemPrompt: "You are the official AI documentation assistant for the '{headerName}' project. Your primary role is to answer questions strictly related to the project's documentation, configurations (like config.json), and markdown files located in the 'gitpagedocs' directory. Be highly professional and helpful.\n\nIMPORTANT: You MUST address the user and respond EXCLUSIVELY in the following language: {language}.\n\nHere is the raw content of the active page the user is currently looking at:\n[Page ID]: {pageId}\n[Hidden Current Context Content]:\n{rawContent}",
184
+ aiChatEmptyStateGreeting: "Hello! I am the artificial intelligence assistant of this documentation. You can ask me questions about the content or search for a term across the documentation. How can I help you today?",
185
+ aiChatDisclaimer: "AI can make mistakes. Always verify the information.",
186
+ aiChatPasswordCreateDesc: "Create a local password to encrypt your API keys.",
187
+ aiChatPasswordUnlockDesc: "Enter your local password to unlock.",
188
+ aiChatPasswordPlaceholder: "Local password",
189
+ aiChatCreatePasswordBtn: "Create password",
190
+ aiChatUnlockBtn: "Unlock",
191
+ aiChatWrongPassword: "Incorrect password.",
192
+ aiChatLockBtn: "Lock",
193
+ aiChatResetBtn: "Forgot password?",
194
+ aiChatResetPopupTitle: "Reset password?",
195
+ aiChatResetPopupDesc: "This erases all saved API keys and the local password. You'll create a new password next time.",
196
+ aiChatResetConfirmBtn: "Yes, reset",
197
+ aiChatResetCancelBtn: "Cancel",
198
+ aiChatProviderLabel: "Provider:",
199
+ aiChatApiKeyLabel: "API Key (leave blank for Local AI):",
200
+ aiChatProviderOpenAI: "OpenAI (GPT-4o-mini)",
201
+ aiChatProviderClaude: "Anthropic Claude (3.5 Sonnet)",
202
+ aiChatProviderGemini: "Google Gemini (1.5 Flash)",
203
+ aiChatProviderOllama: "Ollama Network (Local LLMs)",
204
+ aiChatEmptyPageContent: "No compatible active page.",
205
+ aiChatNoPageId: "No page",
206
+ aiChatOllamaUrlLabel: "Ollama API URL (leave blank for local)",
207
+ aiChatClearChatPopupTitle: "Clear conversation?",
208
+ aiChatClearChatPopupDesc: "This will delete all current chat history. This action cannot be undone.",
209
+ aiChatClearChatConfirmBtn: "Yes, delete",
210
+ aiChatClearChatCancelBtn: "Cancel",
211
+ aiChatClearDataPopupTitle: "Erase all data?",
212
+ aiChatClearDataPopupDesc: "This will delete all chats and local API keys. The AI chat will be closed.",
213
+ aiChatClearDataConfirmBtn: "Yes, erase everything",
214
+ aiChatClearDataCancelBtn: "Cancel",
215
+ aiChatUserLabel: "You",
216
+ aiChatApiError: "An API connection error occurred.",
217
+ aiChatError401: "Invalid access key or unauthorized provider.",
218
+ aiChatError429: "Rate limit exceeded. Please try again later.",
219
+ aiChatError500: "An internal server error occurred on the AI model.",
220
+ aiChatErrorGeneric: "An unexpected error occurred while communicating with the AI.",
221
+ docsAccessGateTitle: "Protected documentation",
222
+ docsAccessGateDescription: "Enter the password or private key to view the documentation.",
223
+ docsAccessInputPlaceholder: "Password or private key",
224
+ docsAccessUnlockBtn: "Unlock",
225
+ docsAccessWrongCredential: "Incorrect password or key.",
226
+ docsAccessLockTooltip: "Lock documentation",
227
+ docsAccessBlockPopupTitle: "Block the documentation?",
228
+ docsAccessBlockPopupDesc: "You'll need the password again on your next visit.",
229
+ docsAccessBlockConfirmBtn: "Yes, block",
230
+ docsAccessBlockCancelBtn: "Cancel",
231
+ },
232
+ es: {
233
+ pt: "Portugues",
234
+ en: "Ingles",
235
+ es: "Espanol",
236
+ footerLabel: "Proyecto",
237
+ menuOpen: "Menu",
238
+ menuClose: "Cerrar",
239
+ showMenu: "Abrir menu",
240
+ hideMenu: "Cerrar menu",
241
+ quickNavigation: "Ctrl+K",
242
+ searchOwnerLabel: "Usuario (ej: Vidigal-code)",
243
+ searchRepoLabel: "Repositorio (ej: git-page-link-create)",
244
+ searchButtonLabel: "Buscar",
245
+ typeToNavigate: "Escribe para navegar...",
246
+ noNavigationResults: "Sin resultados de navegacion.",
247
+ focusMode: "Modo foco",
248
+ versionLinksLabel: "Enlaces del repositorio",
249
+ titleHeaderMenuMd: "Markdown",
250
+ titleHeaderMenuSourceViewer: "Codigo fuente",
251
+ titleHeaderMenuVideo: "Vídeo",
252
+ titleHeaderMenuAudio: "Áudio",
253
+ titleHeaderMenuHtml: "Páginas",
254
+ sourceViewerBranchLabel: "Branch",
255
+ sourceViewerFilterLabel: "Filtrar archivos",
256
+ sourceViewerClearLabel: "Limpiar",
257
+ sourceViewerLoadingTree: "Cargando arbol del repositorio...",
258
+ sourceViewerLoadingFile: "Cargando archivo...",
259
+ sourceViewerNotFound: "Repositorio, branch o arbol de codigo no encontrado.",
260
+ sourceViewerFileError: "No se pudo cargar el archivo.",
261
+ sourceViewerEmpty: "No se encontraron entradas.",
262
+ sourceViewerSelectFile: "Selecciona un archivo",
263
+ sourceViewerPreview: "Preview",
264
+ sourceViewerCode: "Codigo",
265
+ sourceViewerEntryHint: "Explora los archivos de un repositorio sin abrir la documentacion.",
266
+ sourceViewerEntryAction: "Abrir el visor de codigo",
267
+ lastUpdateVersionLabel: "Ultima version de actualizacion",
268
+ darkMode: "Modo oscuro",
269
+ lightMode: "Modo claro",
270
+ blockMenuOnNavActive: "Bloquear menú en la navegación",
271
+ blockMenuOnNavInactive: "Permitir menú en la navegación",
272
+ audioPopoverNowPlaying: "Reproduciendo",
273
+ audioPopoverRestart: "Reiniciar",
274
+ audioPopoverLoopOn: "Activar loop",
275
+ audioPopoverLoopOff: "Desactivar loop",
276
+ audioPopoverSource: "Archivo",
277
+ audioPopoverStatusPlaying: "Reproduciendo",
278
+ audioPopoverStatusPaused: "Pausado",
279
+ audioPopoverStatusLoopOn: "Loop activado",
280
+ audioPopoverStatusLoopOff: "Loop desactivado",
281
+ audioPlayLabel: "Reproducir música de fondo",
282
+ audioPauseLabel: "Pausar música de fondo",
283
+ audioPlaylistTitle: "Elegir pista",
284
+ audioPlaylistDescription: "Seleccione una pista para reproducir de la playlist.",
285
+ aiChatTitle: "Asistente de IA",
286
+ aiChatPlaceholder: "Pregunta sobre la documentación...",
287
+ aiChatConfigTitle: "Configurar IA",
288
+ aiChatConfigDesc: "Introduce tu clave de API para activar el chat.",
289
+ aiChatClearDataBtn: "Borrar datos locales",
290
+ aiChatSendBtn: "Enviar",
291
+ aiChatSaveStartBtn: "Guardar y empezar a chatear",
292
+ aiChatAttachAriaLabel: "Adjuntar archivo de audio o imagen",
293
+ aiChatAttachedFilesLabel: "archivo(s) adjunto(s)",
294
+ aiChatRemoveAttachmentBtn: "Quitar",
295
+ aiChatCancelResponseLabel: "Cancelar respuesta",
296
+ aiChatOpenBtnAriaLabel: "Abrir chat de IA",
297
+ aiChatCloseBtnAriaLabel: "Cerrar chat",
298
+ aiChatSystemPrompt: "You are the official AI documentation assistant for the '{headerName}' project. Your primary role is to answer questions strictly related to the project's documentation, configurations (like config.json), and markdown files located in the 'gitpagedocs' directory. Be highly professional and helpful.\n\nIMPORTANT: You MUST address the user and respond EXCLUSIVELY in the following language: {language}.\n\nHere is the raw content of the active page the user is currently looking at:\n[Page ID]: {pageId}\n[Hidden Current Context Content]:\n{rawContent}",
299
+ aiChatEmptyStateGreeting: "¡Hola! Soy el asistente de inteligencia artificial de esta documentación. Puedes hacerme preguntas sobre el contenido o buscar un término en toda la documentación. ¿Cómo puedo ayudarte hoy?",
300
+ aiChatDisclaimer: "La IA puede cometer errores. Verifica siempre la información.",
301
+ aiChatPasswordCreateDesc: "Crea una contraseña local para cifrar tus claves de API.",
302
+ aiChatPasswordUnlockDesc: "Introduce tu contraseña local para desbloquear.",
303
+ aiChatPasswordPlaceholder: "Contraseña local",
304
+ aiChatCreatePasswordBtn: "Crear contraseña",
305
+ aiChatUnlockBtn: "Desbloquear",
306
+ aiChatWrongPassword: "Contraseña incorrecta.",
307
+ aiChatLockBtn: "Bloquear",
308
+ aiChatResetBtn: "¿Olvidaste la contraseña?",
309
+ aiChatResetPopupTitle: "¿Restablecer contraseña?",
310
+ aiChatResetPopupDesc: "Esto borra todas las claves de API guardadas y la contraseña local. Crearás una nueva contraseña la próxima vez.",
311
+ aiChatResetConfirmBtn: "Sí, restablecer",
312
+ aiChatResetCancelBtn: "Cancelar",
313
+ aiChatProviderLabel: "Proveedor:",
314
+ aiChatApiKeyLabel: "Clave de API (déjalo en blanco para IA local):",
315
+ aiChatProviderOpenAI: "OpenAI (GPT-4o-mini)",
316
+ aiChatProviderClaude: "Anthropic Claude (3.5 Sonnet)",
317
+ aiChatProviderGemini: "Google Gemini (1.5 Flash)",
318
+ aiChatProviderOllama: "Ollama Network (Local LLMs)",
319
+ aiChatEmptyPageContent: "Ninguna página activa compatible.",
320
+ aiChatNoPageId: "Sin página",
321
+ aiChatOllamaUrlLabel: "URL de la API de Ollama (déjalo en blanco para local)",
322
+ aiChatClearChatPopupTitle: "¿Borrar conversación?",
323
+ aiChatClearChatPopupDesc: "Esto eliminará todo el historial de chat actual. Esta acción no se puede deshacer.",
324
+ aiChatClearChatConfirmBtn: "Sí, borrar",
325
+ aiChatClearChatCancelBtn: "Cancelar",
326
+ aiChatClearDataPopupTitle: "¿Borrar todos los datos?",
327
+ aiChatClearDataPopupDesc: "Esto eliminará todos los chats y las claves de API locales. El chat de IA se cerrará.",
328
+ aiChatClearDataConfirmBtn: "Sí, borrar todo",
329
+ aiChatClearDataCancelBtn: "Cancelar",
330
+ aiChatUserLabel: "Tú",
331
+ aiChatApiError: "Se produjo un error de conexión con la API.",
332
+ aiChatError401: "Clave de acceso no válida o proveedor no autorizado.",
333
+ aiChatError429: "Límite de solicitudes superado. Inténtalo de nuevo más tarde.",
334
+ aiChatError500: "Se produjo un error interno del servidor en el modelo de IA.",
335
+ aiChatErrorGeneric: "Se produjo un error inesperado al comunicarse con la IA.",
336
+ docsAccessGateTitle: "Documentación protegida",
337
+ docsAccessGateDescription: "Introduce la contraseña o la clave privada para ver la documentación.",
338
+ docsAccessInputPlaceholder: "Contraseña o clave privada",
339
+ docsAccessUnlockBtn: "Desbloquear",
340
+ docsAccessWrongCredential: "Contraseña o clave incorrecta.",
341
+ docsAccessLockTooltip: "Bloquear documentación",
342
+ docsAccessBlockPopupTitle: "¿Bloquear la documentación?",
343
+ docsAccessBlockPopupDesc: "Tendrás que introducir la contraseña de nuevo en la próxima visita.",
344
+ docsAccessBlockConfirmBtn: "Sí, bloquear",
345
+ docsAccessBlockCancelBtn: "Cancelar",
346
+ },
347
+ };